{"version":3,"sources":["webpack:///./node_modules/tinymce/themes/silver/theme.js","webpack:///./node_modules/tinymce/plugins/template/index.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/plugins/preview/index.js","webpack:///./node_modules/tinymce/themes/silver/index.js","webpack:///./node_modules/tinymce/plugins/template/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/plugin.js","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/tinymce/plugins/hr/index.js","webpack:///./node_modules/tinymce/plugins/media/plugin.js","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/tinymce/plugins/preview/plugin.js","webpack:///./node_modules/tinymce/plugins/emoticons/index.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/TinyMCE.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/Utils.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/ScriptLoader.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/components/EditorPropTypes.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/components/Editor.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/index.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/index.js","webpack:///./node_modules/tinymce/plugins/hr/plugin.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/plugins/wordcount/plugin.js","webpack:///./node_modules/tinymce/plugins/code/plugin.js"],"names":["domGlobals","noop","noarg","f","compose","fa","fb","args","_i","arguments","length","apply","constant","value","identity","x","curry","fn","initialArgs","restArgs","all","concat","not","die","msg","Error","never","always","global$1","tinymce","util","Tools","resolve","__assign","Object","assign","t","s","i","n","p","prototype","hasOwnProperty","call","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArrays","il","r","Array","k","a","j","jl","SimpleResultType","none","NONE","eq","o","isNone","thunk","id","me","fold","is","isSome","getOr","getOrThunk","getOrDie","getOrNull","getOrUndefined","undefined","or","orThunk","map","each","bind","exists","forall","filter","equals","equals_","toArray","toString","freeze","some","constant_a","self","v","elementEq","b","from","Option","opt","mapError","_","onValue","toOption","isValue","isError","error","message","String","onError","fromOption","err","Result","typeOf","isPrototypeOf","constructor","name","isType","type","isString","isObject","isArray","isBoolean","isFunction","isNumber","isArrayOf","pred","len","nativeSlice","slice","nativeIndexOf","nativePush","push","rawIndexOf","ts","xs","contains","range","num","chunk","array","size","eachr","partition","pass","fail","arr","foldr","acc","foldl","find","findIndex","flatten","reverse","difference","a1","a2","mapToObject","pure","sort","comparator","copy","head","last","from$1","findMap","keys","each$1","obj","props","map$1","tupleMap","tuple","mapToArray","find$1","values","get","key","has","hasNonNullableKey","generate","cases","constructors","adt","acase","count","keys$1","argLength","match","branches","branchKeys","join","allReqd","reqKey","target","log","label","console","params","Adt","hasOwnProperty$1","shallow","old","nu","deep","bothObjects","deepMerge","baseMerge","merger","objects","ret","curObject","merge","cached","called","res","stype","serror","svalue","partition$1","results","errors","val","map$2","Value","bind$1","bindError","toResult","fromResult","SimpleResult","strict","defaultedThunk","asOption","asDefaultedOptionThunk","mergeWithThunk","defaulted","fallback","mergeWith","base","exclude","fields","wrap","_a","wrapAll","keyvalues","kv","partition$2","bothErrors","firstError","secondError","bothValues","result","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","arrOf","oneOf","props_1","setOf","validateKeys","validatedKeys","validKeys","schema","vk","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","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","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","clone","fromHtml","html","scope","doc","document","div","createElement","innerHTML","hasChildNodes","childNodes","fromDom","fromTag","tag","node","fromText","text","createTextNode","dom","fromPoint","docElm","y","elementFromPoint","Element","compareDocumentPosition","documentPositionPreceding","Node","DOCUMENT_POSITION_PRECEDING","documentPositionContainedBy","DOCUMENT_POSITION_CONTAINED_BY","firstMatch","regexes","test","find$2","agent","major","minor","group","Number","replace","nu$1","detect","versionRegexes","cleanedAgent","toLowerCase","unknown","Version","edge","chrome","ie","opera","firefox","safari","isBrowser","current","unknown$1","nu$2","version","info","isEdge","isChrome","isIE","isOpera","isFirefox","isSafari","Browser","windows","ios","android","linux","osx","solaris","freebsd","chromeos","isOS","unknown$2","nu$3","isWindows","isiOS","isAndroid","isOSX","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","DeviceType","os","browser","userAgent","mediaMatch","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","isWebView","detect$1","candidates","candidate","search","detectBrowser","browsers","detectOs","oses","UaString","checkRange","str","substr","start","contains$1","endsWith","suffix","trim","normalVersionRegex","checkContains","uastring","PlatformInfo","detect$2","deviceType","PlatformDetection","query","window","matchMedia","matches","platform","navigator","detect$3","DOCUMENT","ATTRIBUTE_NODE","CDATA_SECTION_NODE","COMMENT_NODE","DOCUMENT_NODE","ELEMENT","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","ELEMENT_NODE","TEXT","TEXT_NODE","ELEMENT$1","PROCESSING_INSTRUCTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","NOTATION_NODE","DOCUMENT$1","element","selector","nodeType","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","querySelectorAll","one","querySelector","e1","e2","regularContains","d1","d2","ieContains","contains$2","ancestor","transform","isRoot","stop","parentNode","el","transformed","closest","isSource","component","simulatedEvent","event","nu$4","parts","all$1","handlers","handler","any","read","can","abort","run","fuse","touchstart","touchmove","touchend","touchcancel","mousedown","mousemove","mouseout","mouseup","mouseover","focusin","focusout","keydown","keyup","change","click","transitionend","selectstart","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","Immutable","struct","sort$1","reqMessage","required","unsuppMessage","validateStrArr","checkDupes","everything","sorted","dupe","d","MixedBag","optional","req","owner","ownerDocument","documentElement","defaultView","parent","offsetParent","nextSibling","children","child","index","cs","firstChild","fromHtml$1","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","get$1","content","owner$1","docDom","fragment","createDocumentFragment","contentElements","getOuter","container","cloneNode","Function","nodeName","isType$1","isElement","isText","rawSet","setAttribute","set$1","setAll","attrs","get$2","getAttribute","getOpt","has$1","hasAttribute","remove$1","removeAttribute","original","isDeep","shallow$1","getHtml","isRecursive","originator","events","warn","DefaultEvents","__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","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","toInfo","toDefinition","domChildren","components","toModification","domModification","toEvents","read$2","attr","add","remove$2","supports","classList","get$3","add$1","clazz","remove$3","add$2","cleanClass","remove$4","has$2","add$3","remove$5","isSupported","style","getPropertyValue","inBody","body","getBody","internalSet","property","setProperty","internalRemove","removeProperty","set$2","setAll$1","css","setOptions","get$4","getComputedStyle","getUnsafeProperty","getRaw","raw","getAllRaw","ruleName","item","isValidValue","remove$6","reflow","offsetWidth","get$5","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$6","getOuter$1","setMax","inclusions","absMax","left","top","translate","Position","boxPosition","box","firstDefinedOrZero","absolute","win","offsetLeft","offsetTop","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport","api$1","set$4","get$7","getOuter$2","setMax$1","mkEvent","kill","fromRawEvent","rawEvent","stopPropagation","clientX","clientY","handle","binder","useCapture","wrapped","addEventListener","unbind","bind$2","capture","removeEventListener","get$8","_DOC","to","scrollTo","get$9","_win","bounds","width","right","bottom","getBounds","scroll","clientWidth","clientHeight","visualViewport","pageLeft","pageTop","walkUp","navigation","frame","view","pathTo","paths","frameElement","Navigation","find$3","frames","offset","loc","pointed","rect","bounds$1","xy","w","absolute$1","position","ClosestOrAncestor","EventConfiguration","ancestor$1","descendant","descend","child_1","closest$2","ancestor$2","descendant$1","closest$3","find$4","queryElem","dependent","dep","manager","ariaId","link","unlink","isAriaPartOf","isPartOf","unknown$3","AttributeValue","eventConfig","makeEventLogger","initialTarget","sequence","startTime","logEventCut","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","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","snapshot","initSize","nu$7","adt$2","southeast","southwest","northeast","northwest","south","north","east","west","cata","cataVertical","middle","cataHorizontal","getRestriction","anchor","restriction","boundsRestriction","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","executeEvent","bConfig","bState","executor","loadEvent","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","chooseChannels","channels","universal","events$1","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","onReceive","ActiveReceiving","ReceivingSchema","Receiving","posConfig","useFixed","ActivePosition","focus$1","blur","hasFocus","activeElement","_doc","preserve","ownerDoc","refocus","focused","oldFocus","newFocus","NuPositionCss","applyPositionCss","addPx","adt$3","relative","fixed","positionWithDirection","posName","decision","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","direction","reposition","origin","toBox","rel","viewport$1","pos","removeScroll","outerScroll","cata$1","onNone","onRelative","onFixed","box$1","anchorBox","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","bubble","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","reparteeOptions","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","Attribute","isBottomToTopDir","BottomToTop","schema$1","get$a","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","onLtr","customRtl","onRtl","ltr","onBottomLtr","rtl","onBottomRtl","placement","anchorInfo","hotspot","overrides","placer","HotspotAnchor","placement$1","MakeshiftAnchor","zeroWidth","nbsp","create$2","SimRange","adt$5","cata$2","onBefore","onOn","onAfter","getStart","situ","before$2","after$1","Situ","adt$6","domRange","exact","exactFromRange","simRange","soffset","finish","foffset","getStart$1","selection","rng","startContainer","startSitu","finishSitu","relative$1","getWin","range$1","Selection","setStart","setStartBefore","setStartAfter","setFinish","setEndBefore","setEnd","setEndAfter","relativeToNative","createRange","exactToNative","toRect","getFirstRect","rects","getClientRects","adt$7","fromRange","startOffset","endContainer","endOffset","getRanges","doDiagnose","ranges","collapsed","reversed","rev","diagnose","asLtrRange","diagnosis","NodeValue","getOption","nodeValue","api$2","get$b","getEnd","isTextNodeWithCursorPosition","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","last$1","descendantRtl","descendants","makeRange","after$2","same","readRange","rangeCount","firstRng","getRangeAt","lastRng","doGetExact","anchorNode","focusNode","anchorOffset","focusOffset","getExact","getSelection","sel","getFirstRect$1","point","descendOnce","adt$8","screen","toFixed","toAbsolute","sum","points","sumAsFixed","positions","sumAsAbsolute","absolute$2","root","hasSameOwner","frameOwner","compOwner","getRootPoint","capRect","newLeft","newTop","newWidth","newHeight","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","showAbove","layoutsRtl","ContentAnchorCommon","point$1","descendOnce$1","getAnchorSelection","modStart","modFinish","placement$2","selectionBox","optRect","rawRect","targetElement","SelectionAnchor","placement$3","nodeBox","NodeAnchor","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","getAttachPoint","built","open","newState","onOpen","setContent","openWhileCloaked","transaction","cloak","decloak","close","onClose","clear","isOpen","isPartOf$1","getState","store","cssKey","newValue","restore","oldValue","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","setValue$2","onLoad$2","ManualStore","setValue$3","getValue$3","onLoad$3","initVal","onUnload$2","MemoryStore","RepresentSchema","Representing","setValueFrom","source","field$1","forbidden","get$c","dump","augment","SketchBehaviours","_placeholder","adt$9","single","multiple","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","uiType","substitute","childSpecs","substituted","valuesThunk","preprocessor","preprocess","substituteAll","oneReplace","replacements","used","substitutePlaces","ps","ph","placeholder","adt$a","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","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","partSchemas","partUidsSchemas","asRawOrDie$1","baseS","single$1","specWithUid","supplyUid","composite","partUidsSchema","components$1","hasUid","isSketchSpec","FocusInsideModes","singleSchema","compositeSchema","single$2","rawConfig","configFields","extraApis","composite$1","partFields","cat","lift2","oa","ob","lift3","oc","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","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","ToolbarMode","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusInside","OnFocusMode","focusIn","tryGoInsideComponent","isEnterOrSpace","OnEnterOrSpaceMode","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","stopEventForFirefox","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","identified","handleTab","captureTab","doEscape","moveNorth","moveSouth","getKeydownRules$1","getKeyupRules$1","FlatgridType","horizontal","isDisabledButton","tryCycle","schema$6","findCurrent$1","flowConfig","execute$3","focusIn$1","getInitial","moveLeft$1","moveRight$1","doMove$1","flowState","executeOnMove","doEscape$1","getKeydownRules$2","_component","_se","_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","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","updateAriaState","toggleConfig","toggleState","ariaInfo","aria","updateClass","toggleClass","toggle","set$6","on$1","isOn","onLoad$4","ToggleApis","exhibit$2","events$6","load","toggleOnExecute","ActiveToggle","SetupBehaviourCellState","initialState","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","widgetBehaviours","schema$c","itemSchema$1","separator","configureGrid","movementInfo","configureMatrix","rowSelector","configureMenu","parts$1","itemInfo","unit","fakeFocus","schema$d","grid","focus$4","make$1","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","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","global$3","global$4","getSkinUrl","editor","settings","skin","skinUrl","skin_url","skinName","documentBaseURI","baseURL","isReadOnly","getParam","isSkinDisabled","getHeightSetting","getElement","getWidthSetting","DOM","getStyle","getMinWidthSetting","min_width","getMinHeightSetting","min_height","getMaxWidthSetting","getMaxHeightSetting","getUserStyleFormats","isMergeStyleFormats","getRemovedMenuItems","isMenubarEnabled","isToolbarEnabled","toolbar","isToolbarTrue","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsSetting","toolbarKeys","toolbars","toolbarArray","ToolbarLocation","getToolbarMode","getToolbarGroups","isToolbarLocationTop","fixedContainerSelector","fixedContainerElement","inline","useFixedContainer","getUiContainer","fixedContainer","isDistractionFree","isStickyToolbar","isDraggableModal","factory$1","lookupAttr","getModAttributes","roleAttrs","buttonBehaviours","Button","record","anyInSystem","asSpec","defaultIcon","icons","get$d","getFirst$1","notificationIconMap","success","warning","factory$2","memBannerText","translationProvider","renderPercentBar","percent","renderPercentText","memBannerProgress","progress","updateProgress","updateText","text$1","banner","iconChoices","icon","level","iconProvider","closeButton","onAction","Notification","NotificationManagerImpl","extras","uiMothership","backstage","isToolbarLocationTop$1","getLayoutDirection","prePositionNotifications","notifications","notification","moveTo","positionNotifications","firstItem","moveRel","getEl","closeCallback","hideCloseButton","timeout","notificationWrapper","progressBar","shared","providers","getSink","setTimeout","layoutDirection_1","nodeAnchor","anchors","nuText","getArgs","ItemResponse","rate","timer","cancel","clearTimeout","throttle","last$2","global$5","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$6","point$2","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","separatorMenuItemSchema","createSeparatorMenuItem","autocompleterItemSchema","autocompleterSchema","createSeparatorItem","createAutocompleterItem","createAutocompleter","stringArray","register","popups","ui","registry","getAll","popup","datasetValues","dv","commonMenuItemFields","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","choiceMenuItemSchema","createChoiceMenuItem","fancyTypes","fancyMenuItemSchema","createFancyMenuItem","detectSize","margin","selectorClass","descendants$1","columnLength","thisTop","cTop","ceil","namedEvents","unnamedEvents","SimpleBehaviours","TooltippingSchema","init$4","getTooltip","setTooltip","clearTooltip","clearTimer","resetTimer","delay","isShowing","TooltippingState","ExclusivityChannel","ShowTooltipEvent","HideTooltipEvent","hideAllExclusive","tState","setComponents","specs","tooltip","TooltippingApis","events$8","tooltipConfig","show","tooltipDom","tooltipComponents","ActiveTooltipping","Tooltipping","global$7","navClass","selectableClass","colorClass","presetClasses","normal","color","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","iconClassRtl","classForPreset","presets","global$8","convertText","mac","alt","ctrl","shift","access","other","shortcut","updated","segment","ConvertShortcut","renderIcon","iconHtml","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderColorStructure","itemText","iconSvg","providerBackstage","colorPickerCommand","removeColorCommand","getDom","common","title","baseDom","optComponents","renderNormalItemStructure","renderIcons","textRender","rtlClass","leftIcon","checkMark","domTitle","ariaLabel","htmlContent","menuItem","shortcutContent","caret","rtlIcon","rtlTransform","renderItemStructure","providersBackstage","fallbackIcon","getIconName","iconName","needRtlClass","iconContent","nativeDisabled","onLoad$5","disableConfig","disableState","disabled","disable","hasNative","useNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","disableClass","onDisabled","enable","onEnabled","isDisabled","set$7","DisableApis","exhibit$3","events$9","ActiveDisable","DisableSchema","Disabling","button","splitButton","toolbarButton","DisablingConfigs","runWithApi","getApi","onControlAttached","editorOffCell","onDestroy","onSetup","onControlDetached","ItemResponse$1","onMenuItemExecute","itemResponse","triggersSubmenu","CLOSE_ON_EXECUTE","menuItemEventOrder","componentRenderPipeline","renderCommonItem","structure","buildData","tooltipBehaviour","sharedBackstage","tooltipWorker","_tooltip","escapeRegExp","encodeText","encode","replaceText","translated","encoded","escapedMatchRegex","RegExp","renderAutocompleteItem","useText","onItemValueHandler","_api","renderChoiceItem","isSelected","setActive","setDisabled","parts$2","cellOverEvent","cellExecuteEvent","makeCell","col","labelId","emitCellOver","makeCells","cells","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","renderInsertTableMenuItem","sizeLabelId","memLabel","hexColour","hexString","shorthandRegex","longformRegex","isHexString","hex","getLongForm","m","extractValues","longForm","splitForm","exec","toHex","fromRgba","rgbaColour","red","green","blue","round","rgbRegex","rgbaRegex","alpha","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fromStringValues","fromString","rgbaString","rgbMatch","rgbaMatch","rgba","redColour","global$9","storageName","ColorCache","storageString","localstorage","parse","prune","diff","cache","unshift","pop","setItem","idx","splice","choiceItem","defaultColors","colorCache","mapColors","colorMap","colors","canvas","ctx","byteAsHex","colorByte","alphaByte","bg","colorByteWithWhiteBg","toUpperCase","asHexColor","clearRect","fillStyle","fillRect","getImageData","getColorCols","defaultCols","hasCustomColors","getColorMap","getColors","unmapped","getCurrentColors","addColor","Settings","fireSkinLoaded","fire","fireSkinLoadError","fireResizeEditor","fireBeforeRenderUI","fireResizeContent","fireScrollContent","fireTextColorChange","Events","getCurrentColor","format","getParents","applyFormat","undoManager","transact","formatter","nodeChanged","removeFormat","registerCommands","addCommand","calcCols","sqrt","getColorCols$1","getAdditionalColors","hasCustom","applyColor","onChoice","dialog","colorPickerDialog","colorOpt","execCommand","getMenuColors","getFetch","callback","setIconColor","splitButtonApi","newColor","setIconFillAndStroke","pathId","setIconFill","setIconStroke","registerTextColorButton","lastColor","addSplitButton","select","optCurrentRgb","currentRgb","currentHex","onItemAction","registerTextColorMenuItem","addNestedMenuItem","getSubmenuItems","fancytype","getOnSubmit","colorpicker","details","initialData","submit","windowManager","buttons","onSubmit","onCancel","register$1","lastForeColor","lastBackColor","ColorSwatch","forMenu","hasIcons","markers$1","menuClasses","dom$1","chunk$1","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","forCollection","initItems","_hasIcons","_item","forHorizontalCollection","hasIcon","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_presets","createPartialMenuWithAlloyItems","createPartialChoiceMenu","presetItemTypes","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","rowClass","deriveCollectionMovement","renderColorSwatchItem","colorinput","widgetSpec","FocusMode","fancyMenuItems","inserttable","colorswatch","valueOpt","renderFancyMenuItem","render","renderNormalItem","renderNestedItem","downwardsCaret","renderSeparatorItem","renderToggleMenuItem","autocomplete","nested","toggle$1","fancy","hasIcon$1","menuHasIcons$1","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","Autocompleter","filter$1","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","getTarget","fromSource","isStopped","isCut","fromExternal","adt$b","resume","complete","doTriggerHandler","eventType","handlerInfo","eventHandler","doTriggerOnUntilStopped","triggerHandler","listeners","listener","triggerUntilStopped","triggerOnUntilStopped","broadcastHandler","EventRegistry","registerId","findHandler","filterByType","isAboveRoot","unregisterId","handlersById","Registry","readOrTag","failOnDuplicate","tagId","conflict","unregister","getById","factory$3","domWithoutAttributes","containerBehaviours","Container","takeover","domEvents","_alloyId","broadcast$1","destroy","broadcastData","receivers","receiver","formChangeEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderAlertBanner","iconTooltip","url","renderBar","interpreter","schema$e","parts$3","excludeFactory","factory$4","fieldBehaviours","descriptor","descriptorId","getField","getLabel","FormField","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","_state","_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$1","LazyValue","errorReporter","make$3","fab","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","nu$b","pure$2","Future","ariaElements","isAriaElement","markValid","invalidConfig","invalidClass","notify","notifyInfo","getContainer","validHtml","onValid","markInvalid","invalidState","onInvalid","validatorInfo","validate","run$1","onValidate","valid","isInvalid","InvalidateApis","events$a","onEvent","validateOnLoad","ActiveInvalidate","InvalidateSchema","Invalidating","validation","exhibit$4","tabConfig","tabAttr","ActiveTabstopping","TabstopSchema","Tabstopping","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel","getCoupled","coupleConfig","coupleState","getOrCreate","CouplingApis","CouplingSchema","init$5","coupled","CouplingState","Coupling","partType","getAnchor","getHotspot","getAnchorOverrides","mapFetch","fetcher","openF","highlightOnOpen","futureData","getLazySink","tdata","HighlightFirst","open$1","onOpenSync","processed","close$1","_externals","_onOpenSync","_highlightOnOpen","togglePopup","showing","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox","ariaOwner","sandboxClasses","sandboxBehaviours","sandboxFields","schema$g","parts$4","factory$6","_spec","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","hsvColour","fromRgb","minRGB","maxRGB","calcHex","rgb","fieldsUpdate","sliderUpdate","paletteUpdate","labelPart","edgePart","model","edgeActions","det","mouseIsDown","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","spectrumPart","modelDetail","getValueFromEvent","spectrum","SliderParts","_sliderChangeEvent","sliderChangeEvent","isTouchEvent","evt","getEventSource","touchEvent","mouseEvent","r$1","l","minX","minY","min1X","min1Y","max1X","max1Y","range$2","xRange","yRange","halfX","halfY","step","stepSize","snap","snapToGrid","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","currentValue","xValue","yValue","xyValue","fireSliderChange","setToTLEdgeXY","setToTEdge","setToTEdgeXY","setToTREdgeXY","setToREdge","setToREdgeXY","setToBREdgeXY","setToBEdge","setToBEdgeXY","setToBLEdgeXY","setToLEdge","setToLEdgeXY","reduceBy","increaseBy","capValue","snapValueOf","initValue","extraValue","remainder","adjustment","rawSteps","maxSteps","numSteps","findOffsetOf","findValueOf","hasMinEdge","hasMaxEdge","minBound","maxBound","screenRange","capMin","capMax","findOffsetOfValue","maxOffset","centerMinEdge","centerMaxEdge","getBounds$1","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$1","sliderValue","findValueOfOffset","sliderVal","setToMin","setToMax","moveBy","handleMovement","findOffsetOfValue$1","minEdge","maxEdge","minOffset","findPositionOfValue","slider","setPositionFromValue","thumb","edges","getSpectrum","getLeftEdge","getRightEdge","thumbRadius","HorizontalModel","fireSliderChange$2","sliderValue$1","findValueOfOffset$1","setValueFrom$1","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue$2","findPositionOfValue$1","setPositionFromValue$1","getTopEdge","getBottomEdge","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange$3","sliderValue$2","setValueFrom$2","moveBy$2","isVerticalMovement","handleMovement$2","setToMin$2","mX","mY","setToMax$2","getValueFromEvent$2","setPositionFromValue$2","xPos","yPos","thumbXRadius","thumbYRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","TwoDModel","SliderSchema","getThumb","changeValue","onChange","resetToMin","resetToMax","fireOnChoose","onChoose","wasDown","onDragStart","onDragEnd","sliderBehaviours","getInitialValue","onInit","Slider","sliderFactory","getClass","_thumb","owner$3","schema$h","getPartName","sketch$1","fSpec","fieldParts","make$4","toResult$1","formBehaviours","form","resPs","resPThunk","pName","Form","validInput","invalidInput","validatingInput","translatePrefix","rgbFormFactory","onValidHexx","onInvalidHexx","invalidation","isValid","renderTextField","description","helptext","comps","concats","copyRgbToHex","hexField","copyRgbToForm","memPreview","updatePreview","preview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","updateHex","rgbFormSketcher","paletteFactory","_translate","setColour","grdWhite","createLinearGradient","addColorStop","grdBlack","setSliderColour","_detail","_slider","saturationBrightnessPaletteSketcher","setRgba","_apis","makeFactory","rgbForm","onInvalidHex","sbPalette","paletteRgba","memPalette","memRgb","updatePalette","palette","updateFields","runUpdates","updates","paletteUpdates","oldRgb","hsvColour$1","newHsvColour","nuHex","sliderUpdates","colourPickerSketcher","self$1","memento","mem","childAt","ComposingConfigs","english","getEnglishText","translate$1","renderColorPicker","colourPickerFactory","memPicker","picker","optRgbForm","optHex","formValues","pattern","global$a","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","ta","scriptId","scriptUrl","ea","cvalue","ed","processors","memento$1","rawProcessors","rawValue","postprocess","withComp","optInitialValue","getter","setter","withElement","domValue","domHtml","memory$1","RepresentingConfigs","extensionsAccepted","filterByExtension","files","re","file","renderDropZone","actions","onDrop","transferEvent","handleFiles","dataTransfer","onSelect","memInput","accept","renderField","inputComp","renderGrid","beforeObject","afterObject","craftWithClasses","outline","craft","triggerTab","onFocus$1","isPseudoStop","NavigableObject","platformNeedsSandboxing","getDynamicSource","isSandbox","cachedValue","frameComponent","contentWindow","renderIFrame","sandboxed","sourcing","create$5","resize","clone$1","tCanvas","get2dContext","drawImage","getWidth","image","naturalWidth","getHeight","naturalHeight","asap","immediateFn","catch","values_1","Promise$1","blobToImage","blobUrl","URL","createObjectURL","Image","removeListeners","loaded","src","dataUriToBlobSync","uri","mimetype","base64","sliceSize","byteCharacters","atob","bytesLength","slicesCount","byteArrays","sliceIndex","begin","end","bytes","charCodeAt","Uint8Array","Blob","dataUriToBlob","canvasToBlob","quality","HTMLCanvasElement","toBlob","toDataURL","canvasToDataURL","blobToCanvas","revokeImageUrl","blobToDataUri","reader","FileReader","onloadend","readAsDataURL","revokeObjectURL","create$6","getCanvas","initialType","getType","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","dataurl","toCanvas","fromBlob","fromCanvas","blobToImageResult","clamp$1","parsedValue","identity$1","DELTA_INDEX","multiply","matrix1","matrix2","out","adjustContrast","adjustBrightness","adjustColors","adjustR","adjustG","adjustB","colorFilter","ir","applyColorFilter","applyMatrix","pixelsData","m0","m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","pixels","putImageData","convoluteFilter","applyConvoluteFilter","pIn","pOut","aMatrix","halfSide","drgba","cy","cx","scx","scy","innerOffset","wt","pixelsIn","pixelsOut","functionColorFilter","colorFn","filterImpl","applyLookup","complexAdjustableColorFilter","matrixAdjustFn","adjust","basicColorFilter","basicConvolutionFilter","kernel","invert","contrast","colorize","sharpen","gamma","pow","scale","dW","dH","sW","sH","wRatio","hRatio","scaleCapped","scaled","_scale","rotate","angle","applyRotate","translateX","translateY","PI","flip","axis","applyFlip","crop","applyCrop","resize$1","newCanvas","invert$1","sharpen$1","gamma$1","colorize$1","brightness$1","contrast$1","flip$1","crop$1","resize$2","rotate$1","renderIcon$1","renderIconFromPack","iconsProvider","renderReplacableIconFromPack","renderLabel$1","internalToolbarButtonExecute","onToolbarButtonExecute","itemApi","buttonApi","toolbarButtonEventOrder","updateMenuText","updateMenuIcon","renderCommonDropdown","optMemDisplayText","optMemDisplayIcon","onLeftOrRightInMenu","dropdown","tooltipAttributes","translatedTooltip","memDropdown","displayText","displayIcon","isMenuItemReference","isExpandingMenuItem","separator$1","unwrapReferences","realItems","getFromExpandingItem","submenuItems","newMenus","newExpansions","getFromItem","generateValueIfRequired","itemWithValue","newData","build$2","mainMenu","submenus","getMenuButtonApi","renderMenuButton","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","supported","noSizeConversion","ratioSizeConversion","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","pLock","formGroup","getFieldPart","isField1","widthField","heightField","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$b","global$c","global$d","global$e","global$f","getDocumentSize","scrollWidth","scrollHeight","updateWithTouchData","changedTouches","DragHelper","$eventOverlay","downButton","drag","startX","startY","handleElement","getElementById","handleElm","cursor","docSize","screenX","screenY","runtimeStyle","zIndex","opacity","appendTo","deltaX","deltaY","create$7","currentRect","viewPortRect","clampRect","containerElm","instance","dragHelpers","blockers","handles","xMul","yMul","getAbsoluteRect","outerRect","relativeRect","getRelativeRect","innerRect","getInnerRect","moveRect","startRect","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","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","_simulatedEvent","oImg","unblock","imageResultToBlob","block","editPanel","applyButton","blobManipulate","manipulate","tempManipulate","manipulateApply","currentUrl","factory$8","initialValues","selectClasses","selectAttributes","selectBehaviours","found","HtmlSelect","renderSelectBox","translatedOptions","chevron","selectWrap","baseInputBehaviours","multiline","validatingBehaviours","vl","inputMode","inputmode","classname","flex","extraClasses2","maximized","renderInput","renderTextarea","events$c","streamConfig","streamState","streams","stream","processor","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","_sandbox","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","getValidationHandler","memInvalidIcon","invalidComp","_menu","_entry","makeIcon","errId","memStatus","optUrlPicker","getUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","fieldname","chosenData","renderCheckbox","repBehaviour","toggleCheckboxHandler","className","memIcons","renderHtmlPanel","renderLabel$2","backstageShared","renderCollection","runOnItem","escapeAttribute","htmlLines","mapItemName","tgt","collectionEvents","currentActive","renderTable","renderTh","renderHeader","header","renderTd","renderTr","renderRows","renderPanel","make$6","makeIframe","iframeSpec","factories","bar","collection","alertbanner","textarea","iframe","checkbox","dropzone","selectbox","sizeinput","urlinput","customeditor","htmlpanel","imagetools","table","noFormParts","_name","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","bubbleAlignments","valignCentre","alignCentre","alignLeft","alignRight","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","useEditableAreaAnchor","editableAreaAnchor","standardAnchor","getBannerAnchor","getCursorAnchor","bodyElement","getNodeAnchor","getAnchors","useFixedToolbarContainer","getContentAreaContainer","inlineDialog","Anchors","hasCustomColors$1","getColors$1","getColorCols$2","ColorInputBackstage","isDraggableModal$1","DialogBackstage","defaultStyleFormats","isNestedFormat","isBlockFormat","isInlineFormat","isSelectorFormat","mapFormats","userFormats","fmt","customFormats","formats","formatName","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","enriched","modifications","fromSettings","fromEvents","getFlattenedKeys","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","localStorage","SyntaxError","setAllHistory","itemsWithoutUrl","hasOwnProperty$2","isTruthy","makeMap","getOpt$1","getTextSetting","defaultValue","getPicker","file_picker_callback","getPickerTypes","optFileTypes","file_picker_types","optLegacyTypes","file_browser_callback_types","optTypes","_picker","types","getPickerSetting","pickerTypes","entry","typeahead_urls","optValidator","file_picker_validator_handler","filepicker_validator_handler","UrlInputBackstage","init$8","contextMenuState","styleselect","isContextMenuOpen","setContextMenuState","expandable$1","showContextToolbarEvent","hideContextToolbarEvent","schema$k","parts$7","factory$9","tgroupBehaviours","itemSelector","ToolbarGroup","schema$l","enhanceGroups","parts$8","factory$a","setGroups","groups","getGroupContainer","shell","toolbarBehaviours","Toolbar","generate$6","output$1","apportion","total","parray","within","withinWidth","toUnit","fitLast","fits","overflow","overflower","fitAll","tryFit","divide","partition$3","storedGroups","bGroups","findFocusedComp","focusedElm","setOverflow","overflowGroup","builtGroups","focusedComp","availableWidth","overflows","schema$m","schema$n","parts$9","schema$o","parts$a","toggledClass","toggle$2","toolbarSandbox","position$2","bounder","setGroups$1","makeSandbox$1","factory$b","getToolbar","FloatingToolbarButton","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","isShrinking","isTransitioning","toggleGrow","SlidingApis","exhibit$6","events$d","propertyName","onGrown","ActiveSliding","SlidingSchema","init$9","SlidingState","Sliding","schema$p","parts$b","onClosed","onOpened","toggleToolbar","overf","refresh$3","factory$d","toolbarToggleEvent","doSetGroups","_button","SplitSlidingToolbar","toolbarHeightChange","ReadOnlyChannel","ReadOnlyDataSchema","setDisabledAll","forEach","broadcastReadonly","uiComponents","readonly","outerContainer","mothership","toggleToReadOnly","setupReadonlyModeSwitch","setMode","createReadonlyReceivingForOverflow","renderToolbarGroupCommon","toolbarGroup","renderToolbarGroup","getToolbarbehaviours","toolbarSpec","modeName","onAttached","initGroups","renderMoreToolbarCommon","cyclicKeying","renderFloatingMoreToolbar","baseSpec","overflowXOffset","headerElem","moreDrawerData","lazyHeader","headerBounds","docElem","docBounds","renderSlidingMoreToolbar","renderToolbar","scrolling","baseToolbarButtonFields","toolbarButtonSchema","createToolbarButton","baseMenuButtonFields","MenuButtonSchema","createMenuButton","splitButtonSchema","createSplitButton","baseToolbarToggleButtonFields","toggleButtonSchema","createToggleButton","groupToolbarButtonSchema","createGroupToolbarButton","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","contextformbutton","contextformtogglebutton","contextFormSchema","contextToolbarSchema","createContextToolbar","createContextForm","getState$2","reflectState","ReflectingApis","events$e","reflectingConfig","reflectingState","updateState","renderComponents","newComponents","channel","rawData","ActiveReflecting","init$a","optS","ReflectingState","ReflectingSchema","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","needsRtlClass","renderFloatingToolbarButton","identifyButtons","renderCommonToolbarButton","specialisation","toolbarButtonBehaviours","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","displayChannel","underlinePath","buttonComp","getFormApi","runOnExecute$1","formApi","renderContextButton","bridged","renderContextToggleButton","generateOne$1","generate$7","mementos","asSpecs","findPrimary","compInSystem","renderContextForm","toolbarType","commands","ContextForm","getHorizontalBounds","contentAreaBox","viewportBounds","contentBoxWidth","maxViewportWidth","getVerticalBounds","headerBox","isToolbarBelowContentArea","isToolbarAbove","containerBounds","getContextToolbarBounds","toolbarOrMenubarEnabled","_b","matchTargetWith","toolbarApi","lookup$1","scopes","rootElem","isOutsideRoot","startNode","inNodeScope","inEditorScope","ToolbarLookup","categorise","contextToolbars","forms","formNavigators","lookupTable","registerForm","contextForm","launch","registerToolbar","contextToolbar","ToolbarScopes","forwardSlideEvent","backSlideEvent","changeSlideEvent","resizingClass","renderContextToolbar","currentWidth","newContents","oldContents","forwardContents","generateSelectItems","_editor","generateItem","rawItem","response","si","invalid","validateItems","preItems","getCurrentValue","shouldHide","createMenuItems","createSelectButton","getComponent","setInitialValue","nodeChangeHandler","rawFormats","buildBasicStaticDataset","ResizeTypes","delimiter","SemiColon","buildBasicSettingsDataset","settingName","alignMenuItems","command","getSpec","getMatchingValue","_format","updateSelectMenuIcon","alignment","canApply","createAlignSelect","alignSelectMenu","defaultFontsFormats","systemStackFonts","splitFonts","fontFamily","fonts","font","isSystemFontStack","matchesSystemStack","getSpec$1","getFirstFont","queryCommandValue","matchOpt","updateSelectMenuText","createFontSelect","fontSelectMenu","defaultFontsizeFormats","legacyFontSizes","round$1","precision","factor","toPt","fontSize","toLegacy","getSpec$2","_loop_1","pt","legacy","Space","createFontsizeSelect","fontsizeSelectMenu","findNearest","getStyles","parents","matchNode","getCurrentSelectionParents","currentNode","onSetupFormatToggle","unbindCell","formatChanged","initialized","onActionToggleFormat","defaultBlocks","getSpec$3","nodeChangeEvent","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","align","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","forceHide","hideOrRepositionIfNecessary","lastAnchor","contextBarEle","wrapInPopDialog","shortcuts","getScopes","alloySpec","buildToolbar","default","allButtons","toolbarKey","launchContext","sElem","launchContextToolbar","setEditorTimeout","ContextToolbar","setup$3","ship","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onWindowScroll","onWindowResize","onEditorResize","Events$1","parts$d","partType$1","schema$r","customListDetail","itemsPart","parts$e","name$2","factory$f","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","makeItem","itemsToRemove","builtLists","setupItem","listBehaviours","CustomList","getOffsetParent","isFixed","offsetParent$1","getOrigin","morphAdt","static","appear","contextualInfo","transitionClass","fadeOutClass","fadeInClass","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","isVisibleForModes","getPrior","getInitialPosition","storePrior","setInitialPosition","revertToOriginal","offsetBox_1","morphToOriginal","dockInfo","morphToFixed","winBox","isTop","getMorph","isDocked","getMorphToOriginal","morphToStatic","onUndocked","morphToCoord","method","onDocked","updateVisibility","morphToDocked","contextual","contextInfo","lazyContext","setVisible","refreshInternal","lazyViewport","morph","setDocked","resetInternal","refresh$4","reset","DockingApis","events$f","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","updateIframeContentFlow","isToolbarTop","getOccupiedHeight","parentElem","padding","parentWidth","updateSinkVisibility","sinkElem","updateEditorClasses","editorContainer","restoreFocus","focusedElem","activeElm","findFocusedElem","rootElm","setup$4","isDocked$1","getIframeBehaviours","getBehaviours$2","runOnSinkElement","onDockingSwitch","additionalBehaviours","headerHeight","boxHeight","topBound","StickyHeader","setup$5","isDocked$2","getBehaviours$3","StaticHeader","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","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","getThrobber","focusToolbar","optToolbar","setMenubar","menubar","focusMenubar","partMenubar","toolbarFactory","sliding","partMultipleToolbar","tc","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","SkinLoaded","loadSkin","isInline","skinUiCss","contentCSS","styleSheetLoader","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents","initialDocEle","lastWindowDimensions","innerWidth","lastDocumentDimensions","docEle","outer","inner","elementLoad","lastToolbarWidth","targetNode","socket","limit","addQueryValueHandler","toolbarMode","refreshDrawer","iframeContainer","Iframe","parseToInt","numToPx","calcCappedSize","minSize","maxSize","minOverride","maxOverride","Utils","getHeight$1","baseHeight","minHeight","getHeightWithFallback","getWidth$1","baseWidth","minWidth","getWidthWithFallback","getTargetPosAndHeight","targetElm","render$1","floatContainer","isSticky","editorMaxWidthOpt","isSplitToolbar","prevPosAndHeight","updateChromePosition","tbar","targetBounds","bodyMargin","repositionFloatingUiComponents","updateChromeUi","resetDocking","toolbar_1","addClass","removeClass","uiContainer","requestAnimationFrame","posAndHeight","Inline","register$5","alignToolbarButtons","cmd","alignNoneToolbarButton","addButton","AlignmentButtons","toggleFormat","registerFormatButtons","name_1","registerCommandButtons","registerCommandToggleButtons","registerButtons","registerMenuItems","addMenuItem","register$6","SimpleControls","toggleUndoRedoState","checkState","onUndoStateChange","registerMenuItems$1","registerButtons$1","register$7","UndoRedo","toggleVisualAidState","hasVisual","onVisualAid","registerMenuItems$2","addToggleMenuItem","registerToolbarButton","register$8","VisualAid","toggleOutdentState","queryCommandState","onNodeChange","registerButtons$2","register$9","IndentOutdent","register$a","ComplexControls","setup$8","FormatControls","nu$d","transpose$1","dx","dy","isTouchEvent$1","fromPageXY","pageX","pageY","fromClientXY","transposeContentAreaContainer","containerPos","getPos","getPointAnchor","getSelectionAnchor","getNodeAnchor$1","getAnchorSpec","isTriggeredByKeyboardEvent","initAndShow","buildMenu","contextmenu","anchorSpec","bubbleSize$1","bubbleAlignments$2","isTouchWithinSelection","touch_1","rngRectOpt","rngRect","getAnchorSpec$1","setupiOSOverrides","originalSelection","selectionReset","setRng","unbindEventListeners","preventMousedown","clearSelectionReset","initAndShow$1","shouldHighlightImmediately","openiOS_1","patchPipeConfig","shouldNeverUseNative","contextmenu_never_use_native","getMenuItems","defaultItems","contextMenus","isContextMenuDisabled","getContextMenu","Settings$1","isSeparator$1","separator$3","makeContextItem","addContextMenuGroup","groupItems","lastMenuItem","generateContextMenu","selectedElement","sections","allItems","isNativeOverrideKeyEvent","isTriggeredByKeyboard","pointerType","setup$9","hideContextMenu","_e","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","get$e","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","repositionTarget","snapPin","DraggingApis","initialAttribute","resetZIndex","initZIndex","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","platform$1","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","TableSelectorHandles","getDimensions","resizeType","originalHeight","originalWidth","Both","resize$3","dim","isHidden$1","renderElementPath","getDataPath","newPathElements","divider","newAcc","updatePath","newPath","parent_1","isDefaultPrevented","isPropagationStopped","ElementPath","renderWordCount","replaceCountText","words","characters","currentVal","newMode","wordCount","renderStatusbar","renderResizeHandlerIcon","renderBranding","linkHtml","getResizeType","plugins","None","Vertical","getTextComponents","getComponents","setup$b","lazyOuterContainer","platformClasses","touchPlatformClass","deviceClasses","dirAttributes","verticalDirAttributes","isHeaderDocked","memAnchorBar","lazyAnchorBar","throbber","sb","statusbar","socketSidebarContainer","hasMultipleToolbar","hasToolbar","hasMenubar","getPartToolbar","editorComponents","containerComponents","border","getUi","broadcastAll","setEditorSize","parsedHeight","parsedWidth","renderUI","toolbarGroupButtonConfig","addGroupToolbarButton","toolbarOpt","Render","describedBy","describedElement","describeElement","describeId","AriaLabel","labelledBy","labelledElement","labelElement","schema$x","basic","parts$f","dragBlockClass","getDragBounds","factory$i","dialogBusyEvent","dialogIdleEvent","busyBehaviours","showDialog","busyComp","externalBlocker","bc","getBusySpec","busySpec","busy","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","getFooter","modalBehaviours","ModalDialog","alertBannerFields","alertBannerSchema","createBarFields","itemsField","buttonFields","buttonSchema","checkboxFields","checkboxSchema","checkboxDataProcessor","formComponentFields","formComponentWithLabelFields","colorInputFields","colorInputSchema","colorInputDataProcessor","colorPickerFields","colorPickerSchema","colorPickerDataProcessor","dropZoneFields","dropZoneSchema","dropZoneDataProcessor","createGridFields","iframeFields","iframeSchema","iframeDataProcessor","inputFields","inputSchema","inputDataProcessor","selectBoxFields","selectBoxSchema","selectBoxDataProcessor","sizeInputFields","sizeInputSchema","sizeInputDataProcessor","textAreaFields","textAreaSchema","textAreaDataProcessor","urlInputFields","urlInputSchema","urlInputDataProcessor","customEditorFields","customEditorFieldsOld","customEditorSchema","customEditorDataProcessor","htmlPanelFields","htmlPanelSchema","imageToolsFields","imageToolsSchema","collectionFields","collectionSchema","collectionDataProcessor","createLabelFields","tableFields","tableSchema","createItemsField","itemSchema$2","sErr","passValue","panelSchema","panelFields","tabFields","tabPanelFields","tabPanelSchema","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseButtonFields","dialogButtonFields","normalButtonFields","menuButtonFields","dialogButtonSchema","dialogButtonFields$1","dialogButtonSchema$1","dialogSchema","tabpanel","createDialog","getAllObjects","isNamedItem","dataProcessors","togglemenuitem","getDataProcessor","getNamedItems","createDataValidator","namedItems","urlDialogButtonSchema","urlDialogSchema","createUrlDialog","extract$1","internalDialog","dataValidator","DialogManager","openUrl","redial","value$3","isSet","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","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","_comp","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","getEventExtras","lazyDialog","closeWindow","onBlock","blockEvent","bs","onUnblock","renderModalDialog","mapMenuButtons","mapItems","extractCellsToObject","menuButton","innerAcc","initCommonEvents","fireApiEvent","_event","initUrlDialog","getInstanceApi","withSpec","_c","currentDialog","initDialog","currentDialogInit","cur","onTabChange","newTabName","oldTabName","SilverDialogEvents","makeButton","lookup$2","footerButtons","buttonName","memButton","_data","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","renderDialog$1","storagedMenuButtons","objOfCells","dialogSize","modalAccess","getForm","outerForm","renderInlineDialog","dialogLabelId","dialogContentId","memHeader","memBody","memFooter","global$g","getUrlDialogApi","sendMessage","SUPPORTED_MESSAGE_ACTIONS","isSupportedMessage","mceAction","isCustomMessage","handleMessage","insertContent","renderUrlDialog","iframeUri","base_uri","href","iframeDomain","protocol","host","port","messageHandlerUnbinder","isSameOrigin","onMessage","unbinder","iframeEle","iframeWin","postMessage","setup$c","closeDialog","alertDialog","memFooterClose","titleSpec","closeSpec","footerCloseButton","setup$d","confirmDialog","memFooterYes","footerNo","footerYesButton","validateData$1","isAlertOrConfirmDialog","inlineAdditionalBehaviours","setup$e","isStickyToolbar$1","openInlineDialog","openModalDialog","openModalUrlDialog","internalInitialData","config$1","refreshDocking","dialogUi","inlineDialogComp","confirm","alert","WindowManager","Theme","windowMgr","getWindowManagerImpl","getNotificationManagerImpl","getCreationDateClasses","getModificationDateClasses","getSelectedContentClasses","getPreviewReplaceValues","getTemplateReplaceValues","getTemplates","editorSettings","templates","getCdateFormat","getMdateFormat","addZeros","getDateTime","daysShort","daysLong","monthsShort","monthsLong","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","DateTimeHelper","createTemplateList","templateList","send","replaceTemplateValues","templateValues","replaceVals","hasClass","insertTemplate","addVisual","Templates","Commands","dateFormat","FilterContent","entitiesAttr","'","htmlEscape","getPreviewContent","contentCssLinks_1","bodyClass","body_class","directionality","dirAttr","createTemplates","notificationManager","template","isUrlTemplate","createSelectBoxItems","findTemplate","templateTitle","loadFailedAlert","getTemplateContent","updateDialog","newTemplateTitle","previewHtml","openDialog","selectBoxItems","buildDialogSpec","bodyItems","dialogApi","optTemplates","Dialog","Buttons","Plugin","isNamedAnchor","tagName","getAttrib","isValidId","getId","selectedNode","createHTML","Anchor","insertAnchor","newId","currentId","isNamedAnchorNode","setContentEditable","nodes","parser","addNodeFilter","serializer","selectorChangedWithUnbind","groupBy","wasType","is$1","fromElements","lastChild","fireListEvent","unsafe","actual","Global$1","htmlElement","HTMLElement","isTextNode","isListNode","isOlUlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isLastChild","isTextBlock","getTextBlockElements","blockElements","isBogusBr","previousSibling","isEmpty","keepBookmarks","isChildOfBody","isChildOf","NodeType","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","isList","shouldIndentOnTab","getForcedRootBlock","getForcedRootBlockAttrs","createTextBlock","contentNode","textBlock","hasContentNode","getBlockElements","createFragment","blockName","setAttribs","shallowAs","mutate","joinSegment","joinSegments","segments","appendSegments","head$1","tail","createSegment","listType","createSegments","populateSegments","listAttributes","itemAttributes","normalizeSegment","appendItem","writeShallow","cast","newCast","depth","writeDeep","composeList","entries","isList$1","hasFirstChildList","hasLastChildList","isIndented","cloneItemContent","li","createEntry","indentEntry","indentation","cloneListProperties","previousSiblingEntry","normalizeEntries","matchingEntry","parseItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","newDepth","parseLists","initialDepth","sourceList","outdentedComposer","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","splitList","ul","tmpRng","bookmarks","newBlock","removeAndKeepBookmarks","insertAfter","SplitList","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","getNormalizedPoint","normalizeRange","outRng","rangeStart","rangeEnd","Range","selectionIndentation","isHandled","bookmark","getBookmark","moveToBookmark","indentListSelection","outdentListSelection","flattenListSelection","DOM$1","createBookmark","setupEndPoint","offsetNode","resolveBookmark","restoreEndPoint","nodeIndex","Bookmark","isCustomList","listToggleActionFromListName","listName","updateListStyle","setStyle","updateListAttrs","updateListWithDetails","removeStyles","getEndPointNode","getSelectedTextBlocks","textBlocks","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","detailStyle","applyList","listItemName","listBlock","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList","newList","toggleMultipleLists","hasListStyleDetail","toggleSingleList","toggleList","selectedSubLists","ToggleList","DOM$2","normalizeList","normalizeLists","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","Delete","Api","queryListCommandState","addQueryStateHandler","setupTabKey","metaKeyPressed","Keyboard","listState","tableCellIndex","hasPlugin","plugin","inArray","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","getVideoScriptMatch","trimPx","getEphoxEmbedData","altsource","poster","htmlToData","isEphoxEmbed","allow_conditional_comments","movie","videoScript","guess","mimes","mp3","m4a","wav","mp4","webm","ogg","swf","fileEnd","mime","Mime","setAttributes","updatedAttrs","updateEphoxEmbed","styleMap","serializeStyle","sources","updateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","imgAttrs","UpdateHtml","urlPatterns","regex","allowFullscreen","getProtocol","protocolMatches","getUrl","newUrl","matchPattern","getIframeHtml","getFlashHtml","getAudioHtml","audioTemplateCallback","altsourcemime","getVideoHtml","videoTemplateCallback","sourcemime","getScriptHtml","dataToHtml","dataIn","embed","convertURL","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","Service","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","dims","errorMessage","snippetToData","embedSnippet","isMediaElement","getEditorData","snippet","serialize","addEmbedHtml","snippetData","selectPlaceholder","beforeObjects","afterObjects","handleInsert","submitForm","editorData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","generalTab","embedTextarea","embedTab","advancedFormItems","advancedTab","sanitize","blocked","attrName","Sanitize","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","transparentSrc","createPreviewIframeNode","previewWrapper","previewNode","shimNode","allowfullscreen","class","frameborder","sourceNode","attrValue","attribs","ai","escape","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","ceFalse","Nodes","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addAttributeFilter","realElm","innerNode","realElmName","unescape","$elm","ResolveName","objectType","stateSelectorAdapter","getPreviewDialogWidth","getPreviewDialogHeight","getContentStyle","shouldUseContentCssCors","getPreviewHtml","headHtml","contentStyle","getURI","cors","bodyId","body_id","isMetaKeyPressed","preventClicksOnLinksScript","IframeContent","dataApi","applyListFormat","styleValue","Actions","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","ListUtils","styleValueToText","isWithinList","iconStyle","listStyleType","listStyle","addControl","invalidTypeMessage","incorrect","COMMENT","isComment","startsWith","sourceDom","targetDom","cssText","rawParent","prevSibling","detailnew","extended","rowdata","elementnew","rowdatanew","rowcells","rowdetails","ancestors","ancestors$1","children$2","child$1","child$2","firstLayer","filterFirstLayer","LayerSelector","tags","isRootOrUpperTable","notCell","neighbours","neighbourCells","neighbourRows","firstCell","grid$1","rowProp","colProp","rowsCount","cols","TableLookup","fromTable","parentSection","parentName","rowspan","colspan","fromPastedRows","example","DetailsList","getAt","warehouse","findItem","filtered","filterItems","maxRows","maxColumns","currentRow","cr","cc","newpos","justCells","Warehouse","statsStruct","findSelectedStats","house","totalColumns","totalRows","minRow","minCol","maxRow","maxCol","endRow","endCol","seenSelected","fillInGaps","stats","needCell","clean","emptyRows","selectedSelector","unselectedCells","CopySelected","copy$1","cloneChildren","createCell","replica","pasteReplace","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cellOperations","formatsToClone","docu","lastNode","gap","paste","TableFill","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","finishCol","finishRow","isWithin","isRectangular","isRect","detailIsWithin","CellBounds","detailA","detailB","getAnyBox","startCoords","finishCoords","sc","fc","getBox","CellGroup","intercepts","parentCell","innerCell","isContainedBy","c1","c2","CellFinder","deltaColumn","getWarehouse","intercepts$1","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","getBox$1","TablePositions","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","up","down","copyTo","afterAll","appendAll","setText","leftRight","brokenPath","bisect","universe","ind","breakToRight","second","breakToLeft","prior","breakPath","breaker","splits","breakage","nextChild","look","oneAll","unsafeOne","commonElement","eq$1","unsafeSubset","ps1","ps2","finder","topDown","startIndex","sIndex","eIndex","ancestors$2","pruned1","pruned2","firstpath","secondpath","subset","ancs","SubsetFn","sharedOne","subset$1","ancestors$3","breakToLeft$1","breakToRight$1","breakPath$1","Parent","sharedOne$1","_universe","subset$2","ancestors$4","breakToLeft$2","breakToRight$2","breakPath$2","DomParent","Identified","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve","sels","lastSelectedSelector","getEdges","firstSelectedSelector","tbl","expandTo","shiftSelection","CellSelection","retrieve$1","retrieveBox","firstAncestor","lastAncestor","fA","lA","TableSelection","attributeSelector","firstSelected","lastSelected","Ephemera","type$1","onMultiple","onSingle","SelectionTypes","selections","unmergable","hasSpan","mergable","_env","CellOperations","noMenu","notCell$1","paste$1","pasteRows","clipboard","generators","TableTargets","extractSelected","serializeElements","getTextContent","registerEvents","cellSelection","multiCellContext","domCell","pasteCells","Clipboard","needManualCalc","toNumber","px","getProp","getCalculatedHeight","paddingTop","paddingBottom","borderTop","borderBottom","boxSizing","borders","RuntimeSize","genericSizeRegex","percentageBasedSizeRegex","pixelBasedSizeRegex","setPixelWidth","amount","setPercentageWidth","getHeightValue","normalizePixelSize","getTotalHeight","getSpan","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getGenericWidth","setGenericWidth","Sizes","halve","main","CellMutations","rowInfo","colInfo","rtlEdge","ltrEdge","getTop","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","BarPositions","ResizeDirection","TableDirection","directionAt","auto","getGridSize","TableGridSize","setIfNot","newRows","newCells","renderSection","gridSection","sectionName","tb","isNew","tr","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","copy$2","clonedCell","Redraw","repeat","repititions","deduce","aa","rowsArr","getBlock","isSingle","getFallback","decide","inBlock","singleInBlock","detailOption","rows$1","Blocks","namespace","dashNamespace","Styles","row$1","Bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","hdirection","vdirection","each$2","bars","isRowBar","isColBar","Bars","addCell","gridRow","setCells","mutateCell","mapCells","getCell","getCellElement","cellLength","GridRow","getColumn","getRow","findDiff","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","TableGrid","toDetails","seen","ri","ci","updateSeen","toGrid","rowCells","Transitions","fromWarehouse","deriveRows","rendered","findRow","rowOfCells","toDetailList","findInWarehouse","postAction","genWrappers","newElements","onCell","onPasteRows","lc","onMergable","_warehouse","onUnmergable","onCells","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","fill","generator","rowFill","_row","colFill","tailor","fillCols","fillRows","modifiedCols","tailoredGrid","Fitment","substitution","unmerge","isToReplace","uniqueCells","currentCell","splitRows","rowPrevCells","replacement","_loop_2","sub","MergingOperations","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","fittedGrid","fittedNewGrid","secondDelta","fittedOldGrid","TableMerge","insertRowAt","between","withinSpan","insertColumnAt","splitCellIntoColumns","exampleRow","exampleCol","isTargetCell","splitCellIntoRows","deleteColumnsAt","deleteRowsAt","ModificationOperations","replaceIn","isTarget","notStartRow","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","TransformOperations","only","ColumnContext","neighbours$1","determine","zero","onOnly","singleColumnWidth","newNext","minCellWidth","newThis","diffx","onMiddle","_prev","Deltas","getSpan$1","hasColspan","hasRowspan","getInt","CellUtils","getRaw$1","getRawW","getRawH","getWidthFrom","backups","columnCell","deduced","getDeduced","getRawWidths","getPercentageWidths","getPixelWidths","getHeightFrom","rowCell","getPixelHeights","getRawHeights","ColumnSizes","measures","recalculateWidth","widths","recalculateHeight","matchRowHeight","Recalculations","percentageSize","getCellDelta","_delta","setTableWidth","_newWidths","ratio","getWidths","setElementWidth","pixelSize","newWidths","chooseSize","fallbackWidth","getTableSize","TableSize","getWarehouse$1","sumUp","getTableWarehouse","adjustWidth","newSizes","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustWidthTo","Adjustments","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","verifyGenerators","elementToData","toData","nuFrom","recent","getOrInit","makeNew","replaceOrInit","merging","Generators","blockList","isFormatting","isHeading","isContainer","isFrame","Structure","universe$1","isBlock$1","isFormatting$1","isHeading$1","isContainer$1","isEmptyTag$1","isFrame$1","isInline$1","DomStructure","merge$2","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","TableContent","elementFromGrid","findIn","uniqueRows","currentDetail","uniqueColumns","insertRowBefore","targetIndex","newGrid","insertRowsBefore","newG","insertRowAfter","insertRowsAfter","insertColumnBefore","insertColumnsBefore","insertColumnAfter","insertColumnsAfter","makeRowHeader","makeColumnHeader","unmakeRowHeader","unmakeColumnHeader","splitCellIntoColumns$1","splitCellIntoRows$1","eraseColumns","_comparator","_genWrappers","eraseRows","mergeCells","unmergeCells","pasteDetails","gridify","wh","mergedGrid","nuGrid","gridifyRows","pasteRowsBefore","pasteRowsAfter","TableOperations","getBody$1","getPixelWidth$1","getPixelHeight","removePxSuffix","addSizeSuffix","removeDataStyle","dataStyleCells","ltr$1","rtl$1","Direction","defaultTableToolbar","defaultStyles","defaultAttributes","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPercentagesForced","isPixelsForced","getCloneElements","cloneElements","hasObjectResizing","objectResizing","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","fireTableSelectionChange","fireTableSelectionClear","toEnd","freefallRtl","freefallRtl$1","universe$2","freefallRtl$2","TableActions","lazyWire","isTableBody","lastRowGuard","lastColumnGuard","guard","des","deleteRow","deleteColumn","copyRows","selectedCells","slicedGrid","slicedDetails","CopyRows","getTDTHOverallStyle","firstChildStyle","checkChildren","currentStyle","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","Styles$1","buildListItems","inputList","itemCallback","startItems","appendItems","extractAdvancedStyles","rgbToHex","borderWidth","borderStyle","borderColor","bgColor","borderwidth","borderstyle","bordercolor","backgroundcolor","getSharedValues","baseData","comparisonData","itemKey","comparisonValue","getAdvancedTab","dialogName","advTabItems","getAlignment","alignments","dataName","alignmentData","getHAlignment","getVAlignment","extractDataFromSettings","hasAdvTableTab","extractAdvancedStyleData","defaultData","cellspacing","cellpadding","caption","getBorder","advStyle","getCellPaddingCellSpacing","spacing","extractDataFromTableElement","optBorderWidth","extractDataFromRowElement","extractDataFromCellElement","celltype","Helpers","getClassList","rowClassList","textStyle","children$3","classlist","CellDialogGeneralTab","setAttrib","ifTruthy","DomModifier","updateSimpleProps","modifiers","updateAdvancedProps","applyToSingle","cellElm","halign","valign","applyToMultiple","onSubmitCellForm","applicator","cellsData","dialogTabPanel","dialogPanel","CellDialog","getClassList$1","formChildren","getItems$1","RowDialogGeneralTab","switchRowType","rowElm","toType","tableElm","oldParentElm","parentElm","updateAdvancedProps$1","modifier","onSubmitRowForm","oldData","createModifier","rowsData","RowDialog","DefaultRenderOptions","percentages","makeTable","tableBody","tableRow","tableHeaderCell","tableCell","rowHeaders","columnHeaders","renderOpts","tbody","trs","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","insert$1","InsertTable","getItems$2","hasClasses","insertNewTable","rowColCountItems","alwaysItems","appearanceItems","alignmentItem","classListItem","TableDialogGeneralTab","styleTDTH","applyDataToElement","onSubmitTableForm","captionElm","open$2","generalPanel","nonAdvancedForm","advancedForm","TableDialog","getSelectionStartFromSelector","getSelectionStartCell","getSelectionStartCellOrCaption","each$3","clipboardRows","eraseTable","cellOrCaption","tableOpt","getTableFromCell","getSize","resizeChange","oldSize","actOnSelection","copyRowSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutRow","mceTableCopyRow","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","func","mceInsertTable","mceTableProps","mceTableRowProps","mceTableCellProps","detached","editable","body$1","ResizeWire","Event","trigger","typeDefs","styles$1","Styles$2","Blocker","layerClass","DragMode","DragSink","DragApi","compare","mutation","mdown","mup","mmove","mout","MouseDrag","InDrag","dataOption","NoDrag","Movement","noDragState","inDragState","throttledDrop","runIfActive","Dragger","Mutation","BarMutation","findClosestContentEditable","resizeBarDragging","BarManager","resizing","hoverTable","getResizer","_dataRow","_dataCol","currentCol","oldX","startAdjust","findClosestEditableTable","hideBars","showBars","beforeResize","afterResize","startDrag","TableResize","createContainer","TableWire","calculatePercentageWidth","enforcePercentage","rawTable","tablePercentage","enforcePixels","getResizeHandler","startW","startRawW","selectionRng","isTable","lazyResize","sz","rawWire","tableHasPercentage","percentW","targetPercentW","newCellSizes_1","newCellSize","none$1","CellLocation","CellNavigation","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","TabContext","Response","Situs","convertToRange","makeSitus","Util","sync","selectRange","detect$5","cellSel","annotations","updateSelection","newSels","clearBeforeUpdate","KeySelection","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","BrTags","moveBottomTo","moveTopTo","getTop$1","getBottom","Carets","getPartialBox","getRangedRect","toCaret","getElemBox","getBoxAt","getEntireBox","Rectangles","JUMP_SIZE","NUM_RETRIES","retry","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","adjustUp","higherCaret","upMovement","adjuster","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","situsFromPoint","newCaret","ieTryDown","ieTryUp","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","platform$2","findSpot","brNeighbour","fromSitus","scan$1","tryCursor","situs","tryAgain","tryAt","otherRetry","ieRetry","handle$2","TableKeys","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","VerticalMovement","findCell","MouseSelection","clearState","selectContents","KeyDirection","isKey","keycode","isUp","isDown","isNavigation","SelectionKeys","isBackward","toRaw","sr","Rect","by","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","getScrollY","rc","keyboard","clearToNavigate","realEvent","InputHandlers","removeClasses","byClass","ephemera","addSelectionClass","removeSelectionClasses","byAttr","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","OtherCells","hasInternalTarget","CellSelection$1","selectionTargets","handlerStruct","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","ns","wrappedEvent","isLeftMouse","isLeftButtonPressed","mouseDown","mouseOver","mouseUp","getDoubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","doubleTap","Selections","getSelectionTargets","changeHandlers","findTargets","resetTargets","onSetupTable","onSetupCellOrRow","onSetupMergeable","onSetupUnmergeable","addButtons","addMenuButton","addToolbars","addContextToolbar","addMenuItems","insertTableAction","tableProperties","deleteTable","rowItems","columnItems","cellItems","addContextMenu","MenuItems","getClipboardRows","setClipboardRows","sugarRows","resizeHandler","insertTable","addTempAttr","Plugin$1","assumeExternalTargets","externalTargets","hasContextToolbar","getLinkList","getDefaultLinkTarget","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","allowUnsafeLinkTarget","useQuickLink","getDefaultLinkProtocol","appendClickRemove","createEvent","initMouseEvent","OpenUrl","hasProtocol","getHref","applyRelTargetRules","isUnsafe","rels","addTargetRules","removeTargetRules","newRels","trimCaretContainers","getAnchorElement","selectedElm","isImageFigure","getAnchorText","anchorElm","isLink","hasLinks","isOnlyTextSelected","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","newRel","updateLink","createLink","linkImageFigure","attachState","unlinkImageFigure","fig","sanitizeList","extractValue","sanitizeWith","extracter","createUi","ListOptions","findTextByValue","catalog","persistentText","hasPersistentText","findCatalog","catalogs","linkSettings","onUrlChange","urlText","urlTitle","onCatalogChange","DialogChanges","delayedConfirm","tryEmailTransform","suggestMailTo","tryProtocolTransform","defaultLinkProtocol","suggestProtocol","DialogConfirms","anchorNodes","AnchorListOptions","ClassListOptions","parseJson","getLinks","extractor","linkList","optItems","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","getLink","getSelectedLink","hasOnlyAltModifier","altKey","metaKey","gotoLink","targetEl","scrollIntoView","gotoSelectedLink","leftClickedOnAHref","setupGotoLinks","toggleActiveState","toggleEnabledState","addShortcut","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","addContextForm","Controls","getGlobal","getTinymce","validEvents","isValidKey","bindHandlers","initEvent","bindModelHandlers","modelEvents","$props","normalizedEvents","$watch","prevVal","outputFormat","$emit","initEditor","$listeners","uuid","now","isTextarea","normalizePluginArray","mergePlugins","initPlugins","inputPlugins","isNullOrUndefined","scriptLoaded","CreateScriptLoader","injectScriptTag","scriptTag","referrerPolicy","reinitialize","ScriptLoader","editorProps","apiKey","cloudChannel","Boolean","tinymceScriptSrc","renderInline","renderIframe","initialise","finalInit","elementId","inlineEditor","Editor","created","watch","mounted","$el","scriptSrc","beforeDestroy","hasAdvTab","hasUploadTab","getPrependUrl","hasDescription","hasImageTitle","hasImageCaption","getImageList","hasUploadUrl","getUploadUrl","hasUploadHandler","getUploadHandler","getUploadBasePath","getUploadCredentials","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","wrapInFigure","figureElm","removeFigure","toggleCaption","normalizeStyle","normalizeCss","setSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","getBorderStyle","isFigure","isImage","getIsDecorative","getAlt","hspace","vspace","isDecorative","getStyleValue","setAlt","figure","updateProp","sugarImage","hasAccessibilityOptions","updateAlt","normalized","mergedCss","compressed","getSelectedImage","splitTextBlock","readImageDataFromSelection","insertImageAtCaret","outerHTML","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","insertOrUpdateImage","isGroup","findEntryDelegate","findEntry","optList","pathJoin","path1","path2","Uploader","defaultHandler","blobInfo","xhr","XMLHttpRequest","withCredentials","credentials","upload","onprogress","json","responseText","basePath","FormData","filename","uploadBlob","isDefaultHandler","makeTab","AdvTab","urlListSanitizer","futureImageList","automaticUploads","prependURL","preUrl","makeItems","imageUrl","imageDescription","imageTitle","imageDimensions","makeTab$1","MainTab","makeTab$2","UploadTab","prevImage","prevAlt","fromImageData","images","fileinput","toImageData","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","uploader","finalize","updateSrcAndSwitchTab","dataUrl","createBlobCache","alertErr","addToBlobCache","changeHandler","closeHandler","makeDialogBody","tabPanel","submitHandler","editorUpload","uploadImagesAuto","blobCache","normalizeCss$1","stylesArg","hasImageClass","toggleContentEditableState","toggleContentEditable","emojiMatches","emoji","lowerCasePattern","keywords","emojisFrom","reachedLimit","addAutocompleter","waitForLoad","listAll","autocompleteApi","insertEmoticon","DEFAULT_ID","getEmoticonDatabaseUrl","pluginUrl","getEmoticonDatabaseId","getAppendedEmoticons","ALL_CATEGORY","categoryNameMap","symbols","people","animals_and_nature","food_and_drink","activity","travel_and_places","user","translateCategory","categories","getUserDefinedEmoticons","userDefinedEmoticons","category","initDatabase","databaseUrl","databaseId","processEmojis","emojis","cats","lib","userEmojis","listCategory","listCategories","hasLoaded","interval","patternName","currentTab","dialogData","updateFilter","searchField","resultsField","getInitialState","actionData","isNull","objAcc","internalFilter","onTrue","onFalse","bifilter","lTrim","rTrim","recurse","Recurse","prevSiblings","nextSiblings","childNodesCount","intoView","alignToTop","scrollIntoViewIfNeeded","isNodeType","isRestrictedNode","getPrototypeOf","matchNodeNames","lowercasedNames","matchStyleValues","cssValue","computed","hasPropValue","propName","propValue","hasAttributeValue","isBogus","isBogusAll","isTextareaOrInput","isDocument","isDocumentFragment","browser$1","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","hasChild","Position$1","module$1","requestAnimationFramePromise","par","asyncValues","asyncValue","par$1","futures","promiseObj","requestAnimationFrameFunc","vendors","featurefill","wrappedSetTimeout","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","debounce","Delay","setEditorInterval","browser$2","webkit","fileApi","windowsPhone","Env","gecko","iOS","caretAfter","documentMode","cacheSuffix","experimentalShadowDom","canHaveCSP","desktop","isArray$1","toArray$1","filter$2","indexOf$1","reduce","iteratee","accumulator","ArrUtils","whiteSpaceRegExp","delim","sp","cn","scn","de","createNS","onCreate","ext","walk","explode","_addCacheSuffix","hasOwn","StyleSheetLoader","maxLoadTime","idCount","loadedStates","_setReferrerPolicy","appendToHead","getElementsByTagName","loadedCallback","errorCallback","passed","failed","isOldWebKit","webKitChunks","wait","testCallback","waitCallback","waitForWebKitLinkLoaded","styleSheet","styleSheets","ownerNode","owningElement","waitForGeckoLinkLoaded","cssRules","sheet","async","defer","contentCssCors","crossOrigin","loadF","unbox","loadAll","urls","namedEntities","baseEntities","reverseEntities","blocks","voids","tableCells","tableSections","headings","listItems","wsElements","lazyLookup","isTable$1","isBr$1","isVoid","isTableSection","isTableCell","isWsPreserveElement","surroundedBySpans","previousIsSpan","nextIsSpan","trimNode","trimmedLength","TrimNode","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","nativeDecode","buildEntitiesLookup","radix","entity","fromCharCode","encodeRaw","encodeAllRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","decode","Entities","mapCache","dummyObj","makeMap$2","extend$1","explode$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","attributesOrder","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","validStyles","invalidStyles","schemaItems","whiteSpaceElementsMap","selfClosingElementsMap","shortEndedElementsMap","boolAttrMap","validClasses","blockElementsMap","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","textInlineElementsMap","patternElements","customElementsMap","createLookupTable","extendWith","verify_html","valid_elements","valid_styles","invalid_styles","valid_classes","patternToRegExp","addValidElements","validElements","ei","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","validValues","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","thead","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getTextInlineElements","getShortEndedElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","getWhiteSpaceElements","isValidChild","attrPatterns","getCustomElements","support","Expr","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","documentIsHTML","rbuggyQSA","rbuggyMatches","contains$3","encodingItems","rgbRegExp","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","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","eventExpandoPrefix","mouseEventRe","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","hasIsDefaultPrevented","returnTrue","returnFalse","addEvent","attachEvent","removeEvent","detachEvent","getTargetFromShadowDom","composedPath","fix","originalEvent","srcElement","eventDoc","cancelBubble","isImmediatePropagationStopped","bindOnReady","eventUtils","domLoaded","isDocReady","readyState","readyHandler","EventUtils","expando","hasMouseEnterLeave","hasFocusIn","callbackList","fakeName","nativeHandler","defaultNativeHandler","executeHandlers","namesList","mouseEnterLeave","currentTarget","relatedTarget","eventMap","parentWindow","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","push_native","indexOf$2","booleans","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","seed","nid","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","hasCompare","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","preFilter","excess","unquoted","nodeNameSelector","operator","check","what","ofType","xml","outerCache","useCache","pseudo","setFilters","matched","matcher","unmatched","lang","elemLang","hash","tabIndex","selectedIndex","even","odd","lt","gt","nth","radio","password","tokens","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","elems","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","filters","parseOnly","soFar","preFilters","token","compiled","push$1","slice$1","rquickExpr$1","skipUniques","isDefined","isString$1","isWindow","fragDoc","frag","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","makeArray","lastParent","newWrapper","numericCssMap","booleanMap","propFix","for","cssFix","float","attrHooks","cssHooks","DomQueryConstructor","inArray$1","whiteSpaceRegExp$1","trim$2","each$4","hook","removeAttr","camel","dashed","prependTo","replaceWith","wrapInner","existingClassName","classState","object","until","siblingName","firstSibling","wrappedResult","parentsUntil","nextUntil","prevUntil","overrideDefaults","TreeWalker","prev2","findSibling","findPreviousNode","startName","each$5","grep$1","simpleSelectorRe","whiteSpaceRegExp$2","setupAttrHooks","keepValues","keep_values","keepUrlHook","updateInternalStyleAttr","findNodeIndex","lastNodeType","DOMUtils","_this","addedStyles","counter","stdMode","boxModel","boundEvents","ownEvents","getElementsByName","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","clone_1","root_element","getViewPort","argWin","update_styles","setStyles","selectorVal","_findSib","getPrev","setHTML","canHaveHTML","newElm","outHtml","keepChildren","$node","removeAllAttribs","removeAttributeNode","addStyle","styleElm","loadCSS","cls","uniqueId","getOuterHTML","setOuterHTML","reference","referenceNode","oldElm","replaceChild","attrNode","findCommonAncestor","pe","rgbVal","isNonEmptyElement","brCount","bogusVal","splitElm","replacementElm","bef","aft","pa","rv","getContentEditableParent","dumpRng","DOMUtils$1","each$6","grep$2","QUEUED","LOADING","LOADED","FAILED","scriptLoadedCallbacks","queueLoadedCallbacks","loading","loadScript","onreadystatechange","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","language","wrappedLanguages","addOn","addOnConstructor","createUrl","baseUrl","resource","addComponents","pluginName","loadDependencies","addOnUrl","deps","urlString","PluginManager","ThemeManager","AddOnManager$1","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","findMarkers","isAnnotation","findAll","nodesAlready","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","identifyParserNode","spans","persistent","ZWSP","isZwsp","trim$3","Zwsp","isElement$2","isText$2","isCaretContainerBlock","isCaretContainerInline","isCaretContainer","hasContent","insertInline","textNode","endsWithCaretContainer","splitText","startsWithCaretContainer","isBeforeInline","isAtStart","isAfterInline","isAtEnd","createBogusBr","insertBlock","blockNode","trimBogusBr","brs","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","isContentEditableTrue$1","isContentEditableFalse$1","isBr$2","isText$3","isInvalidTextElement","isAtomicInline","isTable$2","isCaretContainer$1","isCaretCandidate","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic","isEditableCaretCandidate","isEqual","rect1","rect2","isValidOverflow","overflowY","containsXY","getSelectedNode","extendingChars","isExtendingChar","someIf","slice$2","Predicate","isElement$3","isCaretCandidate$1","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$3","resolveIndex","isWhiteSpace","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","clientRect","nbsp$1","getBoundingClientRectWebKitText","ec","so","eo","newRng","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","fromRangeStart","fromRangeEnd","pos1","pos2","isTextPosition","isElementPosition","HDirection","CaretPosition$1","isText$5","isBogus$1","nodeIndex$1","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","outputOffset","resolvePathItem","findTextPosition","dataLen","targetOffset","resolve$1","trimEmptyTextNode","insertFragment","rangeInsertNode","isContentEditableFalse$2","getNormalizedTextOffset","trimmedOffset","getPoint","getLocation","findIndex$2","moveEndPoint","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","GetBookmark","getUndoBookmark","TextWalker","TextSeeker","isBlockBoundary","newOffset","forwards","CARET_ID","isCaretNode","getParentCaretContainer","isElement$4","isText$6","removeNode","getNodeValue","setNodeValue","trimCount","trimmedText","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","CaretContainerRemove","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","contentCss","content_css","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","browser$3","isContentEditableFalse$3","isTableCell$1","getAbsoluteClientRect","scrollX","scrollY","rootRect","trimInlineCaretContainers","contentEditableFalseNodes","deleteData","FakeCaret","cursorInterval","lastVisualCaret","rootBlock","caretBlock","caretState","startBlink","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$4","isBlockLike","isCaretContainer$2","isCaretContainerBlock$1","isElement$5","isCaretCandidate$2","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","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","rootContentEditableFalseElm","CaretWalker","Backwards","walkToPositionIn","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","CaretFinder","firstPositionIn","lastPositionIn","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","addBogus","resolveCaretPositionBookmark","insertZwsp","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","appendData","resolvePaths","resolveId","endPos","spos","epos","resolveIndex$1","resolve$2","ResolveBookmark","getBookmark$1","isBookmarkNode$1","Bookmarks","is$2","expected","isNbsp","isWhiteSpace$1","isContent","isNode","isInlineBlock","moveStart","isWhiteSpaceNode","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","isEmptyTextNode","replaceVars","vars","isEq","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$1","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","textOffset","spaceResult","findSelectorEndPoint","curFormat","findBlockEndPoint","scopeRoot","findParentContainer","block_expand","expandRng","includeTrailingSpace","startPoint","endPoint","each$7","clampToExistingChildren","getEndChild","walk$1","collectSiblings","findEndPoint","walkBoundary","siblings_1","RangeWalk","isZeroWidth","wrapName","applyWordGrab","makeAnnotation","eDoc","decorate","master","_d","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","Annotator","annotationChanged","whiteSpaceRegExp$3","typeLookup","walk$2","isEmptyTextNode$1","Node$1","selfAttrs","cloneAttrs","selfAttr","refNode","isValidPrefixAttrName","isInvalidUri","allow_html_data_urls","findEndTagIndex","tokenRegExp","shortEndedElements","isConditionalComment","findCommentEndIndex","lcHtml","endIfIndex","endCommentRegexp","checkBogusAttribute","regExp","attrString","SaxParser","fix_self_closing","pi","doctype","endRegExp","attrList","textData","isInternalElement","removeInternalElements","fillAttrsMap","isShortEnded","elementRule","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","processHtml","anyAttributesRequired","selfClosing","attrRegExp","fixSelfClosing","filteredUrlAttrs","scriptUriRegExp","parsingMode","processEndTag","processComment","processMalformedComment","startTag","parseAttribute","val3","attrRule","trimRegExp","decodeURIComponent","self_closing_elements","remove_internals","bogusValue","isValidCdataSection","preserve_cdata","findEndTag","documentFocusInHandler","SaxParser$1","trimHtml","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","bogusAllRegExp","getTempAttrs","trimExternal","TrimHtml","defaultFormat","trimEmptyContents","emptyRegExp","getContentFromBody","getInner","no_events","makeMap$3","Writer","indent","indentBefore","indentAfter","htmlOutput","indent_before","indent_after","entity_encoding","element_format","Serializer","8","7","10","11","sortedAttrs","findMatchingNodes","nodeFilters","attributeFilters","nodeMatches","attrMatches","name_2","filter$3","browser$4","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","getBookmark$2","bookmarkToNativeRng","newBookmark","storeNative","SelectionBookmark","isEditorUIElement","FocusManager","isManualNodeChange","selectionChange","registerPageMouseUp","throttledStore","mouseUpPage","registerFocusOut","registerMouseUp","registerEditorEvents","SelectionRestore","isEditorUIElement$1","isEditorContentAreaElement","isUIElement","customSelector","custom_ui_selector","getActiveElement","editorManager","focusedEditor","blurredEditor","activeEditor","unregisterDocumentEvents","FocusController","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","caretPos","focusBody","hasElementFocus","hasIframeFocus","iframeElement","hasInlineFocus","rawBody","hasUiFocus","hasFocus$1","hasEditorOrUiFocus","focusEditor","quirks","refreshContentEditable","bookmarkRng","contentEditableHost","activateEditor","skipFocus","EditorFocus","defaultFormat$1","isTreeNode","moveSelection","setEditorHtml","setContentString","forcedRootBlockName","padd","forced_root_block_attrs","isRootContent","setContentTree","getNodeFilters","getAttributeFilters","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","DOM$3","restoreOriginalStyles","orgDisplay","safeDestroy","clearDomReferences","contentAreaContainer","formElement","restoreForm","_mceOldSubmit","formEventDelegate","_selectionOverrides","save","is_removing","unbindAllNativeEvents","hasHiddenInput","automatic","destroyed","_beforeUnload","theme","deep$1","sectionResult","deviceDetection","legacyMobilePlugins","defaultTouchSettings","table_grid","object_resizing","normalizePlugins","pluginNames","trimmedPlugins","filterLegacyMobilePlugins","extractSections","getSection","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","font_size_legacy_values","forced_root_block","hidden_input","inline_styles","convert_fonts_to_spans","getDefaultMobileSettings","defaultMobileSettings","toolbar_sticky","defaultPhoneSettings","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","combinePlugins","forcedPlugins","processPlugins","isMobileDevice","defaultOverrideSettings","forced_plugins","desktopPlugins","mobileConfig","mobilePlugins","platformPlugins","combinedPlugins","isOnMobile","combineSettings","defaultSettings","defaultDeviceSettings","mobile","extendedSettings","getEditorSettings","getFiltered","getParamObject","CreateIconManager","iconPack","IconManager","rawElm","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect$1","isInsideElementContentArea","bodyElm","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","EditorView","unimplemented","NotificationManager","getImplementation","getTopNotification","addNotification","closeNotification","otherNotification","getNotifications","serviceMessage","service_message","WindowManagerImpl","getParams","setParams","dialogs","funcBind","fireOpenEvent","fireCloseEvent","addDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","pluginInitError","initError","ErrorReporter","isContentCssSkinName","getContentCssUrls","contentCssFile","appendContentCssFromSettings","BookmarkManager","BookmarkManager$1","isXYWithinRange","RangePoint","VK","END","HOME","modifierPressed","isContentEditableFalse$6","isContentEditableTrue$2","getContentEditableRoot","ControlSelection","selectedElmGhost","resizeHelper","resizeHandles","selectedHandle","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","editableDoc","rootDocument","rootElement","nw","ne","sw","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTarget","isResizable","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","endGhostResize","setSizeProp","showResizeRect","targetWidth","targetHeight","hideResizeRect","unbindResizeHandleEvents","unSelectabe","updateResizeRect","startElm","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","handleMSControlSelect_1","delayedSelect","throttledUpdateResizeRect","composing","excludeFromDescend","fireScrollIntoViewEvent","scrollEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","cleanup","createMarker","elementMarker","withMarker","preserveWith","_s","applyWithMarker","withScrollEvents","startElement","endElement","scrollToMarker","intoWindowIfNeeded","viewportBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","elementIntoView","scroller","rangeIntoView","ScrollIntoView","scrollElementIntoView","scrollRangeIntoView","hasCeProperty","findParent","findClosestIeRange","createTextRange","moveToElementText","moveToPoint","moveOutOfContentEditableFalse","parentElement","pointDoc","CaretRangeFromPoint","processRanges","EventProcessRanges","dropLast","parentsUntil$1","parents$1","parentsAndSelf","Parents","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","moveEndPoint$1","hasAnyRanges","getSel","tableModel","cellPosition","fillout","y2","x2","cellExists","skipCellsX","findElementPos","extractRows","sx","sy","ey","subTable","createDomTable","tableElement","modelRowsToDomRows","fromDom$1","toDom","subsection","SimpleTableModel","getSelectedNodes","hasMultipleRanges","MultiRange","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","rangeCells","getCellsFromEditor","TableCellSelection","findParentListContainer","getFullySelectedListWrappers","listCont","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","commonAncestorContainer","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","cloneContents","getParentTable","getTableFragment","selectedTableCells","fullTableModel","sectionedTableModel","getSelectionFragment","FragmentReader","bin","getHtmlContent","tmpElm","getContent$1","GetSelectionContent","isEq$1","rng1","RangeCompare","findParent$1","hasParent","hasParentWithName","isTable$3","isTableCell$2","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normRng","NormalizeRange","prependData","insertData","rngSetContent","deleteContents","prevText","nextText","oldLength","setupArgs","setContent$1","createContextualFragment","SetSelectionContent","getEndpointElement","real","getStart$2","skipEmptyTextNodes","getNode$1","endElm","select$1","deleteFromCallbackMap","newCallbacks","SelectorChanged","selectorChangedData","currentSelectors","matchedSelectors","isNativeIeSelection","isAttachedToDom","isValidRange","Selection$1","bookmarkManager","controlSelection","selectedRange","explicitRange","getEnd$1","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","ieRange","setNode","getSelectedBlocks$1","anchorRange","focusRange","selectorChanged","getScrollContainer","scrollContainer","placeCaretAt","removeAttrs","addFontToSpansFilter","domParser","fontSizes","face","addStrikeToSpanFilter","addFilters","LegacyFilter","paddEmptyNode","brPreferred","padd_empty_with_br","isPaddedWithNbsp","hasOnlyChild","isPadded","isEmpty$1","nonEmptyElements","whitespaceElements","isLineBreakNode","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","addNoOpener","allow_unsafe_link_target","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","makeMap$4","each$8","explode$2","extend$2","DomParser","matchedNodes","matchedAttributes","root_name","fixInvalidChildren","newParent","tempNode","childNode","nonSplitableElements","textBlockElements","filterNode","fi","fl","isInWhiteSpacePreservedElement","invalidChildren","getRootBlockName","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","addRootBlocks","rootBlockNode","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","newNode","attrFiltersLen","htmlParser","internalName","hasChildren","trimTrailingBr","brNode1","brNode2","DomSerializerFilters","preProcess","impl","oldDoc","implementation","createHTMLDocument","importNode","shouldFireEvent","hasEventListeners","DomSerializerPreProcess","postProcess","outArgs","getHtmlFromNode","parseHtml","parserArgs","serializeNode","htmlSerializer","toHtml","DomSerializer","addRules","setRules","Serializer$1","domSerializer","blobUriToBlob","rejectWithError","responseType","parseDataUri","uriParts","uriToBlob","Conversions","imageToBlobInfo","getByUri","dataUri","findFirst","cachedBlobInfo","getAllImages","ImageScanner","uploadStatus","cachedPromises","isUploaded","promises","imageInfo","newPromise","pendingPromises","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","markPending","closeNotification_1","markUploaded","removeFailed","pendingUploadBlobInfo","uploadBlobs","blobInfos","isPending","UploadStatus","PENDING","UPLOADED","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","count$1","rnd","Uuid","BlobCache","mimeToExt","toBlobInfo","removeByUri","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replaceUrlInUndoStack","fragments","replaceImageUri","uploadImages","scanForImages","imageInfos","filteredResult","uploadInfo","isValidDataUriImage","dataImgFilter","addFilter","resultItem","replaceBlobUris","source_view","getLastChildren$1","rawNode","removeTrailingBr","allBrs","fillWithPaddingBr","isPaddingContents","isPaddedElement","trimBlockTrailingBr","lastChildPrevSibling","PaddingBr","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","onmatch","matchAll","matchedFormatNames","checkedMap","defaultBlock","split$1","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","whitespaceOffset","hasWhitespacePreserveParent","isContent$1","isBookmark","isBogus$2","isBogusAll$1","isEmptyNode","skipBogus","isEmpty$2","Empty","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","DeleteElement","ZWSP$1","CARET_ID$1","getEmptyCaretContainers","isCaretContainerEmpty","findFirstTextNode","createCaretContainer","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","caretNode","disableCaretContainer","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","postProcessHooks","filter$4","each$9","addPostProcessHook","hooks","postProcess$1","isPre","hasPreSibling","pre","joinPre","pre1","pre2","each$a","ElementUtils","compareObjects","obj1","obj2","MCE_ATTR_RE","each$b","isEq$3","isTableCell$3","isChildOfInlineParent","lastIdx","wrap$3","wrapWithSiblings","matchName$1","isColorFormatAndAnchor","removeNode$1","rootBlockElm","forcedRootBlock","list_block","compareNode","stylesModified","remove_similar","valueOut","findFormatRoot","formatRoot","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","lastContentEditable","removeRngStyle","textDecoration","ceFalseOverride","each$c","isElementNode","findElementSibling","mergeSiblingsNodes","tmpSibling","elementUtils","processChildElements","hasStyle","applyStyle","unwrapEmptySpan","processTextDecorationsAndColor","mergeTextDecorationsAndColor","mergeBackgroundColorAndFontSize","backgroundColor","mergeSubSup","mergeSiblings","merge_siblings","clearChildStyles","clear_child_styles","mergeWithChildren","mergeWithParents","merge_with_parents","createRange$1","normalizeBlockSelectionRange","newEndPos","normalize$2","RangeNormalizer","each$d","isElementNode$1","setElementFormat","onformat","styleVal","applyNodeStyle","applyRngStyle","nodeSpecific","wrapElm","currentWrapElm","childCount","getChildCount","getChildElementNode","mergeStyles","curSelNode","registeredFormatListeners","currentFormats","updateAndFireChangeCallbacks","formatChangeData","formatsList","newFormats","matchedFormats","remainingFormats","filterRemainingFormats","addListeners","formatChangeItems","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","textAlign","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontsize","fontsize_class","blockquote","subscript","superscript","removeformat","DefaultFormats","FormatRegistry","VDirection","each$e","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","parentRequired","ancestorName","siblingElm","parseSelectorItem","$0","$3","$4","parseSelector","previewFrag","previewElm","parentFontSize","previewStyles","previewCss","preview_styles","removeVars","numValue","FormatShortcuts","Formatter","formatChangeState","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","Diff","getOuterHtml","createFragment$1","insertAt","removeAt","applyDiff","currentFragments","Fragments","undoLevelDocument","lazyTempDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$4","Levels","isUnlocked","locks","setTyping","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange","addUndoLevel","currentLevel","lastLevel","bm","custom_undo_redo_levels","setDirty","callback1","callback2","hasUndo","hasRedo","registerEvents$1","isFirstTypedCharacter","addNonTypingUndoLevel","isDirty","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","isForcedRootBlockFalse","firstElementChild","updatePlaceholder","showPlaceholder","isPlaceholderShown","debounceLongpress","isEqualNode","TouchEvents","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","restoreSelection","rootNodeName","ForceBlocks","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertInline$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","renderCaret","BoundaryCaret","strongRtl","hasStrongRtl","isInlineTarget","isRtl$1","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","InlineUtils","evaluateUntil","fns","LazyEvaluator","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","prevPos","nextPos","isValidLocation","readLocation","getName","outside","isEq$5","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation","BoundaryLocation","prevLocation","nextLocation","hasSelectionModifyApi","modify","moveByWord","WordSelection","setCaretPosition","isFeatureEnabled","inline_boundaries","setSelected","renderCaretLocation","findLocation$1","toggleInlines","selectedInlines","targetInlines","safeRemoveCaretContainer","renderInsideInlineCaret","inlines","moveWord","setupSelectedState","moveNextWord","movePrevWord","BoundarySelection","getNodeClientRects","toArrayWithNode","BreakType","findUntil","walkUntil","isAboveFn","isBeflowFn","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","positionsUntil","isBelowFn","caretWalker","getClientRect","isAboveLine","isLine","isContentEditableFalse$7","findNode$1","distanceToRectLeft","distanceToRectRight","isInside","findClosestClientRect","oldClientRect","oldDistance","newDistance","walkUntil$1","findLineNodeRects","targetNodeRect","checkPosFn","lineRects","getFakeCaretTargets","caretInfo","closestCaret","closestNodeRect","contentEditableFalseNodeRects","targetNodeRects","isContentEditableTrue$3","isContentEditableFalse$8","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","caretRange","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBeforeImageBlock","isAfterImageBlock","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","customEventRootDelegates","beforeUnloadDelegate","walk$3","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","newPos","lastPos","lastRect","lastDist","newDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","isAtFirstLine","isAtLastLine","getPositionsAbove","getPositionsBelow","getFirstLinePositions","getLastLinePositions","isContentEditableFalse$9","getSelectedNode$1","moveToCeFalseHorizontally","getNextPosFn","isBeforeContentEditableFalseFn","rangeIsInContainerBlock","nextCaretPosition","peekCaretPosition","moveToCeFalseVertically","walkerFn","linePositions","nextLinePositions","closestNextLineRect","caretClientRect","dist1","dist2","contentEditableFalseNode","caretPositions","exitPreBlock","getNextVisualCaretPosition","getPrevVisualCaretPosition","getHorizontalRange","newRange","getVerticalRange","moveH","moveV","isCefPosition","moveToLineEndPoint","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","isAbove$1","isBelow$1","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","moveToRange","hasNextBreak","lineInfo","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","getClosestAbovePosition","getClosestBelowPosition","getTable","renderBlock","navigateVertically","moveH$1","moveV$1","rangeBefore","insertElement","insertBr","insertBlock$1","insertEmptyLine","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","rootBlockAttrs","moveV$2","defaultPatterns","matchesEvent","match$1","MatchKeys","executeKeydownOverride","ArrowKeys","isBeforeRoot","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","fromPos","firstPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","DeleteUtils","blockPosition","blockBoundary","getBlockPosition","isDifferentBlocks","hasSameParent","parent1","parent2","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$3","BlockMergeBoundary","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","fromBlock","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","MergeBlocks","BlockBoundaryDelete","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange","backspaceDelete$1","BlockRangeDelete","isBr$5","parentBlocks","isBeforeBr","isAfterBr","findPreviousBr","findNextBr","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","deleteAction","getContentEditableAction","read$4","deleteElement$1","hideFakeCaret","getAncestorCe","getContentEditableRoot$1","deleteOffscreenSelection","hasCefAncestor","paddEmptyElement","backspaceDelete$2","CefDelete","trimEmptyTextNode$1","deleteContentAndShowCaret","deleteCefBoundaryText","backspaceDelete$3","CefBoundaryDelete","isFeatureEnabled$1","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope$1","backspaceDeleteCollapsed","toPosition","backspaceDelete$4","BoundaryDelete","getParentInlines","hasOnlyOneChild","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret","backspaceDelete$5","InlineFormatDelete","tableCellRng","tableSelection","removeTable","emptyCells","isRootFromElement","getClosestCell$1","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableCells","getCellRangeFromStartTable","endCell","partialSelection","isWithinSameTable","getCellRng","getTableSelectionFromCellRng","getTableSelectionFromRng","getCellIndex","getSelectedCells","getActionFromRange","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange$1","getParentCell","deleteBetweenCells","fromCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","deleteCaret$1","backspaceDelete$6","TableDelete","deleteCaret$2","backspaceDelete$7","PageBreakDelete","isEditable$1","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentUnit","indentValue","navigateIgnoreEmptyTextNodes","getClosestBlock","isAtBeforeAfterBlockBoundary","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","backspaceDelete$8","_caret","_forward","Outdent","executeKeydownOverride$1","executeKeyupOverride","DeleteBackspaceKeys","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot","editableRoot","getParentBlock$2","getParentBlockName","isListItemParentBlock","NewLineUtils","hasFirstChild","hasParent$1","isListBlock","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","createNewBlock","newBlockName","InsertLi","trimZwsp","isEmptyAnchor","isTableCell$4","emptyBlock","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","getEditableRoot$1","applyAttributes","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","wrapSelfAndSiblingsInDefaultBlock","addBrToBlockIfNeeded","parentBlockName","containerBlockName","isAfterLastNodeInContainer","clonedNode","textInlineElements","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","InsertBlock","hasRightSideContent","scrollToBr","brElm","moveSelectionToBr","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr$1","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","insert$2","anchorLocation","InsertBr","shouldInsertBr","shouldBlockNewLine","ContextSelectors","newLineAction","shouldBlockNewLine$1","isBrMode","requiredState","brMode","inListBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre$1","inBrContext","canInsertIntoEditableRoot","rootEditable","match$2","predicates","isMatch","getAction$1","NewLineAction","insert$3","InsertNewLine","handleEnterKeyEvent","EnterKey","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","isInMiddleOfText","getClosestBlock$1","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","afterPos","needsToBeNbsp","isNbspAt","hasNbsp","normalizeNbspMiddle","chars","normalizeNbspAtStart","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","normalizeNbsps","normalizeNbspsInEditor","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","setSelection$1","insertSpaceOrNbspAtSelection","executeKeydownOverride$2","SpaceKey","findBlockCaretContainer","removeIeControlRect","showBlockCaretContainer","blockCaretContainer","handleBlockContainer","CaretContainerInput","browser$5","setupIeInput","keypressThrotter","isComposing","executeKeydownOverride$3","setup$f","HomeEndKeys","setup$g","KeyboardOverrides","NodeChange","lastPath","nativeRng","fakeRng","isSameElementPath","disable_nodechange","currentPath","preventSummaryToggle","filterDetails","setup$h","isTextBlockNode","normalizeSelection$1","setup$i","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","MousePosition","isContentEditableFalse$a","isContentEditableTrue$4","isDraggable","isValidDropTarget","dragElement","cloneElement","cloneElm","createGhost","clonedElm","ghostElm","appendGhostToBody","moveGhost","overflowX","removeElement","isLeftMouseButtonPressed","hasDraggableElement","applyRelPos","relX","start$1","ceElm","elmPos","relY","ghost","throttledPlaceCaretAt","dragging","targetPos","getRawTarget","targetClone_1","targetClone","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","blockIeDrop","realTarget","DragDropOverrides","setup$j","renderFocusCaret","CefFocus","isContentEditableTrue$5","isContentEditableFalse$b","getContentEditableRoot$2","SelectionOverrides","selectedContentEditableNode","fakeCaret","realSelectionId","isFakeSelectionElement","getRealSelectionElement","setRange","getRange","contentEditableRoot","removeContentEditableSelection","handleTouchSelect","setContentEditableSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","normalizeShortEndedElementSelection","isPasteBin","isRangeInCaretContainer","clipboardData","realSelectionElement","clearData","outerText","isWithinCaretContainer","$realSelectionContainer","origTargetClone","nodeElm","Quirks","isGecko","isWebKit","mceInternalUrlPrefix","mceInternalDataType","setEditorCommandState","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","queryCommandSupported","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","inputMethodFocus","removeHrOnBackspace","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","selection_1","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","DOM$4","appendStyle","createParser","autoFocus","auto_focus","moveSelectionToFirstCaretPosition","bindPendingEventDelegates","execCallback","getStyleSheetLoader","initContentBody","skipWrite","contentCssText","orgVisibility","iframeHTML","bodyEl","hex_colors","force_hex_style_colors","annotator","_nodeChangeDispatcher","browser_spellcheck","gecko_spellcheck","spellcheck","protect","startContent","content_style","InitContentBody","DOM$5","relaxDomain","ifr","domain","hostname","bodyUuid","domainRelaxUrl","createIframeElement","customAttrs","frameBorder","allowTransparency","createIframe","isDomainRelaxed","boxInfo","hidden","InitIframe","DOM$6","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initIcons","iconPackName","currentIcons","defaultIcons","loadIcons","svgData","addIcon","initTheme","renderFromLoadedTheme","renderFromThemeFunc","iframeHeight","createThemeFalseResult","renderThemeFalseIframe","renderThemeFalse","renderThemeUi","Init","DOM$7","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","url_1","loadTheme","themeUrl","theme_url","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","urlMeta","loadPlugins","depPlugin","url_2","resetContent","triggerSave","encoding","set_dirty","hasOnlyOneChild$1","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems$1","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","newCaretPos","findLastOf","insertMiddle","insertBefore$1","insertAfter$1","insertAtCaret","liTarget","liElms","BEGINNING","isAt","InsertList","isAfterNbsp","trimOrPadLeftRight","hasSiblingText","trimNbspAfterDeleteAndPadValue","isTableCell$5","selectionSetContent","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","root_1","elementUtils_1","testNode","markFragmentElements","umarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","parentEditableFalseElm","nextRng","getContentEditableFalseParent","findNextCaretRng","insertHtmlAtCaret","bookmarkHtml","caretElement","processValue","insertAtCaret$1","InsertContent","nativeCommand","deleteCommand","forwardDeleteCommand","DeleteCommands","ancestor$3","legacyPropNames","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","getComputedFontProp","getFontProp","FontInfo","getFontSize","getFontFamily","findFirstCaretElement","isRangeAtStartOfNode","getCaretElement","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","each$f","map$3","inArray$2","EditorCommands","setupCommands","customCommand","skip_focus","addCommands","commandList","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","selectionBookmark","queryCommandEnabled","listParent","editingHost","alignStates","Undo","Redo","nativeEvents","EventDispatcher","bindings","toggleEvent","isNative","beforeFire","wrappedCallback","bindingName","hi","getEventDispatcher","_eventDispatcher","toggleNativeEvent","Observable","dispatcherArgs","internalContentEditableAttr","switchOffContentEditableTrue","switchOnContentEditableTrue","removeFakeSelection","restoreFakeSelection","toggleReadOnly","registerFilters","registerReadOnlyContentFilters","isClickEvent","isInAnchor","preventReadOnlyEvents","registerReadOnlySelectionBlockers","DOM$8","getEventTarget","event_root","eventRoot","isListening","fireEvent","bindEventDelegate","eventRootElm","delegates","editors","EditorObservable","_pendingNativeEvents","defaultModes","switchToMode","activeMode","availableModes","oldMode","activate","deactivate","editorReadOnly","registerMode","design","each$g","explode$3","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","desc","cmdFunc","createShortcut","parseShortcut","charCode","addSidebar","each$h","trim$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","URI","baseUri","isProtocolRelative","toAbsPath","urlMatch","userInfo","uriComponents","pathname","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","setProgressState","initialContent","oldState","urlconverter_callback","visual_table_class","visual_anchor_class","_scanForImages","DOM$a","explode$4","each$j","extend$4","instanceCounter","boundGlobalEvents","legacyEditors","isValidLegacyKey","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","isQuirksMode","compatMode","majorVersion","minorVersion","releaseDate","i18n","preInit","tinyMCEPreInit","srcScript","currentScript","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","isInvalidInlineTarget","createId","editor_deselector","editor_selector","provideResults","initEditors","initCount","createEditor","existingEditor","addI18n","RangeUtils","normalizedRng","compareRanges","getCaretRangeFromPoint","extendClass","initializing","RangeUtils$1","awaiter","resolveCb","rejectCb","tasks","resultFns","loadErrMsg","runErrMsg","task","waiter","Resource","round$2","relativePosition","targetW","targetH","findBestRelativePosition","constrainRect","intersect","x1","y1","fixedSize","underflowX1","underflowY1","overflowX2","overflowY2","cx2","cy2","fromClientRect","each$k","extend$5","Class","member","_super","mixins","mixin","Mixins","dummy","createMethod","Methods","Properties","Statics","Defaults","min$1","max$1","round$3","Color","rgb2hsv","hsvToRgb","toRgb","toHsv","hexCode","JSONUtils","JSONP","XHR","ready","success_scope","error_scope","overrideMimeType","content_type","crossDomain","setRequestHeader","requestheaders","extend$6","JSONRequest","sendRPC","ecb","scb","xhrArgs","ty","removeItem","configurable","enumerable","LocalStorage","publicApi","geom","isMac","exportToModuleLoaders","exportToWindowGlobal","tinyMCE","punctuationStr","regExps","aletter","midnumlet","midletter","midnum","lf","newline","katakana","extendnumlet","punctuation","characterIndices","ALETTER","MIDNUMLET","MIDLETTER","MIDNUM","NUMERIC","CR","LF","NEWLINE","EXTEND","FORMAT","KATAKANA","EXTENDNUMLET","AT","OTHER","SETS","EMPTY_STRING","PUNCTUATION","WHITESPACE","SETS$1","setsLength","memoize","classify","memoized","isWordBoundary","prevType","nextNextType","nextType","EMPTY_STRING$1","WHITESPACE$1","PUNCTUATION$1","isProtocol","findWordEnd","findUrlEnd","peakedWord","findWords","sChars","characterMap","word","includeWhitespace","includePunctuation","startOfWord","endOfWord","endOfUrl","getDefaultOptions","getWords","filteredChars","extractedChars","getWords$1","isNewline","txt","treeWalker","strLen","countWords","countCharacters","countCharactersWithoutSpaces","createBodyCounter","createSelectionCounter","createBodyWordCounter","getWordCount","getCharacterCount","getCharacterCountWithoutSpaces","getCount","fireWordCountUpdate","charactersWithoutSpaces","updateCount","debouncedUpdate","Content","editorContent"],"mappings":"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EAAM2lH,GAAS1rC,MAAK,SAAU+sC,GACrD,OAAOA,EAAQx8F,MAAM,KAAK,MAG9B,SAASy8F,IACP,OAAOR,EAAUxsC,KAAKipC,IAExB,MAAO,CACLyD,QAASA,EACTd,OAAQA,EACRC,UAAWA,EACXc,SAAUA,EACVC,eAAgBA,EAChBC,kBAAmBA,EACnBC,iBAAkBA,EAClBE,SAAUA,GAGd,SAASC,GAASl7F,GAChB,OAAOk6F,GAAcl6F,GAAMiuD,MAAK,SAAUwqC,GACxC,OAAO+B,GAASR,GAAah6F,GAAOA,EAAMy4F,MAG9C,SAAS0C,GAAWx7B,EAAQ3rF,GAC1B,OAAO0lH,GAAa/5B,EAAQ3rF,GAAMi6E,MAAK,SAAUjuD,GAC/C,OAAOw6F,GAASzC,GAAUnpH,QAAQ+wF,GAAS3/D,EAAM2/D,EAAOm6B,gBAI5D,IAAIsB,GAAoB,SAAUp7F,GAChC,OAAOk7F,GAASl7F,IAGlB,SAASq7F,GAAQ5tH,EAAOwuC,EAAKtS,GAC3B,IAAI2xF,EAA+B,kBAAV7tH,EAAqB87B,WAAW97B,GAASA,EAMlE,OALI6tH,EAAc3xF,EAChB2xF,EAAc3xF,EACL2xF,EAAcr/E,IACvBq/E,EAAcr/E,GAETq/E,EAET,SAASC,KACP,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,GAGJ,IAAIC,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,KAC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","file":"js/chunk-e0302b0a.d8dacd00.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.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var noop = function () {\n };\n var noarg = function (f) {\n return function () {\n return f();\n };\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var 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 () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\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 toOption = function () {\n return Option.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 toOption: toOption\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 toOption: Option.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 typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('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]) !== true) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.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 find = 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 Option.some(x);\n }\n }\n return Option.none();\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 Option.some(i);\n }\n }\n return Option.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 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 head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(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 Option.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 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 Option.some(x);\n }\n }\n return Option.none();\n };\n var values = function (obj) {\n return mapToArray(obj, function (v) {\n return v;\n });\n };\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.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 argLength = arguments.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 args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\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 if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.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 = new Array(arguments.length);\n for (var i = 0; i < objects.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 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$2 = 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$2,\n mapError: mapError,\n fold: fold\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 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 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$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(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(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(obj, key));\n };\n var optionDefaultedAccess = function (obj, key, fallback) {\n var opt = get(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(Option.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(Option.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 var keys$1 = keys(obj);\n return filter(keys$1, function (k) {\n return hasNonNullableKey(obj, k);\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 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(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(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$1(branches, objOf));\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 var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.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 || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.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: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\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 edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\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 isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current),\n isChromeOS: isOS(chromeos, current)\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 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 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 if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === 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 trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\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 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 domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\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$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\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 Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = detect$3().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n\n var ancestor = function (scope, transform, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.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 Option.none();\n };\n var closest = function (scope, transform, isRoot) {\n var current = transform(scope);\n return current.orThunk(function () {\n return isRoot(scope) ? Option.none() : ancestor(scope, transform, isRoot);\n });\n };\n\n var isSource = function (component, simulatedEvent) {\n return eq(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', constant(true)),\n defaulted$1('abort', constant(false)),\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: constant(true),\n abort: constant(false),\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 touchstart = constant('touchstart');\n var touchmove = constant('touchmove');\n var touchend = constant('touchend');\n var touchcancel = constant('touchcancel');\n var mousedown = constant('mousedown');\n var mousemove = constant('mousemove');\n var mouseout = constant('mouseout');\n var mouseup = constant('mouseup');\n var mouseover = constant('mouseover');\n var focusin = constant('focusin');\n var focusout = constant('focusout');\n var keydown = constant('keydown');\n var keyup = constant('keyup');\n var input = constant('input');\n var change = constant('change');\n var click = constant('click');\n var transitionend = constant('transitionend');\n var selectstart = constant('selectstart');\n\n var alloy = { tap: constant('alloy.tap') };\n var focus = constant('alloy.focus');\n var postBlur = constant('alloy.blur.post');\n var postPaste = constant('alloy.paste.post');\n var receive = constant('alloy.receive');\n var execute = constant('alloy.execute');\n var focusItem = constant('alloy.focus.item');\n var tap = alloy.tap;\n var longpress = constant('alloy.longpress');\n var sandboxClose = constant('alloy.sandbox.close');\n var typeaheadCancel = constant('alloy.typeahead.cancel');\n var systemInit = constant('alloy.system.init');\n var documentTouchmove = constant('alloy.system.touchmove');\n var documentTouchend = constant('alloy.system.touchend');\n var windowScroll = constant('alloy.system.scroll');\n var windowResize = constant('alloy.system.resize');\n var attachedToDom = constant('alloy.system.attached');\n var detachedFromDom = constant('alloy.system.detached');\n var dismissRequested = constant('alloy.system.dismissRequested');\n var repositionRequested = constant('alloy.system.repositionRequested');\n var focusShifted = constant('alloy.focusmanager.shifted');\n var slotVisibility = constant('alloy.slotcontainer.visibility');\n var changeTab = constant('alloy.change.tab');\n var dismissTab = constant('alloy.dismiss.tab');\n var highlight = constant('alloy.highlight');\n var dehighlight = constant('alloy.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, map$1(data, constant));\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).toOption();\n }, constant(false));\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 Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\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 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 MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\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 var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\n });\n return r;\n };\n };\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentElement = function (element) {\n return Element.fromDom(element.dom().ownerDocument.documentElement);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var offsetParent = function (element) {\n return Option.from(element.dom().offsetParent).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var spot = Immutable('element', 'offset');\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\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 get$1 = 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 = Element.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 = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$1(container);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.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\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.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$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 Option.from(get$2(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 Element.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 var clone = shallow$1(element);\n return getOuter(clone);\n };\n\n var element = function (elem) {\n return getHtml(elem);\n };\n\n var isRecursive = function (component, originator, target) {\n return eq(originator, component.element()) && !eq(originator, target);\n };\n var events = derive([can(focus(), function (component, simulatedEvent) {\n var originator = simulatedEvent.event().originator();\n var target = simulatedEvent.event().target();\n if (isRecursive(component, originator, target)) {\n domGlobals.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 Option.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: constant(false)\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(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(undefined, [component.getApis()].concat([component].concat(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$1(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(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: constant(purpose)\n };\n };\n var curried = function (handler, purpose) {\n return {\n cHandler: handler,\n purpose: constant(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: constant(name),\n handler: constant(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 toInfo = function (spec) {\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({\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'typeaheadevents'\n ],\n 'alloy.focus': [\n 'alloy.base.behaviour',\n 'focusing',\n 'keying'\n ],\n 'alloy.system.init': [\n 'alloy.base.behaviour',\n 'disabling',\n 'toggling',\n 'representing'\n ],\n 'input': [\n 'alloy.base.behaviour',\n 'representing',\n 'streaming',\n 'invalidating'\n ],\n 'alloy.system.detached': [\n 'alloy.base.behaviour',\n 'representing',\n 'item-events',\n 'tooltipping'\n ],\n 'mousedown': [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events'\n ],\n 'touchstart': [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events'\n ],\n 'mouseover': [\n 'item-type-events',\n 'tooltipping'\n ]\n }), 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$2(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$3 = 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$3(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 = 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 return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.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 Element.fromDom(b);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.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 internalRemove = function (dom, property) {\n if (isSupported(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$4 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(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 Option.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(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 = Element.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 (has$1(element, 'style') && trim(get$2(element, 'style')) === '') {\n remove$1(element, 'style');\n }\n };\n var reflow = function (e) {\n return e.dom().offsetWidth;\n };\n\n var get$5 = 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 = Element.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(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: constant(spec),\n readState: readState,\n getApis: getApis,\n connect: connect,\n disconnect: disconnect,\n element: constant(item),\n syncComponents: syncComponents,\n components: subcomponents.get,\n events: constant(events)\n };\n return me;\n };\n\n var buildSubcomponents = function (spec) {\n var components = get(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 = Element.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: Option.none,\n hasConfigured: constant(false),\n connect: connect,\n disconnect: disconnect,\n getApis: function () {\n return {};\n },\n element: constant(extSpec.element),\n spec: constant(spec),\n readState: constant('No state'),\n syncComponents: noop,\n components: constant([]),\n events: constant({})\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 function Dimension (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(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$4(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$4(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$6 = 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: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\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 Position(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(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 Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(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 api$1.set(element, h);\n };\n var get$7 = 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: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n 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 return;\n }\n handler(fromRawEvent(rawEvent));\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 isSafari = detect$3().browser.isSafari();\n var get$8 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollTo(x, y);\n };\n\n var get$9 = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n return Option.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: constant(x),\n y: constant(y),\n width: constant(width),\n height: constant(height),\n right: constant(x + width),\n bottom: constant(y + height)\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n var doc = win.document;\n var scroll = get$8(Element.fromDom(doc));\n return get$9(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 Option.some(paths);\n };\n\n var view = function (doc) {\n var element = doc.dom() === domGlobals.document ? Option.none() : Option.from(doc.dom().defaultView.frameElement);\n return element.map(Element.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 = Element.fromDom(domGlobals.document);\n var scroll = get$8(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 Position(r.left + offset.left() + scroll.left(), r.top + offset.top() + scroll.top());\n });\n };\n\n var pointed = Immutable('point', 'width', 'height');\n var rect = Immutable('x', 'y', 'width', 'height');\n var bounds$1 = function (x, y, width, height) {\n return {\n x: constant(x),\n y: constant(y),\n width: constant(width),\n height: constant(height),\n right: constant(x + width),\n bottom: constant(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(domGlobals.window);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor$1 = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.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 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.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 return ClosestOrAncestor(is, 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$2(elem, 'id');\n return id !== undefined && id.indexOf('aria-owns') > -1;\n });\n return dependent.bind(function (dep) {\n var id = get$2(dep, 'id');\n var doc = owner(dep);\n return descendant$1(doc, '[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: constant(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(el, component.element());\n }, constant(false)) || 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 domGlobals.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(eventConfig.get(), eventName).orThunk(function () {\n var patterns = keys(eventConfig.get());\n return findMap(patterns, function (p) {\n return eventName.indexOf(p) > -1 ? Option.some(eventConfig.get()[p]) : Option.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(Option.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 = Immutable('x', 'y', 'bubble', 'direction', 'boundsRestriction', 'label');\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(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(boundsRestrictions, dir).bind(identity).bind(function (restriction) {\n if (dir === 'left' || dir === 'top') {\n return restriction >= current ? Option.some(restriction) : Option.none();\n } else {\n return restriction <= current ? Option.some(restriction) : Option.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 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]() : Option.none();\n };\n var wrappedApis = map$1(apis, function (apiF, apiName) {\n return wrapApi(name, apiF, apiName);\n });\n var wrappedExtra = map$1(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: function () {\n return schemaSchema;\n },\n exhibit: function (info, base) {\n return getConfig(info).bind(function (behaviourInfo) {\n return get(active, 'exhibit').map(function (exhibitor) {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n });\n }).getOr(nu$6({}));\n },\n name: function () {\n return name;\n },\n handlers: function (info) {\n return getConfig(info).map(function (behaviourInfo) {\n var getEvents = get(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 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 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 focus$1 = function (element) {\n element.dom().focus();\n };\n var blur = function (element) {\n element.dom().blur();\n };\n var hasFocus = function (element) {\n var doc = owner(element).dom();\n return element.dom() === doc.activeElement;\n };\n var active = function (_doc) {\n var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;\n return Option.from(doc.activeElement).map(Element.fromDom);\n };\n var search = function (element) {\n return active(owner(element)).filter(function (e) {\n return element.dom().contains(e.dom());\n });\n };\n\n var preserve = function (f, container) {\n var ownerDoc = owner(container);\n var refocus = active(ownerDoc).bind(function (focused) {\n var hasFocus = function (elem) {\n return eq(focused, elem);\n };\n return hasFocus(container) ? Option.some(container) : descendant(container, hasFocus);\n });\n var result = f(container);\n refocus.each(function (oldFocus) {\n active(ownerDoc).filter(function (newFocus) {\n return eq(newFocus, oldFocus);\n }).fold(function () {\n focus$1(oldFocus);\n }, noop);\n });\n return result;\n };\n\n var NuPositionCss = Immutable('position', 'left', 'top', 'right', 'bottom');\n var applyPositionCss = function (element, position) {\n var addPx = function (num) {\n return num + 'px';\n };\n setOptions(element, {\n position: Option.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 = Option.some(decisionX);\n var top = Option.some(decisionY);\n var right = Option.some(decisionRight);\n var bottom = Option.some(decisionBottom);\n var none = Option.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', Option.some(decision.x()), Option.some(decision.y()), Option.none(), Option.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$8();\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 = Position(x, y);\n var removeScroll = function () {\n var outerScroll = get$8();\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 = Immutable('anchorBox', 'origin');\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 return r > max ? min : r < min ? max : r;\n };\n var clamp = function (value, min, max) {\n return Math.min(Math.max(value, min), max);\n };\n\n var decision = MixedBag([\n 'x',\n 'y',\n 'width',\n 'height',\n 'maxHeight',\n 'maxWidth',\n 'direction',\n 'classes',\n 'label',\n 'candidateYforTest'\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 = decision({\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(decision({\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: constant(getOuter$2(p)),\n height: constant(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 reparteeOptions = MixedBag([\n 'bounds',\n 'origin',\n 'preference',\n 'maxHeightFunction',\n 'maxWidthFunction'\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 = reparteeOptions({\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(classes, prop).getOr([]);\n };\n var make = function (xDelta, yDelta, alignmentsOn) {\n var alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: function () {\n return Position(xDelta, yDelta);\n },\n classesOn: function () {\n return bind(alignmentsOn, getClasses);\n },\n classesOff: function () {\n return bind(alignmentsOff, getClasses);\n }\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$4(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$2(current, Attribute) === 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$a = 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$a(component.element(), anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Option.some(anchorInfo.hotspot.element()));\n return Option.some(nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Option.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$a(component.element(), anchorInfo, all$2(), allRtl(), all$2(), allRtl(), Option.none());\n return Option.some(nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Option.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 zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n\n var create$2 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$2 };\n\n var adt$5 = 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$5.before;\n var on = adt$5.on;\n var after$1 = adt$5.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$6 = 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$6.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 Element.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$6.domRange;\n var relative$1 = adt$6.relative;\n var exact = adt$6.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 Selection = {\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: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(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 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$7 = 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(Element.fromDom(range.startContainer), range.startOffset, Element.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: Option.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 Option.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 Option.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$7.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$7.ltr, rng);\n });\n } else {\n return fromRange(win, adt$7.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$7.ltr;\n var rtl = adt$7.rtl;\n\n function NodeValue (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) ? Option.from(element.dom().nodeValue) : Option.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$b = 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 Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.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(start, finish) && soffset === foffset;\n return r.collapsed && !same;\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 Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$2(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n };\n var getExact = function (win) {\n return Option.from(win.getSelection()).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 = Immutable('element', 'offset');\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$b(last).length : children(last).length;\n return point(last, len);\n }\n };\n\n var adt$8 = 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 }, Position(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$8.screen;\n var absolute$2 = adt$8.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(frameOwner, compOwner);\n };\n return Option.from(win.frameElement).map(Element.fromDom).filter(hasSameOwner).map(absolute);\n };\n var getRootPoint = function (component, origin, anchorInfo) {\n var doc = owner(component.element());\n var outerScroll = get$8(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(Position(newLeft, newTop));\n return Option.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 ? belowOrAboveRtl() : belowOrAboveRtl();\n var layouts = get$a(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Option.none());\n return nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Option.none()\n });\n });\n };\n var ContentAnchorCommon = {\n capRect: capRect,\n calcNewAnchor: calcNewAnchor\n };\n\n var point$1 = Immutable('element', 'offset');\n var descendOnce$1 = function (element, offset) {\n return isText(element) ? point$1(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 Selection.range(modStart.element(), modStart.offset(), modFinish.element(), modFinish.offset());\n });\n };\n var placement$2 = 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, Selection.exactFromRange(sel)).orThunk(function () {\n var x = Element.fromText(zeroWidth);\n before(sel.start(), x);\n return getFirstRect$1(win, Selection.exact(x, 0, x, 1)).map(function (rect) {\n remove(x);\n return rect;\n });\n });\n return optRect.bind(function (rawRect) {\n return ContentAnchorCommon.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()) ? Option.some(sel.start()) : parent(sel.start());\n });\n var elem = targetElement.getOr(component.element());\n return ContentAnchorCommon.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$2)\n ];\n\n var placement$3 = function (component, anchorInfo, origin) {\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.bind(function (target) {\n var rect = target.dom().getBoundingClientRect();\n var nodeBox = ContentAnchorCommon.capRect(rect.left, rect.top, rect.width, rect.height);\n var elem = anchorInfo.node.getOr(component.element());\n return ContentAnchorCommon.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$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$a(component.element(), submenuInfo, all$3(), allRtl$1(), all$3(), allRtl$1(), Option.none());\n return Option.some(nu$9({\n anchorBox: anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts: layouts,\n placer: Option.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 = domGlobals.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, Option.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).toOption();\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 if (has$1(sandbox.element(), attr)) {\n var oldValue = get$2(sandbox.element(), attr);\n set$2(sandbox.element(), cssKey, oldValue);\n } else {\n remove$6(sandbox.element(), cssKey);\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(Option.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(Option.some(comp));\n };\n var get = function () {\n return contents.get();\n };\n var clear = function () {\n contents.set(Option.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', constant(false)),\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 = function () {\n };\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(dataByValue.get(), itemString).orThunk(function () {\n return get(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(item, 'meta').each(function (meta) {\n get(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$c = 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$c\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(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(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$1(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(Option.some, Option.none, Option.some, Option.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(Option.none, Option.some, Option.none, Option.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(Option.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).toOption();\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$1(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 function isSketchSpec(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$1(config.apis, makeApi);\n var extraApis = map$1(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: constant(config.name),\n configFields: constant(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$1(config.apis, makeApi);\n var extraApis = map$1(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: constant(config.name),\n partFields: constant(config.partFields),\n configFields: constant(config.configFields),\n sketch: sketch,\n parts: constant(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 Option.none();\n }\n }\n return Option.some(r);\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();\n };\n\n var inside = function (target) {\n return name(target) === 'input' && get$2(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 new Error(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).toOption();\n });\n };\n var getByIndex = function (component, hConfig, hState, index) {\n var items = descendants(component.element(), '.' + hConfig.itemClass);\n return Option.from(items[index]).fold(function () {\n return Result.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).toOption();\n });\n };\n var getLast = function (component, hConfig, hState) {\n var items = descendants(component.element(), '.' + hConfig.itemClass);\n var last = items.length > 0 ? Option.some(items[items.length - 1]) : Option.none();\n return last.bind(function (c) {\n return component.getSystem().getByDom(c).toOption();\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]).toOption();\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).toOption();\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 = function () {\n return [8];\n };\n var TAB = function () {\n return [9];\n };\n var ENTER = function () {\n return [13];\n };\n var ESCAPE = function () {\n return [27];\n };\n var SPACE = function () {\n return [32];\n };\n var LEFT = function () {\n return [37];\n };\n var UP = function () {\n return [38];\n };\n var RIGHT = function () {\n return [39];\n };\n var DOWN = function () {\n return [40];\n };\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(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 ? Option.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 return derive(onFocusHandler.toArray().concat([\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 };\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', constant(true)),\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$6(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 Option.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 ? Option.some(true) : Option.none();\n }, function (target) {\n tabbingConfig.focusManager.set(component, target);\n return Option.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, 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 Option.some(focusIn);\n });\n };\n\n var AcyclicType = create$3(state$1('cyclic', constant(false)));\n\n var CyclicType = create$3(state$1('cyclic', constant(true)));\n\n var doDefaultExecute = function (component, simulatedEvent, focused) {\n dispatch(component, focused, execute());\n return Option.some(true);\n };\n var defaultExecute = function (component, simulatedEvent, focused) {\n return inside(focused) && inSet(SPACE())(simulatedEvent.event()) ? Option.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n var stopEventForFirefox = function (component, simulatedEvent) {\n return Option.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 Option.none();\n });\n\n var flatgrid = function () {\n var dimensions = Cell(Option.none());\n var setGridSize = function (numRows, numColumns) {\n dimensions.set(Option.some({\n numRows: constant(numRows),\n numColumns: constant(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 var dom = element.dom();\n return !isHidden(dom);\n };\n\n var locate = function (candidates, predicate) {\n return findIndex(candidates, predicate).map(function (index) {\n return {\n index: constant(index),\n candidates: constant(candidates)\n };\n });\n };\n\n var locateVisible = function (container, current, selector) {\n var predicate = function (x) {\n return eq(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(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 ? Option.some(values[newIndex]) : Option.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 Option.some({\n row: constant(oldRow),\n column: constant(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 Option.some({\n row: constant(newRow),\n column: constant(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 ? Option.some(true) : Option.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 Option.some(focusIn);\n });\n\n var horizontal = function (container, selector, current, delta) {\n var isDisabledButton = function (candidate) {\n return name(candidate) === 'button' && get$2(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 Option.none();\n } else {\n return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Option.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', Option.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) : Option.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 Option.some(focusIn$1);\n });\n\n var outcome = MixedBag([\n 'rowIndex',\n 'columnIndex',\n 'cell'\n ], []);\n var toCell = function (matrix, rowIndex, columnIndex) {\n return Option.from(matrix[rowIndex]).bind(function (row) {\n return Option.from(row[columnIndex]).map(function (cell) {\n return outcome({\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', Option.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 Option.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) : Option.none();\n };\n var fireTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move(moveDown$1)(component, simulatedEvent, menuConfig, menuState) : Option.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 Option.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 domGlobals.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(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 Option.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 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 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 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 = function () {\n return 'item-widget';\n };\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: function () {\n }\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()) ? Option.none() : function () {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element());\n return Option.none();\n } else {\n return Option.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 Option.some(true);\n } else if (detail.autofocus) {\n simulatedEvent.setSource(component.element());\n return Option.none();\n } else {\n return Option.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: Option.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(byMenu, finish).bind(function (triggerItem) {\n return get(items, triggerItem).bind(function (triggerMenu) {\n var rest = trace(items, byItem, byMenu, triggerMenu);\n return Option.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$1(byMenu, function (_triggerItem, submenu) {\n return [submenu].concat(trace(items, byItem, byMenu, submenu));\n });\n return map$1(items, function (menu) {\n return get(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(Option.none());\n var directory = Cell({});\n var clear = function () {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.set(Option.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(Option.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(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) ? [] : [Option.none()];\n }, function (data) {\n return [Option.some(data)];\n });\n });\n return sequence(triggers);\n });\n };\n var expand = function (itemValue) {\n return get(expansions.get(), itemValue).map(function (menu) {\n var current = get(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n };\n var collapse = function (itemValue) {\n return get(paths.get(), itemValue).bind(function (path) {\n return path.length > 1 ? Option.some(path.slice(1)) : Option.none();\n });\n };\n var refresh = function (itemValue) {\n return get(paths.get(), itemValue);\n };\n var getPreparedMenu = function (menuValue) {\n return lookupMenu(menuValue).bind(extractPreparedMenu);\n };\n var lookupMenu = function (menuValue) {\n return get(menus.get(), menuValue);\n };\n var lookupItem = function (itemValue) {\n return get(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' ? Option.some(prep.menu) : Option.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(Option.none());\n var buildMenus = function (container, primaryName, menus) {\n return map$1(menus, function (spec, name) {\n var makeSketch = function () {\n return Menu.sketch(__assign(__assign({ dom: spec.dom }, spec), {\n value: name,\n items: spec.items,\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 Option.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$1(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' ? Option.some(prep.menu) : Option.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$2(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(Option.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 Option.from(path[0]).bind(function (latestMenuName) {\n return state.lookupMenu(latestMenuName).bind(function (menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n return Option.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 Option.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 Option.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 Option.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()) ? Option.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n };\n var onLeft = function (container, item) {\n return inside(item.element()) ? Option.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).toOption().bind(function (item) {\n return f(container, item).map(function () {\n return true;\n });\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 }, function () {\n });\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 Option.from(container.components()[0]).filter(function (comp) {\n return get$2(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 Option.some(true);\n },\n onExecute: function () {\n return Option.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, Option.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, Option.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 Option.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, Option.some({\n mode: 'menu',\n menu: menu\n }));\n };\n var hide = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Option.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: Option.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', Option.none),\n defaulted$1('isExtraPart', never),\n defaulted$1('eventOrder', Option.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 global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var getSkinUrl = function (editor) {\n var settings = editor.settings;\n var skin = settings.skin;\n var skinUrl = settings.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$4.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$3.DOM.getStyle(editor.getElement(), 'width'));\n };\n var getMinWidthSetting = function (editor) {\n return Option.from(editor.settings.min_width).filter(isNumber);\n };\n var getMinHeightSetting = function (editor) {\n return Option.from(editor.settings.min_height).filter(isNumber);\n };\n var getMaxWidthSetting = function (editor) {\n return Option.from(editor.getParam('max_width')).filter(isNumber);\n };\n var getMaxHeightSetting = function (editor) {\n return Option.from(editor.getParam('max_height')).filter(isNumber);\n };\n var getUserStyleFormats = function (editor) {\n return Option.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 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 keys$1 = keys(editor.settings);\n var toolbarKeys = filter(keys$1, function (key) {\n return /^toolbar([1-9])$/.test(key);\n });\n var toolbars = map(toolbarKeys, function (key) {\n return editor.getParam(key, false, 'string');\n });\n var toolbarArray = filter(toolbars, function (toolbar) {\n return typeof toolbar === 'string';\n });\n return toolbarArray.length > 0 ? Option.some(toolbarArray) : Option.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 }, function () {\n return true;\n });\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['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation || (ToolbarLocation = {})));\n var getToolbarGroups = function (editor) {\n return editor.getParam('toolbar_groups', {}, 'object');\n };\n var isToolbarLocationTop = function (editor) {\n return editor.getParam('toolbar_location', ToolbarLocation.top, 'string') !== ToolbarLocation.bottom;\n };\n var fixedContainerSelector = function (editor) {\n return editor.getParam('fixed_toolbar_container', '', 'string');\n };\n var fixedContainerElement = function (editor) {\n var selector = fixedContainerSelector(editor);\n return selector.length > 0 && editor.inline ? descendant$1(body(), selector) : Option.none();\n };\n var useFixedContainer = function (editor) {\n return editor.inline && fixedContainerElement(editor).isSome();\n };\n var getUiContainer = function (editor) {\n var fixedContainer = fixedContainerElement(editor);\n return fixedContainer.getOr(body());\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\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(detail.dom, 'attributes').bind(function (attrs) {\n return get(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).toOption();\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 Option.from(icons()['temporary-placeholder']).getOr('!not found!');\n };\n var get$d = function (name, icons) {\n return Option.from(icons()[name]).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n var getOr = function (name, icons, fallback) {\n return Option.from(icons()[name]).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 Option.from(icons()[name]);\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 Option.from(notificationIconMap[level]);\n }).toArray()\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 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 ].concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(!detail.closeButton ? [] : [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$d('close', detail.iconProvider),\n attributes: { 'aria-label': detail.translationProvider('Close') }\n }\n }],\n action: function (comp) {\n detail.onAction(comp);\n }\n })]),\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 isToolbarLocationTop$1 = isToolbarLocationTop(editor);\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: Option.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 }, isToolbarLocationTop$1 ? {} : { 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: Option.some(Element.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 domGlobals.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 = domGlobals.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 domGlobals.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 domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.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$5 = 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$5(dom, function (node) {\n return isBoundary(dom, node);\n });\n return Option.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(Element.fromDom(editor.selection.getNode())).getOrThunk(function () {\n var wrapper = Element.fromHtml('', editor.getDoc());\n append(wrapper, Element.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 Option.none();\n }\n if (char === ch) {\n break;\n }\n }\n return Option.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 Option.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 Option.none();\n }\n var text = getText(range);\n var triggerCharIndex = text.lastIndexOf(ch);\n if (triggerCharIndex !== 0 || stripTriggerChar(text, ch).length < minChars) {\n return Option.none();\n } else {\n return Option.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(Element.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 Option.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(Element.fromDom(e.element)).isNone()) {\n api.cancelIfNecessary();\n }\n });\n };\n var AutocompleterEditorEvents = { setup: setup };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var point$2 = function (container, offset) {\n return {\n container: container,\n offset: offset\n };\n };\n\n var isText$1 = function (node) {\n return node.nodeType === domGlobals.Node.TEXT_NODE;\n };\n var isElement$1 = function (node) {\n return node.nodeType === domGlobals.Node.ELEMENT_NODE;\n };\n var toLast = function (node) {\n if (isText$1(node)) {\n return point$2(node, node.data.length);\n } else {\n var children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point$2(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$2(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 Option.none();\n }\n var lookupData = global$6.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 };\n });\n }));\n return Option.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 state$1('type', function () {\n return 'autocompleteitem';\n }),\n state$1('active', function () {\n return false;\n }),\n state$1('disabled', function () {\n return false;\n }),\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 ]);\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 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$1(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 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 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 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 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 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 Option.some({\n numColumns: columnLength,\n numRows: Math.ceil(descendants$1.length / columnLength)\n });\n } else {\n return Option.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 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(Option.none());\n var popup = Cell(Option.none());\n var getTooltip = function () {\n return popup.get();\n };\n var setTooltip = function (comp) {\n popup.set(Option.some(comp));\n };\n var clearTooltip = function () {\n popup.set(Option.none());\n };\n var clearTimer = function () {\n timer.get().each(function (t) {\n domGlobals.clearTimeout(t);\n });\n };\n var resetTimer = function (f, delay) {\n clearTimer();\n timer.set(Option.some(domGlobals.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 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 (contains(receivingData.channels(), ExclusivityChannel)) {\n hide(comp);\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 Tooltipping = create$1({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.util.I18n');\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 classForPreset = function (presets) {\n return get(presetClasses, presets).getOr(navClass);\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 var ConvertShortcut = { convertText: convertText };\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$7.translate(text$1))]\n };\n };\n var renderHtml = function (html) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass],\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$7.translate(text$1))]\n }]\n };\n };\n var renderShortcut = function (shortcut) {\n return {\n dom: {\n tag: 'div',\n classes: [accessoryClass],\n innerHtml: ConvertShortcut.convertText(shortcut)\n }\n };\n };\n var renderCheckmark = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n iconClass,\n checkmarkClass\n ],\n innerHtml: get$d('checkmark', icons)\n }\n };\n };\n var renderSubmenuCaret = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [caretClass],\n innerHtml: get$d('chevron-right', icons)\n }\n };\n };\n var renderDownwardsCaret = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [caretClass],\n innerHtml: get$d('chevron-down', icons)\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 renderNormalItemStructure = function (info, icon, renderIcons, textRender, rtlClass) {\n var leftIcon = renderIcons ? info.checkMark.orThunk(function () {\n return icon.or(Option.some('')).map(renderIcon);\n }) : Option.none();\n var domTitle = info.ariaLabel.map(function (label) {\n return { attributes: { title: global$7.translate(label) } };\n }).getOr({});\n var dom = __assign({\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ].concat(rtlClass ? [iconClassRtl] : [])\n }, domTitle);\n var content = info.htmlContent.fold(function () {\n return info.textContent.map(textRender);\n }, function (html) {\n return Option.some(renderHtml(html));\n });\n var menuItem = {\n dom: dom,\n optComponents: [\n leftIcon,\n content,\n info.shortcutContent.map(renderShortcut),\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 = Option.none();\n }\n var getIconName = function (iconName) {\n return iconName.map(function (name) {\n return global$7.isRtl() && contains(rtlIcon, name) ? name + '-rtl' : name;\n });\n };\n var needRtlClass = global$7.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 = Option.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 nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n var onLoad$5 = function (component, disableConfig, disableState) {\n if (disableConfig.disabled) {\n disable(component, disableConfig);\n }\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$2(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, disableState);\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.map(pure).getOr([]) : [] });\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 defaulted$1('disabled', false),\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 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 (onDestroy !== null && onDestroy !== undefined) {\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 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 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 emit(comp, sandboxClose());\n simulatedEvent.stop();\n }\n });\n };\n var menuItemEventOrder = {\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ]\n };\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) {\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(spec.disabled),\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 tooltipBehaviour = function (meta, sharedBackstage) {\n return get(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: Element.fromDom(elm) })]);\n });\n }\n })];\n }).getOr([]);\n };\n var escapeRegExp = function (text) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n };\n var encodeText = function (text) {\n return global$3.DOM.encode(text);\n };\n var replaceText = function (text, matchText) {\n var translated = global$7.translate(text);\n var encoded = encodeText(translated);\n if (matchText.length > 0) {\n var escapedMatchRegex = new RegExp(escapeRegExp(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: Option.none(),\n htmlContent: useText ? spec.text.map(function (text) {\n return replaceText(text, matchText);\n }) : Option.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: Option.none(),\n checkMark: Option.none(),\n caret: Option.none(),\n value: spec.value\n }, sharedBackstage.providers, renderIcons, spec.icon);\n return renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: function () {\n return {};\n },\n onAction: function (_api) {\n return onItemValueHandler(spec.value, spec.meta);\n },\n onSetup: function () {\n return function () {\n };\n },\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n }, structure, itemResponse);\n };\n\n var renderChoiceItem = function (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage) {\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 : Option.none(),\n htmlContent: Option.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: useText ? spec.shortcut : Option.none(),\n checkMark: useText ? Option.some(renderCheckmark(providersBackstage.icons)) : Option.none(),\n caret: Option.none(),\n value: spec.value\n }, providersBackstage, true);\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 function () {\n };\n },\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var parts$2 = constant(generate$4(owner$2(), parts()));\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 function renderInsertTableMenuItem(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 hexColour = function (hexString) {\n return { value: constant(hexString) };\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: constant(hexString) };\n };\n var extractValues = function (hex) {\n var longForm = getLongForm(hex);\n var splitForm = longformRegex.exec(longForm.value());\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n var toHex = function (component) {\n var hex = component.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n var fromRgba = function (rgbaColour) {\n var value = toHex(rgbaColour.red()) + toHex(rgbaColour.green()) + toHex(rgbaColour.blue());\n return hexColour(value);\n };\n\n var min = Math.min;\n var max = Math.max;\n var round = Math.round;\n var rgbRegex = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/;\n var rgbaRegex = /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*(\\d?(?:\\.\\d+)?)\\)/;\n var rgbaColour = function (red, green, blue, alpha) {\n return {\n red: constant(red),\n green: constant(green),\n blue: constant(blue),\n alpha: constant(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 Option.some(rgbaColour(0, 0, 0, 0));\n }\n var rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Option.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n var rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Option.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Option.none();\n };\n var toString = function (rgba) {\n return 'rgba(' + rgba.red() + ',' + rgba.green() + ',' + rgba.blue() + ',' + rgba.alpha() + ')';\n };\n var redColour = constant(rgbaColour(255, 0, 0, 1));\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 = domGlobals.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 var Settings = {\n mapColors: mapColors,\n getColorCols: getColorCols,\n hasCustomColors: hasCustomColors,\n getColorMap: getColorMap,\n getColors: getColors,\n getCurrentColors: getCurrentColors,\n addColor: addColor\n };\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 fireBeforeRenderUI = function (editor) {\n return editor.fire('BeforeRenderUI');\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 var Events = {\n fireSkinLoaded: fireSkinLoaded,\n fireSkinLoadError: fireSkinLoadError,\n fireResizeEditor: fireResizeEditor,\n fireScrollContent: fireScrollContent,\n fireBeforeRenderUI: fireBeforeRenderUI,\n fireResizeContent: fireResizeContent,\n fireTextColorChange: fireTextColorChange\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 = Settings.getColors(editor);\n var defaultCols = calcCols(colors.length);\n return Settings.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 Settings.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 getMenuColors = function (colors, hasCustom) {\n return colors.concat(Settings.getCurrentColors().concat(getAdditionalColors(hasCustom)));\n };\n var getFetch = function (colors, hasCustom) {\n return function (callback) {\n callback(getMenuColors(colors, hasCustom));\n };\n };\n var setIconColor = function (splitButtonApi, name, newColor) {\n var setIconFillAndStroke = function (pathId, color) {\n splitButtonApi.setIconFill(pathId, color);\n splitButtonApi.setIconStroke(pathId, color);\n };\n var id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n setIconFillAndStroke(id, newColor);\n };\n var registerTextColorButton = function (editor, name, format, tooltip, lastColor) {\n editor.ui.registry.addSplitButton(name, {\n tooltip: tooltip,\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: function (value) {\n var optCurrentRgb = Option.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(Settings.getColors(editor), Settings.hasCustomColors(editor)),\n onAction: function (splitButtonApi) {\n if (lastColor.get() !== null) {\n applyColor(editor, format, lastColor.get(), function () {\n });\n }\n },\n onItemAction: function (splitButtonApi, value) {\n applyColor(editor, format, value, function (newColor) {\n lastColor.set(newColor);\n Events.fireTextColorChange(editor, {\n name: name,\n color: newColor\n });\n });\n },\n onSetup: function (splitButtonApi) {\n if (lastColor.get() !== null) {\n setIconColor(splitButtonApi, name, lastColor.get());\n }\n var handler = function (e) {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n }\n };\n editor.on('TextColorChange', handler);\n return function () {\n editor.off('TextColorChange', handler);\n };\n }\n });\n };\n var registerTextColorMenuItem = function (editor, name, format, text) {\n editor.ui.registry.addNestedMenuItem(name, {\n text: text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n onAction: function (data) {\n applyColor(editor, format, data.value, noop);\n }\n }];\n }\n });\n };\n var colorPickerDialog = function (editor) {\n return function (callback, value) {\n var getOnSubmit = function (callback) {\n return function (api) {\n var data = api.getData();\n callback(Option.from(data.colorpicker));\n api.close();\n };\n };\n var onAction = function (api, details) {\n if (details.name === 'hex-valid') {\n if (details.value) {\n api.enable('ok');\n } else {\n api.disable('ok');\n }\n }\n };\n var initialData = { colorpicker: value };\n var submit = getOnSubmit(callback);\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: initialData,\n onAction: onAction,\n onSubmit: submit,\n onClose: function () {\n },\n onCancel: function () {\n callback(Option.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 var ColorSwatch = {\n register: register$1,\n getColors: getMenuColors,\n getFetch: getFetch,\n colorPickerDialog: colorPickerDialog,\n getCurrentColor: getCurrentColor,\n getColorCols: getColorCols$1,\n calcCols: calcCols\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 hasIcon = function (item) {\n return item.icon !== undefined || item.type === 'togglemenuitem' || item.type === 'choicemenuitem';\n };\n var menuHasIcons = function (xs) {\n return exists(xs, hasIcon);\n };\n var handleError = function (error) {\n domGlobals.console.error(formatError(error));\n domGlobals.console.log(error);\n return Option.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 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 Option.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(item.value), itemResponse, providersBackstage));\n });\n } else {\n return Option.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 function renderColorSwatchItem(spec, backstage) {\n var items = ColorSwatch.getColors(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, function () {\n return false;\n }, 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 fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n var valueOpt = function (obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key) ? Option.some(obj[key]) : Option.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 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: Option.none(),\n ariaLabel: spec.text,\n caret: Option.none(),\n checkMark: Option.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);\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: Option.none(),\n ariaLabel: spec.text,\n caret: Option.some(caret),\n checkMark: Option.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);\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) {\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: Option.none(),\n textContent: spec.text,\n htmlContent: Option.none(),\n ariaLabel: spec.text,\n checkMark: Option.some(renderCheckmark(providersBackstage.icons)),\n caret: Option.none(),\n shortcutContent: spec.shortcut,\n presets: 'normal',\n meta: spec.meta\n }, providersBackstage, true);\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), {\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\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n var hasIcon$1 = function (item) {\n return item.icon !== undefined || item.type === 'togglemenuitem' || item.type === 'choicemenuitem';\n };\n var menuHasIcons$1 = function (xs) {\n return exists(xs, hasIcon$1);\n };\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: Option.none(),\n icon: menuitem.text.isSome() ? Option.none() : menuitem.icon\n });\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, function (d) {\n return Option.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, function (d) {\n return Option.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu));\n });\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, function (d) {\n return Option.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage));\n });\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, function (d) {\n return Option.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 domGlobals.console.error('Unknown item in general menu', item);\n return Option.none();\n }\n }\n };\n var createAutocompleteItems = function (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage) {\n var renderText = columns === 1;\n var renderIcons = !renderText || menuHasIcons$1(items);\n return cat(map(items, function (item) {\n if (item.type === 'separator') {\n return createSeparatorItem(item).fold(handleError, function (d) {\n return Option.some(separator(d));\n });\n } else {\n return createAutocompleterItem(item).fold(handleError, function (d) {\n return Option.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$1(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(Option.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(Element.fromDom(editor.selection.getNode()))).each(unwrap);\n hideIfNecessary();\n activeAutocompleter.set(Option.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 Option.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 domGlobals.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);\n });\n };\n var commenceIfNecessary = function (context) {\n if (!isActive()) {\n var wrapper = create$4(editor, context.range);\n activeAutocompleter.set(Option.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 Option.from(ld.columns);\n }).getOr(1);\n InlineView.showAt(autocompleter, {\n anchor: 'node',\n root: Element.fromDom(editor.getBody()),\n node: Option.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 AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n };\n var Autocompleter = { register: register$2 };\n\n var filter$1 = constant(true);\n var bind$3 = function (element, event, handler) {\n return bind$2(element, event, filter$1, handler);\n };\n var capture$1 = function (element, event, handler) {\n return capture(element, event, filter$1, 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 function DelayedFunction (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 = domGlobals.setTimeout(function () {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n var cancel = function () {\n if (ref !== null) {\n domGlobals.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 Option.none();\n }\n return Option.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(Option.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: constant(touch.clientX),\n y: constant(touch.clientY),\n target: event.target\n };\n longpress$1.schedule(event);\n longpressFired.set(false);\n startData.set(Option.some(data));\n });\n return Option.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(Option.none());\n }\n });\n });\n return Option.none();\n };\n var handleTouchend = function (event) {\n longpress$1.cancel();\n var isSame = function (data) {\n return eq(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(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 = detect$3().browser.isFirefox();\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(Option.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(Option.some(domGlobals.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(Option.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(Option.some(domGlobals.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(domGlobals.clearTimeout);\n focusoutTimeout.get().each(domGlobals.clearTimeout);\n };\n return { unbind: unbind };\n };\n\n var derive$2 = function (rawEvent, rawTarget) {\n var source = get(rawEvent, 'target').map(function (getTarget) {\n return getTarget();\n }).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: constant(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: constant(false),\n event: constant(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(function () {\n return true;\n }, function (parent) {\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger);\n }, function () {\n return false;\n });\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 var rawTarget = rawEvent.target();\n return triggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, 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 = Immutable('element', 'descHandler');\n var broadcastHandler = function (id, handler) {\n return {\n id: constant(id),\n descHandler: constant(handler)\n };\n };\n function EventRegistry () {\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 Option.none();\n }, function (id) {\n return handlers.bind(function (h) {\n return get(h, id);\n }).map(function (descHandler) {\n return eventHandler(elem, descHandler);\n });\n });\n };\n var filterByType = function (type) {\n return get(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(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 function Registry () {\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(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$c(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(function () {\n return true;\n }, function (parent) {\n return eq(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: constant(originator),\n kill: noop,\n prevent: noop,\n target: constant(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: constant(true)\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: constant(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: constant(true),\n data: constant(message)\n });\n };\n var broadcastOn = function (channels, message) {\n broadcastData({\n universal: constant(false),\n channels: constant(channels),\n data: constant(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: constant(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 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 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$d(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 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 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$5(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$5(input.element());\n },\n setValue: function (input, data) {\n var current = get$5(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 = Option.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 data = Option.some(x);\n run(callbacks);\n callbacks = [];\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 domGlobals.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$1 = function (a) {\n return nu$a(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$a,\n pure: pure$1\n };\n\n var errorReporter = function (err) {\n domGlobals.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$2 = function (a) {\n return make$3(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$b,\n pure: pure$2\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', Option.none),\n optionObjOf('notify', [\n defaulted$1('aria', 'alert'),\n defaulted$1('getContainer', Option.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 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 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 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(coupled, name).getOrThunk(function () {\n var builder = get(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 Option.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 Option.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$7(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', Option.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(detail.dom, 'attributes').bind(function (attrs) {\n return get(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 Option.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 Toggling.on(hotspot);\n },\n onClose: function () {\n 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 Option.some(true);\n },\n onEscape: function (comp, se) {\n if (Dropdown.isOpen(comp)) {\n Dropdown.close(comp);\n return Option.some(true);\n } else {\n return Option.none();\n }\n }\n }),\n Focusing.config({})\n ]),\n events: events$7(Option.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(), constant(true))]);\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 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 Option.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, function () {\n return false;\n }, 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(function () {\n });\n },\n inputBehaviours: derive$1([\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 = Element.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 Settings.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: ColorSwatch.getFetch(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(),\n presets: 'color',\n onItemAction: onItemAction\n }, sharedBackstage));\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: pLabel.toArray().concat([{\n dom: {\n tag: 'div',\n classes: ['tox-color-input']\n },\n components: [\n pField,\n memColorButton.asSpec()\n ]\n }]),\n fieldBehaviours: derive$1([config('form-field-events', [\n run(colorInputChangeEvent, function (comp, se) {\n memColorButton.getOpt(comp).each(function (colorButton) {\n set$2(colorButton.element(), 'background-color', se.event().color());\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run(colorSwatchChangeEvent, function (comp, se) {\n FormField.getField(comp).each(function (field) {\n Representing.setValue(field, se.event().value());\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run(colorPickerCancelEvent, function (comp, se) {\n FormField.getField(comp).each(function (field) {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n var hsvColour = function (hue, saturation, value) {\n return {\n hue: constant(hue),\n saturation: constant(saturation),\n value: constant(value)\n };\n };\n var fromRgb = function (rgbaColour) {\n var h = 0;\n var s = 0;\n var v = 0;\n var r = rgbaColour.red() / 255;\n var g = rgbaColour.green() / 255;\n var b = rgbaColour.blue() / 255;\n var minRGB = Math.min(r, Math.min(g, b));\n var maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n var d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n var calcHex = function (value) {\n var hue = (100 - value) / 100 * 360;\n var hsv = hsvColour(hue, 100, 100);\n var rgb = fromHsv(hsv);\n return fromRgba(rgb);\n };\n\n var fieldsUpdate = constant(generate$1('rgb-hex-update'));\n var sliderUpdate = constant(generate$1('slider-update'));\n var paletteUpdate = constant(generate$1('palette-update'));\n\n var labelPart = optional({\n schema: [strict$1('dom')],\n name: 'label'\n });\n var edgePart = function (name) {\n return optional({\n name: '' + name + '-edge',\n overrides: function (detail) {\n var action = detail.model.manager.edgeActions[name];\n return action.fold(function () {\n return {};\n }, function (a) {\n return {\n events: derive([\n runActionExtra(touchstart(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousedown(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousemove(), function (comp, se, det) {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n };\n });\n }\n });\n };\n var tlEdgePart = edgePart('top-left');\n var tedgePart = edgePart('top');\n var trEdgePart = edgePart('top-right');\n var redgePart = edgePart('right');\n var brEdgePart = edgePart('bottom-right');\n var bedgePart = edgePart('bottom');\n var blEdgePart = edgePart('bottom-left');\n var ledgePart = edgePart('left');\n var thumbPart = required({\n name: 'thumb',\n defaults: constant({ dom: { styles: { position: 'absolute' } } }),\n overrides: function (detail) {\n return {\n events: derive([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n var spectrumPart = required({\n schema: [state$1('mouseIsDown', function () {\n return Cell(false);\n })],\n name: 'spectrum',\n overrides: function (detail) {\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var setValueFrom = function (component, simulatedEvent) {\n return model.getValueFromEvent(simulatedEvent).map(function (value) {\n return model.setValueFrom(component, detail, value);\n });\n };\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: function (spectrum) {\n return model.onLeft(spectrum, detail);\n },\n onRight: function (spectrum) {\n return model.onRight(spectrum, detail);\n },\n onUp: function (spectrum) {\n return model.onUp(spectrum, detail);\n },\n onDown: function (spectrum) {\n return model.onDown(spectrum, detail);\n }\n }),\n Focusing.config({})\n ]),\n events: derive([\n run(touchstart(), setValueFrom),\n run(touchmove(), setValueFrom),\n run(mousedown(), setValueFrom),\n run(mousemove(), function (spectrum, se) {\n if (detail.mouseIsDown.get()) {\n setValueFrom(spectrum, se);\n }\n })\n ])\n };\n }\n });\n var SliderParts = [\n labelPart,\n ledgePart,\n redgePart,\n tedgePart,\n bedgePart,\n tlEdgePart,\n trEdgePart,\n blEdgePart,\n brEdgePart,\n thumbPart,\n spectrumPart\n ];\n\n var _sliderChangeEvent = 'slider.change.value';\n var sliderChangeEvent = constant(_sliderChangeEvent);\n var isTouchEvent = function (evt) {\n return evt.type.indexOf('touch') !== -1;\n };\n var getEventSource = function (simulatedEvent) {\n var evt = simulatedEvent.event().raw();\n if (isTouchEvent(evt)) {\n var touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Option.some(touchEvent.touches[0]).map(function (t) {\n return Position(t.clientX, t.clientY);\n }) : Option.none();\n } else {\n var mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Option.some(mouseEvent).map(function (me) {\n return Position(me.clientX, me.clientY);\n }) : Option.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: constant(x) };\n };\n var yValue = function (y) {\n return { y: constant(y) };\n };\n var xyValue = function (x, y) {\n return {\n x: constant(x),\n y: constant(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: constant(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 Option.some(xValue);\n };\n var handleMovement = function (direction) {\n return function (spectrum, detail) {\n return moveBy(direction, spectrum, detail).map(function () {\n return true;\n });\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 Option.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Option.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$7(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 = Option.none;\n var onDown = Option.none;\n var edgeActions = {\n 'top-left': Option.none(),\n 'top': Option.none(),\n 'top-right': Option.none(),\n 'right': Option.some(setToREdge),\n 'bottom-right': Option.none(),\n 'bottom': Option.none(),\n 'bottom-left': Option.none(),\n 'left': Option.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: constant(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 Option.some(yValue);\n };\n var handleMovement$1 = function (direction) {\n return function (spectrum, detail) {\n return moveBy$1(direction, spectrum, detail).map(function () {\n return true;\n });\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 Option.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Option.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$6(thumb.element()) / 2;\n set$2(thumb.element(), 'top', pos - thumbRadius + 'px');\n };\n var onLeft$1 = Option.none;\n var onRight$1 = Option.none;\n var onUp$1 = handleMovement$1(-1);\n var onDown$1 = handleMovement$1(1);\n var edgeActions$1 = {\n 'top-left': Option.none(),\n 'top': Option.some(setToTEdge),\n 'top-right': Option.none(),\n 'right': Option.none(),\n 'bottom-right': Option.none(),\n 'bottom': Option.some(setToBEdge),\n 'bottom-left': Option.none(),\n 'left': Option.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: constant(x),\n y: constant(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 Option.some(xValue);\n };\n var handleMovement$2 = function (direction, isVerticalMovement) {\n return function (spectrum, detail) {\n return moveBy$2(direction, isVerticalMovement, spectrum, detail).map(function () {\n return true;\n });\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$7(thumb.element()) / 2;\n var thumbYRadius = get$6(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': Option.some(setToTLEdgeXY),\n 'top': Option.some(setToTEdgeXY),\n 'top-right': Option.some(setToTREdgeXY),\n 'right': Option.some(setToREdgeXY),\n 'bottom-right': Option.some(setToBREdgeXY),\n 'bottom': Option.some(setToBEdgeXY),\n 'bottom-left': Option.some(setToBLEdgeXY),\n 'left': Option.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: constant(spec.mode.minX),\n y: constant(spec.mode.minY)\n });\n }),\n strict$1('getInitialValue'),\n output('manager', TwoDModel)\n ]\n })),\n field$1('sliderBehaviours', [\n Keying,\n Representing\n ]),\n state$1('mouseIsDown', function () {\n return Cell(false);\n })\n ];\n\n var sketch = function (detail, components, _spec, _externals) {\n var _a;\n var getThumb = function (component) {\n return getPartOrDie(component, detail, 'thumb');\n };\n var getSpectrum = function (component) {\n return getPartOrDie(component, detail, 'spectrum');\n };\n var getLeftEdge = function (component) {\n return getPart(component, detail, 'left-edge');\n };\n var getRightEdge = function (component) {\n return getPart(component, detail, 'right-edge');\n };\n var getTopEdge = function (component) {\n return getPart(component, detail, 'top-edge');\n };\n var getBottomEdge = function (component) {\n return getPart(component, detail, 'bottom-edge');\n };\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var refresh = function (slider, thumb) {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge: getLeftEdge,\n getRightEdge: getRightEdge,\n getTopEdge: getTopEdge,\n getBottomEdge: getBottomEdge,\n getSpectrum: getSpectrum\n });\n };\n var changeValue = function (slider, newValue) {\n modelDetail.value.set(newValue);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n detail.onChange(slider, thumb, newValue);\n return Option.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(constant(true));\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_) {\n return modelDetail.value.get();\n }\n }\n }),\n Receiving.config({ channels: (_a = {}, _a[mouseReleased()] = { onReceive: choose }, _a) })\n ]),\n events: derive([\n run(sliderChangeEvent(), function (slider, simulatedEvent) {\n changeValue(slider, simulatedEvent.event().value());\n }),\n runOnAttached(function (slider, simulatedEvent) {\n var getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n var spectrum = getSpectrum(slider);\n detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n }),\n run(touchstart(), onDragStart),\n run(touchend(), onDragEnd),\n run(mousedown(), onDragStart),\n run(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin: resetToMin,\n resetToMax: resetToMax,\n changeValue: changeValue,\n refresh: refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n var Slider = composite$1({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch,\n apis: {\n resetToMin: function (apis, slider) {\n apis.resetToMin(slider);\n },\n resetToMax: function (apis, slider) {\n apis.resetToMax(slider);\n },\n refresh: function (apis, slider) {\n apis.refresh(slider);\n }\n }\n });\n\n var sliderFactory = function (translate, getClass) {\n var spectrum = Slider.parts().spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n var thumb = Slider.parts().thumb({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-thumb')],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider')],\n attributes: { role: 'presentation' }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant({ y: constant(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$1(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: constant(Cell(Option.some(255))),\n green: constant(Cell(Option.some(255))),\n blue: constant(Cell(Option.some(255))),\n hex: constant(Cell(Option.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', Option.some(red));\n set('green', Option.some(green));\n set('blue', Option.some(blue));\n };\n var onInvalidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event();\n if (data.type() !== 'hex') {\n set(data.type(), Option.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', Option.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, Option.some(val));\n getValueRgb().each(function (rgb) {\n var hex = copyRgbToHex(form, rgb);\n updatePreview(form, hex);\n });\n };\n var isHexInputEvent = function (data) {\n return data.type() === 'hex';\n };\n var onValidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event();\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value());\n } else {\n onValidRgb(form, data.type(), data.value());\n }\n };\n var formPartStrings = function (key) {\n return {\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n };\n };\n var redStrings = formPartStrings('red');\n var greenStrings = formPartStrings('green');\n var blueStrings = formPartStrings('blue');\n var hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'form',\n classes: [getClass('rgb-form')],\n attributes: { 'aria-label': translate('aria.color.picker') }\n },\n components: [\n parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n memPreview.asSpec()\n ],\n formBehaviours: derive$1([\n Invalidating.config({ invalidClass: getClass('form-invalid') }),\n config('rgb-form-events', [\n run(validInput, onValidInput),\n run(invalidInput, onInvalidInput),\n run(validatingInput, onInvalidInput)\n ])\n ])\n };\n }), {\n apis: {\n updateHex: function (form, hex) {\n Representing.setValue(form, { hex: hex.value() });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n var rgbFormSketcher = single$2({\n factory: factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: function (apis, form, hex) {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n var paletteFactory = function (_translate, getClass) {\n var spectrumPart = Slider.parts().spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n var thumbPart = Slider.parts().thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: '
'\n }\n });\n var setColour = function (canvas, rgba) {\n var width = canvas.width, height = canvas.height;\n var ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n var grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = grdWhite;\n ctx.fillRect(0, 0, width, height);\n var grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n ctx.fillStyle = grdBlack;\n ctx.fillRect(0, 0, width, height);\n };\n var setSliderColour = function (slider, rgba) {\n var canvas = slider.components()[0].element().dom();\n setColour(canvas, toString(rgba));\n };\n var factory = function (_detail) {\n var getInitialValue = constant({\n x: constant(0),\n y: constant(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(redColour()));\n };\n var sliderBehaviours = derive$1([\n Composing.config({ find: Option.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue: getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange: onChange,\n onInit: onInit,\n sliderBehaviours: sliderBehaviours\n });\n };\n var saturationBrightnessPaletteSketcher = single$2({\n factory: factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setRgba: function (_apis, slider, rgba) {\n setSliderColour(slider, rgba);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n var makeFactory = function (translate, getClass) {\n var factory = function (detail) {\n var rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);\n var sbPalette = paletteFactory(translate, getClass);\n var state = { paletteRgba: constant(Cell(redColour())) };\n var memPalette = record(sbPalette.sketch({}));\n var memRgb = record(rgbForm.sketch({}));\n var updatePalette = function (anyInSystem, hex) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n var rgba = fromHex(hex);\n state.paletteRgba().set(rgba);\n sbPalette.setRgba(palette, rgba);\n });\n };\n var updateFields = function (anyInSystem, hex) {\n memRgb.getOpt(anyInSystem).each(function (form) {\n rgbForm.updateHex(form, hex);\n });\n };\n var runUpdates = function (anyInSystem, hex, updates) {\n each(updates, function (update) {\n update(anyInSystem, hex);\n });\n };\n var paletteUpdates = function () {\n var updates = [updateFields];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event().value();\n var oldRgb = state.paletteRgba().get();\n var hsvColour$1 = fromRgb(oldRgb);\n var newHsvColour = hsvColour(hsvColour$1.hue(), value.x(), 100 - value.y());\n var rgb = fromHsv(newHsvColour);\n var nuHex = fromRgba(rgb);\n runUpdates(form, nuHex, updates);\n };\n };\n var sliderUpdates = function () {\n var updates = [\n updatePalette,\n updateFields\n ];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event().value();\n var hex = calcHex(value.y());\n runUpdates(form, hex, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n sliderFactory(translate, getClass),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run(paletteUpdate(), paletteUpdates()),\n run(sliderUpdate(), sliderUpdates())\n ]),\n Composing.config({\n find: function (comp) {\n return memRgb.getOpt(comp);\n }\n }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n var colourPickerSketcher = single$2({\n name: 'ColourPicker',\n configFields: [\n strict$1('dom'),\n defaulted$1('onValidHex', noop),\n defaulted$1('onInvalidHex', noop)\n ],\n factory: factory\n });\n return colourPickerSketcher;\n };\n\n var self$1 = function () {\n return Composing.config({ find: Option.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).toOption();\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 domGlobals.console.log('Can not find form');\n }, function (rgbForm) {\n Representing.setValue(rgbForm, { hex: Option.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$a = 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(Option.none());\n var memReplaced = record({ dom: { tag: spec.tag } });\n var initialValue = Cell(Option.none());\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('editor-foo-events', [runOnAttached(function (component) {\n memReplaced.getOpt(component).each(function (ta) {\n (isOldCustomEditor(spec) ? spec.init(ta.element().dom()) : global$a.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(Option.none());\n editorApi.set(Option.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(Option.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 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$5, set$3);\n };\n var domHtml = function (optInitialValue) {\n return withElement(optInitialValue, get$1, 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 extensionsAccepted = '.jpg,.jpeg,.png,.gif';\n var filterByExtension = function (files) {\n var re = new RegExp('(' + extensionsAccepted.split(/\\s*,\\s*/).join('|') + ')$', 'i');\n return filter(from$1(files), function (file) {\n return re.test(file.name);\n });\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 files = simulatedEvent.event().raw().target.files;\n handleFiles(component, files);\n };\n var handleFiles = function (component, files) {\n Representing.setValue(component, filterByExtension(files));\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([Tabstopping.config({})])\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(','), constant(false));\n };\n var NavigableObject = {\n isPseudoStop: isPseudoStop,\n onFocus: onFocus$1,\n craft: craft\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 NavigableObject.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(Option.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 function create$5(width, height) {\n return resize(domGlobals.document.createElement('canvas'), width, height);\n }\n function clone$1(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 function get2dContext(canvas) {\n return canvas.getContext('2d');\n }\n function resize(canvas, width, height) {\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n function getWidth(image) {\n return image.naturalWidth || image.width;\n }\n function getHeight(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 asap = Promise.immediateFn || typeof window.setImmediate === 'function' && window.setImmediate || function (fn) {\n domGlobals.setTimeout(fn, 1);\n };\n function bind(fn, thisArg) {\n return function () {\n return fn.apply(thisArg, arguments);\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 function doResolve(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 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 (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 function blobToImage(blob) {\n return new Promise$1(function (resolve, reject) {\n var blobUrl = domGlobals.URL.createObjectURL(blob);\n var image = new domGlobals.Image();\n var removeListeners = function () {\n image.removeEventListener('load', loaded);\n image.removeEventListener('error', error);\n };\n function loaded() {\n removeListeners();\n resolve(image);\n }\n function error() {\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 loaded();\n }\n });\n }\n function dataUriToBlobSync(uri) {\n var data = uri.split(',');\n var matches = /data:([^;]+)/.exec(data[0]);\n if (!matches) {\n return Option.none();\n }\n var mimetype = matches[1];\n var base64 = data[1];\n var sliceSize = 1024;\n var byteCharacters = domGlobals.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 Option.some(new domGlobals.Blob(byteArrays, { type: mimetype }));\n }\n function dataUriToBlob(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 function canvasToBlob(canvas, type, quality) {\n type = type || 'image/png';\n if (domGlobals.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 function canvasToDataURL(canvas, type, quality) {\n type = type || 'image/png';\n return canvas.toDataURL(type, quality);\n }\n function blobToCanvas(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 function blobToDataUri(blob) {\n return new Promise$1(function (resolve) {\n var reader = new domGlobals.FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n }\n function revokeImageUrl(image) {\n domGlobals.URL.revokeObjectURL(image.src);\n }\n\n function create$6(getCanvas, blob, uri) {\n var initialType = blob.type;\n var getType = constant(initialType);\n function toBlob() {\n return Promise$1.resolve(blob);\n }\n function toDataURL() {\n return uri;\n }\n function toBase64() {\n return uri.split(',')[1];\n }\n function toAdjustedBlob(type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToBlob(canvas, type, quality);\n });\n }\n function toAdjustedDataURL(type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToDataURL(canvas, type, quality);\n });\n }\n function toAdjustedBase64(type, quality) {\n return toAdjustedDataURL(type, quality).then(function (dataurl) {\n return dataurl.split(',')[1];\n });\n }\n function toCanvas() {\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 function fromBlob(blob) {\n return blobToDataUri(blob).then(function (uri) {\n return create$6(blobToCanvas(blob), blob, uri);\n });\n }\n function fromCanvas(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 function clamp$1(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 function identity$1() {\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 function multiply(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 function adjustContrast(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 function adjustBrightness(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 function adjustColors(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 function colorFilter(ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyColorFilter(canvas, ir.getType(), matrix);\n });\n }\n function applyColorFilter(canvas, type, matrix) {\n var context = get2dContext(canvas);\n function applyMatrix(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 function convoluteFilter(ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyConvoluteFilter(canvas, ir.getType(), matrix);\n });\n }\n function applyConvoluteFilter(canvas, type, matrix) {\n var context = get2dContext(canvas);\n function applyMatrix(pIn, pOut, aMatrix) {\n function clamp(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 function functionColorFilter(colorFn) {\n var filterImpl = function (canvas, type, value) {\n var context = get2dContext(canvas);\n var lookup = new Array(256);\n function applyLookup(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 function complexAdjustableColorFilter(matrixAdjustFn) {\n return function (ir, adjust) {\n return colorFilter(ir, matrixAdjustFn(identity$1(), adjust));\n };\n }\n function basicColorFilter(matrix) {\n return function (ir) {\n return colorFilter(ir, matrix);\n };\n }\n function basicConvolutionFilter(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 function scale(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 function _scale(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 function rotate(ir, angle) {\n return ir.toCanvas().then(function (canvas) {\n return applyRotate(canvas, ir.getType(), angle);\n });\n }\n function applyRotate(image, type, angle) {\n var canvas = create$5(image.width, image.height);\n var context = get2dContext(canvas);\n var translateX = 0;\n var translateY = 0;\n angle = angle < 0 ? 360 + angle : angle;\n if (angle === 90 || angle === 270) {\n resize(canvas, canvas.height, canvas.width);\n }\n if (angle === 90 || angle === 180) {\n translateX = canvas.width;\n }\n if (angle === 270 || angle === 180) {\n translateY = canvas.height;\n }\n context.translate(translateX, translateY);\n context.rotate(angle * Math.PI / 180);\n context.drawImage(image, 0, 0);\n return fromCanvas(canvas, type);\n }\n function flip(ir, axis) {\n return ir.toCanvas().then(function (canvas) {\n return applyFlip(canvas, ir.getType(), axis);\n });\n }\n function applyFlip(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 function crop(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 function applyCrop(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 function resize$1(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$d(iconName, iconsProvider), {});\n };\n var renderReplacableIconFromPack = function (iconName, iconsProvider) {\n return renderIcon$1(get$d(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 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 = {\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events'\n ]\n };\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 Option.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({}, 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 Option.some({\n dom: {\n tag: 'div',\n classes: [prefix + '__select-chevron'],\n innerHtml: get$d('chevron-down', sharedBackstage.providers.icons)\n }\n })\n ]),\n matchWidth: true,\n useMinWidth: true,\n dropdownBehaviours: derive$1(__spreadArrays(spec.dropdownBehaviours, [\n DisablingConfigs.button(spec.disabled),\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 () {\n return Future.nu(spec.fetch);\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(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 Option.none();\n }\n var mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, isHorizontalMenu);\n var submenus = map$1(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 Option.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 (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) {\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(spec.disabled),\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);\n };\n var renderIconButton = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var iconButtonSpec = renderIconButtonSpec(spec, Option.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 }) : Option.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);\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, Option.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 domGlobals.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, Option.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 domGlobals.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(Option.none(), FormField.parts().field(__assign({ factory: Button }, renderButtonSpec(spec, Option.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: Option.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 Option.some(size.value);\n } else if (supported(size.unit) && supported(unit)) {\n if (inInch[size.unit] === inInch[unit]) {\n return Option.some(size.value);\n } else {\n return Option.some(size.value / inInch[size.unit] * inInch[unit]);\n }\n } else {\n return Option.none();\n }\n };\n var noSizeConversion = function (input) {\n return Option.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).toOption();\n var oValue = parseSize(otherFieldText).toOption();\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$d('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$d('unlock', providersBackstage.icons)\n }\n }\n ],\n buttonBehaviours: derive$1([\n DisablingConfigs.button(spec.disabled),\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({ disabled: spec.disabled }),\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: spec.disabled,\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 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: Option.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: Option.some(icon),\n tooltip: Option.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: Option.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: constant(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 = Option.some(sharpen$1);\n var invertTransform = Option.some(invert$1);\n var buttonPanelComponents = [\n createIconButton('crop', 'Crop', getTransformPanelEvent(CropPanel, Option.none(), cropPanelUpdate), false),\n createIconButton('resize', 'Resize', getTransformPanelEvent(ResizePanel, Option.none(), resizePanelUpdate), false),\n createIconButton('orientation', 'Orientation', getTransformPanelEvent(FlipRotatePanel, Option.none(), noop$1), false),\n createIconButton('brightness', 'Brightness', getTransformPanelEvent(BrightnessPanel, Option.none(), noop$1), false),\n createIconButton('sharpen', 'Sharpen', getTransformPanelEvent(FilterPanel, sharpenTransform, noop$1), false),\n createIconButton('contrast', 'Contrast', getTransformPanelEvent(ContrastPanel, Option.none(), noop$1), false),\n createIconButton('color-levels', 'Color levels', getTransformPanelEvent(ColorizePanel, Option.none(), noop$1), false),\n createIconButton('gamma', 'Gamma', getTransformPanelEvent(GammaPanel, Option.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$b = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$c = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$d = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n var global$e = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$f = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n function getDocumentSize(doc) {\n var documentElement, body, scrollWidth, clientWidth;\n var offsetWidth, scrollHeight, clientHeight, offsetHeight;\n var max = Math.max;\n documentElement = doc.documentElement;\n body = doc.body;\n scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n clientWidth = max(documentElement.clientWidth, body.clientWidth);\n offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n clientHeight = max(documentElement.clientHeight, body.clientHeight);\n offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n }\n function updateWithTouchData(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 || domGlobals.document;\n var downButton;\n var start, stop, drag, startX, startY;\n settings = settings || {};\n var handleElement = doc.getElementById(settings.handle || id);\n start = function (e) {\n var docSize = getDocumentSize(doc);\n var handleElm, cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (domGlobals.window.getComputedStyle) {\n cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$b('
').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$b(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\n settings.start(e);\n };\n 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 stop = function (e) {\n updateWithTouchData(e);\n global$b(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n $eventOverlay.remove();\n if (settings.stop) {\n settings.stop(e);\n }\n };\n this.destroy = function () {\n global$b(handleElement).off();\n };\n global$b(handleElement).on('mousedown touchstart', start);\n }\n\n var count = 0;\n var create$7 = function (currentRect, viewPortRect, clampRect, containerElm, action) {\n var instance;\n var dragHelpers;\n var blockers;\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 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 function moveRect(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$c.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 function render() {\n function createDragHelper(handle) {\n var startRect;\n return new 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$b('
').appendTo(containerElm);\n global$e.each(blockers, function (blocker) {\n global$b('#' + id, containerElm).append('
');\n });\n global$e.each(handles, function (handle) {\n global$b('#' + id, containerElm).append('
');\n });\n dragHelpers = global$e.map(handles, createDragHelper);\n repaint(currentRect);\n global$b(containerElm).on('focusin focusout', function (e) {\n global$b(e.target).attr('aria-grabbed', e.type === 'focus' ? 'true' : 'false');\n });\n global$b(containerElm).on('keydown', function (e) {\n var activeHandle;\n global$e.each(handles, function (handle) {\n if (e.target.id === id + '-' + handle.name) {\n activeHandle = handle;\n return false;\n }\n });\n function moveAndBlock(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$f.LEFT:\n moveAndBlock(e, activeHandle, currentRect, -10, 0);\n break;\n case global$f.RIGHT:\n moveAndBlock(e, activeHandle, currentRect, 10, 0);\n break;\n case global$f.UP:\n moveAndBlock(e, activeHandle, currentRect, 0, -10);\n break;\n case global$f.DOWN:\n moveAndBlock(e, activeHandle, currentRect, 0, 10);\n break;\n case global$f.ENTER:\n case global$f.SPACEBAR:\n e.preventDefault();\n action();\n break;\n }\n });\n }\n function toggleVisibility(state) {\n var selectors;\n selectors = global$e.map(handles, function (handle) {\n return '#' + id + '-' + handle.name;\n }).concat(global$e.map(blockers, function (blocker) {\n return '#' + id + '-' + blocker;\n })).join(',');\n if (state) {\n global$b(selectors, containerElm).show();\n } else {\n global$b(selectors, containerElm).hide();\n }\n }\n function repaint(rect) {\n function updateElementRect(name, rect) {\n if (rect.h < 0) {\n rect.h = 0;\n }\n if (rect.w < 0) {\n rect.w = 0;\n }\n global$b('#' + id + '-' + name, containerElm).css({\n left: rect.x,\n top: rect.y,\n width: rect.w,\n height: rect.h\n });\n }\n global$e.each(handles, function (handle) {\n global$b('#' + 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 function setRect(rect) {\n currentRect = rect;\n repaint(currentRect);\n }\n function setViewPortRect(rect) {\n viewPortRect = rect;\n repaint(currentRect);\n }\n function setInnerRect(rect) {\n setRect(getAbsoluteRect(clampRect, rect));\n }\n function setClampRect(rect) {\n clampRect = rect;\n repaint(currentRect);\n }\n function destroy() {\n global$e.each(dragHelpers, function (helper) {\n helper.destroy();\n });\n dragHelpers = [];\n }\n render();\n instance = global$e.extend({\n toggleVisibility: toggleVisibility,\n setClampRect: setClampRect,\n setRect: setRect,\n getInnerRect: getInnerRect,\n setInnerRect: setInnerRect,\n setViewPortRect: setViewPortRect,\n destroy: destroy\n }, global$d);\n return instance;\n };\n var CropRect = { create: create$7 };\n\n var loadImage = function (image) {\n return new global$6(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(Option.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$7(panel.element());\n var panelH = get$6(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$7(panel.element());\n var panelH = get$6(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 = Element.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, Option.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$c.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, function () {\n });\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(Option.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: Option.some(icon),\n disabled: disabled,\n tooltip: Option.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 function add(state) {\n var removed;\n removed = data.splice(++index);\n data.push(state);\n return {\n state: state,\n removed: removed\n };\n }\n function undo() {\n if (canUndo()) {\n return data[--index];\n }\n }\n function redo() {\n if (canRedo()) {\n return data[++index];\n }\n }\n function canUndo() {\n return index > 0;\n }\n function canRedo() {\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(Option.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(Option.some(newTempState));\n return newTempState.url;\n };\n var createState = function (blob) {\n return {\n blob: blob,\n url: domGlobals.URL.createObjectURL(blob)\n };\n };\n var destroyState = function (state) {\n domGlobals.URL.revokeObjectURL(state.url);\n };\n var destroyStates = function (states) {\n global$e.each(states, destroyState);\n };\n var destroyTempState = function () {\n tempState.get().each(destroyState);\n tempState.set(Option.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(Option.some(newState));\n return newState.url;\n };\n var applyTempState = function (postApply) {\n return tempState.get().fold(function () {\n }, 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 domGlobals.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 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$5(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({ disabled: spec.disabled }),\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 ? Option.none() : Option.some({\n dom: {\n tag: 'div',\n classes: ['tox-selectfield__icon-js'],\n innerHtml: get$d('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([Disabling.config({\n disabled: 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 renderTextField = function (spec, providersBackstage) {\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var baseInputBehaviours = [\n Disabling.config({ disabled: spec.disabled }),\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 Option.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 = [Disabling.config({\n disabled: 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 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: Option.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: Option.none(),\n placeholder: spec.placeholder,\n flex: true,\n disabled: spec.disabled,\n classname: 'tox-textarea',\n validation: Option.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$5(el);\n var node = el.dom();\n if (get$2(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 Option.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 ? Option.some(function () {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay_1.length);\n }) : Option.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$5(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$5(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 Option.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 Option.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 Option.some(true);\n }\n return Option.none();\n },\n onUp: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Option.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 Option.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', Option.some),\n defaulted$1('getAnchorOverrides', constant({})),\n defaulted$1('layouts', Option.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).toOption().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 = domGlobals.setTimeout(function () {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(function (result) {\n if (!timedOut) {\n domGlobals.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: function () {\n }\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: function () {\n }\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 Option.from(linkInfo.anchorTop).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var anchorTargetBottom = function (linkInfo) {\n return Option.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({ disabled: spec.disabled }),\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$d(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', Option.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({ disabled: spec.disabled })])\n });\n var memUrlPickerButton = record(renderButton({\n name: spec.name,\n icon: Option.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: spec.disabled,\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 config('url-input-events', [run(browseUrlEvent, openUrlPicker)])\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 Option.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({ disabled: spec.disabled }),\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$d(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([Disabling.config({\n disabled: spec.disabled,\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 });\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 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(Option.none()),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n\n var renderCollection = function (spec, providersBackstage) {\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$2(target, 'data-collection-item-value'));\n });\n };\n };\n var escapeAttribute = function (ch) {\n if (ch === '\"') {\n return '"';\n }\n return ch;\n };\n var setContents = function (comp, items) {\n var htmlLines = map(items, function (item) {\n var itemText = global$7.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 return '
' + iconContent + textContent + '
';\n });\n var chunks = spec.columns > 1 && spec.columns !== 'auto' ? 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 emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\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 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 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 });\n var extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\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 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 make$6 = function (render) {\n return function (parts, spec, backstage) {\n return get(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 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(factories, spec.type).fold(function () {\n domGlobals.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, useEditableAreaAnchor) {\n var bubble = nu$8(-12, 12, bubbleAlignments);\n var overrides = { maxHeightFunction: expandable() };\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: getBody(owner(contentAreaElement())),\n node: Option.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 useEditableAreaAnchor ? editableAreaAnchor : standardAnchor;\n };\n var getBannerAnchor = function (contentAreaElement, lazyAnchorbar, useEditableAreaAnchor) {\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: getBody(owner(contentAreaElement())),\n node: Option.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 useEditableAreaAnchor ? editableAreaAnchor : standardAnchor;\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 Option.some(Selection.range(Element.fromDom(rng.startContainer), rng.startOffset, Element.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) {\n var useFixedToolbarContainer = useFixedContainer(editor);\n var bodyElement = function () {\n return Element.fromDom(editor.getBody());\n };\n var contentAreaElement = function () {\n return Element.fromDom(editor.getContentAreaContainer());\n };\n var useEditableAreaAnchor = useFixedToolbarContainer || !isToolbarLocationTop(editor);\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, useEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, useEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor(bodyElement)\n };\n };\n var Anchors = { getAnchors: getAnchors };\n\n var colorPicker = function (editor) {\n return function (callback, value) {\n var dialog = ColorSwatch.colorPickerDialog(editor);\n dialog(callback, value);\n };\n };\n var hasCustomColors$1 = function (editor) {\n return function () {\n return Settings.hasCustomColors(editor);\n };\n };\n var getColors$1 = function (editor) {\n return function () {\n return Settings.getColors(editor);\n };\n };\n var getColorCols$2 = function (editor) {\n return function () {\n return ColorSwatch.getColorCols(editor);\n };\n };\n var ColorInputBackstage = function (editor) {\n return {\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors$1(editor),\n getColors: getColors$1(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 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 icon: 'bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n icon: 'italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n icon: 'underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n icon: 'strike-through',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n icon: 'superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n icon: 'subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n icon: '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 icon: 'align-left',\n format: 'alignleft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright'\n },\n {\n title: 'Justify',\n icon: 'align-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 = 'custom-' + fmt.title.toLowerCase();\n return {\n customFormats: acc.customFormats.concat([{\n name: formatName,\n format: fmt\n }]),\n formats: acc.formats.concat([{\n title: fmt.title,\n format: formatName,\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 = generate$1(item.title);\n var customSpec = {\n type: 'formatter',\n format: formatName,\n isSelected: isSelectedFor(formatName),\n getStylePreview: getPreviewFor(formatName)\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 ? Option.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Option.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 trim$1 = global$e.trim;\n var hasContentEditableState = function (value) {\n return function (node) {\n if (node && node.nodeType === 1) {\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(Element.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 = domGlobals.localStorage.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 domGlobals.console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n return {};\n }\n throw e;\n }\n if (!isRecordOfUrlArray(history)) {\n domGlobals.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 domGlobals.localStorage.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 hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var isTruthy = function (value) {\n return !!value;\n };\n var makeMap = function (value) {\n return map$1(global$e.makeMap(value, /[, ]/), isTruthy);\n };\n var getOpt$1 = function (obj, key) {\n return hasOwnProperty$2.call(obj, key) ? Option.some(obj[key]) : Option.none();\n };\n var getTextSetting = function (settings, name, defaultValue) {\n var value = getOpt$1(settings, name).getOr(defaultValue);\n return isString(value) ? Option.some(value) : Option.none();\n };\n var getPicker = function (settings) {\n return Option.some(settings.file_picker_callback).filter(isFunction);\n };\n var getPickerTypes = function (settings) {\n var optFileTypes = Option.some(settings.file_picker_types).filter(isTruthy);\n var optLegacyTypes = Option.some(settings.file_browser_callback_types).filter(isTruthy);\n var optTypes = optFileTypes.or(optLegacyTypes).map(makeMap);\n return getPicker(settings).fold(function () {\n return false;\n }, function (_picker) {\n return optTypes.fold(function () {\n return true;\n }, function (types) {\n return keys(types).length > 0 ? types : false;\n });\n });\n };\n var getPickerSetting = function (settings, filetype) {\n var pickerTypes = getPickerTypes(settings);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(settings) : Option.none();\n } else {\n return pickerTypes[filetype] ? getPicker(settings) : Option.none();\n }\n };\n var getUrlPicker = function (editor, filetype) {\n return getPickerSetting(editor.settings, 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 }, Option.from(entry.meta).getOr({}));\n picker.call(editor, handler, entry.value, meta);\n });\n };\n });\n };\n var getLinkInformation = function (editor) {\n if (editor.settings.typeahead_urls === false) {\n return Option.none();\n }\n return Option.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(editor.settings, 'anchor_top', '#top').getOrUndefined(),\n anchorBottom: getTextSetting(editor.settings, 'anchor_bottom', '#bottom').getOrUndefined()\n });\n };\n var getValidationHandler = function (editor) {\n var optValidator = Option.from(editor.settings.file_picker_validator_handler).filter(isFunction);\n return optValidator.orThunk(function () {\n return Option.from(editor.settings.filepicker_validator_handler).filter(isFunction);\n });\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 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$7.translate\n },\n interpreter: function (s) {\n return interpretWithoutForm(s, backstage);\n },\n anchors: Anchors.getAnchors(editor, lazyAnchorbar),\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('items'),\n markers(['itemSelector']),\n field$1('tgroupBehaviours', [Keying])\n ]);\n var parts$7 = constant([group({\n name: 'items',\n unit: 'item'\n })]);\n\n var factory$9 = 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$k(),\n partFields: parts$7(),\n factory: factory$9\n });\n\n var schema$l = 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$8 = constant([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n var factory$a = function (detail, components, spec, _externals) {\n var setGroups = function (toolbar, groups) {\n getGroupContainer(toolbar).fold(function () {\n domGlobals.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 ? Option.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$l(),\n partFields: parts$8(),\n factory: factory$a,\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 = Immutable('within', 'extra', 'withinWidth');\n var apportion = function (units, total, len) {\n var parray = generate$6(units, function (unit, current) {\n var width = len(unit);\n return Option.some({\n element: constant(unit),\n start: constant(current),\n finish: constant(current + width),\n width: constant(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: constant(within),\n extra: constant(extra),\n withinWidth: constant(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 ? Option.some(divide) : Option.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).toOption();\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$7(primary.element());\n var overflows = partition$3(availableWidth, detail.builtGroups.get(), function (comp) {\n return get$7(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$m = constant([\n field$1('splitToolbarBehaviours', [Coupling]),\n state$1('builtGroups', function () {\n return Cell([]);\n })\n ]);\n\n var schema$n = constant([\n markers(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n strict$1('lazySink'),\n state$1('overflowGroups', function () {\n return Cell([]);\n })\n ].concat(schema$m()));\n var parts$9 = constant([\n required({\n factory: Toolbar,\n schema: schema$l(),\n name: 'primary'\n }),\n external$1({\n schema: schema$l(),\n name: 'overflow'\n }),\n external$1({ name: 'overflow-button' }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var schema$o = 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$a = 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$l(),\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 Option.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 Option.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$b = 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 }\n });\n };\n var FloatingToolbarButton = composite$1({\n name: 'FloatingToolbarButton',\n factory: factory$b,\n configFields: schema$o(),\n partFields: parts$a(),\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 }\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 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(function (floatingToolbarButton) {\n return FloatingToolbarButton.getToolbar(floatingToolbarButton);\n });\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitFloatingToolbar = composite$1({\n name: 'SplitFloatingToolbar',\n configFields: schema$n(),\n partFields: parts$9(),\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 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, Option.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, Option.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) === true || isShrinking(component, slideConfig) === true;\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) {\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$7(elem) + 'px';\n })\n ],\n height: [\n output('property', 'height'),\n output('getDimension', function (elem) {\n return get$6(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$m()));\n var parts$b = constant([\n required({\n factory: Toolbar,\n schema: schema$l(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$l(),\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 Option.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 toggleToolbar = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow').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 getPart(toolbar, detail, 'overflow').each(function (overf) {\n refresh$3(toolbar, detail);\n Sliding.toggleGrow(overf);\n });\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 },\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 }\n });\n\n var toolbarHeightChange = constant(generate$1('toolbar-height-change'));\n\n var ReadOnlyChannel = 'silver.readonly';\n var ReadOnlyDataSchema = objOf([strictBoolean('readonly')]);\n var setDisabledAll = function (element, state) {\n all('*', element.element()).forEach(function (elm) {\n element.getSystem().getByDom(elm).each(function (comp) {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, state);\n }\n });\n });\n };\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 toggleToReadOnly = function (uiComponents, readonly) {\n var outerContainer = uiComponents.outerContainer;\n broadcastReadonly(uiComponents, readonly);\n all('*', outerContainer.element()).forEach(function (elm) {\n outerContainer.getSystem().getByDom(elm).each(function (comp) {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, readonly);\n }\n });\n });\n };\n var setupReadonlyModeSwitch = function (editor, uiComponents) {\n editor.on('init', function () {\n if (editor.mode.isReadOnly()) {\n toggleToReadOnly(uiComponents, true);\n }\n });\n editor.on('SwitchMode', function () {\n return toggleToReadOnly(uiComponents, editor.mode.isReadOnly());\n });\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n };\n var createReadonlyReceivingForOverflow = function (getOverflow) {\n var _a;\n return Receiving.config({\n channels: (_a = {}, _a[ReadOnlyChannel] = {\n schema: ReadOnlyDataSchema,\n onReceive: function (comp, data) {\n getOverflow(comp).each(function (toolbar) {\n setDisabledAll(toolbar, data.readonly);\n });\n }\n }, _a)\n });\n };\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, getOverflow) {\n var onAttached = runOnAttached(function (component) {\n var groups = map(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached]),\n createReadonlyReceivingForOverflow(getOverflow)\n ]);\n };\n var renderMoreToolbarCommon = function (toolbarSpec, getOverflow) {\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: Option.none(),\n items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n name: 'more',\n icon: Option.some('more-drawer'),\n disabled: false,\n tooltip: Option.some('More...'),\n primary: false,\n borderless: false\n }, Option.none(), toolbarSpec.backstage.shared.providers)\n },\n splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName, getOverflow)\n };\n };\n var renderFloatingMoreToolbar = function (toolbarSpec) {\n var baseSpec = renderMoreToolbarCommon(toolbarSpec, SplitFloatingToolbar.getOverflow);\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, Option.none);\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, constant(Option.none()))\n });\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 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 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 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 contextBarFields = [\n defaultedFunction('predicate', function () {\n return false;\n }),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\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 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 var createContextForm = function (spec) {\n return asRaw('ContextForm', contextFormSchema, spec);\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 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 var channel = reflectingConfig.channel;\n if (contains(receivingData.channels(), channel)) {\n update(component, receivingData.data());\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 init$a = function () {\n var cell = Cell(Option.none());\n var set = function (optS) {\n return cell.set(optS);\n };\n var clear = function () {\n return cell.set(Option.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 ReflectingSchema = [\n strict$1('channel'),\n option('renderComponents'),\n option('updateState'),\n option('initialData')\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', Option.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 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 Option.some(true);\n };\n var executeOnButton = function (comp) {\n var button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Option.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(Option.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), {\n 'alloy.execute': [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n }),\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: 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 _a;\n var getIconName = function (iconName) {\n return global$7.isRtl() && contains(rtlIcon$1, iconName) ? iconName + '-rtl' : iconName;\n };\n var needsRtlClass = global$7.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: (_a = {}, _a[mousedown()] = [\n 'focusing',\n 'alloy.base.behaviour',\n 'common-button-display-events'\n ], _a),\n buttonBehaviours: derive$1([config('common-button-display-events', [run(mousedown(), function (button, se) {\n se.event().prevent();\n emit(button, focusButtonEvent);\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, Option.none(), Option.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, Option.none(), Option.none(), providersBackstage);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: derive$1([\n config('toolbar-button-events', [\n onToolbarButtonExecute({\n onAction: spec.onAction,\n getApi: specialisation.getApi\n }),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n DisablingConfigs.toolbarButton(spec.disabled)\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 Option.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(function () {\n return false;\n }), 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 (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n })));\n });\n };\n };\n var renderSplitButton = function (spec, sharedBackstage) {\n var _a;\n var displayChannel = generate$1('channel-update-split-dropdown-display');\n var getApi = function (comp) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(comp);\n },\n setDisabled: function (state) {\n return Disabling.set(comp, state);\n },\n setIconFill: function (id, value) {\n descendant$1(comp.element(), 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'fill', value);\n });\n },\n setIconStroke: function (id, value) {\n descendant$1(comp.element(), 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'stroke', value);\n });\n },\n setActive: function (state) {\n set$1(comp.element(), 'aria-pressed', state);\n descendant$1(comp.element(), 'span').each(function (button) {\n comp.getSystem().getByDom(button).each(function (buttonComp) {\n return Toggling.set(buttonComp, state);\n });\n });\n },\n isActive: function () {\n return descendant$1(comp.element(), 'span').exists(function (button) {\n return comp.getSystem().getByDom(button).exists(Toggling.isOn);\n });\n }\n };\n };\n var editorOffCell = Cell(noop);\n var specialisation = {\n getApi: getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: __assign({ 'aria-pressed': false }, getTooltipAttributes(spec.tooltip, sharedBackstage.providers))\n },\n onExecute: function (button) {\n spec.onAction(getApi(button));\n },\n onItemExecute: function (a, b, c) {\n },\n splitDropdownBehaviours: derive$1([\n DisablingConfigs.splitButton(false),\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: (_a = {}, _a[attachedToDom()] = [\n 'alloy.base.behaviour',\n 'split-dropdown-events'\n ], _a),\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, Option.none(), Option.some(displayChannel), Option.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$d('chevron-down', sharedBackstage.providers.icons)\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: function () {\n }\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: function () {\n }\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 Option.from(mementos[i]).bind(function (mem) {\n return mem.getOpt(compInSystem);\n }).filter(not(Disabling.isDisabled));\n } else {\n return Option.none();\n }\n });\n };\n return {\n asSpecs: asSpecs,\n findPrimary: findPrimary\n };\n };\n\n var renderContextForm = function (toolbarType, ctx, backstage) {\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 Option.none();\n },\n onRight: function (comp, se) {\n se.cut();\n return Option.none();\n }\n })])\n }));\n var commands = generate$7(memInput, ctx.commands, backstage.shared.providers);\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: [\n {\n title: Option.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Option.none(),\n items: commands.asSpecs()\n }\n ],\n onEscape: Option.none,\n cyclicKeying: true\n });\n };\n var ContextForm = { renderContextForm: renderContextForm };\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) {\n var container = Element.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 isToolbarLocationTop$1 = isToolbarLocationTop(editor);\n var isToolbarAbove = isToolbarLocationTop$1 && !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) {\n var viewportBounds = getBounds(domGlobals.window);\n var contentAreaBox = box(Element.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 _b = getVerticalBounds(editor, contentAreaBox, viewportBounds), y = _b.y, bottom = _b.bottom;\n return bounds$1(x, y, width, bottom - y);\n }\n };\n\n var matchTargetWith = function (elem, toolbars) {\n return findMap(toolbars, function (toolbarApi) {\n return toolbarApi.predicate(elem.dom()) ? Option.some({\n toolbarApi: toolbarApi,\n elem: elem\n }) : Option.none();\n });\n };\n var lookup$1 = function (scopes, editor) {\n var rootElem = Element.fromDom(editor.getBody());\n var isRoot = function (elem) {\n return eq(elem, rootElem);\n };\n var isOutsideRoot = function (startNode) {\n return !isRoot(startNode) && !contains$2(rootElem, startNode);\n };\n var startNode = Element.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Option.none();\n }\n return matchTargetWith(startNode, scopes.inNodeScope).orThunk(function () {\n return matchTargetWith(startNode, scopes.inEditorScope).orThunk(function () {\n if (isRoot(startNode)) {\n return Option.none();\n } else {\n return ancestor(startNode, function (elem) {\n return matchTargetWith(elem, scopes.inNodeScope);\n }, isRoot);\n }\n });\n });\n };\n var ToolbarLookup = { lookup: lookup$1 };\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, toolbarApi) {\n var contextForm = getOrDie(createContextForm(toolbarApi));\n forms[key] = contextForm;\n contextForm.launch.map(function (launch) {\n formNavigators['form:' + key + ''] = __assign(__assign({}, toolbarApi.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, toolbarApi) {\n createContextToolbar(toolbarApi).each(function (contextToolbar) {\n if (toolbarApi.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 var ToolbarScopes = { categorise: categorise };\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 InlineView.getContent(comp).each(function (c) {\n });\n remove$4(comp.element(), resizingClass);\n remove$6(comp.element(), 'width');\n }),\n run(changeSlideEvent, function (comp, se) {\n remove$6(comp.element(), 'width');\n var currentWidth = get$7(comp.element());\n InlineView.setContent(comp, se.event().contents());\n add$2(comp.element(), resizingClass);\n var newWidth = get$7(comp.element());\n set$2(comp.element(), 'width', currentWidth + 'px');\n InlineView.getContent(comp).each(function (newContents) {\n se.event().focus().bind(function (f) {\n focus$1(f);\n return search(comp.element());\n }).orThunk(function () {\n Keying.focusIn(newContents);\n return active();\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()\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event().forwardContents(),\n focus: Option.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 Option.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 Option.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 Option.none();\n } else {\n return Option.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 Option.some(__assign({\n type: 'togglemenuitem',\n text: translatedText,\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 (callback) {\n var preItems = getStyleItems();\n var items = validateItems(preItems);\n var menu = build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false);\n callback(menu);\n };\n };\n return {\n validateItems: validateItems,\n getFetch: getFetch\n };\n };\n var createMenuItems = function (editor, backstage, spec) {\n var dataset = spec.dataset;\n var getStyleItems = dataset.type === 'basic' ? function () {\n return map(dataset.data, function (d) {\n return processBasic(d, spec.isSelectedFor, spec.getPreviewFor);\n });\n } : dataset.getData;\n return {\n items: generateSelectItems(editor, backstage, spec),\n getStyleItems: getStyleItems\n };\n };\n var createSelectButton = function (editor, backstage, spec) {\n var _a = createMenuItems(editor, backstage, spec), items = _a.items, getStyleItems = _a.getStyleItems;\n var getApi = function (comp) {\n return {\n getComponent: function () {\n return comp;\n }\n };\n };\n var onSetup = function (api) {\n spec.setInitialValue.each(function (f) {\n return f(api.getComponent());\n });\n return spec.nodeChangeHandler.map(function (f) {\n var handler = f(api.getComponent());\n editor.on('NodeChange', handler);\n return function () {\n editor.off('NodeChange', handler);\n };\n }).getOr(noop);\n };\n return renderCommonDropdown({\n text: spec.icon.isSome() ? Option.none() : Option.some(''),\n icon: spec.icon,\n tooltip: Option.from(spec.tooltip),\n role: Option.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 = get(editor.settings, settingName).getOr(defaults);\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 Option.none();\n };\n };\n var updateSelectMenuIcon = function (comp) {\n var match = getMatchingValue();\n var alignment = match.fold(function () {\n return 'left';\n }, function (item) {\n return item.title.toLowerCase();\n });\n emitWith(comp, updateMenuIcon, { icon: 'align-' + alignment });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function () {\n return updateSelectMenuIcon(comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n return updateSelectMenuIcon(comp);\n });\n var dataset = buildBasicStaticDataset(alignMenuItems);\n var onAction = function (rawItem) {\n return function () {\n return find(alignMenuItems, function (item) {\n return item.format === rawItem.format;\n }).each(function (item) {\n return editor.execCommand(item.command);\n });\n };\n };\n return {\n tooltip: 'Align',\n icon: Option.some('align-left'),\n isSelectedFor: isSelectedFor,\n getCurrentValue: constant(Option.none()),\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createAlignSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec(editor));\n };\n var alignSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate('Align'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';\n var systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n var splitFonts = function (fontFamily) {\n var fonts = fontFamily.split(/\\s*,\\s*/);\n return map(fonts, function (font) {\n return font.replace(/^['\"]+|['\"]+$/g, '');\n });\n };\n var isSystemFontStack = function (fontFamily) {\n var matchesSystemStack = function () {\n var fonts = splitFonts(fontFamily.toLowerCase());\n return forall(systemStackFonts, function (font) {\n return fonts.indexOf(font.toLowerCase()) > -1;\n });\n };\n return fontFamily.indexOf('-apple-system') === 0 && matchesSystemStack();\n };\n var getSpec$1 = function (editor) {\n var getMatchingValue = function () {\n var getFirstFont = function (fontFamily) {\n return fontFamily ? splitFonts(fontFamily)[0] : '';\n };\n var fontFamily = editor.queryCommandValue('FontName');\n var items = dataset.data;\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var matchOpt = find(items, function (item) {\n var format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(function () {\n if (isSystemFontStack(font)) {\n return Option.from({\n title: 'System Font',\n format: font\n });\n } else {\n return Option.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 Option.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n };\n };\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, font = _a.font;\n var text = matchOpt.fold(function () {\n return font;\n }, function (item) {\n return item.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'font_formats', defaultFontsFormats, Delimiter.SemiColon);\n return {\n tooltip: 'Fonts',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: getCurrentValue,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function () {\n return false;\n }\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 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 }\n return fontSize;\n };\n var toLegacy = function (fontSize) {\n return get(legacyFontSizes, fontSize).getOr('');\n };\n var getSpec$2 = function (editor) {\n var getMatchingValue = function () {\n var matchOpt = Option.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(constant(Option.none()));\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, size = _a.size;\n var text = matchOpt.fold(function () {\n return size;\n }, function (match) {\n return match.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'fontsize_formats', defaultFontsizeFormats, Delimiter.Space);\n return {\n tooltip: 'Font sizes',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getPreviewFor: getPreviewFor,\n getCurrentValue: getCurrentValue,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function () {\n return false;\n }\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, parents) {\n var styles = getStyles();\n return findMap(parents, function (parent) {\n return find(styles, function (fmt) {\n return editor.formatter.matchNode(parent, fmt.format);\n });\n }).orThunk(function () {\n if (editor.formatter.match('p')) {\n return Option.some({\n title: 'Paragraph',\n format: 'p'\n });\n }\n return Option.none();\n });\n };\n var getCurrentSelectionParents = function (editor) {\n var currentNode = editor.selection.getStart(true) || editor.getBody();\n return editor.dom.getParents(currentNode, function () {\n return true;\n }, editor.getBody());\n };\n\n var onSetupFormatToggle = function (editor, name) {\n return function (api) {\n var unbindCell = Cell(Option.none());\n var init = function () {\n api.setActive(editor.formatter.match(name));\n var unbind = editor.formatter.formatChanged(name, api.setActive).unbind;\n unbindCell.set(Option.some(unbind));\n };\n editor.initialized ? init() : editor.on('init', init);\n return function () {\n return unbindCell.get().each(function (unbind) {\n return unbind();\n });\n };\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 getMatchingValue = function (nodeChangeEvent) {\n return findNearest(editor, function () {\n return dataset.data;\n }, nodeChangeEvent);\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 var fmt = editor.formatter.get(format);\n return Option.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 (parents, comp) {\n var detectedFormat = getMatchingValue(parents);\n var text = detectedFormat.fold(function () {\n return 'Paragraph';\n }, function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function (e) {\n return updateSelectMenuText(e.parents, comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n var parents = getCurrentSelectionParents(editor);\n updateSelectMenuText(parents, comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'block_formats', defaultBlocks, Delimiter.SemiColon);\n return {\n tooltip: 'Blocks',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: constant(Option.none()),\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat(editor),\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createFormatSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$3(editor));\n };\n var formatSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('blockformats', {\n text: 'Blocks',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var getSpec$4 = function (editor, dataset) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\n return fmt !== undefined ? Option.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Option.none();\n };\n };\n var updateSelectMenuText = function (parents, 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 }, parents);\n var text = detectedFormat.fold(function () {\n return 'Paragraph';\n }, function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function (e) {\n return updateSelectMenuText(e.parents, comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n var parents = getCurrentSelectionParents(editor);\n updateSelectMenuText(parents, comp);\n });\n return {\n tooltip: 'Formats',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: constant(Option.none()),\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat(editor),\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n shouldHide: editor.getParam('style_formats_autohide', false, 'boolean'),\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n },\n dataset: dataset\n };\n };\n var createStyleSelect = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n return createSelectButton(editor, backstage, getSpec$4(editor, dataset));\n };\n var styleSelectMenu = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n var menuItems = createMenuItems(editor, backstage, getSpec$4(editor, dataset));\n editor.ui.registry.addNestedMenuItem('formats', {\n text: 'Formats',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'styles',\n items: ['styleselect']\n },\n {\n name: 'formatting',\n items: [\n 'bold',\n 'italic'\n ]\n },\n {\n name: 'alignment',\n items: [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ]\n },\n {\n name: 'indentation',\n items: [\n 'outdent',\n 'indent'\n ]\n },\n {\n name: 'permanent pen',\n items: ['permanentpen']\n },\n {\n name: 'comments',\n items: ['addcomment']\n }\n ];\n var renderFromBridge = function (bridgeBuilder, render) {\n return function (spec, extras, editor) {\n var internal = bridgeBuilder(spec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return render(internal, extras, editor);\n };\n };\n var types = {\n button: renderFromBridge(createToolbarButton, function (s, extras) {\n return renderToolbarButton(s, extras.backstage.shared.providers);\n }),\n togglebutton: renderFromBridge(createToggleButton, function (s, extras) {\n return renderToolbarToggleButton(s, extras.backstage.shared.providers);\n }),\n menubutton: renderFromBridge(createMenuButton, function (s, extras) {\n return renderMenuButton(s, 'tox-tbtn', extras.backstage, Option.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, Option.none());\n };\n var attributes = (_a = {}, _a[Attribute] = isToolbarLocationTop(editor) ? 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(types, spec.type).fold(function () {\n domGlobals.console.error('skipping button defined by', spec);\n return Option.none();\n }, function (render) {\n return Option.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 domGlobals.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(buttons, toolbarItem.toLowerCase()).orThunk(function () {\n return prefixes.bind(function (ps) {\n return findMap(ps, function (prefix) {\n return get(buttons, prefix + toolbarItem.toLowerCase());\n });\n });\n }).fold(function () {\n return get(bespokeButtons, toolbarItem.toLowerCase()).map(function (r) {\n return r(editor, extras);\n }).orThunk(function () {\n return Option.none();\n });\n }, function (spec) {\n if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n domGlobals.console.warn('Ignoring the \\'' + toolbarItem + '\\' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.');\n return Option.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: Option.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 Option.some(true);\n }\n }));\n var getBounds = function () {\n return getContextToolbarBounds(editor);\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().map(function (ele) {\n return ele.getBoundingClientRect();\n }).getOrThunk(function () {\n return editor.selection.getRng().getBoundingClientRect();\n });\n var diffTop = editor.inline ? get$8().top() : absolute$1(Element.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 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, Option.some(getBounds()));\n }\n });\n };\n var lastAnchor = Cell(Option.none());\n var lastElement = Cell(Option.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 ToolbarScopes.categorise(registryContextToolbars, function (toolbarApi) {\n var alloySpec = buildToolbar(toolbarApi);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n });\n });\n var buildToolbar = function (ctx) {\n var buttons = editor.ui.registry.getAll().buttons;\n var toolbarType = getToolbarMode(editor) === ToolbarMode.scrolling ? ToolbarMode.scrolling : ToolbarMode.default;\n var scopes = getScopes();\n return ctx.type === 'contexttoolbar' ? function () {\n var allButtons = __assign(__assign({}, buttons), scopes.formNavigators);\n var initGroups = identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras, Option.some(['form:']));\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: initGroups,\n onEscape: Option.none,\n cyclicKeying: true\n });\n }() : function () {\n return ContextForm.renderContextForm(toolbarType, ctx, extras.backstage);\n }();\n };\n editor.on(showContextToolbarEvent, function (e) {\n var scopes = getScopes();\n get(scopes.lookupTable, e.toolbarKey).each(function (ctx) {\n launchContext(ctx, e.target === editor ? Option.none() : Option.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(Element.fromDom);\n var anchor = getAnchor(toolbarApi.position, sElem);\n lastAnchor.set(Option.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 Option.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 ToolbarLookup.lookup(scopes, editor).fold(function () {\n lastAnchor.set(Option.none());\n InlineView.hide(contextbar);\n }, function (info) {\n launchContext(info.toolbarApi, Option.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 resetTimer = function (t) {\n clearTimer();\n timer.set(t);\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 resetTimer(global$2.setEditorTimeout(editor, launchContextToolbar, 0));\n });\n editor.on('focusout', function (e) {\n global$2.setEditorTimeout(editor, function () {\n if (search(sink.element()).isNone() && search(contextbar.element()).isNone()) {\n lastAnchor.set(Option.none());\n InlineView.hide(contextbar);\n }\n }, 0);\n });\n editor.on('SwitchMode', function () {\n if (editor.mode.isReadOnly()) {\n lastAnchor.set(Option.none());\n InlineView.hide(contextbar);\n }\n });\n editor.on('NodeChange', function (e) {\n search(contextbar.element()).fold(function () {\n resetTimer(global$2.setEditorTimeout(editor, launchContextToolbar, 0));\n }, function (_) {\n });\n });\n });\n };\n var ContextToolbar = { register: register$4 };\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(Element.fromDom(domGlobals.document), 'touchstart', fireDismissPopups);\n var onTouchmove = bind$3(Element.fromDom(domGlobals.document), 'touchmove', function (evt) {\n return broadcastEvent(documentTouchmove(), evt);\n });\n var onTouchend = bind$3(Element.fromDom(domGlobals.document), 'touchend', function (evt) {\n return broadcastEvent(documentTouchend(), evt);\n });\n var onMousedown = bind$3(Element.fromDom(domGlobals.document), 'mousedown', fireDismissPopups);\n var onMouseup = bind$3(Element.fromDom(domGlobals.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: Element.fromDom(raw.target) });\n };\n var onContentMouseup = function (raw) {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: Element.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 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 });\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 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 var Events$1 = { setup: setup$3 };\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 domGlobals.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 ? Option.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 getOffsetParent = function (element) {\n var isFixed = getRaw(element, 'position').is('fixed');\n var offsetParent$1 = isFixed ? Option.none() : offsetParent(element);\n return offsetParent$1.orThunk(function () {\n var marker = Element.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 Position(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$7(elem), get$6(elem));\n });\n };\n var storePrior = function (elem, box, state) {\n state.setInitialPosition(Option.some({\n style: getAllRaw(elem),\n position: get$4(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(Option.none());\n switch (position.position) {\n case 'static':\n return Option.some(morphAdt.static());\n case 'absolute':\n var offsetBox_1 = getOffsetParent(elem).map(box).getOrThunk(function () {\n return box(body());\n });\n return Option.some(morphAdt.absolute(NuPositionCss('absolute', get(position.style, 'left').map(function (_) {\n return box$1.x() - offsetBox_1.x();\n }), get(position.style, 'top').map(function (_) {\n return box$1.y() - offsetBox_1.y();\n }), get(position.style, 'right').map(function (_) {\n return offsetBox_1.right() - box$1.right();\n }), get(position.style, 'bottom').map(function (_) {\n return offsetBox_1.bottom() - box$1.bottom();\n }))));\n default:\n return Option.none();\n }\n });\n };\n var morphToOriginal = function (elem, dockInfo, viewport, state) {\n return getPrior(elem, state).filter(function (box) {\n return isVisibleForModes(dockInfo.modes, box, viewport);\n }).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n var morphToFixed = function (elem, dockInfo, viewport, state) {\n var box$1 = box(elem);\n if (!isVisibleForModes(dockInfo.modes, box$1, viewport)) {\n storePrior(elem, box$1, state);\n var winBox = win();\n var left = box$1.x() - winBox.x();\n var top = viewport.y() - winBox.y();\n var bottom = winBox.bottom() - viewport.bottom();\n var isTop = box$1.y() <= viewport.y();\n return Option.some(morphAdt.fixed(NuPositionCss('fixed', Option.some(left), isTop ? Option.some(top) : Option.none(), Option.none(), !isTop ? Option.some(bottom) : Option.none())));\n } else {\n return Option.none();\n }\n };\n var getMorph = function (component, dockInfo, viewport, state) {\n var elem = component.element();\n var isDocked = getRaw(elem, 'position').is('fixed');\n return isDocked ? morphToOriginal(elem, dockInfo, viewport, state) : morphToFixed(elem, dockInfo, 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, config, 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 = function (component, config, state) {\n return state.isDocked();\n };\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset,\n isDocked: isDocked\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 () {\n var docked = Cell(false);\n var visible = Cell(true);\n var initialBounds = Cell(Option.none());\n var readState = function () {\n return 'docked: ' + docked.get() + ', visible: ' + visible.get();\n };\n return nu$5({\n isDocked: function () {\n return docked.get();\n },\n setDocked: function (state) {\n return docked.set(state);\n },\n getInitialPosition: function () {\n return initialBounds.get();\n },\n setInitialPosition: function (pos) {\n return initialBounds.set(pos);\n },\n isVisible: function () {\n return visible.get();\n },\n setVisible: function (state) {\n return visible.set(state);\n },\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$8(doc);\n var markerElement = Element.fromDom(e.elm);\n var markerPos = absolute$1(markerElement);\n var markerHeight = get$6(markerElement);\n var markerTop = markerPos.y();\n var markerBottom = markerTop + markerHeight;\n var editorHeaderPos = absolute(containerHeader);\n var editorHeaderHeight = get$6(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 updateIframeContentFlow = function (header, isToolbarTop) {\n var getOccupiedHeight = function (elm) {\n return getOuter$1(elm) + (parseInt(get$4(elm, 'margin-top'), 10) || 0) + (parseInt(get$4(elm, 'margin-bottom'), 10) || 0);\n };\n var elm = header.element();\n parent(elm).each(function (parentElem) {\n var padding = 'padding-' + (isToolbarTop ? 'top' : 'bottom');\n if (Docking.isDocked(header)) {\n var parentWidth = get$7(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 = Element.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(focusedElem, activeElm);\n }).filter(function (activeElm) {\n return eq(activeElm, Element.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().toOption().bind(function (sink) {\n return search(sink.element());\n });\n });\n };\n var setup$4 = function (editor, lazyHeader) {\n if (!editor.inline) {\n if (!isToolbarLocationTop(editor)) {\n editor.on('ResizeEditor', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', function () {\n lazyHeader().each(function (header) {\n return updateIframeContentFlow(header, isToolbarLocationTop(editor));\n });\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$1 = function (lazyHeader) {\n return lazyHeader().map(Docking.isDocked).getOr(false);\n };\n var getIframeBehaviours = function (isToolbarTop) {\n var _a;\n return [Receiving.config({\n channels: (_a = {}, _a[toolbarHeightChange()] = {\n onReceive: function (comp) {\n updateIframeContentFlow(comp, isToolbarTop);\n }\n }, _a)\n })];\n };\n var getBehaviours$2 = function (editor, lazySink) {\n var focusedElm = Cell(Option.none());\n var isToolbarTop = isToolbarLocationTop(editor);\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, isToolbarTop);\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(isToolbarTop);\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(Element.fromDom(container));\n var boxHeight = box$1.height() - headerHeight;\n var topBound = box$1.y() + (isToolbarTop ? 0 : headerHeight);\n return Option.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(Option.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: [isToolbarTop ? 'top' : 'bottom'],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n })\n ], additionalBehaviours);\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$4,\n isDocked: isDocked$1,\n getBehaviours: getBehaviours$2\n });\n\n var setup$5 = noop;\n var isDocked$2 = never;\n var getBehaviours$3 = constant([]);\n\n var StaticHeader = /*#__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$2 : getBehaviours$3;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours(editor, spec.getSink))\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, Option.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(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).toOption();\n }).each(function (prev) {\n se.event().newFocus().bind(function (nu) {\n return comp.getSystem().getByDom(nu).toOption();\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 Option.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$2(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$c(detail.slotBehaviours),\n apis: apis\n };\n };\n var slotApis = map$1({\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 Option.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 Option.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$7(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 = Element.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$1(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 Option.some(true);\n },\n onShiftTab: function () {\n return Option.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(Option.none());\n var toggle = function (state) {\n if (state !== throbberState.get()) {\n toggleThrobber(lazyThrobber(), state, sharedBackstage.providers);\n throbberState.set(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(Option.some(timerId));\n } else {\n toggle(e.state);\n timer.set(Option.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 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 onEscape: function () {\n return Option.none();\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 Option.some(true);\n },\n cyclicKeying: false,\n initGroups: [],\n getSink: spec.getSink,\n backstage: spec.backstage,\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 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 | 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 | 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 Events.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 Events.fireSkinLoadError(editor, { message: err });\n };\n };\n var SkinLoaded = {\n fireSkinLoaded: fireSkinLoaded$1,\n fireSkinLoadError: fireSkinLoadError$1\n };\n\n var loadSkin = function (isInline, editor) {\n var skinUrl = getSkinUrl(editor);\n var skinUiCss;\n if (skinUrl) {\n skinUiCss = skinUrl + '/skin.min.css';\n editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');\n }\n if (isSkinDisabled(editor) === false && skinUiCss) {\n global$3.DOM.styleSheetLoader.load(skinUiCss, SkinLoaded.fireSkinLoaded(editor), SkinLoaded.fireSkinLoadError(editor, 'Skin could not be loaded'));\n } else {\n SkinLoaded.fireSkinLoaded(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 }, Option.none());\n });\n OuterContainer.setToolbars(comp, toolbars);\n } else {\n OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, { backstage: backstage }, Option.none()));\n }\n };\n\n var DOM = global$3.DOM;\n var detection = detect$3();\n var isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n var setupEvents = function (editor) {\n var contentWindow = editor.getWin();\n var initialDocEle = editor.getDoc().documentElement;\n var lastWindowDimensions = Cell(Position(contentWindow.innerWidth, contentWindow.innerHeight));\n var lastDocumentDimensions = Cell(Position(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n var resize = function (e) {\n var docEle = editor.getDoc().documentElement;\n var outer = lastWindowDimensions.get();\n var inner = lastDocumentDimensions.get();\n if (outer.left() !== contentWindow.innerWidth || outer.top() !== contentWindow.innerHeight) {\n lastWindowDimensions.set(Position(contentWindow.innerWidth, contentWindow.innerHeight));\n Events.fireResizeContent(editor, e);\n } else if (inner.left() !== docEle.offsetWidth || inner.top() !== docEle.offsetHeight) {\n lastDocumentDimensions.set(Position(docEle.offsetWidth, docEle.offsetHeight));\n Events.fireResizeContent(editor, e);\n }\n };\n var scroll = function (e) {\n return Events.fireScrollContent(editor, e);\n };\n DOM.bind(contentWindow, 'resize', resize);\n DOM.bind(contentWindow, 'scroll', scroll);\n var elementLoad = capture$1(Element.fromDom(editor.getBody()), 'load', resize);\n editor.on('remove', function () {\n elementLoad.unbind();\n DOM.unbind(contentWindow, 'resize', resize);\n DOM.unbind(contentWindow, 'scroll', scroll);\n });\n };\n var render = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var lastToolbarWidth = Cell(0);\n iframe(editor);\n attachSystemAfter(Element.fromDom(args.targetNode), uiComponents.mothership);\n attachSystem(body(), uiComponents.uiMothership);\n editor.on('PostRender', function () {\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(uiComponents.outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setSidebar(uiComponents.outerContainer, rawUiConfig.sidebar);\n setupEvents(editor);\n });\n var socket = OuterContainer.getSocket(uiComponents.outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12 === true) {\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 bind$3(socket.element(), 'scroll', limit.throttle);\n }\n setupReadonlyModeSwitch(editor, uiComponents);\n editor.addCommand('ToggleSidebar', function (ui, value) {\n OuterContainer.toggleSidebar(uiComponents.outerContainer, value);\n editor.fire('ToggleSidebar');\n });\n editor.addQueryValueHandler('ToggleSidebar', function () {\n return OuterContainer.whichSidebar(uiComponents.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 return {\n iframeContainer: socket.element().dom(),\n editorContainer: uiComponents.outerContainer.element().dom()\n };\n };\n var Iframe = { render: render };\n\n var parseToInt = function (val) {\n var re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Option.some(parseInt('' + val, 10));\n }\n return Option.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 var Utils = {\n calcCappedSize: calcCappedSize,\n parseToInt: parseToInt,\n numToPx: numToPx\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 Utils.parseToInt(baseHeight).map(function (height) {\n return Utils.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 Utils.parseToInt(baseWidth).map(function (width) {\n return Utils.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 getTargetPosAndHeight = function (targetElm, isToolbarTop) {\n var pos = box(targetElm);\n return {\n pos: isToolbarTop ? pos.y() : pos.bottom(),\n height: pos.height()\n };\n };\n var render$1 = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var mothership = uiComponents.mothership, uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var floatContainer;\n var DOM = global$3.DOM;\n var useFixedToolbarContainer = useFixedContainer(editor);\n var isSticky = isStickyToolbar(editor);\n var targetElm = Element.fromDom(args.targetNode);\n var editorMaxWidthOpt = getMaxWidthSetting(editor).or(getWidth$1(editor));\n var toolbarMode = getToolbarMode(editor);\n var isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n var isToolbarTop = isToolbarLocationTop(editor);\n var prevPosAndHeight = Cell(getTargetPosAndHeight(targetElm, isToolbarTop));\n var visible = Cell(false);\n inline(editor);\n var updateChromePosition = function (toolbar) {\n var offset = isSplitToolbar ? toolbar.fold(function () {\n return 0;\n }, function (tbar) {\n return tbar.components().length > 1 ? get$6(tbar.components()[1].element()) : 0;\n }) : 0;\n var targetBounds = box(targetElm);\n var top = isToolbarTop ? targetBounds.y() - get$6(floatContainer.element()) + offset : 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 var maxWidth = editorMaxWidthOpt.getOrThunk(function () {\n var bodyMargin = Utils.parseToInt(get$4(body(), 'margin-left')).getOr(0);\n return get$7(body()) - targetBounds.x() + bodyMargin;\n });\n set$2(floatContainer.element(), 'max-width', maxWidth + 'px');\n };\n var repositionFloatingUiComponents = function () {\n uiMothership.broadcastOn([repositionPopups()], {});\n };\n var updateChromeUi = function (resetDocking) {\n if (resetDocking === void 0) {\n resetDocking = false;\n }\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(outerContainer);\n }\n if (!useFixedToolbarContainer) {\n var toolbar_1 = OuterContainer.getToolbar(outerContainer);\n updateChromePosition(toolbar_1);\n }\n if (isSticky) {\n resetDocking ? Docking.reset(floatContainer) : Docking.refresh(floatContainer);\n }\n repositionFloatingUiComponents();\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 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 var render = function () {\n if (floatContainer) {\n show();\n return;\n }\n floatContainer = 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 show();\n editor.on('activate', show);\n editor.on('deactivate', hide);\n editor.on('SkinLoaded ResizeWindow', function () {\n if (visible.get()) {\n updateChromeUi(true);\n }\n });\n editor.on('NodeChange keydown', function () {\n global$2.requestAnimationFrame(function () {\n var posAndHeight = getTargetPosAndHeight(targetElm, isToolbarTop);\n var prev = prevPosAndHeight.get();\n if (visible.get()) {\n if (posAndHeight.pos !== prev.pos) {\n updateChromeUi(true);\n prevPosAndHeight.set(posAndHeight);\n } else if (posAndHeight.height !== prev.height) {\n repositionFloatingUiComponents();\n prevPosAndHeight.set(posAndHeight);\n }\n }\n });\n });\n editor.nodeChanged();\n };\n editor.on('focus', render);\n editor.on('blur hide', hide);\n editor.on('init', function () {\n if (editor.hasFocus()) {\n render();\n }\n });\n setupReadonlyModeSwitch(editor, uiComponents);\n return { editorContainer: outerContainer.element().dom() };\n };\n var Inline = { render: render$1 };\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$e.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 var AlignmentButtons = { register: register$5 };\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$e.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$e.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$e.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 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems = function (editor) {\n global$e.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$6 = function (editor) {\n registerButtons(editor);\n registerMenuItems(editor);\n };\n var SimpleControls = { register: register$6 };\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$1 = 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$1 = 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$7 = function (editor) {\n registerMenuItems$1(editor);\n registerButtons$1(editor);\n };\n var UndoRedo = { register: register$7 };\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$2 = 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$8 = function (editor) {\n registerToolbarButton(editor);\n registerMenuItems$2(editor);\n };\n var VisualAid = { register: register$8 };\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$2 = 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$9 = function (editor) {\n registerButtons$2(editor);\n };\n var IndentOutdent = { register: register$9 };\n\n var register$a = 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 var ComplexControls = { register: register$a };\n\n var setup$8 = function (editor, backstage) {\n AlignmentButtons.register(editor);\n SimpleControls.register(editor);\n ComplexControls.register(editor, backstage);\n UndoRedo.register(editor);\n ColorSwatch.register(editor);\n VisualAid.register(editor);\n IndentOutdent.register(editor);\n };\n var FormatControls = { setup: setup$8 };\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$3.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: Element.fromDom(editor.selection.getNode())\n };\n };\n var getNodeAnchor$1 = function (editor) {\n return {\n anchor: 'node',\n node: Option.some(Element.fromDom(editor.selection.getNode())),\n root: Element.fromDom(editor.getBody())\n };\n };\n\n var getAnchorSpec = function (editor, e, isTriggeredByKeyboardEvent) {\n return isTriggeredByKeyboardEvent ? getNodeAnchor$1(editor) : getPointAnchor(editor, e);\n };\n var initAndShow = function (editor, e, buildMenu, backstage, contextmenu, isTriggeredByKeyboardEvent) {\n var items = buildMenu();\n var anchorSpec = getAnchorSpec(editor, e, isTriggeredByKeyboardEvent);\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(), Selection.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 getAnchorSpec$1 = function (editor, isTriggeredByKeyboardEvent, e) {\n var anchorSpec = isTriggeredByKeyboardEvent ? getNodeAnchor$1(editor) : getPointAnchor(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 }, anchorSpec);\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, isTriggeredByKeyboardEvent, highlightImmediately) {\n var anchorSpec = getAnchorSpec$1(editor, isTriggeredByKeyboardEvent, 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 Option.some(getContextToolbarBounds(editor));\n });\n editor.fire(hideContextToolbarEvent);\n });\n };\n var initAndShow$1 = function (editor, e, buildMenu, backstage, contextmenu, isTriggeredByKeyboardEvent) {\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, isTriggeredByKeyboardEvent, shouldHighlightImmediately());\n };\n if ((isOSX || isiOS) && !isTriggeredByKeyboardEvent) {\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 && !isTriggeredByKeyboardEvent) {\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.settings.contextmenu_never_use_native || false;\n };\n var getMenuItems = function (editor, name, defaultItems) {\n var contextMenus = editor.ui.registry.getAll().contextMenus;\n return get(editor.settings, 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 Settings$1 = {\n shouldNeverUseNative: shouldNeverUseNative,\n getContextMenu: getContextMenu,\n isContextMenuDisabled: isContextMenuDisabled\n };\n\n var isSeparator$1 = function (item) {\n return isString(item) ? item === '|' : item.type === 'separator';\n };\n var separator$3 = { type: 'separator' };\n var makeContextItem = function (item) {\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator$3;\n case 'submenu':\n return {\n type: 'nestedmenuitem',\n text: item.text,\n icon: item.icon,\n getSubmenuItems: function () {\n var items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map(items, makeContextItem);\n }\n }\n };\n default:\n return {\n type: 'menuitem',\n text: item.text,\n icon: item.icon,\n onAction: noarg(item.onAction)\n };\n }\n }\n };\n var addContextMenuGroup = function (xs, groupItems) {\n if (groupItems.length === 0) {\n return xs;\n }\n var lastMenuItem = last(xs).filter(function (item) {\n return !isSeparator$1(item);\n });\n var before = lastMenuItem.fold(function () {\n return [];\n }, function (_) {\n return [separator$3];\n });\n return xs.concat(before).concat(groupItems).concat([separator$3]);\n };\n var generateContextMenu = function (contextMenus, menuConfig, selectedElement) {\n var sections = foldl(menuConfig, function (acc, name) {\n if (has(contextMenus, name)) {\n var items = contextMenus[name].update(selectedElement);\n if (isString(items)) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (items.length > 0) {\n var allItems = map(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n } else {\n return acc.concat([name]);\n }\n }, []);\n if (sections.length > 0 && isSeparator$1(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !Settings$1.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 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 (Settings$1.shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || Settings$1.isContextMenuDisabled(editor)) {\n return;\n }\n var isTriggeredByKeyboardEvent = isTriggeredByKeyboard(editor, e);\n var buildMenu = function () {\n var selectedElement = isTriggeredByKeyboardEvent ? editor.selection.getStart(true) : e.target;\n var registry = editor.ui.registry.getAll();\n var menuConfig = Settings$1.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, isTriggeredByKeyboardEvent);\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 }, Position(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 Position(left, top);\n };\n var toStyles = function (coord, scroll, origin) {\n var stylesOpt = coord.fold(function (x, y) {\n return {\n position: Option.some('absolute'),\n left: Option.some(x + 'px'),\n top: Option.some(y + 'px')\n };\n }, function (x, y) {\n return {\n position: Option.some('absolute'),\n left: Option.some(x - origin.left() + 'px'),\n top: Option.some(y - origin.top() + 'px')\n };\n }, function (x, y) {\n return {\n position: Option.some('fixed'),\n left: Option.some(x + 'px'),\n top: Option.some(y + 'px')\n };\n });\n return __assign({\n right: Option.none(),\n bottom: Option.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 get$e = function (component, snapsInfo) {\n var element = component.element();\n var x = parseInt(get$2(element, snapsInfo.leftAttr), 10);\n var y = parseInt(get$2(element, snapsInfo.topAttr), 10);\n return isNaN(x) || isNaN(y) ? Option.none() : Option.some(Position(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$e(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: Option.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 ? Option.some({\n output: constant(absorb(snap.output(), newCoord, scroll, origin)),\n extra: snap.extra\n }) : Option.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: Option.some(deltas),\n snap: Option.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: Option.some(deltas),\n snap: Option.some(snap)\n };\n } else {\n return acc;\n }\n });\n }, {\n deltas: Option.none(),\n snap: Option.none()\n });\n return bestSnap.snap.map(function (snap) {\n return {\n output: constant(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 = get$8(doc);\n var origin = getOrigin(target);\n var snapPin = snapTo(snap, scroll, origin);\n var styles = toStyles(snapPin.coord, scroll, origin);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo$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 var initZIndex = get$2(root, initialAttribute);\n if (has$1(root, initialAttribute)) {\n set$2(root, 'z-index', initZIndex);\n } else {\n remove$6(root, 'z-index');\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$4(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 = get$8(doc);\n var origin = getOrigin(target);\n var currentCoord = getCurrentCoord(target);\n var newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData);\n var styles = toStyles(newCoord, scroll, origin);\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 Option.from(Position(event.x(), event.y()));\n };\n var getDelta$1 = function (old, nu) {\n return Position(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, Option.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 Option.some(Position(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) : Option.none();\n };\n var getDelta$2 = function (old, nu) {\n return Position(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(Option.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(Option.none());\n };\n var dragApi = {\n drop: stop$1,\n delayDrop: function () {\n },\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(Option.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(Option.none());\n }),\n run(touchcancel(), function (component) {\n stop(component, blockerCell.get(), dragConfig, dragState);\n blockerCell.set(Option.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 = Option.none();\n var startData = Option.none();\n var reset = function () {\n previous = Option.none();\n startData = Option.none();\n };\n var calculateDelta = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.getDelta(old, nu);\n });\n previous = Option.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 = Option.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: MixedBag([\n 'sensor',\n 'range',\n 'output'\n ], ['extra'])\n },\n state: DragState,\n apis: DraggingApis\n });\n\n var platform$1 = detect$3();\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: Position(width, height),\n output: absolute$3(Option.some(x), Option.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: Position(sensorWidth, sensorHeight),\n output: absolute$3(Option.some(x - rect.width / 2), Option.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(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(Option.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(Option.none());\n var finishCell = Cell(Option.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(Element.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 (platform$1.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(Option.some(e.start));\n finishCell.set(Option.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(Option.none());\n finishCell.set(Option.none());\n });\n }\n };\n var TableSelectorHandles = { setup: setup$a };\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 = Utils.calcCappedSize(originalHeight + deltas.top(), getMinHeightSetting(editor), getMaxHeightSetting(editor));\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = Utils.calcCappedSize(originalWidth + deltas.left(), getMinWidthSetting(editor), getMaxWidthSetting(editor));\n }\n return dimensions;\n };\n var resize$3 = function (editor, deltas, resizeType) {\n var container = Element.fromDom(editor.getContainer());\n var dimensions = getDimensions(editor, deltas, resizeType, get$6(container), get$7(container));\n each$1(dimensions, function (val, dim) {\n return set$2(container, dim, Utils.numToPx(val));\n });\n Events.fireResizeEditor(editor);\n };\n\n var isHidden$1 = function (elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n };\n var renderElementPath = function (editor, settings) {\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 });\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 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 var ElementPath = { renderElementPath: renderElementPath };\n\n var renderWordCount = function (editor, providersBackstage) {\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 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 });\n };\n\n var renderStatusbar = function (editor, providersBackstage) {\n var renderResizeHandlerIcon = function (resizeType) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: {\n 'title': providersBackstage.translate('Resize'),\n 'aria-hidden': 'true'\n },\n innerHtml: get$d('resize-handle', providersBackstage.icons)\n },\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: function (comp, target, delta) {\n resize$3(editor, delta, resizeType);\n },\n blockerClass: 'tox-blocker'\n })])\n };\n };\n var renderBranding = function () {\n var label = global$7.translate([\n 'Powered by {0}',\n 'Tiny'\n ]);\n var linkHtml = '' + label + '';\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding'],\n innerHtml: linkHtml\n }\n };\n };\n var getResizeType = function (editor) {\n var fallback = !contains$1(editor.settings.plugins, 'autoresize');\n var resize = editor.getParam('resize', fallback);\n if (resize === false) {\n return ResizeTypes.None;\n } else if (resize === 'both') {\n return ResizeTypes.Both;\n } else {\n return ResizeTypes.Vertical;\n }\n };\n var getTextComponents = function () {\n var components = [];\n if (editor.getParam('elementpath', true, 'boolean')) {\n components.push(ElementPath.renderElementPath(editor, {}));\n }\n if (contains$1(editor.settings.plugins, 'wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (editor.getParam('branding', true, 'boolean')) {\n components.push(renderBranding());\n }\n if (components.length > 0) {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__text-container']\n },\n components: components\n }];\n }\n return [];\n };\n var getComponents = function () {\n var components = getTextComponents();\n var resizeType = getResizeType(editor);\n if (resizeType !== ResizeTypes.None) {\n components.push(renderResizeHandlerIcon(resizeType));\n }\n return components;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n var setup$b = function (editor) {\n var _a;\n var isInline = editor.inline;\n var mode = isInline ? Inline : Iframe;\n var header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n var lazyOuterContainer = Option.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 isToolbarTop = isToolbarLocationTop(editor);\n var dirAttributes = global$7.isRtl() ? { attributes: { dir: 'rtl' } } : {};\n var verticalDirAttributes = { attributes: (_a = {}, _a[Attribute] = isToolbarTop ? AttributeValue.TopToBottom : AttributeValue.BottomToTop, _a) };\n var lazyHeader = function () {\n return lazyOuterContainer.bind(OuterContainer.getHeader);\n };\n var isHeaderDocked = function () {\n return header.isDocked(lazyHeader);\n };\n var sink = build$1({\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 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 backstage: backstage,\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 onEscape: function () {\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 ? Option.some(renderStatusbar(editor, backstage.shared.providers)) : Option.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 getSink: lazySink\n });\n var editorComponents = flatten([\n isToolbarTop ? [partHeader] : [],\n isInline ? [] : [socketSidebarContainer],\n isToolbarTop ? [] : [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$7.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(isToolbarTop ? [] : ['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([Keying.config({\n mode: 'cyclic',\n selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a'\n })])\n }));\n lazyOuterContainer = Option.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 var mothership = takeover(outerContainer);\n var uiMothership = takeover(sink);\n Events$1.setup(editor, mothership, uiMothership);\n var getUi = function () {\n var channels = {\n broadcastAll: uiMothership.broadcast,\n broadcastOn: uiMothership.broadcastOn,\n register: function () {\n }\n };\n return { channels: channels };\n };\n var setEditorSize = function () {\n var parsedHeight = Utils.numToPx(getHeightWithFallback(editor));\n var parsedWidth = Utils.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, lazyHeader);\n FormatControls.setup(editor, backstage);\n setup$9(editor, lazySink, backstage);\n setup$6(editor);\n setup$7(editor, lazyThrobber, backstage.shared);\n map$1(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: !editor.settings.menu ? {} : map$1(editor.settings.menu, function (menu) {\n return __assign(__assign({}, menu), { items: menu.items });\n }),\n menubar: editor.settings.menubar,\n toolbar: toolbarOpt.getOrThunk(function () {\n return editor.getParam('toolbar', true);\n }),\n allowToolbarGroups: toolbarMode === ToolbarMode.floating,\n buttons: buttons,\n sidebar: sidebars\n };\n ContextToolbar.register(editor, contextToolbars, sink, { backstage: backstage });\n TableSelectorHandles.setup(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 var Render = { setup: setup$b };\n\n var describedBy = function (describedElement, describeElement) {\n var describeId = Option.from(get$2(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 AriaLabel = {\n labelledBy: function (labelledElement, labelElement) {\n var labelId = Option.from(get$2(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\n var schema$x = constant([\n strict$1('lazySink'),\n option('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted$1('useTabstopAt', constant(true)),\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 factory$i = function (detail, components, spec, externals) {\n var dialogBusyEvent = generate$1('alloy.dialog.busy');\n var dialogIdleEvent = generate$1('alloy.dialog.idle');\n var busyBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: function () {\n return Option.some(true);\n },\n onShiftTab: function () {\n return Option.some(true);\n }\n }),\n Focusing.config({})\n ]);\n var showDialog = function (dialog) {\n var sink = detail.lazySink(dialog).getOrDie();\n var busyComp = Cell(Option.none());\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', [\n runOnSource(focusin(), function () {\n Keying.focusIn(dialog);\n }),\n run(dialogIdleEvent, function (blocker, se) {\n if (has$1(dialog.element(), 'aria-busy')) {\n remove$1(dialog.element(), 'aria-busy');\n busyComp.get().each(function (bc) {\n return Replacing.remove(dialog, bc);\n });\n }\n }),\n run(dialogBusyEvent, function (blocker, se) {\n set$1(dialog.element(), 'aria-busy', 'true');\n var getBusySpec = se.event().getBusySpec();\n busyComp.get().each(function (bc) {\n Replacing.remove(dialog, bc);\n });\n var busySpec = getBusySpec(dialog, busyBehaviours);\n var busy = blocker.getSystem().build(busySpec);\n busyComp.set(Option.some(busy));\n Replacing.append(dialog, premade$1(busy));\n if (busy.hasConfigured(Keying)) {\n Keying.focusIn(busy);\n }\n })\n ])\n ])\n }));\n attach$1(sink, blocker);\n Keying.focusIn(dialog);\n };\n var hideDialog = function (dialog) {\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 emitWith(dialog, dialogBusyEvent, { getBusySpec: getBusySpec });\n };\n var setIdle = function (dialog) {\n emit(dialog, dialogIdleEvent);\n };\n var modalEventsId = generate$1('modal-events');\n var eventOrder = __assign(__assign({}, detail.eventOrder), { 'alloy.system.attached': [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || []) });\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 config(modalEventsId, [runOnAttached(function (c) {\n AriaLabel.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 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 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 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 iframeFields = formComponentWithLabelFields.concat([defaultedBoolean('sandboxed', true)]);\n var iframeSchema = objOf(iframeFields);\n var iframeDataProcessor = string;\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 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 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 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 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 imageToolsFields = formComponentWithLabelFields.concat([strictOf('currentState', objOf([\n strict$1('blob'),\n strictString('url')\n ]))]);\n var imageToolsSchema = objOf(imageToolsFields);\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 createLabelFields = function (itemsField) {\n return [\n strictString('type'),\n strictString('label'),\n itemsField\n ];\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 createItemsField = function (name) {\n return field('items', 'items', strict(), arrOf(valueOf(function (v) {\n return asRaw('Checking item of ' + name, itemSchema$2, v).fold(function (sErr) {\n return Result.error(formatError(sErr));\n }, function (passValue) {\n return Result.value(passValue);\n });\n })));\n };\n var itemSchema$2 = 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 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$2)\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$2)\n ];\n var tabPanelFields = [\n strictString('type'),\n strictArrayOfObj('tabs', tabFields)\n ];\n var tabPanelSchema = objOf(tabPanelFields);\n\n var dialogToggleMenuItemSchema = objOf([\n strictString('type'),\n strictString('name')\n ].concat(commonMenuItemFields));\n var dialogToggleMenuItemDataProcessor = boolean;\n\n var baseButtonFields = [\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 dialogButtonFields = __spreadArrays(baseButtonFields, [strictString('text')]);\n var normalButtonFields = __spreadArrays([strictStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ])], dialogButtonFields);\n var menuButtonFields = __spreadArrays([\n strictStringEnum('type', ['menu']),\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n strictArrayOf('items', dialogToggleMenuItemSchema)\n ], baseButtonFields);\n var dialogButtonSchema = choose$1('type', {\n submit: normalButtonFields,\n cancel: normalButtonFields,\n custom: normalButtonFields,\n menu: menuButtonFields\n });\n\n var dialogButtonFields$1 = dialogButtonFields;\n var dialogButtonSchema$1 = dialogButtonSchema;\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$1),\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 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 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 Option.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 urlDialogButtonSchema = objOf(__spreadArrays([strictStringEnum('type', [\n 'cancel',\n 'custom'\n ])], dialogButtonFields$1));\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 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 value$3 = function () {\n var subject = Cell(Option.none());\n var clear = function () {\n subject.set(Option.none());\n };\n var set = function (s) {\n subject.set(Option.some(s));\n };\n var on = function (f) {\n subject.get().each(f);\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\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(NavigableObject.isPseudoStop)\n }),\n ComposingConfigs.memento(memForm),\n RepresentingConfigs.memento(memForm, {\n postprocess: function (formValue) {\n return toValidValues(formValue).fold(function (err) {\n domGlobals.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$c(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$4(rootElm, 'position') === 'fixed';\n var maxHeight;\n if (isFixed) {\n maxHeight = Math.max(documentElement$1.clientHeight, domGlobals.window.innerHeight);\n } else {\n maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n }\n var tabviewHeight = get$6(tabview);\n var isTabListBeside = tabview.dom().offsetLeft >= tablist.dom().offsetLeft + get$7(tablist);\n var currentTabHeight = isTabListBeside ? Math.max(get$6(tablist), tabviewHeight) : tabviewHeight;\n var dialogTopMargin = parseInt(get$4(dialog, 'margin-top'), 10) || 0;\n var dialogBottomMargin = parseInt(get$4(dialog, 'margin-bottom'), 10) || 0;\n var dialogHeight = get$6(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(Option.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).toOption().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();\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(Option.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(NavigableObject.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 Option.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, Option.some(contentId), backstage, ariaAttrs);\n };\n var renderModalBody = function (spec, backstage) {\n var bodySpec = renderBody(spec, Option.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: [NavigableObject.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(NavigableObject.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 Option.some(true);\n },\n useTabstopAt: function (elem) {\n return !NavigableObject.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: ''\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, Option.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, Option.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 getEventExtras = function (lazyDialog, extra) {\n return {\n onClose: function () {\n return extra.closeWindow();\n },\n onBlock: function (blockEvent) {\n ModalDialog.setBusy(lazyDialog(), function (d, bs) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__busy-spinner'],\n attributes: { 'aria-label': blockEvent.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 },\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 Option.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',\n 'receiving'\n ], _a[attachedToDom()] = [\n 'scroll-lock',\n 'reflecting',\n 'messages',\n 'dialog-events',\n 'alloy.base.behaviour'\n ], _a[detachedFromDom()] = [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'messages',\n 'reflecting',\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(), NavigableObject.onFocus),\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 current = active();\n spec.onAction(api, {\n name: event.name(),\n value: event.value()\n });\n active().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().toOption().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 Option.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 Option.some(comp);\n });\n } else {\n return Option.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$1(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 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 }, extra), backstage.shared.getSink);\n var dialogSize = dialogInit.internalDialog.size !== 'normal' ? dialogInit.internalDialog.size === 'large' ? ['tox-dialog--width-lg'] : ['tox-dialog--width-md'] : [];\n var spec = {\n header: header,\n body: body,\n footer: Option.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 Option.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 () {\n },\n onUnblock: function () {\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 Option.some(true);\n },\n useTabstopAt: function (elem) {\n return !NavigableObject.isPseudoStop(elem) && (name(elem) !== 'button' || get$2(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 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$g = 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 Option.none();\n } else {\n return Option.some(renderModalFooter({ buttons: buttons }, backstage));\n }\n });\n var dialogEvents = SilverDialogEvents.initUrlDialog(function () {\n return instanceApi;\n }, getEventExtras(function () {\n return dialog;\n }, 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$g(internalDialog.url, { base_uri: new global$g(domGlobals.window.location.href) });\n var iframeDomain = iframeUri.protocol + '://' + iframeUri.host + (iframeUri.port ? ':' + iframeUri.port : '');\n var messageHandlerUnbinder = Cell(Option.none());\n var extraBehaviours = [\n config('messages', [\n runOnAttached(function () {\n var unbind = bind$3(Element.fromDom(domGlobals.window), 'message', function (e) {\n if (iframeUri.isSameOrigin(new global$g(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(Option.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: Option.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: Option.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: Option.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: Option.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: Option.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 Option.some(box(Element.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 isToolbarLocationTop$1 = isToolbarLocationTop(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 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$1 ? {} : { 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$1))),\n isExtraPart: function (comp, target) {\n return isAlertOrConfirmDialog(target);\n }\n })));\n inlineDialog.set(inlineDialogComp);\n InlineView.showWithin(inlineDialogComp, anchor, premade$1(dialogUi.dialog), Option.some(body()));\n if (!isStickyToolbar$1 || !isToolbarLocationTop$1) {\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 var WindowManager = { setup: setup$e };\n\n function Theme () {\n global$1.add('silver', function (editor) {\n var _a = Render.setup(editor), uiMothership = _a.uiMothership, backstage = _a.backstage, renderUI = _a.renderUI, getUi = _a.getUi;\n Autocompleter.register(editor, backstage.shared);\n var windowMgr = WindowManager.setup({\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}(window));\n","// Exports the \"template\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/template')\n// ES2015:\n// import 'tinymce/plugins/template'\nrequire('./plugin.js');","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","// 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 \"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) 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.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var never = constant(false);\n var always = constant(true);\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var getCreationDateClasses = function (editor) {\n return editor.getParam('template_cdate_classes', 'cdate');\n };\n var getModificationDateClasses = function (editor) {\n return editor.getParam('template_mdate_classes', 'mdate');\n };\n var getSelectedContentClasses = function (editor) {\n return editor.getParam('template_selected_content_classes', 'selcontent');\n };\n var getPreviewReplaceValues = function (editor) {\n return editor.getParam('template_preview_replace_values');\n };\n var getTemplateReplaceValues = function (editor) {\n return editor.getParam('template_replace_values');\n };\n var getTemplates = function (editorSettings) {\n return editorSettings.templates;\n };\n var getCdateFormat = function (editor) {\n return editor.getParam('template_cdate_format', editor.translate('%Y-%m-%d'));\n };\n var getMdateFormat = function (editor) {\n return editor.getParam('template_mdate_format', editor.translate('%Y-%m-%d'));\n };\n var Settings = {\n getCreationDateClasses: getCreationDateClasses,\n getModificationDateClasses: getModificationDateClasses,\n getSelectedContentClasses: getSelectedContentClasses,\n getPreviewReplaceValues: getPreviewReplaceValues,\n getTemplateReplaceValues: getTemplateReplaceValues,\n getTemplates: getTemplates,\n getCdateFormat: getCdateFormat,\n getMdateFormat: getMdateFormat\n };\n\n var addZeros = function (value, len) {\n value = '' + value;\n if (value.length < len) {\n for (var i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n var getDateTime = function (editor, fmt, date) {\n var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n var monthsLong = 'January February March April May June July August September October November December'.split(' ');\n date = date || new Date();\n fmt = fmt.replace('%D', '%m/%d/%Y');\n fmt = fmt.replace('%r', '%I:%M:%S %p');\n fmt = fmt.replace('%Y', '' + date.getFullYear());\n fmt = fmt.replace('%y', '' + date.getYear());\n fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n fmt = fmt.replace('%%', '%');\n return fmt;\n };\n var DateTimeHelper = { getDateTime: getDateTime };\n\n var createTemplateList = function (editorSettings, callback) {\n return function () {\n var templateList = Settings.getTemplates(editorSettings);\n if (typeof templateList === 'function') {\n templateList(callback);\n return;\n }\n if (typeof templateList === 'string') {\n global$2.send({\n url: templateList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else {\n callback(templateList);\n }\n };\n };\n var replaceTemplateValues = function (html, templateValues) {\n global$1.each(templateValues, function (v, k) {\n if (typeof v === 'function') {\n v = v(k);\n }\n html = html.replace(new RegExp('\\\\{\\\\$' + k + '\\\\}', 'g'), v);\n });\n return html;\n };\n var replaceVals = function (editor, e) {\n var dom = editor.dom, vl = Settings.getTemplateReplaceValues(editor);\n global$1.each(dom.select('*', e), function (e) {\n global$1.each(vl, function (v, k) {\n if (dom.hasClass(e, k)) {\n if (typeof vl[k] === 'function') {\n vl[k](e);\n }\n }\n });\n });\n };\n var hasClass = function (n, c) {\n return new RegExp('\\\\b' + c + '\\\\b', 'g').test(n.className);\n };\n var insertTemplate = function (editor, ui, html) {\n var el;\n var n;\n var dom = editor.dom;\n var sel = editor.selection.getContent();\n html = replaceTemplateValues(html, Settings.getTemplateReplaceValues(editor));\n el = dom.create('div', null, html);\n n = dom.select('.mceTmpl', el);\n if (n && n.length > 0) {\n el = dom.create('div', null);\n el.appendChild(n[0].cloneNode(true));\n }\n global$1.each(dom.select('*', el), function (n) {\n if (hasClass(n, Settings.getCreationDateClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = DateTimeHelper.getDateTime(editor, Settings.getCdateFormat(editor));\n }\n if (hasClass(n, Settings.getModificationDateClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = DateTimeHelper.getDateTime(editor, Settings.getMdateFormat(editor));\n }\n if (hasClass(n, Settings.getSelectedContentClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = sel;\n }\n });\n replaceVals(editor, el);\n editor.execCommand('mceInsertContent', false, el.innerHTML);\n editor.addVisual();\n };\n var Templates = {\n createTemplateList: createTemplateList,\n replaceTemplateValues: replaceTemplateValues,\n replaceVals: replaceVals,\n insertTemplate: insertTemplate\n };\n\n var register = function (editor) {\n editor.addCommand('mceInsertTemplate', curry(Templates.insertTemplate, editor));\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n editor.on('PreProcess', function (o) {\n var dom = editor.dom, dateFormat = Settings.getMdateFormat(editor);\n global$1.each(dom.select('div', o.node), function (e) {\n if (dom.hasClass(e, 'mceTmpl')) {\n global$1.each(dom.select('*', e), function (e) {\n if (dom.hasClass(e, editor.getParam('template_mdate_classes', 'mdate').replace(/\\s+/g, '|'))) {\n e.innerHTML = DateTimeHelper.getDateTime(editor, dateFormat);\n }\n });\n Templates.replaceVals(editor, e);\n }\n });\n });\n };\n var FilterContent = { setup: setup };\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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\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 find = 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 Option.some(x);\n }\n }\n return Option.none();\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var hasOwnProperty = Object.hasOwnProperty;\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var entitiesAttr = {\n '\"': '"',\n '<': '<',\n '>': '>',\n '&': '&',\n '\\'': '''\n };\n var htmlEscape = function (html) {\n return html.replace(/[\"'<>&]/g, function (match) {\n return get(entitiesAttr, match).getOr(match);\n });\n };\n\n var getPreviewContent = function (editor, html) {\n if (html.indexOf('') === -1) {\n var contentCssLinks_1 = '';\n global$1.each(editor.contentCSS, function (url) {\n contentCssLinks_1 += '';\n });\n var bodyClass = editor.settings.body_class || '';\n if (bodyClass.indexOf('=') !== -1) {\n bodyClass = editor.getParam('body_class', '', 'hash');\n bodyClass = bodyClass[editor.id] || '';\n }\n var encode = editor.dom.encode;\n var directionality = editor.getBody().dir;\n var dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n html = '' + '' + '' + contentCssLinks_1 + '' + '' + html + '' + '';\n }\n return Templates.replaceTemplateValues(html, Settings.getPreviewReplaceValues(editor));\n };\n var open = function (editor, templateList) {\n var createTemplates = function () {\n if (!templateList || templateList.length === 0) {\n var message = editor.translate('No templates defined.');\n editor.notificationManager.open({\n text: message,\n type: 'info'\n });\n return Option.none();\n }\n return Option.from(global$1.map(templateList, function (template, index) {\n var isUrlTemplate = function (t) {\n return t.url !== undefined;\n };\n return {\n selected: index === 0,\n text: template.title,\n value: {\n url: isUrlTemplate(template) ? Option.from(template.url) : Option.none(),\n content: !isUrlTemplate(template) ? Option.from(template.content) : Option.none(),\n description: template.description\n }\n };\n }));\n };\n var createSelectBoxItems = function (templates) {\n return map(templates, function (t) {\n return {\n text: t.text,\n value: t.text\n };\n });\n };\n var findTemplate = function (templates, templateTitle) {\n return find(templates, function (t) {\n return t.text === templateTitle;\n });\n };\n var loadFailedAlert = function (api) {\n editor.windowManager.alert('Could not load the specified template.', function () {\n return api.focus('template');\n });\n };\n var getTemplateContent = function (t) {\n return new global$3(function (resolve, reject) {\n t.value.url.fold(function () {\n return resolve(t.value.content.getOr(''));\n }, function (url) {\n return global$2.send({\n url: url,\n success: function (html) {\n resolve(html);\n },\n error: function (e) {\n reject(e);\n }\n });\n });\n });\n };\n var onChange = function (templates, updateDialog) {\n return function (api, change) {\n if (change.name === 'template') {\n var newTemplateTitle = api.getData().template;\n findTemplate(templates, newTemplateTitle).each(function (t) {\n api.block('Loading...');\n getTemplateContent(t).then(function (previewHtml) {\n updateDialog(api, t, previewHtml);\n }).catch(function () {\n updateDialog(api, t, '');\n api.disable('save');\n loadFailedAlert(api);\n });\n });\n }\n };\n };\n var onSubmit = function (templates) {\n return function (api) {\n var data = api.getData();\n findTemplate(templates, data.template).each(function (t) {\n getTemplateContent(t).then(function (previewHtml) {\n Templates.insertTemplate(editor, false, previewHtml);\n api.close();\n }).catch(function () {\n api.disable('save');\n loadFailedAlert(api);\n });\n });\n };\n };\n var openDialog = function (templates) {\n var selectBoxItems = createSelectBoxItems(templates);\n var buildDialogSpec = function (bodyItems, initialData) {\n return {\n title: 'Insert Template',\n size: 'large',\n body: {\n type: 'panel',\n items: bodyItems\n },\n initialData: initialData,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: onSubmit(templates),\n onChange: onChange(templates, updateDialog)\n };\n };\n var updateDialog = function (dialogApi, template, previewHtml) {\n var content = getPreviewContent(editor, previewHtml);\n var bodyItems = [\n {\n type: 'selectbox',\n name: 'template',\n label: 'Templates',\n items: selectBoxItems\n },\n {\n type: 'htmlpanel',\n html: '

' + htmlEscape(template.value.description) + '

'\n },\n {\n label: 'Preview',\n type: 'iframe',\n name: 'preview',\n sandboxed: false\n }\n ];\n var initialData = {\n template: template.text,\n preview: content\n };\n dialogApi.unblock();\n dialogApi.redial(buildDialogSpec(bodyItems, initialData));\n dialogApi.focus('template');\n };\n var dialogApi = editor.windowManager.open(buildDialogSpec([], {\n template: '',\n preview: ''\n }));\n dialogApi.block('Loading...');\n getTemplateContent(templates[0]).then(function (previewHtml) {\n updateDialog(dialogApi, templates[0], previewHtml);\n }).catch(function () {\n updateDialog(dialogApi, templates[0], '');\n dialogApi.disable('save');\n loadFailedAlert(dialogApi);\n });\n };\n var optTemplates = createTemplates();\n optTemplates.each(openDialog);\n };\n var Dialog = { open: open };\n\n var showDialog = function (editor) {\n return function (templates) {\n Dialog.open(editor, templates);\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addButton('template', {\n icon: 'template',\n tooltip: 'Insert template',\n onAction: Templates.createTemplateList(editor.settings, showDialog(editor))\n });\n editor.ui.registry.addMenuItem('template', {\n icon: 'template',\n text: 'Insert template...',\n onAction: Templates.createTemplateList(editor.settings, showDialog(editor))\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('template', function (editor) {\n Buttons.register(editor);\n Commands.register(editor);\n FilterContent.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.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var isNamedAnchor = function (editor, node) {\n return node.tagName === 'A' && editor.dom.getAttrib(node, 'href') === '';\n };\n var isValidId = function (id) {\n return /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n };\n var getId = function (editor) {\n var selectedNode = editor.selection.getNode();\n return isNamedAnchor(editor, selectedNode) ? selectedNode.getAttribute('id') || selectedNode.getAttribute('name') : '';\n };\n var insert = function (editor, id) {\n var selectedNode = editor.selection.getNode();\n if (isNamedAnchor(editor, selectedNode)) {\n selectedNode.removeAttribute('name');\n selectedNode.id = id;\n editor.undoManager.add();\n } else {\n editor.focus();\n editor.selection.collapse(true);\n editor.insertContent(editor.dom.createHTML('a', { id: id }));\n }\n };\n var Anchor = {\n isValidId: isValidId,\n getId: getId,\n insert: insert\n };\n\n var insertAnchor = function (editor, newId) {\n if (!Anchor.isValidId(newId)) {\n editor.windowManager.alert('Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n return false;\n } else {\n Anchor.insert(editor, newId);\n return true;\n }\n };\n var open = function (editor) {\n var currentId = Anchor.getId(editor);\n editor.windowManager.open({\n title: 'Anchor',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n name: 'id',\n type: 'input',\n label: 'ID',\n placeholder: 'example'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { id: currentId },\n onSubmit: function (api) {\n if (insertAnchor(editor, api.getData().id)) {\n api.close();\n }\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceAnchor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var isNamedAnchorNode = function (node) {\n return !node.attr('href') && (node.attr('id') || node.attr('name')) && !node.firstChild;\n };\n var setContentEditable = function (state) {\n return function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (isNamedAnchorNode(nodes[i])) {\n nodes[i].attr('contenteditable', state);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('anchor', {\n icon: 'bookmark',\n tooltip: 'Anchor',\n onAction: function () {\n return editor.execCommand('mceAnchor');\n },\n onSetup: function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind;\n }\n });\n editor.ui.registry.addMenuItem('anchor', {\n icon: 'bookmark',\n text: 'Anchor...',\n onAction: function () {\n return editor.execCommand('mceAnchor');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('anchor', function (editor) {\n FilterContent.setup(editor);\n Commands.register(editor);\n Buttons.register(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = 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 = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var groupBy = function (xs, f) {\n if (xs.length === 0) {\n return [];\n } else {\n var wasType = f(xs[0]);\n var r = [];\n var group = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = 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 Option.some(x);\n }\n }\n return Option.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 reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\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 edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\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 isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current),\n isChromeOS: isOS(chromeos, current)\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 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 detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var 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 domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.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 || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.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: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var ELEMENT$1 = ELEMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\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 Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = detect$3().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\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 lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\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 parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.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 spot = Immutable('element', 'offset');\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 fireListEvent = function (editor, action, element) {\n return editor.fire('ListMutation', {\n action: action,\n element: element\n });\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var htmlElement = function (scope) {\n return Global$1.getOrDie('HTMLElement', scope);\n };\n var isPrototypeOf = function (x) {\n var scope = resolve('ownerDocument.defaultView', x);\n return htmlElement(scope).prototype.isPrototypeOf(x);\n };\n var HTMLElement = { isPrototypeOf: isPrototypeOf };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var isTextNode = function (node) {\n return node && node.nodeType === 3;\n };\n var isListNode = function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName);\n };\n var isOlUlNode = function (node) {\n return node && /^(OL|UL)$/.test(node.nodeName);\n };\n var isListItemNode = function (node) {\n return node && /^(LI|DT|DD)$/.test(node.nodeName);\n };\n var isDlItemNode = function (node) {\n return node && /^(DT|DD)$/.test(node.nodeName);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isBr = function (node) {\n return node && node.nodeName === 'BR';\n };\n var isFirstChild = function (node) {\n return node.parentNode.firstChild === node;\n };\n var isLastChild = function (node) {\n return node.parentNode.lastChild === 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 if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {\n return true;\n }\n return false;\n };\n var isEmpty = function (dom, elm, keepBookmarks) {\n var empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n var isChildOfBody = function (dom, elm) {\n return dom.isChildOf(elm, dom.getRoot());\n };\n var NodeType = {\n isTextNode: isTextNode,\n isListNode: isListNode,\n isOlUlNode: isOlUlNode,\n isDlItemNode: isDlItemNode,\n isListItemNode: isListItemNode,\n isTableCellNode: isTableCellNode,\n isBr: isBr,\n isFirstChild: isFirstChild,\n isLastChild: isLastChild,\n isTextBlock: isTextBlock,\n isBlock: isBlock,\n isBogusBr: isBogusBr,\n isEmpty: isEmpty,\n isChildOfBody: isChildOfBody\n };\n\n var getParentList = function (editor) {\n var selectionStart = 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 NodeType.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 NodeType.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$4.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 NodeType.isListItemNode(block);\n });\n };\n var getSelectedDlItems = function (editor) {\n return filter(getSelectedListItems(editor), NodeType.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(), NodeType.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$4.unique(listRoots);\n };\n var isList = function (editor) {\n var list = getParentList(editor);\n return HTMLElement.isPrototypeOf(list);\n };\n var Selection = {\n isList: isList,\n getParentList: getParentList,\n getSelectedSubLists: getSelectedSubLists,\n getSelectedListItems: getSelectedListItems,\n getClosestListRootElm: getClosestListRootElm,\n getSelectedDlItems: getSelectedDlItems,\n getSelectedListRoots: getSelectedListRoots\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 var Settings = {\n shouldIndentOnTab: shouldIndentOnTab,\n getForcedRootBlock: getForcedRootBlock,\n getForcedRootBlockAttrs: getForcedRootBlockAttrs\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 = Settings.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, Settings.getForcedRootBlockAttrs(editor));\n }\n if (!NodeType.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 (NodeType.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 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 domGlobals.console.error('Invalid call to Attr.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 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 domGlobals.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 clone$1 = function (original, isDeep) {\n return Element.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 = Element.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 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: Element.fromTag(listType, scope),\n item: Element.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 = Element.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$1 = function (el) {\n return is$1(el, 'OL,UL');\n };\n var hasFirstChildList = function (el) {\n return firstChild(el).map(isList$1).getOr(false);\n };\n var hasLastChildList = function (el) {\n return lastChild(el).map(isList$1).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 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 };\n\n var cloneListProperties = function (target, source) {\n target.listType = source.listType;\n target.listAttributes = __assign({}, source.listAttributes);\n };\n var previousSiblingEntry = function (entries, start) {\n var depth = entries[start].depth;\n for (var i = start - 1; i >= 0; i--) {\n if (entries[i].depth === depth) {\n return Option.some(entries[i]);\n }\n if (entries[i].depth < depth) {\n break;\n }\n }\n return Option.none();\n };\n var normalizeEntries = function (entries) {\n each(entries, function (entry, i) {\n previousSiblingEntry(entries, i).each(function (matchingEntry) {\n cloneListProperties(entry, matchingEntry);\n });\n });\n };\n\n var parseItem = function (depth, itemSelection, selectionState, item) {\n return firstChild(item).filter(isList$1).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$1).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$1(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 return map(entries, function (entry) {\n var content = fromElements(entry.content);\n return Element.fromDom(createTextBlock(editor, content.dom()));\n });\n };\n var indentedComposer = function (editor, entries) {\n normalizeEntries(entries);\n return composeList(editor.contentDocument, entries).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(Selection.getSelectedListItems(editor), Element.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 global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var DOM = global$6.DOM;\n var splitList = function (editor, ul, li) {\n var tmpRng, fragment, bookmarks, node, newBlock;\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 bookmarks = DOM.select('span[data-mce-type=\"bookmark\"]', ul);\n newBlock = createTextBlock(editor, li);\n tmpRng = DOM.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(ul);\n fragment = tmpRng.extractContents();\n for (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 (NodeType.isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM.remove(li);\n if (NodeType.isEmpty(editor.dom, ul)) {\n DOM.remove(ul);\n }\n };\n var SplitList = { splitList: splitList };\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.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 (NodeType.isTextNode(container)) {\n return {\n container: container,\n offset: offset\n };\n }\n var node = global$1.getNode(container, offset);\n if (NodeType.isTextNode(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && NodeType.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 var Range = {\n getNormalizedPoint: getNormalizedPoint,\n normalizeRange: normalizeRange\n };\n\n var selectionIndentation = function (editor, indentation) {\n var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);\n var dlItems = map(Selection.getSelectedDlItems(editor), Element.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(Range.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$6.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 function restoreEndPoint(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 Range.normalizeRange(rng);\n };\n var Bookmark = {\n createBookmark: createBookmark,\n resolveBookmark: resolveBookmark\n };\n\n var isCustomList = function (list) {\n return /\\btox\\-/.test(list.className);\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 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, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n 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 && NodeType.isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n while (container.parentNode !== root) {\n if (NodeType.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 (NodeType.isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || NodeType.isBr(node)) {\n if (NodeType.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 (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n node.parentNode.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n var hasCompatibleStyle = function (dom, sib, detail) {\n var sibStyle = dom.getStyle(sib, 'list-style-type');\n var detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n var applyList = function (editor, listName, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var rng = editor.selection.getRng(true);\n var bookmark;\n var listItemName = 'LI';\n var root = Selection.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 bookmark = Bookmark.createBookmark(rng);\n global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {\n var listBlock, sibling;\n sibling = block.previousSibling;\n if (sibling && NodeType.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 editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n };\n var isValidLists = function (list1, list2) {\n return list1 && list2 && NodeType.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 if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n global$5.each([parentList].concat(lists), function (elm) {\n updateList(editor, elm, listName, detail);\n });\n editor.selection.setRng(Bookmark.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 = 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(Bookmark.resolveBookmark(bookmark));\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 = Selection.getParentList(editor);\n var selectedSubLists = Selection.getSelectedSubLists(editor);\n detail = detail ? detail : {};\n if (parentList && selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n var ToggleList = {\n toggleList: toggleList,\n mergeWithAdjacentLists: mergeWithAdjacentLists\n };\n\n var DOM$2 = global$6.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 (NodeType.isEmpty(dom, parentNode)) {\n DOM$2.remove(parentNode);\n }\n } else {\n DOM$2.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (NodeType.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 var NormalizeLists = {\n normalizeList: normalizeList,\n normalizeLists: normalizeLists\n };\n\n var findNextCaretContainer = function (editor, rng, isForward, root) {\n var node = rng.startContainer;\n var offset = rng.startOffset;\n if (NodeType.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 (NodeType.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 (NodeType.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 && !NodeType.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, targetElm;\n targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!NodeType.isEmpty(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n var mergeLiElements = function (dom, fromElm, toElm) {\n var node, listNode;\n var ul = fromElm.parentNode;\n if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {\n return;\n }\n if (NodeType.isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (NodeType.isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n node = toElm.lastChild;\n if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (NodeType.isEmpty(dom, toElm, true)) {\n dom.$(toElm).empty();\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));\n var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];\n dom.remove(fromElm);\n each(nestedLists, function (list) {\n if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n editor.dom.$(toLi).empty();\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi);\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 = Bookmark.createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n };\n var mergeBackward = function (editor, rng, fromLi, toLi) {\n var bookmark = Bookmark.createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n var resolvedBookmark = Bookmark.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 = Selection.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() && NodeType.isEmpty(dom, ul)) {\n return true;\n }\n var rng_1 = Range.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 (NodeType.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 = Selection.getClosestListRootElm(editor, selectionStartElm);\n var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n var rng = Range.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 ToggleList.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 = Selection.getClosestListRootElm(editor, selectionStartElm);\n var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n if (startListParent || Selection.getSelectedListItems(editor).length > 0) {\n editor.undoManager.transact(function () {\n editor.execCommand('Delete');\n NormalizeLists.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 var Delete = {\n setup: setup,\n backspaceDelete: backspaceDelete\n };\n\n var get = function (editor) {\n return {\n backspaceDelete: function (isForward) {\n Delete.backspaceDelete(editor, isForward);\n }\n };\n };\n var Api = { get: get };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');\n return parentList && parentList.nodeName === listName;\n };\n };\n var register = function (editor) {\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', function (ui, detail) {\n ToggleList.toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', function () {\n flattenListSelection(editor);\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n var Commands = { register: register };\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 (Settings.shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n Delete.setup(editor);\n };\n var Keyboard = { setup: setup$1 };\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 listState = function (editor, listName) {\n return function (buttonApi) {\n var nodeChangeHandler = function (e) {\n var tableCellIndex = findIndex(e.parents, NodeType.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$5.grep(parents, NodeType.isListNode);\n buttonApi.setActive(lists.length > 0 && lists[0].nodeName === listName && !isCustomList(lists[0]));\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 var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n var exec = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n if (!hasPlugin(editor, 'advlist')) {\n editor.ui.registry.addToggleButton('numlist', {\n icon: 'ordered-list',\n active: false,\n tooltip: 'Numbered list',\n onAction: exec('InsertOrderedList'),\n onSetup: listState(editor, 'OL')\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: listState(editor, 'UL')\n });\n }\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('lists', function (editor) {\n Keyboard.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n return Api.get(editor);\n });\n }\n\n Plugin();\n\n}(window));\n","// Exports the \"hr\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/hr')\n// ES2015:\n// import 'tinymce/plugins/hr'\nrequire('./plugin.js');","/**\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.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\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 var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var hasOwnProperty = Object.hasOwnProperty;\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var getScripts = function (editor) {\n return editor.getParam('media_scripts');\n };\n var getAudioTemplateCallback = function (editor) {\n return editor.getParam('audio_template_callback');\n };\n var getVideoTemplateCallback = function (editor) {\n return editor.getParam('video_template_callback');\n };\n var hasLiveEmbeds = function (editor) {\n return editor.getParam('media_live_embeds', true);\n };\n var shouldFilterHtml = function (editor) {\n return editor.getParam('media_filter_html', true);\n };\n var getUrlResolver = function (editor) {\n return editor.getParam('media_url_resolver');\n };\n var hasAltSource = function (editor) {\n return editor.getParam('media_alt_source', true);\n };\n var hasPoster = function (editor) {\n return editor.getParam('media_poster', true);\n };\n var hasDimensions = function (editor) {\n return editor.getParam('media_dimensions', true);\n };\n var Settings = {\n getScripts: getScripts,\n getAudioTemplateCallback: getAudioTemplateCallback,\n getVideoTemplateCallback: getVideoTemplateCallback,\n hasLiveEmbeds: hasLiveEmbeds,\n shouldFilterHtml: shouldFilterHtml,\n getUrlResolver: getUrlResolver,\n hasAltSource: hasAltSource,\n hasPoster: hasPoster,\n hasDimensions: hasDimensions\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');\n\n var getVideoScriptMatch = function (prefixes, src) {\n if (prefixes) {\n for (var i = 0; i < prefixes.length; i++) {\n if (src.indexOf(prefixes[i].filter) !== -1) {\n return prefixes[i];\n }\n }\n }\n };\n\n var DOM = global$2.DOM;\n var trimPx = function (value) {\n return value.replace(/px$/, '');\n };\n var getEphoxEmbedData = function (attrs) {\n var style = attrs.map.style;\n var styles = style ? DOM.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source: attrs.map['data-ephox-embed-iri'],\n altsource: '',\n poster: '',\n width: get(styles, 'max-width').map(trimPx).getOr(''),\n height: get(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n var htmlToData = function (prefixes, html) {\n var isEphoxEmbed = Cell(false);\n var data = {};\n global$3({\n validate: false,\n allow_conditional_comments: true,\n start: function (name, attrs) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n data = getEphoxEmbedData(attrs);\n } else {\n if (!data.source && name === 'param') {\n data.source = attrs.map.movie;\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$1.extend(attrs.map, data);\n }\n if (name === 'script') {\n var videoScript = getVideoScriptMatch(prefixes, attrs.map.src);\n if (!videoScript) {\n return;\n }\n data = {\n type: 'script',\n source: attrs.map.src,\n width: String(videoScript.width),\n height: String(videoScript.height)\n };\n }\n if (name === 'source') {\n if (!data.source) {\n data.source = attrs.map.src;\n } else if (!data.altsource) {\n data.altsource = attrs.map.src;\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = attrs.map.src;\n }\n }\n }\n }).parse(html);\n data.source = data.source || data.src || data.data;\n data.altsource = data.altsource || '';\n data.poster = data.poster || '';\n return data;\n };\n\n var guess = function (url) {\n var mimes = {\n mp3: 'audio/mpeg',\n m4a: 'audio/x-m4a',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n var fileEnd = url.toLowerCase().split('.').pop();\n var mime = mimes[fileEnd];\n return mime ? mime : '';\n };\n var Mime = { guess: guess };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.html.Writer');\n\n var DOM$1 = global$2.DOM;\n var addPx = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var setAttributes = function (attrs, updatedAttrs) {\n for (var name_1 in updatedAttrs) {\n var value = '' + updatedAttrs[name_1];\n if (attrs.map[name_1]) {\n var i = attrs.length;\n while (i--) {\n var attr = attrs[i];\n if (attr.name === name_1) {\n if (value) {\n attrs.map[name_1] = value;\n attr.value = value;\n } else {\n delete attrs.map[name_1];\n attrs.splice(i, 1);\n }\n }\n }\n } else if (value) {\n attrs.push({\n name: name_1,\n value: value\n });\n attrs.map[name_1] = value;\n }\n }\n };\n var updateEphoxEmbed = function (data, attrs) {\n var style = attrs.map.style;\n var styleMap = style ? DOM$1.parseStyle(style) : {};\n styleMap['max-width'] = addPx(data.width);\n styleMap['max-height'] = addPx(data.height);\n setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });\n };\n var sources = [\n 'source',\n 'altsource'\n ];\n var updateHtml = function (html, data, updateAll) {\n var writer = global$5();\n var isEphoxEmbed = Cell(false);\n var sourceCount = 0;\n var hasImage;\n global$3({\n validate: false,\n allow_conditional_comments: true,\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n updateEphoxEmbed(data, attrs);\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n setAttributes(attrs, {\n width: data.width,\n height: data.height\n });\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n setAttributes(attrs, {\n poster: data.poster,\n src: ''\n });\n if (data.altsource) {\n setAttributes(attrs, { src: '' });\n }\n break;\n case 'iframe':\n setAttributes(attrs, { src: data.source });\n break;\n case 'source':\n if (sourceCount < 2) {\n setAttributes(attrs, {\n src: data[sources[sourceCount]],\n type: data[sources[sourceCount] + 'mime']\n });\n if (!data[sources[sourceCount]]) {\n return;\n }\n }\n sourceCount++;\n break;\n case 'img':\n if (!data.poster) {\n return;\n }\n hasImage = true;\n break;\n }\n }\n }\n writer.start(name, attrs, empty);\n },\n end: function (name) {\n if (!isEphoxEmbed.get()) {\n if (name === 'video' && updateAll) {\n for (var index = 0; index < 2; index++) {\n if (data[sources[index]]) {\n var attrs = [];\n attrs.map = {};\n if (sourceCount < index) {\n setAttributes(attrs, {\n src: data[sources[index]],\n type: data[sources[index] + 'mime']\n });\n writer.start('source', attrs, true);\n }\n }\n }\n }\n if (data.poster && name === 'object' && updateAll && !hasImage) {\n var imgAttrs = [];\n imgAttrs.map = {};\n setAttributes(imgAttrs, {\n src: data.poster,\n width: data.width,\n height: data.height\n });\n writer.start('img', imgAttrs, true);\n }\n }\n writer.end(name);\n }\n }, global$4({})).parse(html);\n return writer.getContent();\n };\n var UpdateHtml = { updateHtml: updateHtml };\n\n var urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'maps.google.com/maps/ms?msid=$2&output=embed\"',\n allowFullscreen: false\n },\n {\n regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n },\n {\n regex: /dai\\.ly\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n }\n ];\n var getProtocol = function (url) {\n var protocolMatches = url.match(/^(https?:\\/\\/|www\\.)(.+)$/i);\n if (protocolMatches && protocolMatches.length > 1) {\n return protocolMatches[1] === 'www.' ? 'https://' : protocolMatches[1];\n } else {\n return 'https://';\n }\n };\n var getUrl = function (pattern, url) {\n var protocol = getProtocol(url);\n var match = pattern.regex.exec(url);\n var newUrl = protocol + pattern.url;\n var _loop_1 = function (i) {\n newUrl = newUrl.replace('$' + i, function () {\n return match[i] ? match[i] : '';\n });\n };\n for (var i = 0; i < match.length; i++) {\n _loop_1(i);\n }\n return newUrl.replace(/\\?$/, '');\n };\n var matchPattern = function (url) {\n var patterns = urlPatterns.filter(function (pattern) {\n return pattern.regex.test(url);\n });\n if (patterns.length > 0) {\n return global$1.extend({}, patterns[0], { url: getUrl(patterns[0], url) });\n } else {\n return null;\n }\n };\n\n var getIframeHtml = function (data) {\n var allowFullscreen = data.allowFullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n };\n var getFlashHtml = function (data) {\n var html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n var getAudioHtml = function (data, audioTemplateCallback) {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getVideoHtml = function (data, videoTemplateCallback) {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getScriptHtml = function (data) {\n return '';\n };\n var dataToHtml = function (editor, dataIn) {\n var data = global$1.extend({}, dataIn);\n if (!data.source) {\n global$1.extend(data, htmlToData(Settings.getScripts(editor), data.embed));\n if (!data.source) {\n return '';\n }\n }\n if (!data.altsource) {\n data.altsource = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source = editor.convertURL(data.source, 'source');\n data.altsource = editor.convertURL(data.altsource, 'source');\n data.sourcemime = Mime.guess(data.source);\n data.altsourcemime = Mime.guess(data.altsource);\n data.poster = editor.convertURL(data.poster, 'poster');\n var pattern = matchPattern(data.source);\n if (pattern) {\n data.source = pattern.url;\n data.type = pattern.type;\n data.allowFullscreen = pattern.allowFullscreen;\n data.width = data.width || String(pattern.w);\n data.height = data.height || String(pattern.h);\n }\n if (data.embed) {\n return UpdateHtml.updateHtml(data.embed, data, true);\n } else {\n var videoScript = getVideoScriptMatch(Settings.getScripts(editor), data.source);\n if (videoScript) {\n data.type = 'script';\n data.width = String(videoScript.width);\n data.height = String(videoScript.height);\n }\n var audioTemplateCallback = Settings.getAudioTemplateCallback(editor);\n var videoTemplateCallback = Settings.getVideoTemplateCallback(editor);\n data.width = data.width || '300';\n data.height = data.height || '150';\n global$1.each(data, function (value, key) {\n data[key] = editor.dom.encode('' + value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data);\n } else if (data.sourcemime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.sourcemime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else if (data.type === 'script') {\n return getScriptHtml(data);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var cache = {};\n var embedPromise = function (data, dataToHtml, handler) {\n return new global$6(function (res, rej) {\n var wrappedResolve = function (response) {\n if (response.html) {\n cache[data.source] = response;\n }\n return res({\n url: data.source,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source]) {\n wrappedResolve(cache[data.source]);\n } else {\n handler({ url: data.source }, wrappedResolve, rej);\n }\n });\n };\n var defaultPromise = function (data, dataToHtml) {\n return new global$6(function (res) {\n res({\n html: dataToHtml(data),\n url: data.source\n });\n });\n };\n var loadedData = function (editor) {\n return function (data) {\n return dataToHtml(editor, data);\n };\n };\n var getEmbedHtml = function (editor, data) {\n var embedHandler = Settings.getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n var isCached = function (url) {\n return cache.hasOwnProperty(url);\n };\n var Service = {\n getEmbedHtml: getEmbedHtml,\n isCached: isCached\n };\n\n var extractMeta = function (sourceInput, data) {\n return get(data, sourceInput).bind(function (mainData) {\n return get(mainData, 'meta');\n });\n };\n var getValue = function (data, metaData, sourceInput) {\n return function (prop) {\n var _a;\n var getFromData = function () {\n return get(data, prop);\n };\n var getFromMetaData = function () {\n return get(metaData, prop);\n };\n var getNonEmptyValue = function (c) {\n return get(c, 'value').bind(function (v) {\n return v.length > 0 ? Option.some(v) : Option.none();\n });\n };\n var getFromValueFirst = function () {\n return getFromData().bind(function (child) {\n return isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(function () {\n return Option.from(child);\n });\n });\n };\n var getFromMetaFirst = function () {\n return getFromMetaData().orThunk(function () {\n return getFromData().bind(function (child) {\n return isObject(child) ? getNonEmptyValue(child) : Option.from(child);\n });\n });\n };\n return _a = {}, _a[prop] = (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr(''), _a;\n };\n };\n var getDimensions = function (data, metaData) {\n var dimensions = {};\n get(data, 'dimensions').each(function (dims) {\n each([\n 'width',\n 'height'\n ], function (prop) {\n get(metaData, prop).orThunk(function () {\n return get(dims, prop);\n }).each(function (value) {\n return dimensions[prop] = value;\n });\n });\n });\n return dimensions;\n };\n var unwrap = function (data, sourceInput) {\n var metaData = sourceInput ? extractMeta(sourceInput, data).getOr({}) : {};\n var get = getValue(data, metaData, sourceInput);\n return __assign(__assign(__assign(__assign(__assign({}, get('source')), get('altsource')), get('poster')), get('embed')), getDimensions(data, metaData));\n };\n var wrap = function (data) {\n var wrapped = __assign(__assign({}, data), {\n source: { value: get(data, 'source').getOr('') },\n altsource: { value: get(data, 'altsource').getOr('') },\n poster: { value: get(data, 'poster').getOr('') }\n });\n each([\n 'width',\n 'height'\n ], function (prop) {\n get(data, prop).each(function (value) {\n var dimensions = wrapped.dimensions || {};\n dimensions[prop] = value;\n wrapped.dimensions = dimensions;\n });\n });\n return wrapped;\n };\n var handleError = function (editor) {\n return function (error) {\n var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n editor.notificationManager.open({\n type: 'error',\n text: errorMessage\n });\n };\n };\n var snippetToData = function (editor, embedSnippet) {\n return htmlToData(Settings.getScripts(editor), embedSnippet);\n };\n var isMediaElement = function (element) {\n return element.getAttribute('data-mce-object') || element.getAttribute('data-ephox-embed-iri');\n };\n var getEditorData = function (editor) {\n var element = editor.selection.getNode();\n var snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n return __assign({ embed: snippet }, htmlToData(Settings.getScripts(editor), snippet));\n };\n var addEmbedHtml = function (api, editor) {\n return function (response) {\n if (isString(response.url) && response.url.trim().length > 0) {\n var html = response.html;\n var snippetData = snippetToData(editor, html);\n var nuData = __assign(__assign({}, snippetData), {\n source: response.url,\n embed: html\n });\n api.setData(wrap(nuData));\n }\n };\n };\n var selectPlaceholder = function (editor, beforeObjects) {\n var afterObjects = editor.dom.select('img[data-mce-object]');\n for (var i = 0; i < beforeObjects.length; i++) {\n for (var y = afterObjects.length - 1; y >= 0; y--) {\n if (beforeObjects[i] === afterObjects[y]) {\n afterObjects.splice(y, 1);\n }\n }\n }\n editor.selection.select(afterObjects[0]);\n };\n var handleInsert = function (editor, html) {\n var beforeObjects = editor.dom.select('img[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n var submitForm = function (prevData, newData, editor) {\n newData.embed = UpdateHtml.updateHtml(newData.embed, newData);\n if (newData.embed && (prevData.source === newData.source || Service.isCached(newData.source))) {\n handleInsert(editor, newData.embed);\n } else {\n Service.getEmbedHtml(editor, newData).then(function (response) {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n var showDialog = function (editor) {\n var editorData = getEditorData(editor);\n var currentData = Cell(editorData);\n var initialData = wrap(editorData);\n var handleSource = function (prevData, api) {\n var serviceData = unwrap(api.getData(), 'source');\n if (prevData.source !== serviceData.source) {\n addEmbedHtml(win, editor)({\n url: serviceData.source,\n html: ''\n });\n Service.getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }\n };\n var handleEmbed = function (api) {\n var data = unwrap(api.getData());\n var dataFromEmbed = snippetToData(editor, data.embed);\n api.setData(wrap(dataFromEmbed));\n };\n var handleUpdate = function (api, sourceInput) {\n var data = unwrap(api.getData(), sourceInput);\n var embed = dataToHtml(editor, data);\n api.setData(wrap(__assign(__assign({}, data), { embed: embed })));\n };\n var mediaInput = [{\n name: 'source',\n type: 'urlinput',\n filetype: 'media',\n label: 'Source'\n }];\n var sizeInput = !Settings.hasDimensions(editor) ? [] : [{\n type: 'sizeinput',\n name: 'dimensions',\n label: 'Constrain proportions',\n constrain: true\n }];\n var generalTab = {\n title: 'General',\n name: 'general',\n items: flatten([\n mediaInput,\n sizeInput\n ])\n };\n var embedTextarea = {\n type: 'textarea',\n name: 'embed',\n label: 'Paste your embed code below:'\n };\n var embedTab = {\n title: 'Embed',\n items: [embedTextarea]\n };\n var advancedFormItems = [];\n if (Settings.hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'altsource',\n type: 'urlinput',\n filetype: 'media',\n label: 'Alternative source URL'\n });\n }\n if (Settings.hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'urlinput',\n filetype: 'image',\n label: 'Media poster (Image URL)'\n });\n }\n var advancedTab = {\n title: 'Advanced',\n name: 'advanced',\n items: advancedFormItems\n };\n var tabs = [\n generalTab,\n embedTab\n ];\n if (advancedFormItems.length > 0) {\n tabs.push(advancedTab);\n }\n var body = {\n type: 'tabpanel',\n tabs: tabs\n };\n var win = editor.windowManager.open({\n title: 'Insert/Edit Media',\n size: 'normal',\n body: body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: function (api) {\n var serviceData = unwrap(api.getData());\n submitForm(currentData.get(), serviceData, editor);\n api.close();\n },\n onChange: function (api, detail) {\n switch (detail.name) {\n case 'source':\n handleSource(currentData.get(), api);\n break;\n case 'embed':\n handleEmbed(api);\n break;\n case 'dimensions':\n case 'altsource':\n case 'poster':\n handleUpdate(api, detail.name);\n break;\n }\n currentData.set(unwrap(api.getData()));\n },\n initialData: initialData\n });\n };\n var Dialog = {\n showDialog: showDialog,\n unwrap: unwrap\n };\n\n var get$1 = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n return { showDialog: showDialog };\n };\n var Api = { get: get$1 };\n\n var register = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog);\n };\n var Commands = { register: register };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var sanitize = function (editor, html) {\n if (Settings.shouldFilterHtml(editor) === false) {\n return html;\n }\n var writer = global$5();\n var blocked;\n global$3({\n validate: false,\n allow_conditional_comments: false,\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n blocked = true;\n if (name === 'script' || name === 'noscript' || name === 'svg') {\n return;\n }\n for (var i = attrs.length - 1; i >= 0; i--) {\n var attrName = attrs[i].name;\n if (attrName.indexOf('on') === 0) {\n delete attrs.map[attrName];\n attrs.splice(i, 1);\n }\n if (attrName === 'style') {\n attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);\n }\n }\n writer.start(name, attrs, empty);\n blocked = false;\n },\n end: function (name) {\n if (blocked) {\n return;\n }\n writer.end(name);\n }\n }, global$4({})).parse(html);\n return writer.getContent();\n };\n var Sanitize = { sanitize: sanitize };\n\n var createPlaceholderNode = function (editor, node) {\n var placeHolder;\n var name = node.name;\n placeHolder = new global$7('img', 1);\n placeHolder.shortEnded = true;\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n placeHolder.attr({\n 'width': node.attr('width') || '300',\n 'height': node.attr('height') || (name === 'audio' ? '30' : '150'),\n 'style': node.attr('style'),\n 'src': global$8.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n var createPreviewIframeNode = function (editor, node) {\n var previewWrapper;\n var previewNode;\n var shimNode;\n var name = node.name;\n previewWrapper = new global$7('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': node.attr('style'),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n previewNode = new global$7(name, 1);\n previewNode.attr({\n src: node.attr('src'),\n allowfullscreen: node.attr('allowfullscreen'),\n style: node.attr('style'),\n class: node.attr('class'),\n width: node.attr('width'),\n height: node.attr('height'),\n frameborder: '0'\n });\n shimNode = new global$7('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {\n var attrName;\n var attrValue;\n var attribs;\n var ai;\n var innerHtml;\n attribs = sourceNode.attributes;\n ai = attribs.length;\n while (ai--) {\n attrName = attribs[ai].name;\n attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(Sanitize.sanitize(editor, innerHtml)));\n targetNode.firstChild = null;\n }\n };\n var isPageEmbedWrapper = function (node) {\n var nodeClass = node.attr('class');\n return nodeClass && /\\btiny-pageembed\\b/.test(nodeClass);\n };\n var isWithinEmbedWrapper = function (node) {\n while (node = node.parent) {\n if (node.attr('data-ephox-embed-iri') || isPageEmbedWrapper(node)) {\n return true;\n }\n }\n return false;\n };\n var placeHolderConverter = function (editor) {\n return function (nodes) {\n var i = nodes.length;\n var node;\n var videoScript;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (node.name === 'script') {\n videoScript = getVideoScriptMatch(Settings.getScripts(editor), node.attr('src'));\n if (!videoScript) {\n continue;\n }\n }\n if (videoScript) {\n if (videoScript.width) {\n node.attr('width', videoScript.width.toString());\n }\n if (videoScript.height) {\n node.attr('height', videoScript.height.toString());\n }\n }\n if (node.name === 'iframe' && Settings.hasLiveEmbeds(editor) && global$8.ceFalse) {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPreviewIframeNode(editor, node));\n }\n } else {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPlaceholderNode(editor, node));\n }\n }\n }\n };\n };\n var Nodes = {\n createPreviewIframeNode: createPreviewIframeNode,\n createPlaceholderNode: createPlaceholderNode,\n placeHolderConverter: placeHolderConverter\n };\n\n var setup = function (editor) {\n editor.on('preInit', function () {\n var specialElements = editor.schema.getSpecialElements();\n global$1.each('video audio iframe object'.split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var boolAttrs = editor.schema.getBoolAttrs();\n global$1.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {\n boolAttrs[name] = {};\n });\n editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', Nodes.placeHolderConverter(editor));\n editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {\n var i = nodes.length;\n var node;\n var realElm;\n var ai;\n var attribs;\n var innerHtml;\n var innerNode;\n var realElmName;\n var className;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n realElmName = node.attr(name);\n realElm = new global$7(realElmName, 1);\n if (realElmName !== 'audio' && realElmName !== 'script') {\n className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n attribs = node.attributes;\n ai = attribs.length;\n while (ai--) {\n var attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n if (realElmName === 'script') {\n realElm.attr('type', 'text/javascript');\n }\n innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n innerNode = new global$7('#text', 3);\n innerNode.raw = true;\n innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml));\n realElm.append(innerNode);\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('SetContent', function () {\n editor.$('span.mce-preview-object').each(function (index, elm) {\n var $elm = editor.$(elm);\n if ($elm.find('span.mce-shim').length === 0) {\n $elm.append('');\n }\n });\n });\n };\n var FilterContent = { setup: setup };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n var name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n var ResolveName = { setup: setup$1 };\n\n var setup$2 = function (editor) {\n editor.on('click keyup touchend', function () {\n var selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectSelected', function (e) {\n var objectType = e.target.getAttribute('data-mce-object');\n if (objectType === 'audio' || objectType === 'script') {\n e.preventDefault();\n }\n });\n editor.on('ObjectResized', function (e) {\n var target = e.target;\n var html;\n if (target.getAttribute('data-mce-object')) {\n html = target.getAttribute('data-mce-html');\n if (html) {\n html = unescape(html);\n target.setAttribute('data-mce-html', escape(UpdateHtml.updateHtml(html, {\n width: String(e.width),\n height: String(e.height)\n })));\n }\n }\n });\n };\n var Selection = { setup: setup$2 };\n\n var stateSelectorAdapter = function (editor, selector) {\n return function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind(selector.join(','), buttonApi.setActive).unbind;\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('media', {\n tooltip: 'Insert/edit media',\n icon: 'embed',\n onAction: function () {\n editor.execCommand('mceMedia');\n },\n onSetup: stateSelectorAdapter(editor, [\n 'img[data-mce-object]',\n 'span[data-mce-object]',\n 'div[data-ephox-embed-iri]'\n ])\n });\n editor.ui.registry.addMenuItem('media', {\n icon: 'embed',\n text: 'Media...',\n onAction: function () {\n editor.execCommand('mceMedia');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('media', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n ResolveName.setup(editor);\n FilterContent.setup(editor);\n Selection.setup(editor);\n return Api.get(editor);\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","// 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');","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","/**\n * 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.2.2 (2020-04-23)\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 getPreviewDialogWidth = function (editor) {\n return parseInt(editor.getParam('plugin_preview_width', '650'), 10);\n };\n var getPreviewDialogHeight = function (editor) {\n return parseInt(editor.getParam('plugin_preview_height', '500'), 10);\n };\n var getContentStyle = function (editor) {\n return editor.getParam('content_style', '');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var Settings = {\n getPreviewDialogWidth: getPreviewDialogWidth,\n getPreviewDialogHeight: getPreviewDialogHeight,\n getContentStyle: getContentStyle,\n shouldUseContentCssCors: shouldUseContentCssCors\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getPreviewHtml = function (editor) {\n var headHtml = '';\n var encode = editor.dom.encode;\n var contentStyle = Settings.getContentStyle(editor);\n headHtml += '';\n if (contentStyle) {\n headHtml += '';\n }\n var cors = Settings.shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global$1.each(editor.contentCSS, function (url) {\n headHtml += '';\n });\n var bodyId = editor.settings.body_id || 'tinymce';\n if (bodyId.indexOf('=') !== -1) {\n bodyId = editor.getParam('body_id', '', 'hash');\n bodyId = bodyId[editor.id] || bodyId;\n }\n var bodyClass = editor.settings.body_class || '';\n if (bodyClass.indexOf('=') !== -1) {\n bodyClass = editor.getParam('body_class', '', 'hash');\n bodyClass = bodyClass[editor.id] || '';\n }\n var isMetaKeyPressed = global$2.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 var IframeContent = { getPreviewHtml: getPreviewHtml };\n\n var open = function (editor) {\n var content = IframeContent.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 var Commands = { register: register };\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 var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('preview', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"emoticons\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/emoticons')\n// ES2015:\n// import 'tinymce/plugins/emoticons'\nrequire('./plugin.js');","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","/**\n * 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.2.2 (2020-04-23)\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 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 var Actions = { applyListFormat: applyListFormat };\n\n var register = function (editor) {\n editor.addCommand('ApplyUnorderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n var Commands = { register: register };\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 var Settings = {\n getNumberStyles: getNumberStyles,\n getBulletStyles: getBulletStyles\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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\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 Option.from(style);\n };\n var ListUtils = {\n isTableCellNode: isTableCellNode,\n isListNode: isListNode,\n getSelectedStyleType: getSelectedStyleType\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, ListUtils.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$1.grep(parents, ListUtils.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 Actions.applyListFormat(editor, nodeName, value);\n },\n select: function (value) {\n var listStyleType = ListUtils.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 > 0) {\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', Settings.getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', Settings.getBulletStyles(editor));\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('advlist', function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$1.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n if (hasPlugin(editor, 'lists')) {\n Buttons.register(editor);\n Commands.register(editor);\n }\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"wordcount\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/wordcount')\n// ES2015:\n// import 'tinymce/plugins/wordcount'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\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 var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var 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 () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = 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 = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = 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 Option.some(x);\n }\n }\n return Option.none();\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 Option.some(i);\n }\n }\n return Option.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 last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(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 Option.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 get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var sort = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort(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(incorrect).join(', ') + ') were not.');\n };\n var checkDupes = function (everything) {\n var sorted = sort(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 MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\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 var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\n });\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.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\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.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$1 = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\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 = 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 checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === 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 trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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 fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.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 || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.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: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.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 Element.fromDom(b);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.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 internalRemove = function (dom, property) {\n if (isSupported(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$2 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(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 Option.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 (has$1(element, 'style') && trim(get$1(element, 'style')) === '') {\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(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\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 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 edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\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 isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current),\n isChromeOS: isOS(chromeos, current)\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 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 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 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 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 domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\n };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\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$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\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 Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = detect$3().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.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 = Element.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 prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var spot = Immutable('element', 'offset');\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 dimension = Immutable('width', 'height');\n var dimensions = Immutable('width', 'height');\n var grid = Immutable('rows', 'columns');\n var address = Immutable('row', 'column');\n var coords = Immutable('x', 'y');\n var detail = Immutable('element', 'rowspan', 'colspan');\n var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');\n var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');\n var rowdata = Immutable('element', 'cells', 'section');\n var elementnew = Immutable('element', 'isNew');\n var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');\n var rowcells = Immutable('cells', 'section');\n var rowdetails = Immutable('details', 'section');\n var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');\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 return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.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(Element.fromDom(node));\n };\n var result = find(scope.dom().childNodes, pred);\n return result.map(Element.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 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.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 return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, constant(true));\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind(children(scope), function (x) {\n return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);\n });\n };\n var LayerSelector = {\n firstLayer: firstLayer,\n filterFirstLayer: filterFirstLayer\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Option.none();\n }\n if (contains(tags, name(element))) {\n return Option.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 LayerSelector.firstLayer(ancestor, 'th,td');\n };\n var notCell = function (element, isRoot) {\n return lookup([\n 'caption',\n 'tr',\n 'tbody',\n 'tfoot',\n 'thead'\n ], element, isRoot);\n };\n var neighbours = function (selector, element) {\n return parent(element).map(function (parent) {\n return children$2(parent, selector);\n });\n };\n var neighbourCells = curry(neighbours, 'th,td');\n var neighbourRows = curry(neighbours, 'tr');\n var firstCell = function (ancestor) {\n return descendant$1(ancestor, 'th,td');\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var row = function (element, isRoot) {\n return lookup(['tr'], element, isRoot);\n };\n var rows = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'tr');\n };\n var attr = function (element, property) {\n return parseInt(get$1(element, property), 10);\n };\n var grid$1 = function (element, rowProp, colProp) {\n var rowsCount = attr(element, rowProp);\n var cols = attr(element, colProp);\n return grid(rowsCount, cols);\n };\n var TableLookup = {\n cell: cell,\n firstCell: firstCell,\n cells: cells,\n neighbourCells: neighbourCells,\n table: table,\n row: row,\n rows: rows,\n notCell: notCell,\n neighbourRows: neighbourRows,\n attr: attr,\n grid: grid$1\n };\n\n var fromTable = function (table) {\n var rows = TableLookup.rows(table);\n return map(rows, function (row) {\n var element = row;\n var parent$1 = parent(element);\n var parentSection = parent$1.map(function (p) {\n var parentName = name(p);\n return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';\n }).getOr('tbody');\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has$1(cell, 'rowspan') ? parseInt(get$1(cell, 'rowspan'), 10) : 1;\n var colspan = has$1(cell, 'colspan') ? parseInt(get$1(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(element, cells, parentSection);\n });\n };\n var fromPastedRows = function (rows, example) {\n return map(rows, function (row) {\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has$1(cell, 'rowspan') ? parseInt(get$1(cell, 'rowspan'), 10) : 1;\n var colspan = has$1(cell, 'colspan') ? parseInt(get$1(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells, example.section());\n });\n };\n var DetailsList = {\n fromTable: fromTable,\n fromPastedRows: fromPastedRows\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 ? Option.some(raw) : Option.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 ? Option.some(filtered[0]) : Option.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 generate = function (list) {\n var access = {};\n var cells = [];\n var maxRows = list.length;\n var maxColumns = 0;\n each(list, function (details, r) {\n var currentRow = [];\n each(details.cells(), function (detail) {\n var start = 0;\n while (access[key(r, start)] !== undefined) {\n start++;\n }\n var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);\n for (var i = 0; i < detail.colspan(); i++) {\n for (var j = 0; j < detail.rowspan(); j++) {\n var cr = r + j;\n var cc = start + i;\n var newpos = key(cr, cc);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, cc + 1);\n }\n }\n currentRow.push(current);\n });\n cells.push(rowdata(details.element(), currentRow, details.section()));\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: constant(grid$1),\n access: constant(access),\n all: constant(cells)\n };\n };\n var justCells = function (warehouse) {\n var rows = map(warehouse.all(), function (w) {\n return w.cells();\n });\n return flatten(rows);\n };\n var Warehouse = {\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells\n };\n\n var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');\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 each$1(house.access(), function (detail) {\n if (isSelected(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);\n };\n var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element();\n var td = Element.fromTag('td');\n append(td, Element.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 (table, stats) {\n var emptyRows = filter(LayerSelector.firstLayer(table, '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(LayerSelector.firstLayer(table, 'th,td'), function (cell) {\n remove(cell, 'rowspan');\n remove(cell, 'colspan');\n });\n }\n remove(table, 'width');\n remove(table, 'height');\n remove$1(table, 'width');\n remove$1(table, 'height');\n };\n var extract = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is(detail.element(), selectedSelector);\n };\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var stats = findSelectedStats(house, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {\n return is(cell, selector);\n });\n each(unselectedCells, remove$2);\n fillInGaps(list, house, stats, isSelected);\n clean(table, stats);\n return table;\n };\n var CopySelected = { extract: extract };\n\n var nbsp = '\\xA0';\n\n function NodeValue (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) ? Option.from(element.dom().nodeValue) : Option.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$3 = 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 api.set(element, value);\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 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 Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.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 = Element.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 createCell = function () {\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n return td;\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 Element.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(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 cellOperations = function (mutate, doc, formatsToClone) {\n var newCell = function (prev) {\n var docu = owner(prev.element());\n var td = Element.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, Element.fromTag('br'));\n copy(prev.element(), td);\n remove$1(td, 'height');\n if (prev.colspan() !== 1) {\n remove$1(prev.element(), 'width');\n }\n mutate(prev.element(), td);\n return td;\n };\n return {\n row: newRow(doc),\n cell: newCell,\n replace: replace,\n gap: createCell\n };\n };\n var paste = function (doc) {\n return {\n row: newRow(doc),\n cell: createCell,\n replace: pasteReplace,\n gap: createCell\n };\n };\n var TableFill = {\n cellOperations: cellOperations,\n paste: paste\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\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 ? Option.some(bounds) : Option.none();\n };\n var CellBounds = {\n inSelection: inSelection,\n isWithin: isWithin,\n isRectangular: isRectangular\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);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\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 CellBounds.isRectangular(warehouse, bounds);\n });\n };\n var CellGroup = {\n getAnyBox: getAnyBox,\n getBox: getBox\n };\n\n var moveBy = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq).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 CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(CellBounds.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 var CellFinder = {\n moveBy: moveBy,\n intercepts: intercepts,\n parentCell: parentCell\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return TableLookup.table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellFinder.intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);\n var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return CellFinder.intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellGroup.getBox(warehouse, first, last);\n };\n var getWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return Warehouse.generate(list);\n };\n var TablePositions = {\n moveBy: moveBy$1,\n intercepts: intercepts$1,\n nestedIntercepts: nestedIntercepts,\n getBox: getBox$1\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 Element.fromDom(element.dom().cloneNode(false));\n };\n var document = function (element) {\n return element.dom().ownerDocument;\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$1(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 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$2,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get$1,\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: Element.fromTag,\n clone: clone$1,\n text: Element.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 getText: get$3,\n setText: set$2,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag,\n isNonEditable: isNonEditable\n }),\n eq: eq,\n is: is$1\n };\n }\n\n var leftRight = Immutable('left', 'right');\n var brokenPath = Immutable('first', 'second', 'splits');\n var bisect = function (universe, parent, child) {\n var children = universe.property().children(parent);\n var index = findIndex(children, curry(universe.eq, child));\n return index.map(function (ind) {\n return {\n before: constant(children.slice(0, ind)),\n after: constant(children.slice(ind + 1))\n };\n });\n };\n var breakToRight = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var second = universe.create().clone(parent);\n universe.insert().appendAll(second, parts.after());\n universe.insert().after(parent, second);\n return leftRight(parent, second);\n });\n };\n var breakToLeft = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var prior = universe.create().clone(parent);\n universe.insert().appendAll(prior, parts.before().concat([child]));\n universe.insert().appendAll(parent, parts.after());\n universe.insert().before(parent, prior);\n return leftRight(prior, parent);\n });\n };\n var breakPath = function (universe, item, isTop, breaker) {\n var next = function (child, group, splits) {\n var fallback = brokenPath(child, Option.none(), splits);\n if (isTop(child)) {\n return brokenPath(child, group, splits);\n } else {\n return universe.property().parent(child).bind(function (parent) {\n return breaker(universe, parent, child).map(function (breakage) {\n var extra = [{\n first: breakage.left,\n second: breakage.right\n }];\n var nextChild = isTop(parent) ? parent : breakage.left();\n return next(nextChild, Option.some(breakage.right()), splits.concat(extra));\n });\n }).getOr(fallback);\n }\n };\n return next(item, Option.none(), []);\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) : Option.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$1 = function (universe, item) {\n return curry(universe.eq, item);\n };\n var unsafeSubset = function (universe, common, ps1, ps2) {\n var children = universe.property().children(common);\n if (universe.eq(common, ps1[0])) {\n return Option.some([ps1[0]]);\n }\n if (universe.eq(common, ps2[0])) {\n return Option.some([ps2[0]]);\n }\n var finder = function (ps) {\n var topDown = reverse(ps);\n var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);\n var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];\n return findIndex(children, eq$1(universe, item));\n };\n var startIndex = finder(ps1);\n var endIndex = finder(ps2);\n return startIndex.bind(function (sIndex) {\n return endIndex.map(function (eIndex) {\n var first = Math.min(sIndex, eIndex);\n var last = Math.max(sIndex, eIndex);\n return children.slice(first, last + 1);\n });\n });\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$1(universe, x));\n });\n return {\n firstpath: constant(pruned1),\n secondpath: constant(pruned2),\n shared: constant(shared)\n };\n };\n var subset = function (universe, start, end) {\n var ancs = ancestors$2(universe, start, end);\n return ancs.shared().bind(function (shared) {\n return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());\n });\n };\n var SubsetFn = {\n subset: subset,\n ancestors: ancestors$2\n };\n\n var sharedOne = oneAll;\n var subset$1 = SubsetFn.subset;\n var ancestors$3 = SubsetFn.ancestors;\n var breakToLeft$1 = breakToLeft;\n var breakToRight$1 = breakToRight;\n var breakPath$1 = breakPath;\n var Parent = {\n sharedOne: sharedOne,\n subset: subset$1,\n ancestors: ancestors$3,\n breakToLeft: breakToLeft$1,\n breakToRight: breakToRight$1,\n breakPath: breakPath$1\n };\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return Parent.sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var subset$2 = function (start, finish) {\n return Parent.subset(universe, start, finish);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return Parent.ancestors(universe, start, finish, isRoot);\n };\n var breakToLeft$2 = function (parent, child) {\n return Parent.breakToLeft(universe, parent, child);\n };\n var breakToRight$2 = function (parent, child) {\n return Parent.breakToRight(universe, parent, child);\n };\n var breakPath$2 = function (child, isTop, breaker) {\n return Parent.breakPath(universe, child, isTop, function (u, p, c) {\n return breaker(p, c);\n });\n };\n var DomParent = {\n sharedOne: sharedOne$1,\n subset: subset$2,\n ancestors: ancestors$4,\n breakToLeft: breakToLeft$2,\n breakToRight: breakToRight$2,\n breakPath: breakPath$2\n };\n\n var create = MixedBag([\n 'boxes',\n 'start',\n 'finish'\n ], []);\n var Identified = { create: create };\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(element, rootTable);\n };\n };\n if (eq(start, finish)) {\n return Option.some(Identified.create({\n boxes: Option.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(startTable, finishTable)) {\n return Option.some(Identified.create({\n boxes: TablePositions.intercepts(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 Option.some(Identified.create({\n boxes: TablePositions.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 Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n }));\n } else {\n return DomParent.ancestors(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 Option.some(Identified.create({\n boxes: TablePositions.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 ? Option.some(sels) : Option.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 DomParent.sharedOne(lookupTable, [\n first,\n last\n ]).map(function (tbl) {\n return {\n first: constant(first),\n last: constant(last),\n table: constant(tbl)\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: constant(boxes),\n start: constant(identified.start()),\n finish: constant(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 TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n var CellSelection = {\n identify: identify,\n retrieve: retrieve,\n shiftSelection: shiftSelection,\n getEdges: getEdges\n };\n\n var retrieve$1 = function (container, selector) {\n return CellSelection.retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq(container, ancestor);\n };\n var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);\n var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();\n });\n });\n });\n };\n var TableSelection = {\n retrieve: retrieve$1,\n retrieveBox: retrieveBox\n };\n\n var selected = 'data-mce-selected';\n var selectedSelector = 'td[' + selected + '],th[' + selected + ']';\n var attributeSelector = '[' + selected + ']';\n var firstSelected = 'data-mce-first-selected';\n var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';\n var lastSelected = 'data-mce-last-selected';\n var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';\n var Ephemera = {\n selected: constant(selected),\n selectedSelector: constant(selectedSelector),\n attributeSelector: constant(attributeSelector),\n firstSelected: constant(firstSelected),\n firstSelectedSelector: constant(firstSelectedSelector),\n lastSelected: constant(lastSelected),\n lastSelectedSelector: constant(lastSelectedSelector)\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 argLength = arguments.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 args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\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 if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.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: ['selection'] }\n ]);\n var cata = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var SelectionTypes = {\n cata: cata,\n none: type$1.none,\n multiple: type$1.multiple,\n single: type$1.single\n };\n\n var selection = function (cell, selections) {\n return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));\n };\n var unmergable = function (cell, selections) {\n var hasSpan = function (elem) {\n return has$1(elem, 'rowspan') && parseInt(get$1(elem, 'rowspan'), 10) > 1 || has$1(elem, 'colspan') && parseInt(get$1(elem, 'colspan'), 10) > 1;\n };\n var candidates = selection(cell, selections);\n return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();\n };\n var mergable = function (table, selections) {\n return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {\n if (cells.length === 0) {\n return Option.none();\n }\n return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {\n return cells.length > 1 ? Option.some({\n bounds: constant(bounds),\n cells: constant(cells)\n }) : Option.none();\n });\n }, Option.none);\n };\n var CellOperations = {\n mergable: mergable,\n unmergable: unmergable,\n selection: selection\n };\n\n var noMenu = function (cell) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant([cell])\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: constant(cell),\n mergable: constant(CellOperations.mergable(table, selections)),\n unmergable: constant(CellOperations.unmergable(cell, selections)),\n selection: constant(CellOperations.selection(cell, selections))\n };\n };\n var notCell$1 = function (element) {\n return noMenu(element);\n };\n var paste$1 = Immutable('element', 'clipboard', 'generators');\n var pasteRows = function (selections, table, cell, clipboard, generators) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant(CellOperations.selection(cell, selections)),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n var TableTargets = {\n noMenu: noMenu,\n forMenu: forMenu,\n notCell: notCell$1,\n paste: paste$1,\n pasteRows: pasteRows\n };\n\n var extractSelected = function (cells) {\n return TableLookup.table(cells[0]).map(deep).map(function (replica) {\n return [CopySelected.extract(replica, Ephemera.attributeSelector())];\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 SelectionTypes.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 = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n cellOpt.each(function (domCell) {\n var cell = Element.fromDom(domCell);\n TableLookup.table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n if (elements.length === 1 && name(elements[0]) === 'table') {\n e.preventDefault();\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n }\n });\n });\n }\n });\n };\n var Clipboard = { registerEvents: registerEvents };\n\n function Dimension (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(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$2(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$2(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$4 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n\n var api$2 = Dimension('width', function (element) {\n return element.dom().offsetWidth;\n });\n var get$5 = 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 platform$1 = detect$3();\n var needManualCalc = function () {\n return platform$1.browser.isIE() || platform$1.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$2(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\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 height = cell.dom().getBoundingClientRect().height;\n var boxSizing = get$2(cell, 'box-sizing');\n var borders = borderTop + borderBottom;\n return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;\n };\n var getWidth = function (cell) {\n return getProp(cell, 'width', get$5(cell));\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$4(cell));\n };\n var RuntimeSize = {\n getWidth: getWidth,\n getHeight: getHeight\n };\n\n var genericSizeRegex = /(\\d+(\\.\\d+)?)(\\w|%)*/;\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var pixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\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 RuntimeSize.getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = TableLookup.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$4(cell);\n }\n return normalizePixelSize(value, cell, get$4, setHeight);\n };\n var get$6 = function (cell, type, f) {\n var v = f(cell);\n var span = getSpan(cell, type);\n return v / span;\n };\n var getSpan = function (cell, type) {\n return has$1(cell, type) ? parseInt(get$1(cell, type), 10) : 1;\n };\n var getRawWidth = function (element) {\n var cssWidth = getRaw(element, 'width');\n return cssWidth.fold(function () {\n return Option.from(get$1(element, 'width'));\n }, function (width) {\n return Option.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 = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = get$5(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 = pixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return get$5(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return get$5(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$6(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n var match = genericSizeRegex.exec(w);\n if (match !== null) {\n return Option.some({\n width: constant(parseFloat(match[1])),\n unit: constant(match[3])\n });\n } else {\n return Option.none();\n }\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var Sizes = {\n percentageBasedSizeRegex: constant(percentageBasedSizeRegex),\n pixelBasedSizeRegex: constant(pixelBasedSizeRegex),\n setPixelWidth: setPixelWidth,\n setPercentageWidth: setPercentageWidth,\n setHeight: setHeight,\n getPixelWidth: getPixelWidth,\n getPercentageWidth: getPercentageWidth,\n getGenericWidth: getGenericWidth,\n setGenericWidth: setGenericWidth,\n getHeight: getHeight$1,\n getRawWidth: getRawWidth\n };\n\n var halve = function (main, other) {\n var width = Sizes.getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.width() / 2;\n Sizes.setGenericWidth(main, newWidth, w.unit());\n Sizes.setGenericWidth(other, newWidth, w.unit());\n });\n };\n var CellMutations = { halve: halve };\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: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\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 Position(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(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 Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var rowInfo = Immutable('row', 'y');\n var colInfo = Immutable('col', 'x');\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left() + getOuter$1(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(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 BarPositions = {\n height: height,\n rtl: rtl,\n ltr: ltr\n };\n\n var ResizeDirection = {\n ltr: BarPositions.ltr,\n rtl: BarPositions.rtl\n };\n\n function TableDirection (directionAt) {\n var auto = function (table) {\n return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;\n };\n var delta = function (amount, table) {\n return auto(table).delta(amount, table);\n };\n var positions = function (cols, table) {\n return auto(table).positions(cols, table);\n };\n var edge = function (cell) {\n return auto(cell).edge(cell);\n };\n return {\n delta: delta,\n edge: edge,\n positions: positions\n };\n }\n\n var getGridSize = function (table) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n return warehouse.grid();\n };\n var TableGridSize = { getGridSize: getGridSize };\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 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 render = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var renderSection = function (gridSection, sectionName) {\n var section = child$2(table, sectionName).getOrThunk(function () {\n var tb = Element.fromTag(sectionName, owner(table).dom());\n append(table, tb);\n return tb;\n });\n empty(section);\n var rows = 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 append$1(section, rows);\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 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 }\n });\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows: constant(newRows),\n newCells: constant(newCells)\n };\n };\n var copy$2 = function (grid) {\n var rows = 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 return rows;\n };\n var Redraw = {\n render: render,\n copy: copy$2\n };\n\n var read = function (element, attr) {\n var value = get$1(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$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$7 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$3(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$7(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$2 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var repeat = function (repititions, f) {\n var r = [];\n for (var i = 0; i < repititions; i++) {\n r.push(f(i));\n }\n return r;\n };\n var range = function (start, end) {\n var r = [];\n for (var i = start; i < end; i++) {\n r.push(i);\n }\n return r;\n };\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Option.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 Option.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 Option.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 columns = function (warehouse) {\n var grid = warehouse.grid();\n var cols = range(0, grid.columns());\n var rowsArr = range(0, grid.rows());\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 }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.colspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var decide = function (getBlock, isSingle, getFallback) {\n var inBlock = getBlock();\n var singleInBlock = find(inBlock, isSingle);\n var detailOption = singleInBlock.orThunk(function () {\n return Option.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(0, grid.rows());\n var cols = range(0, grid.columns());\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 var Blocks = {\n columns: columns,\n rows: rows$1\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-snooker');\n var Styles = { resolve: styles.resolve };\n\n var col = function (column, x, y, w, h) {\n var bar = Element.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$1 = function (r, x, y, w, h) {\n var bar = Element.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 var Bar = {\n col: col,\n row: row$1\n };\n\n var resizeBar = Styles.resolve('resizer-bar');\n var resizeRowBar = Styles.resolve('resizer-rows');\n var resizeColBar = Styles.resolve('resizer-cols');\n var BAR_THICKNESS = 7;\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, i) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$2(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 = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\n add$2(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 = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);\n add$2(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {\n var position = absolute(table);\n var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];\n refreshRow(wire, rowPositions, position, getOuter$1(table));\n var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];\n refreshCol(wire, colPositions, position, getOuter(table));\n };\n var refresh = function (wire, table, hdirection, vdirection) {\n destroy(wire);\n var list = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(list);\n var rows = Blocks.rows(warehouse);\n var cols = Blocks.columns(warehouse);\n refreshGrid(wire, table, rows, cols, hdirection, vdirection);\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$2(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has$2(element, resizeColBar);\n };\n var Bars = {\n refresh: refresh,\n hide: hide,\n show: show,\n destroy: destroy,\n isRowBar: isRowBar,\n isColBar: isColBar\n };\n\n var addCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n var before = cells.slice(0, index);\n var after = cells.slice(index);\n var newCells = before.concat([cell]).concat(after);\n return setCells(gridRow, newCells);\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 GridRow = {\n addCell: addCell,\n setCells: setCells,\n mutateCell: mutateCell,\n getCell: getCell,\n getCellElement: getCellElement,\n mapCells: mapCells,\n cellLength: cellLength\n };\n\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return GridRow.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: constant(endColIndex),\n rowspan: constant(endRowIndex)\n };\n };\n var TableGrid = { subgrid: subgrid };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row, ri) {\n return map(row.cells(), function (col, ci) {\n return false;\n });\n });\n var updateSeen = function (ri, ci, rowspan, colspan) {\n for (var r = ri; r < ri + rowspan; r++) {\n for (var c = ci; c < ci + colspan; c++) {\n seen[r][c] = true;\n }\n }\n };\n return map(grid, function (row, ri) {\n var details = bind(row.cells(), function (cell, ci) {\n if (seen[ri][ci] === false) {\n var result = TableGrid.subgrid(grid, ri, ci, comparator);\n updateSeen(ri, ci, 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 for (var i = 0; i < warehouse.grid().rows(); i++) {\n var rowCells = [];\n for (var j = 0; j < warehouse.grid().columns(); j++) {\n var element = Warehouse.getAt(warehouse, i, j).map(function (item) {\n return elementnew(item.element(), isNew);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true);\n });\n rowCells.push(element);\n }\n var row = rowcells(rowCells, warehouse.all()[i].section());\n grid.push(row);\n }\n return grid;\n };\n var Transitions = {\n toDetails: toDetails,\n toGrid: toGrid\n };\n\n var fromWarehouse = function (warehouse, generators) {\n return Transitions.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);\n });\n });\n return rowOfCells.getOrThunk(function () {\n return elementnew(generators.row(), true);\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 = Transitions.toDetails(grid, eq);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n var all = flatten(map(warehouse.all(), function (r) {\n return r.cells();\n }));\n return find(all, function (e) {\n return eq(element, e.element());\n });\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, direction) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq, genWrappers(generators));\n var grid = toDetailList(result.grid(), generators);\n return {\n grid: constant(grid),\n cursor: result.cursor\n };\n });\n return output.fold(function () {\n return Option.none();\n }, function (out) {\n var newElements = Redraw.render(table, out.grid());\n adjustment(table, out.grid(), direction);\n postAction(table);\n Bars.refresh(wire, table, BarPositions.height, direction);\n return Option.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 TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return TableLookup.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 onPasteRows = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some({\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n }) : Option.none();\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 var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some(cells) : Option.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 toOption = function () {\n return Option.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 toOption: toOption\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 toOption: Option.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() > GridRow.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 = GridRow.cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: constant(rowRemainder.length - rowRequired),\n colDelta: constant(colRemainder.length - colRequired)\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = GridRow.cellLength(gridA[0]);\n var colLengthB = GridRow.cellLength(gridB[0]);\n return {\n rowDelta: constant(0),\n colDelta: constant(colLengthA - colLengthB)\n };\n };\n var fill = function (cells, generator) {\n return map(cells, function () {\n return elementnew(generator.cell(), true);\n });\n };\n var rowFill = function (grid, amount, generator) {\n return grid.concat(repeat(amount, function (_row) {\n return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));\n }));\n };\n var colFill = function (grid, amount, generator) {\n return map(grid, function (row) {\n return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));\n });\n };\n var tailor = function (gridA, delta, generator) {\n var fillCols = delta.colDelta() < 0 ? colFill : identity;\n var fillRows = delta.rowDelta() < 0 ? rowFill : identity;\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);\n var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);\n return tailoredGrid;\n };\n var Fitment = {\n measure: measure,\n measureWidth: measureWidth,\n tailor: tailor\n };\n\n var merge = function (grid, bounds, comparator, substitution) {\n if (grid.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 GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var first = true;\n for (var i = 0; i < grid.length; i++) {\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n var current = GridRow.getCellElement(grid[i], j);\n var isToReplace = comparator(current, target);\n if (isToReplace === true && first === false) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));\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 splitRows = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid.length) {\n var rowPrevCells = grid[index - 1].cells();\n var cells = uniqueCells(rowPrevCells, comparator);\n each(cells, function (cell) {\n var replacement = Option.none();\n var _loop_1 = function (i) {\n var _loop_2 = function (j) {\n var current = grid[i].cells()[j];\n var isToReplace = comparator(current.element(), cell.element());\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Option.some(substitution());\n }\n replacement.each(function (sub) {\n GridRow.mutateCell(grid[i], j, elementnew(sub, true));\n });\n }\n };\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n _loop_2(j);\n }\n };\n for (var i = index; i < grid.length; i++) {\n _loop_1(i);\n }\n });\n }\n return grid;\n };\n var MergingOperations = {\n merge: merge,\n unmerge: unmerge,\n splitRows: splitRows\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = GridRow.getCell(grid[row], col);\n var matching = curry(comparator, candidate.element());\n var currentRow = grid[row];\n return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\n var startRow = startAddress.row();\n var startCol = startAddress.column();\n var mergeHeight = gridB.length;\n var mergeWidth = GridRow.cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth;\n for (var r = startRow; r < endRow; r++) {\n for (var c = startCol; c < endCol; c++) {\n if (isSpanning(gridA, r, c, comparator)) {\n MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);\n var replacement = generator.replace(newCell);\n GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));\n }\n }\n return gridA;\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var result = Fitment.measure(startAddress, gridA, gridB);\n return result.map(function (delta) {\n var fittedGrid = Fitment.tailor(gridA, delta, generator);\n return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\n });\n };\n var insert = function (index, gridA, gridB, generator, comparator) {\n MergingOperations.splitRows(gridA, index, comparator, generator.cell);\n var delta = Fitment.measureWidth(gridB, gridA);\n var fittedNewGrid = Fitment.tailor(gridB, delta, generator);\n var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);\n var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);\n return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\n };\n var TableMerge = {\n merge: merge$1,\n insert: insert\n };\n\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[example], function (ex, c) {\n var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));\n var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);\n return ret;\n });\n return before.concat([between]).concat(after);\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map(grid, function (row) {\n var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleCol + 1;\n return map(grid, function (row, i) {\n var isTargetCell = i === exampleRow;\n var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleRow + 1;\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {\n var isTargetCell = i === exampleCol;\n return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;\n });\n return before.concat([between]).concat(after);\n };\n var deleteColumnsAt = function (grid, start, finish) {\n var rows = map(grid, function (row) {\n var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));\n return rowcells(cells, row.section());\n });\n return filter(rows, function (row) {\n return row.cells().length > 0;\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n return grid.slice(0, start).concat(grid.slice(finish + 1));\n };\n var ModificationOperations = {\n insertRowAt: insertRowAt,\n insertColumnAt: insertColumnAt,\n splitCellIntoColumns: splitCellIntoColumns,\n splitCellIntoRows: splitCellIntoRows,\n deleteRowsAt: deleteRowsAt,\n deleteColumnsAt: deleteColumnsAt\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 GridRow.mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var targets = bind(grid, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [GridRow.getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var targetRow = grid[index];\n var targets = bind(targetRow.cells(), function (item, i) {\n var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var TransformOperations = {\n replaceColumn: replaceColumn,\n replaceRow: replaceRow\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$1 = 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) {\n var result = input.slice(0);\n var context = neighbours$1(input, column);\n var zero = function (array) {\n return map(array, constant(0));\n };\n var onNone = constant(zero(result));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onChange = function (index, next) {\n if (step >= 0) {\n var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);\n return zero(result.slice(0, index)).concat([\n step,\n newNext - result[next]\n ]).concat(zero(result.slice(next + 1)));\n } else {\n var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);\n var diffx = result[index] - newThis;\n return zero(result.slice(0, index)).concat([\n newThis - result[index],\n diffx\n ]).concat(zero(result.slice(next + 1)));\n }\n };\n var onLeft = onChange;\n var onMiddle = function (_prev, index, next) {\n return onChange(index, next);\n };\n var onRight = function (_prev, index) {\n if (step >= 0) {\n return zero(result.slice(0, index)).concat([step]);\n } else {\n var size = Math.max(tableSize.minCellWidth(), result[index] + step);\n return zero(result.slice(0, index)).concat([size - result[index]]);\n }\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n var Deltas = { determine: determine };\n\n var getSpan$1 = function (cell, type) {\n return has$1(cell, type) && parseInt(get$1(cell, type), 10) > 1;\n };\n var hasColspan = function (cell) {\n return getSpan$1(cell, 'colspan');\n };\n var hasRowspan = function (cell) {\n return getSpan$1(cell, 'rowspan');\n };\n var getInt = function (element, property) {\n return parseInt(get$2(element, property), 10);\n };\n var CellUtils = {\n hasColspan: hasColspan,\n hasRowspan: hasRowspan,\n minWidth: constant(10),\n minHeight: constant(10),\n getInt: getInt\n };\n\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 return getRaw$1(cell, 'width', function (e) {\n return Sizes.getPixelWidth(e, tableSize);\n });\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', Sizes.getHeight);\n };\n var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\n var columns = Blocks.columns(warehouse);\n var backups = map(columns, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(columns, function (cellOption, c) {\n var columnCell = cellOption.filter(not(CellUtils.hasColspan));\n return columnCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getWidth(cell, tableSize);\n });\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, direction, tableSize) {\n return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.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, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\n var rows = Blocks.rows(warehouse);\n var backups = map(rows, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(rows, function (cellOption, c) {\n var rowCell = cellOption.filter(not(CellUtils.hasRowspan));\n return rowCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getHeight(cell);\n });\n });\n };\n var getPixelHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {\n return deduced.getOrThunk(CellUtils.minHeight);\n });\n };\n var getRawHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, getRawH, getDeduced);\n };\n var ColumnSizes = {\n getRawWidths: getRawWidths,\n getPixelWidths: getPixelWidths,\n getPercentageWidths: getPercentageWidths,\n getPixelHeights: getPixelHeights,\n getRawHeights: getRawHeights\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 recalculateWidth = 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: constant(width),\n colspan: cell.colspan\n };\n });\n };\n var recalculateHeight = 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: constant(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: constant(heights[i])\n };\n });\n };\n var Recalculations = {\n recalculateWidth: recalculateWidth,\n recalculateHeight: recalculateHeight,\n matchRowHeight: matchRowHeight\n };\n\n var percentageSize = function (width, element) {\n var floatWidth = parseFloat(width);\n var pixelWidth = get$5(element);\n var getCellDelta = function (delta) {\n return delta / pixelWidth * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return CellUtils.minWidth() / pixelWidth * 100;\n };\n var setTableWidth = function (table, _newWidths, delta) {\n var ratio = delta / 100;\n var change = ratio * floatWidth;\n Sizes.setPercentageWidth(table, floatWidth + change);\n };\n return {\n width: constant(floatWidth),\n pixelWidth: constant(pixelWidth),\n getWidths: ColumnSizes.getPercentageWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: Sizes.setPercentageWidth,\n setTableWidth: setTableWidth\n };\n };\n var pixelSize = function (width) {\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(CellUtils.minWidth(), w + delta);\n return [newNext - w];\n };\n var setTableWidth = function (table, newWidths, _delta) {\n var total = foldr(newWidths, function (b, a) {\n return b + a;\n }, 0);\n Sizes.setPixelWidth(table, total);\n };\n return {\n width: constant(width),\n pixelWidth: constant(width),\n getWidths: ColumnSizes.getPixelWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: CellUtils.minWidth,\n setElementWidth: Sizes.setPixelWidth,\n setTableWidth: setTableWidth\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth);\n }\n var fallbackWidth = get$5(element);\n return pixelSize(fallbackWidth);\n };\n var getTableSize = function (element) {\n var width = Sizes.getRawWidth(element);\n return width.fold(function () {\n var fallbackWidth = get$5(element);\n return pixelSize(fallbackWidth);\n }, function (w) {\n return chooseSize(element, w);\n });\n };\n var TableSize = { getTableSize: getTableSize };\n\n var getWarehouse$1 = function (list) {\n return Warehouse.generate(list);\n };\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var getTableWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return getWarehouse$1(list);\n };\n var adjustWidth = function (table, delta, index, direction) {\n var tableSize = TableSize.getTableSize(table);\n var step = tableSize.getCellDelta(delta);\n var warehouse = getTableWarehouse(table);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var deltas = Deltas.determine(widths, index, step, tableSize);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (index === warehouse.grid().columns() - 1) {\n tableSize.setTableWidth(table, newWidths, step);\n }\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = getTableWarehouse(table);\n var heights = ColumnSizes.getPixelHeights(warehouse, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;\n });\n var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);\n var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n Sizes.setHeight(row.element(), row.height());\n });\n each(newCellSizes, function (cell) {\n Sizes.setHeight(cell.element(), cell.height());\n });\n var total = sumUp(newHeights);\n Sizes.setHeight(table, total);\n };\n var adjustWidthTo = function (table, list, direction) {\n var tableSize = TableSize.getTableSize(table);\n var warehouse = getWarehouse$1(list);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var newSizes = Recalculations.recalculateWidth(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (newSizes.length > 0) {\n tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));\n }\n };\n var Adjustments = {\n adjustWidth: adjustWidth,\n adjustHeight: adjustHeight,\n adjustWidthTo: adjustWidthTo\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 verifyGenerators = exactly([\n 'cell',\n 'row',\n 'replace',\n 'gap'\n ]);\n var elementToData = function (element) {\n var colspan = has$1(element, 'colspan') ? parseInt(get$1(element, 'colspan'), 10) : 1;\n var rowspan = has$1(element, 'rowspan') ? parseInt(get$1(element, 'rowspan'), 10) : 1;\n return {\n element: constant(element),\n colspan: constant(colspan),\n rowspan: constant(rowspan)\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var nu = function (data) {\n return generators.cell(data);\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(Option.some(replacement));\n }\n recent = Option.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n };\n var recent = Option.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 = function (scope, tag) {\n return function (generators) {\n var position = Cell(Option.none());\n verifyGenerators(generators);\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(Option.some(cell));\n }\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\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 return {\n replaceOrInit: replaceOrInit,\n cursor: position.get\n };\n };\n };\n var merging = function (generators) {\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var combine = function (cell) {\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return function () {\n var raw = generators.cell({\n element: constant(cell),\n colspan: constant(1),\n rowspan: constant(1)\n });\n remove$1(raw, 'width');\n remove$1(cell, 'width');\n return raw;\n };\n };\n return {\n combine: combine,\n cursor: position.get\n };\n };\n var Generators = {\n modification: modification,\n transform: transform,\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 isFormatting = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'address',\n 'pre',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isHeading = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isContainer = function (universe, item) {\n return contains([\n 'div',\n 'li',\n 'td',\n 'th',\n 'blockquote',\n 'body',\n 'caption'\n ], universe.property().name(item));\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 var isFrame = function (universe, item) {\n return universe.property().name(item) === 'iframe';\n };\n var isInline = function (universe, item) {\n return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';\n };\n var Structure = {\n isBlock: isBlock,\n isList: isList,\n isFormatting: isFormatting,\n isHeading: isHeading,\n isContainer: isContainer,\n isEmptyTag: isEmptyTag,\n isFrame: isFrame,\n isInline: isInline\n };\n\n var universe$1 = DomUniverse();\n var isBlock$1 = function (element) {\n return Structure.isBlock(universe$1, element);\n };\n var isList$1 = function (element) {\n return Structure.isList(universe$1, element);\n };\n var isFormatting$1 = function (element) {\n return Structure.isFormatting(universe$1, element);\n };\n var isHeading$1 = function (element) {\n return Structure.isHeading(universe$1, element);\n };\n var isContainer$1 = function (element) {\n return Structure.isContainer(universe$1, element);\n };\n var isEmptyTag$1 = function (element) {\n return Structure.isEmptyTag(universe$1, element);\n };\n var isFrame$1 = function (element) {\n return Structure.isFrame(universe$1, element);\n };\n var isInline$1 = function (element) {\n return Structure.isInline(universe$1, element);\n };\n var DomStructure = {\n isBlock: isBlock$1,\n isList: isList$1,\n isFormatting: isFormatting$1,\n isHeading: isHeading$1,\n isContainer: isContainer$1,\n isEmptyTag: isEmptyTag$1,\n isFrame: isFrame$1,\n isInline: isInline$1\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$3(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (DomStructure.isBlock(rightSibling)) {\n return true;\n }\n if (DomStructure.isEmptyTag(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) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.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 ? [Element.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append$1(cells[0], contents);\n };\n var TableContent = { merge: merge$2 };\n\n var prune = function (table) {\n var cells = TableLookup.cells(table);\n if (cells.length === 0) {\n remove$2(table);\n }\n };\n var outcome = Immutable('grid', 'cursor');\n var elementFromGrid = function (grid, row, column) {\n return findIn(grid, row, column).orThunk(function () {\n return findIn(grid, 0, 0);\n });\n };\n var findIn = function (grid, row, column) {\n return Option.from(grid[row]).bind(function (r) {\n return Option.from(r.cells()[column]).bind(function (c) {\n return Option.from(c.element());\n });\n });\n };\n var bundle = function (grid, row, column) {\n return outcome(grid, findIn(grid, row, column));\n };\n var uniqueRows = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.row() === detail.row();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.row() - detailB.row();\n });\n };\n var uniqueColumns = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.column() === detail.column();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.column() - detailB.column();\n });\n };\n var insertRowBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsBefore = function (grid, details, comparator, genWrappers) {\n var example = details[0].row();\n var targetIndex = details[0].row();\n var rows = uniqueRows(details);\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertRowAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row() + detail.rowspan();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var example = rows[rows.length - 1].row();\n var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertColumnBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsBefore = function (grid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var example = columns[0].column();\n var targetIndex = columns[0].column();\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var insertColumnAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column() + detail.colspan();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsAfter = function (grid, details, comparator, genWrappers) {\n var example = details[details.length - 1].column();\n var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var makeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var makeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var eraseColumns = function (grid, details, _comparator, _genWrappers) {\n var columns = uniqueColumns(details);\n var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var eraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = ModificationOperations.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 mergeCells = function (grid, mergable, comparator, _genWrappers) {\n var cells = mergable.cells();\n TableContent.merge(cells);\n var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));\n return outcome(newGrid, Option.from(cells[0]));\n };\n var unmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var newGrid = foldr(unmergable, function (b, cell) {\n return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));\n }, grid);\n return outcome(newGrid, Option.from(unmergable[0]));\n };\n var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var list = DetailsList.fromTable(table);\n var wh = Warehouse.generate(list);\n return Transitions.toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\n var startAddress = address(pasteDetails.row(), pasteDetails.column());\n var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Option.some(pasteDetails.element()));\n }, function (nuGrid) {\n var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());\n return outcome(nuGrid, cursor);\n });\n };\n var gridifyRows = function (rows, generators, example) {\n var pasteDetails = DetailsList.fromPastedRows(rows, example);\n var wh = Warehouse.generate(pasteDetails);\n return Transitions.toGrid(wh, generators, true);\n };\n var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[0].row();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(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 pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(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 resize = Adjustments.adjustWidthTo;\n var TableOperations = {\n insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),\n insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),\n insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),\n insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),\n insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),\n insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),\n insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),\n insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),\n splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),\n splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),\n eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),\n eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),\n makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),\n unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),\n unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),\n unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),\n pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),\n pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),\n pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)\n };\n\n var getBody$1 = function (editor) {\n return Element.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(element, getBody$1(editor));\n };\n };\n var removePxSuffix = function (size) {\n return size ? size.replace(/px$/, '') : '';\n };\n var addSizeSuffix = function (size) {\n if (/^[0-9]+$/.test(size)) {\n size += 'px';\n }\n return size;\n };\n var removeDataStyle = function (table) {\n var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');\n remove(table, 'data-mce-style');\n each(dataStyleCells, function (cell) {\n remove(cell, 'data-mce-style');\n });\n };\n\n var getDirection = function (element) {\n return get$2(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var ltr$1 = { isRtl: constant(false) };\n var rtl$1 = { isRtl: constant(true) };\n var directionAt = function (element) {\n var dir = getDirection(element);\n return dir === 'rtl' ? rtl$1 : ltr$1;\n };\n var Direction = { directionAt: directionAt };\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 defaultAttributes = { border: '1' };\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', defaultStyles, '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 editor.getParam('table_responsive_width') === true;\n };\n var isPixelsForced = function (editor) {\n return editor.getParam('table_responsive_width') === false;\n };\n var getToolbar = function (editor) {\n return editor.getParam('table_toolbar', defaultTableToolbar);\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Option.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Option.some(cloneElements);\n } else {\n return Option.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 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) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\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\n var point = Immutable('element', 'offset');\n var delta = Immutable('element', 'deltaOffset');\n var range$1 = Immutable('element', 'start', 'finish');\n var points = Immutable('begin', 'end');\n var text = Immutable('element', 'text');\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 Option.some(elem);\n });\n });\n } else {\n return Option.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$2 = DomUniverse();\n var freefallRtl$2 = function (element) {\n return freefallRtl$1(universe$2, element);\n };\n\n var TableActions = function (editor, lazyWire) {\n var isTableBody = function (editor) {\n return name(getBody$1(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.rows() > 1;\n };\n var lastColumnGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.columns() > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var execute = function (operation, guard, mutate, lazyWire) {\n return function (table, target) {\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = Element.fromDom(editor.getDoc());\n var direction = TableDirection(Direction.directionAt);\n var generators = TableFill.cellOperations(mutate, doc, cloneFormats);\n return guard(table) ? operation(wire, table, target, generators, direction).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 rng;\n });\n }) : Option.none();\n };\n };\n var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);\n var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);\n var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);\n var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);\n var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);\n var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);\n var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);\n var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);\n var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);\n var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);\n var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);\n return {\n deleteRow: deleteRow,\n deleteColumn: deleteColumn,\n insertRowsBefore: insertRowsBefore,\n insertRowsAfter: insertRowsAfter,\n insertColumnsBefore: insertColumnsBefore,\n insertColumnsAfter: insertColumnsAfter,\n mergeCells: mergeCells,\n unmergeCells: unmergeCells,\n pasteRowsBefore: pasteRowsBefore,\n pasteRowsAfter: pasteRowsAfter,\n pasteCells: pasteCells\n };\n };\n\n var copyRows = function (table, target, generators) {\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, generators, false);\n var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());\n var slicedDetails = toDetailList(slicedGrid, generators);\n return Redraw.copy(slicedDetails);\n });\n };\n var CopyRows = { copyRows: copyRows };\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 firstChildStyle = checkChildren(firstChildStyle, cells);\n return firstChildStyle;\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 var Styles$1 = {\n applyAlign: applyAlign,\n applyVAlign: applyVAlign,\n unApplyAlign: unApplyAlign,\n unApplyVAlign: unApplyVAlign,\n getTDTHOverallStyle: getTDTHOverallStyle\n };\n\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$1.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n var extractAdvancedStyles = function (dom, elm) {\n var rgbToHex = function (value) {\n return startsWith(value, 'rgb') ? dom.toHex(value) : value;\n };\n var borderWidth = getRaw(Element.fromDom(elm), 'border-width').getOr('');\n var borderStyle = getRaw(Element.fromDom(elm), 'border-style').getOr('');\n var borderColor = getRaw(Element.fromDom(elm), 'border-color').map(rgbToHex).getOr('');\n var bgColor = getRaw(Element.fromDom(elm), 'background-color').map(rgbToHex).getOr('');\n return {\n borderwidth: borderWidth,\n borderstyle: borderStyle,\n bordercolor: borderColor,\n backgroundcolor: bgColor\n };\n };\n var getSharedValues = function (data) {\n var baseData = data[0];\n var comparisonData = data.slice(1);\n var keys$1 = keys(baseData);\n each(comparisonData, function (items) {\n each(keys$1, 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: 'selectbox',\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 (alignments, formatName, dataName, editor, elm) {\n var alignmentData = {};\n global$1.each(alignments.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, formatName + name)) {\n alignmentData[dataName] = name;\n }\n });\n if (!alignmentData[dataName]) {\n alignmentData[dataName] = '';\n }\n return alignmentData;\n };\n var getHAlignment = curry(getAlignment, 'left center right');\n var getVAlignment = curry(getAlignment, 'top middle bottom');\n var extractDataFromSettings = function (editor, hasAdvTableTab) {\n var style = getDefaultStyles(editor);\n var attrs = getDefaultAttributes(editor);\n var extractAdvancedStyleData = function (dom) {\n var rgbToHex = function (value) {\n return startsWith(value, 'rgb') ? dom.toHex(value) : value;\n };\n var borderStyle = get(style, 'border-style').getOr('');\n var borderColor = get(style, 'border-color').getOr('');\n var bgColor = get(style, 'background-color').getOr('');\n return {\n borderstyle: borderStyle,\n bordercolor: rgbToHex(borderColor),\n backgroundcolor: rgbToHex(bgColor)\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(attrs, 'border').fold(function () {\n return {};\n }, function (border) {\n return { border: border };\n });\n };\n var dom = editor.dom;\n var advStyle = hasAdvTableTab ? extractAdvancedStyleData(dom) : {};\n var getCellPaddingCellSpacing = function () {\n var spacing = get(style, 'border-spacing').or(get(attrs, 'cellspacing')).fold(function () {\n return {};\n }, function (cellspacing) {\n return { cellspacing: cellspacing };\n });\n var padding = get(style, 'border-padding').or(get(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(Element.fromDom(elm), 'border-width');\n if (shouldStyleWithCss(editor) && optBorderWidth.isSome()) {\n return optBorderWidth.getOr('');\n }\n return dom.getAttrib(elm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, elm, 'border-width') || Styles$1.getTDTHOverallStyle(editor.dom, elm, 'border');\n };\n var dom = editor.dom;\n var data = __assign(__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') || Styles$1.getTDTHOverallStyle(editor.dom, elm, 'padding'),\n border: getBorder(dom, elm),\n caption: !!dom.select('caption', elm)[0],\n class: dom.getAttrib(elm, 'class', '')\n }, getHAlignment('align', 'align', editor, elm)), hasAdvTableTab ? extractAdvancedStyles(dom, elm) : {});\n return data;\n };\n var extractDataFromRowElement = function (editor, elm, hasAdvancedRowTab) {\n var dom = editor.dom;\n var data = __assign(__assign({\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class', ''),\n align: '',\n type: elm.parentNode.nodeName.toLowerCase()\n }, getHAlignment('align', 'align', editor, elm)), hasAdvancedRowTab ? extractAdvancedStyles(dom, elm) : {});\n return data;\n };\n var extractDataFromCellElement = function (editor, elm, hasAdvancedCellTab) {\n var dom = editor.dom;\n var data = __assign(__assign(__assign({\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n celltype: elm.nodeName.toLowerCase(),\n class: dom.getAttrib(elm, 'class', '')\n }, getHAlignment('align', 'halign', editor, elm)), getVAlignment('valign', 'valign', editor, elm)), hasAdvancedCellTab ? extractAdvancedStyles(dom, elm) : {});\n return data;\n };\n var Helpers = {\n buildListItems: buildListItems,\n extractAdvancedStyles: extractAdvancedStyles,\n getSharedValues: getSharedValues,\n getAdvancedTab: getAdvancedTab,\n extractDataFromTableElement: extractDataFromTableElement,\n extractDataFromRowElement: extractDataFromRowElement,\n extractDataFromCellElement: extractDataFromCellElement,\n extractDataFromSettings: extractDataFromSettings\n };\n\n var getClassList = function (editor) {\n var rowClassList = getCellClassList(editor);\n var classes = Helpers.buildListItems(rowClassList, function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n });\n if (rowClassList.length > 0) {\n return Option.some({\n name: 'class',\n type: 'selectbox',\n label: 'Class',\n items: classes\n });\n }\n return Option.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: 'selectbox',\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: 'selectbox',\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: 'selectbox',\n label: 'H Align',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n name: 'valign',\n type: 'selectbox',\n label: 'V Align',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ]\n }\n ];\n var getItems = function (editor) {\n return getClassList(editor).fold(function () {\n return children$3;\n }, function (classlist) {\n return children$3.concat(classlist);\n });\n };\n var CellDialogGeneralTab = { getItems: getItems };\n\n var normal = function (dom, node) {\n var setAttrib = function (attr, value) {\n dom.setAttrib(node, attr, value);\n };\n var setStyle = function (prop, value) {\n dom.setStyle(node, prop, value);\n };\n return {\n setAttrib: setAttrib,\n setStyle: setStyle\n };\n };\n var ifTruthy = function (dom, node) {\n var setAttrib = function (attr, value) {\n if (value) {\n dom.setAttrib(node, attr, value);\n }\n };\n var setStyle = function (prop, value) {\n if (value) {\n dom.setStyle(node, prop, value);\n }\n };\n return {\n setAttrib: setAttrib,\n setStyle: setStyle\n };\n };\n var DomModifier = {\n normal: normal,\n ifTruthy: ifTruthy\n };\n\n var updateSimpleProps = function (modifiers, data) {\n modifiers.setAttrib('scope', data.scope);\n modifiers.setAttrib('class', data.class);\n modifiers.setStyle('width', addSizeSuffix(data.width));\n modifiers.setStyle('height', addSizeSuffix(data.height));\n };\n var updateAdvancedProps = function (modifiers, data) {\n modifiers.setStyle('background-color', data.backgroundcolor);\n modifiers.setStyle('border-color', data.bordercolor);\n modifiers.setStyle('border-style', data.borderstyle);\n modifiers.setStyle('border-width', addSizeSuffix(data.borderwidth));\n };\n var applyToSingle = function (editor, cells, data) {\n var dom = editor.dom;\n var cellElm = data.celltype && cells[0].nodeName.toLowerCase() !== data.celltype ? dom.rename(cells[0], data.celltype) : cells[0];\n var modifiers = DomModifier.normal(dom, cellElm);\n updateSimpleProps(modifiers, data);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps(modifiers, data);\n }\n Styles$1.unApplyAlign(editor, cellElm);\n Styles$1.unApplyVAlign(editor, cellElm);\n if (data.halign) {\n Styles$1.applyAlign(editor, cellElm, data.halign);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n };\n var applyToMultiple = function (editor, cells, data) {\n var dom = editor.dom;\n global$1.each(cells, function (cellElm) {\n if (data.celltype && cellElm.nodeName.toLowerCase() !== data.celltype) {\n cellElm = dom.rename(cellElm, data.celltype);\n }\n var modifiers = DomModifier.ifTruthy(dom, cellElm);\n updateSimpleProps(modifiers, data);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps(modifiers, data);\n }\n if (data.halign) {\n Styles$1.applyAlign(editor, cellElm, data.halign);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n });\n };\n var onSubmitCellForm = function (editor, cells, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n var applicator = cells.length === 1 ? applyToSingle : applyToMultiple;\n applicator(editor, cells, data);\n editor.focus();\n });\n };\n var open = function (editor) {\n var cellElm, cells = [];\n cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');\n cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');\n if (!cells.length && cellElm) {\n cells.push(cellElm);\n }\n cellElm = cellElm || cells[0];\n if (!cellElm) {\n return;\n }\n var cellsData = global$1.map(cells, function (cellElm) {\n return Helpers.extractDataFromCellElement(editor, cellElm, hasAdvancedCellTab(editor));\n });\n var data = Helpers.getSharedValues(cellsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: CellDialogGeneralTab.getItems(editor)\n },\n Helpers.getAdvancedTab('cell')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: CellDialogGeneralTab.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)\n });\n };\n var CellDialog = { open: open };\n\n var getClassList$1 = function (editor) {\n var rowClassList = getRowClassList(editor);\n var classes = Helpers.buildListItems(rowClassList, function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n });\n if (rowClassList.length > 0) {\n return Option.some({\n name: 'class',\n type: 'selectbox',\n label: 'Class',\n items: classes\n });\n }\n return Option.none();\n };\n var formChildren = [\n {\n type: 'selectbox',\n name: 'type',\n label: 'Row type',\n items: [\n {\n text: 'Header',\n value: 'thead'\n },\n {\n text: 'Body',\n value: 'tbody'\n },\n {\n text: 'Footer',\n value: 'tfoot'\n }\n ]\n },\n {\n type: 'selectbox',\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 getClassList$1(editor).fold(function () {\n return formChildren;\n }, function (classes) {\n return formChildren.concat(classes);\n });\n };\n var RowDialogGeneralTab = { getItems: getItems$1 };\n\n var switchRowType = function (dom, rowElm, toType) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldParentElm = rowElm.parentNode;\n var parentElm = dom.select(toType, tableElm)[0];\n if (!parentElm) {\n parentElm = dom.create(toType);\n if (tableElm.firstChild) {\n if (tableElm.firstChild.nodeName === 'CAPTION') {\n dom.insertAfter(parentElm, tableElm.firstChild);\n } else {\n tableElm.insertBefore(parentElm, tableElm.firstChild);\n }\n } else {\n tableElm.appendChild(parentElm);\n }\n }\n if (toType === 'tbody' && oldParentElm.nodeName === 'THEAD' && parentElm.firstChild) {\n parentElm.insertBefore(rowElm, parentElm.firstChild);\n } else {\n parentElm.appendChild(rowElm);\n }\n if (!oldParentElm.hasChildNodes()) {\n dom.remove(oldParentElm);\n }\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 onSubmitRowForm = function (editor, rows, oldData, api) {\n var dom = editor.dom;\n var data = api.getData();\n api.close();\n var createModifier = rows.length === 1 ? DomModifier.normal : DomModifier.ifTruthy;\n editor.undoManager.transact(function () {\n global$1.each(rows, function (rowElm) {\n if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {\n switchRowType(editor.dom, rowElm, data.type);\n }\n var modifier = createModifier(dom, rowElm);\n modifier.setAttrib('scope', data.scope);\n modifier.setAttrib('class', data.class);\n modifier.setStyle('height', addSizeSuffix(data.height));\n if (hasAdvancedRowTab(editor)) {\n updateAdvancedProps$1(modifier, data);\n }\n if (data.align !== oldData.align) {\n Styles$1.unApplyAlign(editor, rowElm);\n Styles$1.applyAlign(editor, rowElm, data.align);\n }\n });\n editor.focus();\n });\n };\n var open$1 = function (editor) {\n var dom = editor.dom;\n var tableElm, cellElm, rowElm;\n var rows = [];\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (!tableElm) {\n return;\n }\n cellElm = dom.getParent(editor.selection.getStart(), 'td,th');\n global$1.each(tableElm.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n if ((dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) && rows.indexOf(row) < 0) {\n rows.push(row);\n return false;\n }\n });\n });\n rowElm = rows[0];\n if (!rowElm) {\n return;\n }\n var rowsData = global$1.map(rows, function (rowElm) {\n return Helpers.extractDataFromRowElement(editor, rowElm, hasAdvancedRowTab(editor));\n });\n var data = Helpers.getSharedValues(rowsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: RowDialogGeneralTab.getItems(editor)\n },\n Helpers.getAdvancedTab('row')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: RowDialogGeneralTab.getItems(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, rows, data)\n });\n };\n var RowDialog = { open: open$1 };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n percentages: true\n };\n var makeTable = function () {\n return Element.fromTag('table');\n };\n var tableBody = function () {\n return Element.fromTag('tbody');\n };\n var tableRow = function () {\n return Element.fromTag('tr');\n };\n var tableHeaderCell = function () {\n return Element.fromTag('th');\n };\n var tableCell = function () {\n return Element.fromTag('td');\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = makeTable();\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n var tbody = tableBody();\n append(table, tbody);\n var trs = [];\n for (var i = 0; i < rows; i++) {\n var tr = tableRow();\n for (var j = 0; j < columns; j++) {\n var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (i < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, Element.fromTag('br'));\n if (renderOpts.percentages) {\n set$1(td, 'width', 100 / columns + '%');\n }\n append(tr, td);\n }\n trs.push(tr);\n }\n append$1(tbody, trs);\n return table;\n };\n\n var get$8 = function (element) {\n return element.dom().innerHTML;\n };\n var getOuter$2 = function (element) {\n var container = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$8(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 = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert$1 = function (editor, columns, rows) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)\n };\n var table = render$1(rows, columns, 0, 0, options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n set$1(table, 'width', get$2(table, 'width'));\n }\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom();\n }).getOr(null);\n };\n var InsertTable = { insert: insert$1 };\n\n var getItems$2 = function (editor, hasClasses, 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: 'selectbox',\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 = hasClasses ? [{\n type: 'selectbox',\n name: 'class',\n label: 'Class',\n items: Helpers.buildListItems(getTableClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'table',\n classes: [item.value]\n });\n };\n }\n })\n }] : [];\n return rowColCountItems.concat(alwaysItems).concat(appearanceItems).concat(alignmentItem).concat(classListItem);\n };\n var TableDialogGeneralTab = { getItems: getItems$2 };\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 = addSizeSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addSizeSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addSizeSuffix(data.border);\n styles['border-spacing'] = addSizeSuffix(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': addSizeSuffix(data.border),\n 'padding': addSizeSuffix(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, api) {\n var dom = editor.dom;\n var captionElm;\n var data = api.getData();\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 = InsertTable.insert(editor, cols, rows);\n }\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 Styles$1.unApplyAlign(editor, tableElm);\n } else {\n Styles$1.applyAlign(editor, tableElm, data.align);\n }\n editor.focus();\n editor.addVisual();\n });\n };\n var open$2 = function (editor, insertNewTable) {\n var dom = editor.dom;\n var tableElm;\n var data = Helpers.extractDataFromSettings(editor, hasAdvancedTableTab(editor));\n if (insertNewTable === false) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (tableElm) {\n data = Helpers.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 hasClasses = getTableClassList(editor).length > 0;\n if (hasClasses) {\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: TableDialogGeneralTab.getItems(editor, hasClasses, 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 Helpers.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),\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 var TableDialog = { open: open$2 };\n\n var getSelectionStartFromSelector = function (selector) {\n return function (editor) {\n return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);\n };\n };\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getSelectionStartCellOrCaption = getSelectionStartFromSelector('th,td,caption');\n\n var each$3 = global$1.each;\n var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n getSelectionStartCellOrCaption(editor).each(function (cellOrCaption) {\n var tableOpt = TableLookup.table(cellOrCaption, isRoot);\n tableOpt.filter(not(isRoot)).each(function (table) {\n var cursor = Element.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 getTableFromCell = function (cell) {\n return TableLookup.table(cell, isRoot);\n };\n var getSize = function (table) {\n return {\n width: getPixelWidth$1(table.dom()),\n height: getPixelWidth$1(table.dom())\n };\n };\n var resizeChange = function (editor, oldSize, table) {\n var newSize = getSize(table);\n if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {\n fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);\n fireObjectResized(editor, table.dom(), newSize.width, newSize.height);\n }\n };\n var actOnSelection = function (execute) {\n getSelectionStartCell(editor).each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = TableTargets.forMenu(selections, table, cell);\n var beforeSize = getSize(table);\n execute(table, targets).each(function (rng) {\n resizeChange(editor, beforeSize, table);\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n });\n });\n });\n };\n var copyRowSelection = function (execute) {\n return getSelectionStartCell(editor).map(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var targets = TableTargets.forMenu(selections, table, cell);\n var generators = TableFill.cellOperations(noop, doc, Option.none());\n return CopyRows.copyRows(table, targets, generators);\n });\n });\n };\n var pasteOnSelection = function (execute) {\n clipboardRows.get().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell(editor).each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);\n execute(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n });\n });\n });\n };\n each$3({\n mceTableSplitCells: function () {\n actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n actOnSelection(actions.deleteRow);\n },\n mceTableCutRow: function (grid) {\n copyRowSelection().each(function (selection) {\n clipboardRows.set(selection);\n actOnSelection(actions.deleteRow);\n });\n },\n mceTableCopyRow: function (grid) {\n copyRowSelection().each(function (selection) {\n clipboardRows.set(selection);\n });\n },\n mceTablePasteRowBefore: function (grid) {\n pasteOnSelection(actions.pasteRowsBefore);\n },\n mceTablePasteRowAfter: function (grid) {\n pasteOnSelection(actions.pasteRowsAfter);\n },\n mceTableDelete: eraseTable\n }, function (func, name) {\n editor.addCommand(name, func);\n });\n each$3({\n mceInsertTable: curry(TableDialog.open, editor, true),\n mceTableProps: curry(TableDialog.open, editor, false),\n mceTableRowProps: curry(RowDialog.open, editor),\n mceTableCellProps: curry(CellDialog.open, editor)\n }, function (func, name) {\n editor.addCommand(name, function () {\n func();\n });\n });\n };\n var Commands = { registerCommands: registerCommands };\n\n var only = function (element) {\n var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(Position(0, 0))\n };\n };\n var detached = function (editable, chrome) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin\n };\n };\n var body$1 = function (editable, chrome) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(Position(0, 0))\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body$1\n };\n\n var Event = function (fields) {\n var struct = Immutable.apply(null, 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 = struct.apply(null, args);\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$1 = 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 var Events = { create: create$1 };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n 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 return;\n }\n handler(fromRawEvent(rawEvent));\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 = constant(true);\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$1, handler);\n };\n var fromRawEvent$1 = fromRawEvent;\n\n var styles$1 = css('ephox-dragster');\n var Styles$2 = { resolve: styles$1.resolve };\n\n var Blocker = function (options) {\n var settings = __assign({ layerClass: Styles$2.resolve('blocker') }, options);\n var div = Element.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$2(div, Styles$2.resolve('blocker'));\n add$2(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 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 compare = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n var extract$1 = function (event) {\n return Option.some(Position(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 last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.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 domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.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 function InDrag () {\n var previous = Option.none();\n var reset = function () {\n previous = Option.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Option.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 = Events.create({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n }\n\n function NoDrag () {\n return {\n onEvent: noop,\n reset: noop\n };\n }\n\n function Movement () {\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 = 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 var Dragging = { setup: setup };\n\n var transform$1 = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return Dragging.setup(mutation, mode, settings);\n };\n var Dragger = { transform: transform$1 };\n\n var Mutation = function () {\n var events = 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 = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Option.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 = Option.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 isContentEditableTrue = function (elm) {\n return get$1(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var resizeBarDragging = Styles.resolve('resizer-bar-dragging');\n var BarManager = function (wire, direction, hdirection) {\n var mutation = BarMutation();\n var resizing = Dragger.transform(mutation, {});\n var hoverTable = Option.none();\n var getResizer = function (element, type) {\n return Option.from(get$1(element, type));\n };\n mutation.events.drag.bind(function (event) {\n getResizer(event.target(), 'data-row').each(function (_dataRow) {\n var currentRow = CellUtils.getInt(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 = CellUtils.getInt(event.target(), 'left');\n set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = CellUtils.getInt(target, dir);\n var oldX = parseInt(get$1(target, 'data-initial-' + dir), 10);\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 Bars.refresh(wire, table, hdirection, direction);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set(target, 'data-initial-' + dir, parseInt(get$2(target, dir), 10));\n add$2(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 (Bars.isRowBar(event.target())) {\n handler(event.target(), 'top');\n }\n if (Bars.isColBar(event.target())) {\n handler(event.target(), 'left');\n }\n });\n var isRoot = function (e) {\n return eq(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 Bars.destroy(wire);\n }\n }, function (table) {\n hoverTable = Option.some(table);\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n var destroy = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n Bars.destroy(wire);\n };\n var refresh = function (tbl) {\n Bars.refresh(wire, tbl, hdirection, direction);\n };\n var events = 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,\n refresh: refresh,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(Bars.hide, wire),\n showBars: curry(Bars.show, wire),\n events: events.registry\n };\n };\n\n var create$2 = function (wire, vdirection) {\n var hdirection = BarPositions.height;\n var manager = BarManager(wire, vdirection, hdirection);\n var events = Events.create({\n beforeResize: Event(['table']),\n afterResize: Event(['table']),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = hdirection.delta(event.delta(), event.table());\n Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);\n events.trigger.afterResize(event.table());\n });\n manager.events.startAdjust.bind(function (event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = vdirection.delta(event.delta(), event.table());\n Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);\n events.trigger.afterResize(event.table());\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$2 };\n\n var createContainer = function () {\n var container = Element.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$9 = function (editor, container) {\n return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));\n };\n var remove$6 = function (editor, wire) {\n if (editor.inline) {\n remove$2(wire.parent());\n }\n };\n var TableWire = {\n get: get$9,\n remove: remove$6\n };\n\n var calculatePercentageWidth = function (element, parent) {\n return getPixelWidth$1(element.dom()) / getPixelWidth$1(parent.dom()) * 100 + '%';\n };\n var enforcePercentage = function (rawTable) {\n var table = Element.fromDom(rawTable);\n parent(table).map(function (parent) {\n return calculatePercentageWidth(table, parent);\n }).each(function (tablePercentage) {\n set$1(table, 'width', tablePercentage);\n each(descendants$1(table, 'tr'), function (tr) {\n each(children(tr), function (td) {\n set$1(td, 'width', calculatePercentageWidth(td, tr));\n });\n });\n });\n };\n var enforcePixels = function (table) {\n set$1(Element.fromDom(table), 'width', getPixelWidth$1(table).toString() + 'px');\n };\n\n var getResizeHandler = function (editor) {\n var selectionRng = Option.none();\n var resize = Option.none();\n var wire = Option.none();\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var startW;\n var startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var getRawWidth = function (elm) {\n var raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Option.from(raw).filter(function (s) {\n return s.length > 0;\n });\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n TableWire.remove(editor, w);\n });\n };\n editor.on('init', function () {\n var direction = TableDirection(Direction.directionAt);\n var rawWire = TableWire.get(editor);\n wire = Option.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var sz = TableResize.create(rawWire, direction);\n sz.on();\n sz.events.startDrag.bind(function (event) {\n selectionRng = Option.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));\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));\n editor.undoManager.add();\n });\n resize = Option.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var tableHasPercentage = getRawWidth(targetElm).map(function (w) {\n return percentageBasedSizeRegex.test(w);\n }).getOr(false);\n if (tableHasPercentage && isPixelsForced(editor)) {\n enforcePixels(targetElm);\n } else if (!tableHasPercentage && isPercentagesForced(editor)) {\n enforcePercentage(targetElm);\n }\n startW = e.width;\n startRawW = getRawWidth(targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = targetElm;\n if (percentageBasedSizeRegex.test(startRawW)) {\n var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);\n var targetPercentW = e.width * percentW / startW;\n editor.dom.setStyle(table, 'width', targetPercentW + '%');\n } else {\n var newCellSizes_1 = [];\n global$1.each(table.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n var width = editor.dom.getStyle(cell, 'width', true);\n newCellSizes_1.push({\n cell: cell,\n width: width\n });\n });\n });\n global$1.each(newCellSizes_1, function (newCellSize) {\n editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);\n editor.dom.setAttrib(newCellSize.cell, 'width', null);\n });\n }\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 adt$1 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$1 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$1.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });\n\n var detect$4 = function (current, isRoot) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var all = TableLookup.cells(table);\n var index = findIndex(all, function (x) {\n return eq(current, x);\n });\n return index.map(function (ind) {\n return {\n index: constant(ind),\n all: constant(all)\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$4(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$4(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 var CellNavigation = {\n next: next,\n prev: prev\n };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt$2 = 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$2.before;\n var on = adt$2.on;\n var after$2 = adt$2.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$3 = 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$3.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 Element.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$3.domRange;\n var relative = adt$3.relative;\n var exact = adt$3.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$2 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$2\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 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: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(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 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(Element.fromDom(range.startContainer), range.startOffset, Element.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: Option.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 Option.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 Option.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$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.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$2 = adt$4.ltr;\n var rtl$2 = adt$4.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$3(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) ? Option.some(rect) : Option.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) : Option.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 Option.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 Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Option.none();\n }\n var r = doc.dom().createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Option.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n return Option.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 Element.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 = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;\n var fromPoint$1 = function (win, x, y) {\n var doc = Element.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.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 Selection.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 Selection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = Element.fromDom(rng.startContainer);\n var finish = Element.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(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var doSetNativeRange = function (win, rng) {\n Option.from(win.getSelection()).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 var selection = win.getSelection();\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 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 = Selection.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 Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\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 Option.from(win.getSelection()).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$a = function (win) {\n return getExact(win).map(function (range) {\n return Selection.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 var selection = win.getSelection();\n selection.removeAllRanges();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.next(cell), lazyWire);\n };\n var backward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = Selection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var getNewRowCursorPosition = function (editor, table) {\n var rows = descendants$1(table, 'tr');\n return last(rows).bind(function (last) {\n return descendant$1(last, 'td,th').map(function (first) {\n return getCellFirstCursorPosition(editor, first);\n });\n });\n };\n var go = function (editor, isRoot, cell, actions, lazyWire) {\n return cell.fold(Option.none, Option.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var targets = TableTargets.noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions, lazyWire) {\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(element, body_1) || contains(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var start = Element.fromDom(rng.startContainer);\n TableLookup.cell(start, isRoot_1).each(function (cell) {\n event.preventDefault();\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n }\n };\n var TabContext = { handle: handle$1 };\n\n var create$4 = Immutable('selection', 'kill');\n var Response = { create: create$4 };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: constant(Situ.on(start, soffset)),\n finish: constant(Situ.on(finish, foffset))\n };\n };\n var Situs = { create: create$5 };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n var Util = {\n convertToRange: convertToRange,\n makeSitus: makeSitus\n };\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq(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$5(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Option.none();\n }\n };\n var detect$5 = function (container, isRoot, start, finish, selectRange) {\n if (!eq(start, finish)) {\n return CellSelection.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 Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Option.none();\n }\n });\n } else {\n return Option.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 CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);\n };\n var KeySelection = {\n sync: sync,\n detect: detect$5,\n update: update\n };\n\n var traverse = Immutable('item', 'mode');\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: Option.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Option.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Option.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 ? Option.some(children[children.length - 1]) : Option.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 ? Option.some(children[0]) : Option.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 Option.none();\n } else {\n return predicate(n.item()) ? Option.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$5 = 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(afterCell, beforeCell)) {\n return DomParent.sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');\n }\n });\n }).getOr(adt$5.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$5), {\n verify: verify,\n cata: cata$2\n });\n\n var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');\n var inParent = Immutable('parent', 'children', 'element', 'index');\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, 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$3(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.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: constant(tgt),\n finish: constant(tgt)\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (message) {\n return Option.none();\n }, function () {\n return Option.none();\n }, function (cell) {\n return Option.some(point(cell, 0));\n }, function (cell) {\n return Option.some(point(cell, getEnd(cell)));\n });\n };\n var BrTags = {\n tryBr: tryBr,\n process: process\n };\n\n var nu$3 = MixedBag([\n 'left',\n 'top',\n 'right',\n 'bottom'\n ], []);\n var moveDown = function (caret, amount) {\n return nu$3({\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 nu$3({\n left: caret.left(),\n top: caret.top() - amount,\n right: caret.right(),\n bottom: caret.bottom() - amount\n });\n };\n var moveBottomTo = function (caret, bottom) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: bottom - height,\n right: caret.right(),\n bottom: bottom\n });\n };\n var moveTopTo = function (caret, top) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: top,\n right: caret.right(),\n bottom: top + height\n });\n };\n var translate = function (caret, xDelta, yDelta) {\n return nu$3({\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 var toString = function (caret) {\n return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';\n };\n var Carets = {\n nu: nu$3,\n moveUp: moveUp,\n moveDown: moveDown,\n moveBottomTo: moveBottomTo,\n moveTopTo: moveTopTo,\n getTop: getTop$1,\n getBottom: getBottom,\n translate: translate,\n toString: toString\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 Option.none();\n };\n var toCaret = function (rect) {\n return Carets.nu({\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 Option.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 Option.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 Option.none();\n }\n };\n var Rectangles = {\n getBoxAt: getBoxAt,\n getEntireBox: getEntireBox\n };\n\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$6 = 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, DomStructure.isBlock).fold(constant(false), function (cell) {\n return Rectangles.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 = Carets.moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() > caret.bottom()) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() === caret.bottom()) {\n return adt$6.retry(Carets.moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = Carets.moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top() - original.top()) < 1) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() < caret.top()) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() === caret.top()) {\n return adt$6.retry(Carets.moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var upMovement = {\n point: Carets.getTop,\n adjuster: adjustUp,\n move: Carets.moveUp,\n gather: before$4\n };\n var downMovement = {\n point: Carets.getBottom,\n adjuster: adjustDown,\n move: Carets.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 Option.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(Option.none, function (element) {\n return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Option.some(caret);\n });\n }, Option.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 Option.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Option.some(-movement.point(adjusted));\n } else {\n return Option.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 platform$2 = detect$3();\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\n return Option.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 BrTags.process(analysis);\n });\n });\n };\n var scan$1 = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Option.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 Option.none();\n }, function () {\n return Option.some(situs);\n }, function (cell) {\n if (eq(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, Carets.moveUp, direction);\n } else {\n return scan$1(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, Carets.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 Rectangles.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 if (platform$2.browser.isChrome() || platform$2.browser.isSafari() || platform$2.browser.isFirefox() || platform$2.browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (platform$2.browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Option.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return Rectangles.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 var TableKeys = { handle: handle$2 };\n\n var detection = detect$3();\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq(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 Option.none();\n }\n return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {\n return {\n start: constant(start),\n finish: constant(finish),\n range: constant(range)\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detection.browser.isIE()) {\n return Option.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(Option.some(Util.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(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(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Option.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(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(Option.some(Util.makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Option.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 KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);\n });\n };\n var VerticalMovement = {\n navigate: navigate,\n select: select,\n firstUpCheck: firstUpCheck,\n lastDownCheck: lastDownCheck\n };\n\n var findCell = function (target, isRoot) {\n return closest$1(target, 'td,th', isRoot);\n };\n function MouseSelection (bridge, container, isRoot, annotations) {\n var cursor = Option.none();\n var clearState = function () {\n cursor = Option.none();\n };\n var mousedown = function (event) {\n annotations.clear(container);\n cursor = findCell(event.target(), isRoot);\n };\n var mouseover = function (event) {\n cursor.each(function (start) {\n annotations.clearBeforeUpdate(container);\n findCell(event.target(), isRoot).each(function (finish) {\n CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {\n annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mouseup = function (_event) {\n cursor.each(clearState);\n };\n return {\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 var KeyDirection = {\n down: down,\n up: up\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 SelectionKeys = {\n ltr: {\n isBackward: isKey(37),\n isForward: isKey(39)\n },\n rtl: {\n isBackward: isKey(39),\n isForward: isKey(37)\n },\n isUp: isUp,\n isDown: isDown,\n isNavigation: isNavigation\n };\n\n var toRaw = function (sr) {\n return {\n left: sr.left(),\n top: sr.top(),\n right: sr.right(),\n bottom: sr.bottom(),\n width: sr.width(),\n height: sr.height()\n };\n };\n var Rect = { toRaw: toRaw };\n\n var isSafari = detect$3().browser.isSafari();\n var get$b = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollBy(x, y);\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return Element.fromPoint(Element.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 = Selection.exact(start, soffset, finish, foffset);\n return getFirstRect$1(win, sel).map(Rect.toRaw);\n };\n var getSelection = function () {\n return get$a(win).map(function (exactAdt) {\n return Util.convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = Selection.relative(situs.start(), situs.finish());\n return Util.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$a(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$b(Element.fromDom(win.document));\n return pos.top();\n };\n var scrollBy = function (x, y) {\n by(x, y, Element.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 = Immutable('rows', 'cols');\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\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 Option.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 = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isDown(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);\n } else if (SelectionKeys.isUp(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);\n } else {\n return Option.none;\n }\n }, function (selected) {\n var update = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);\n });\n return navigation.fold(function () {\n return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {\n var relative = SelectionKeys.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(Option.none(), true);\n });\n }, function (_) {\n return Option.some(Response.create(Option.none(), true));\n });\n };\n };\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return update([rc(+1, 0)]);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return update([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Option.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return CellSelection.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 Option.none();\n }\n if (SelectionKeys.isNavigation(keycode)) {\n return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Option.none();\n }\n }, Option.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 CellSelection.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 var InputHandlers = {\n mouse: mouse,\n keyboard: keyboard,\n external: external\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$2(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$2(start, ephemera.firstSelected());\n add$2(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 list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, 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 var OtherCells = { getOtherCells: getOtherCells };\n\n var hasInternalTarget = function (e) {\n return has$2(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection$1 (editor, lazyResize, selectionTargets) {\n var handlerStruct = MixedBag([\n 'mousedown',\n 'mouseover',\n 'mouseup',\n 'keyup',\n 'keydown'\n ], []);\n var handlers = Option.none();\n var cloneFormats = getCloneElements(editor);\n var onSelection = function (cells, start, finish) {\n selectionTargets.targets().each(function (targets) {\n var tableOpt = TableLookup.table(start);\n tableOpt.each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.cellOperations(noop, doc, cloneFormats);\n var otherCells = OtherCells.getOtherCells(table, targets, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n });\n };\n var onClear = function () {\n 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 = Element.fromDom(sel.getStart());\n var end = Element.fromDom(sel.getEnd());\n var shared = DomParent.sharedOne(TableLookup.table, [\n start,\n end\n ]);\n shared.fold(function () {\n annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);\n var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);\n var external = InputHandlers.external(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw().shiftKey === true;\n };\n editor.on('TableSelectorChange', function (e) {\n external(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 = Selection.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 && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var end = Element.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 resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var startContainer = Element.fromDom(editor.selection.getStart());\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;\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 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 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(Element.fromDom(body));\n var lastTimeStamp = Cell(0);\n var touchEnd = function (t) {\n var target = Element.fromDom(t.target);\n if (name(target) === 'td' || name(target) === 'th') {\n var lT = lastTarget.get();\n var lTS = lastTimeStamp.get();\n if (eq(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external(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('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 handlers = Option.some(handlerStruct({\n mousedown: mouseDown,\n mouseover: mouseOver,\n mouseup: mouseUp,\n keyup: keyup,\n keydown: keydown\n }));\n });\n var destroy = function () {\n handlers.each(function (handlers) {\n });\n };\n return {\n clear: annotations.clear,\n destroy: destroy\n };\n }\n\n var Selections = function (editor) {\n var get = function () {\n var body = getBody$1(editor);\n return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {\n if (editor.selection.getStart() === undefined) {\n return SelectionTypes.none();\n } else {\n return SelectionTypes.single(editor.selection);\n }\n }, function (cells) {\n return SelectionTypes.multiple(cells);\n });\n };\n return { get: get };\n };\n\n var getSelectionTargets = function (editor, selections) {\n var targets = Cell(Option.none());\n var changeHandlers = Cell([]);\n var findTargets = function () {\n return getSelectionStartCellOrCaption(editor).bind(function (cellOrCaption) {\n var table = TableLookup.table(cellOrCaption);\n return table.map(function (table) {\n if (name(cellOrCaption) === 'caption') {\n return TableTargets.notCell(cellOrCaption);\n } else {\n return TableTargets.forMenu(selections, table, cellOrCaption);\n }\n });\n });\n };\n var resetTargets = function () {\n targets.set(cached(findTargets)());\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 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 name(targets.element()) === 'caption';\n });\n };\n var onSetupMergeable = function (api) {\n return onSetup(api, function (targets) {\n return targets.mergable().isNone();\n });\n };\n var onSetupUnmergeable = function (api) {\n return onSetup(api, function (targets) {\n return targets.unmergable().isNone();\n });\n };\n editor.on('NodeChange TableSelectorChange', resetTargets);\n return {\n onSetupTable: onSetupTable,\n onSetupCellOrRow: onSetupCellOrRow,\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) {\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.onSetupCellOrRow\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.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tabledeletecol', {\n tooltip: 'Delete column',\n onAction: cmd('mceTableDeleteCol'),\n icon: 'table-delete-column',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecutrow', {\n tooltip: 'Cut row',\n onAction: cmd('mceTableCutRow'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecopyrow', {\n tooltip: 'Copy row',\n onAction: cmd('mceTableCopyRow'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepasterowbefore', {\n tooltip: 'Paste row before',\n onAction: cmd('mceTablePasteRowBefore'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepasterowafter', {\n tooltip: 'Paste row after',\n onAction: cmd('mceTablePasteRowAfter'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\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 var Buttons = {\n addButtons: addButtons,\n addToolbars: addToolbars\n };\n\n var addMenuItems = function (editor, selectionTargets) {\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n var insertTableAction = function (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n editor.undoManager.transact(function () {\n InsertTable.insert(editor, numColumns, numRows);\n });\n editor.addVisual();\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 var rowItems = [\n {\n type: 'menuitem',\n text: 'Insert row before',\n icon: 'table-insert-row-above',\n onAction: cmd('mceTableInsertRowBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Insert row after',\n icon: 'table-insert-row-after',\n onAction: cmd('mceTableInsertRowAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Delete row',\n icon: 'table-delete-row',\n onAction: cmd('mceTableDeleteRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Row properties',\n icon: 'table-row-properties',\n onAction: cmd('mceTableRowProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n { type: 'separator' },\n {\n type: 'menuitem',\n text: 'Cut row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Copy row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Paste row before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Paste row after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n }\n ];\n var row = {\n type: 'nestedmenuitem',\n text: 'Row',\n getSubmenuItems: function () {\n return rowItems;\n }\n };\n var columnItems = [\n {\n type: 'menuitem',\n text: 'Insert column before',\n icon: 'table-insert-column-before',\n onAction: cmd('mceTableInsertColBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Insert column after',\n icon: 'table-insert-column-after',\n onAction: cmd('mceTableInsertColAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Delete column',\n icon: 'table-delete-column',\n onAction: cmd('mceTableDeleteCol'),\n onSetup: selectionTargets.onSetupCellOrRow\n }\n ];\n var column = {\n type: 'nestedmenuitem',\n text: 'Column',\n getSubmenuItems: function () {\n return columnItems;\n }\n };\n var cellItems = [\n {\n type: 'menuitem',\n text: 'Cell properties',\n icon: 'table-cell-properties',\n onAction: cmd('mceTableCellProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Merge cells',\n icon: 'table-merge-cells',\n onAction: cmd('mceTableMergeCells'),\n onSetup: selectionTargets.onSetupMergeable\n },\n {\n type: 'menuitem',\n text: 'Split cell',\n icon: 'table-split-cells',\n onAction: cmd('mceTableSplitCells'),\n onSetup: selectionTargets.onSetupUnmergeable\n }\n ];\n var cell = {\n type: 'nestedmenuitem',\n text: 'Cell',\n getSubmenuItems: function () {\n return cellItems;\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 var MenuItems = { addMenuItems: addMenuItems };\n\n var getClipboardRows = function (clipboardRows) {\n return clipboardRows.get().fold(function () {\n return;\n }, function (rows) {\n return map(rows, function (row) {\n return row.dom();\n });\n });\n };\n var setClipboardRows = function (rows, clipboardRows) {\n var sugarRows = map(rows, Element.fromDom);\n clipboardRows.set(Option.from(sugarRows));\n };\n var getApi = function (editor, clipboardRows, resizeHandler, selectionTargets) {\n return {\n insertTable: function (columns, rows) {\n return InsertTable.insert(editor, columns, rows);\n },\n setClipboardRows: function (rows) {\n return setClipboardRows(rows, clipboardRows);\n },\n getClipboardRows: function () {\n return getClipboardRows(clipboardRows);\n },\n resizeHandler: resizeHandler,\n selectionTargets: selectionTargets\n };\n };\n\n function Plugin(editor) {\n var selections = Selections(editor);\n var selectionTargets = getSelectionTargets(editor, selections);\n var resizeHandler = getResizeHandler(editor);\n var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize, selectionTargets);\n var actions = TableActions(editor, resizeHandler.lazyWire);\n var clipboardRows = Cell(Option.none());\n Commands.registerCommands(editor, actions, cellSelection, selections, clipboardRows);\n Clipboard.registerEvents(editor, selections, actions, cellSelection);\n MenuItems.addMenuItems(editor, selectionTargets);\n Buttons.addButtons(editor, selectionTargets);\n Buttons.addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(Ephemera.firstSelected());\n editor.serializer.addTempAttr(Ephemera.lastSelected());\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n TabContext.handle(e, editor, actions, resizeHandler.lazyWire);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n cellSelection.destroy();\n });\n return getApi(editor, clipboardRows, resizeHandler, selectionTargets);\n }\n function Plugin$1 () {\n global.add('table', Plugin);\n }\n\n Plugin$1();\n\n}(window));\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.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = 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 = isType('boolean');\n var isFunction = isType('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 var Settings = {\n assumeExternalTargets: assumeExternalTargets,\n hasContextToolbar: hasContextToolbar,\n getLinkList: getLinkList,\n getDefaultLinkTarget: getDefaultLinkTarget,\n getTargetList: getTargetList,\n getRelList: getRelList,\n getLinkClassList: getLinkClassList,\n shouldShowLinkTitle: shouldShowLinkTitle,\n allowUnsafeLinkTarget: allowUnsafeLinkTarget,\n useQuickLink: useQuickLink,\n getDefaultLinkProtocol: getDefaultLinkProtocol\n };\n\n var appendClickRemove = function (link, evt) {\n domGlobals.document.body.appendChild(link);\n link.dispatchEvent(evt);\n domGlobals.document.body.removeChild(link);\n };\n var open = function (url) {\n var link = domGlobals.document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n var evt = domGlobals.document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n appendClickRemove(link, evt);\n };\n var OpenUrl = { open: open };\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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\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 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 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 Option.none();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');\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$3.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$3.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 isLink = function (elm) {\n return elm && elm.nodeName === 'A' && !!getHref(elm);\n };\n var hasLinks = function (elements) {\n return global$3.grep(elements, isLink).length > 0;\n };\n var isOnlyTextSelected = function (html) {\n if (/]+>[^<]+<\\/a>$/.test(html) || html.indexOf('href=') === -1)) {\n return false;\n }\n return true;\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 (!(Settings.getRelList(editor).length > 0) && Settings.allowUnsafeLinkTarget(editor) === false) {\n var newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n newLinkAttrs.rel = newRel ? newRel : null;\n }\n if (Option.from(newLinkAttrs.target).isNone() && Settings.getTargetList(editor) === false) {\n newLinkAttrs.target = Settings.getDefaultLinkTarget(editor);\n }\n newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, Settings.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 link = 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 unlink = function (editor) {\n editor.undoManager.transact(function () {\n var node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n var anchorElm = editor.dom.getParent(node, 'a[href]', editor.getBody());\n if (anchorElm) {\n editor.dom.remove(anchorElm, true);\n }\n }\n editor.focus();\n });\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 var Utils = {\n link: link,\n unlink: unlink,\n isLink: isLink,\n hasLinks: hasLinks,\n getHref: getHref,\n isOnlyTextSelected: isOnlyTextSelected,\n getAnchorElement: getAnchorElement,\n getAnchorText: getAnchorText,\n applyRelTargetRules: applyRelTargetRules,\n hasProtocol: hasProtocol\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 getValue = function (item) {\n return isString(item.value) ? item.value : '';\n };\n var sanitizeList = function (list, extractValue) {\n var out = [];\n global$3.each(list, function (item) {\n var text = isString(item.text) ? item.text : isString(item.title) ? item.title : '';\n if (item.menu !== undefined) ; 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 Option.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: 'selectbox',\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 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 var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var findTextByValue = function (value, catalog) {\n return findMap(catalog, function (item) {\n return Option.some(item).filter(function (i) {\n return i.value === value;\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 }) : Option.none();\n };\n var findCatalog = function (settings, fieldName) {\n if (fieldName === 'link') {\n return settings.catalogs.link;\n } else if (fieldName === 'anchor') {\n return settings.catalogs.anchor;\n } else {\n return Option.none();\n }\n };\n var init = function (initialData, linkSettings) {\n var persistentText = Cell(initialData.text);\n var onUrlChange = function (data) {\n if (persistentText.get().length <= 0) {\n var urlText = data.url.meta.text !== undefined ? data.url.meta.text : data.url.value;\n var urlTitle = data.url.meta.title !== undefined ? data.url.meta.title : '';\n return Option.some({\n text: urlText,\n title: urlTitle\n });\n } else {\n return Option.none();\n }\n };\n var onCatalogChange = function (data, change) {\n var catalog = findCatalog(linkSettings, change.name).getOr([]);\n return getDelta(persistentText.get(), change.name, catalog, data);\n };\n var onChange = function (getData, change) {\n if (change.name === 'url') {\n return onUrlChange(getData());\n } else if (contains([\n 'anchor',\n 'link'\n ], change.name)) {\n return onCatalogChange(getData(), change);\n } else if (change.name === 'text') {\n persistentText.set(getData().text);\n return Option.none();\n } else {\n return Option.none();\n }\n };\n return { onChange: onChange };\n };\n var DialogChanges = {\n init: init,\n getDelta: getDelta\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 = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu(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 data = Option.some(x);\n run(callbacks);\n callbacks = [];\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 domGlobals.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(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu,\n pure: pure\n };\n\n var errorReporter = function (err) {\n domGlobals.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$1 = 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$1,\n pure: pure$1\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');\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 ? Option.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 }) : Option.none();\n };\n var tryProtocolTransform = function (assumeExternalTargets, defaultLinkProtocol) {\n return function (data) {\n var url = data.href;\n var suggestProtocol = assumeExternalTargets === 1 && !Utils.hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www[\\.|\\d\\.]/i.test(url);\n return suggestProtocol ? Option.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 }) : Option.none();\n };\n };\n var preprocess = function (editor, data) {\n return findMap([\n tryEmailTransform,\n tryProtocolTransform(Settings.assumeExternalTargets(editor), Settings.getDefaultLinkProtocol(editor))\n ], function (f) {\n return f(data);\n }).fold(function () {\n return Future.pure(data);\n }, function (transform) {\n return Future.nu(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 ? Option.some([{\n text: 'None',\n value: ''\n }].concat(anchors)) : Option.none();\n };\n var AnchorListOptions = { getAnchors: getAnchors };\n\n var getClasses = function (editor) {\n var list = Settings.getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Option.none();\n };\n var ClassListOptions = { getClasses: getClasses };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var parseJson = function (text) {\n try {\n return Option.some(JSON.parse(text));\n } catch (err) {\n return Option.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 = Settings.getLinkList(editor);\n return Future.nu(function (callback) {\n if (isString(linkList)) {\n global$5.send({\n url: linkList,\n success: function (text) {\n return callback(parseJson(text));\n },\n error: function (_) {\n return callback(Option.none());\n }\n });\n } else if (isFunction(linkList)) {\n linkList(function (output) {\n return callback(Option.some(output));\n });\n } else {\n callback(Option.from(linkList));\n }\n }).map(function (optItems) {\n return optItems.bind(ListOptions.sanitizeWith(extractor)).map(function (items) {\n if (items.length > 0) {\n return [{\n text: 'None',\n value: ''\n }].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 = Settings.getRelList(editor);\n if (list.length > 0) {\n var isTargetBlank_1 = initialTarget.is('_blank');\n var enforceSafe = Settings.allowUnsafeLinkTarget(editor) === false;\n var safeRelExtractor = function (item) {\n return Utils.applyRelTargetRules(ListOptions.getValue(item), isTargetBlank_1);\n };\n var sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Option.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 = Settings.getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(function () {\n return Option.some(fallbacks);\n });\n } else if (list === false) {\n return Option.none();\n }\n return Option.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 ? Option.some(val) : Option.none();\n };\n var extractFromAnchor = function (editor, anchor) {\n var dom = editor.dom;\n var onlyText = Utils.isOnlyTextSelected(editor.selection.getContent());\n var text = onlyText ? Option.some(Utils.getAnchorText(editor.selection, anchor)) : Option.none();\n var url = anchor ? Option.some(dom.getAttrib(anchor, 'href')) : Option.none();\n var target = anchor ? Option.from(dom.getAttrib(anchor, 'target')) : Option.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).map(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: Option.from(linkNode),\n flags: { titleEnabled: Settings.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 Utils.unlink(editor);\n api.close();\n return;\n }\n var getChangedValue = function (key) {\n return Option.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 : function () {\n }\n };\n DialogConfirms.preprocess(editor, changedData).get(function (pData) {\n Utils.link(editor, attachState, pData);\n });\n api.close();\n };\n };\n var collectData = function (editor) {\n var anchorNode = Utils.getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n var getInitialData = function (info, defaultTarget) {\n return {\n url: {\n value: info.anchor.url.getOr(''),\n meta: {\n attach: function () {\n },\n text: info.anchor.url.fold(function () {\n return '';\n }, function () {\n return info.anchor.text.getOr('');\n }),\n original: { value: info.anchor.url.getOr('') }\n }\n },\n text: info.anchor.text.getOr(''),\n title: info.anchor.title.getOr(''),\n anchor: info.anchor.url.getOr(''),\n link: info.anchor.url.getOr(''),\n rel: info.anchor.rel.getOr(''),\n target: info.anchor.target.or(defaultTarget).getOr(''),\n linkClass: info.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 = Option.from(Settings.getDefaultLinkTarget(editor));\n var initialData = getInitialData(settings, defaultTarget);\n var dialogDelta = DialogChanges.init(initialData, settings);\n var catalogs = settings.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$1 = function (editor) {\n var data = collectData(editor);\n data.map(function (info) {\n var onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).get(function (spec) {\n editor.windowManager.open(spec);\n });\n };\n var Dialog = { open: open$1 };\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 = Utils.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 OpenUrl.open(a.href);\n }\n }\n };\n var openDialog = function (editor) {\n return function () {\n Dialog.open(editor);\n };\n };\n var gotoSelectedLink = function (editor) {\n return function () {\n gotoLink(editor, getSelectedLink(editor));\n };\n };\n var leftClickedOnAHref = function (editor) {\n return function (elm) {\n var sel, rng, node;\n if (Settings.hasContextToolbar(editor) && Utils.isLink(elm)) {\n sel = editor.selection;\n rng = sel.getRng();\n node = rng.startContainer;\n if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {\n return true;\n }\n }\n return false;\n };\n };\n var setupGotoLinks = function (editor) {\n editor.on('click', function (e) {\n var link = getLink(editor, e.target);\n if (link && global$2.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 toggleActiveState = function (editor) {\n return function (api) {\n var nodeChangeHandler = function (e) {\n return api.setActive(!editor.mode.isReadOnly() && !!Utils.getAnchorElement(editor, e.element));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n };\n var toggleEnabledState = function (editor) {\n return function (api) {\n var parents = editor.dom.getParents(editor.selection.getStart());\n api.setDisabled(!Utils.hasLinks(parents));\n var nodeChangeHandler = function (e) {\n return api.setDisabled(!Utils.hasLinks(e.parents));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n };\n var Actions = {\n openDialog: openDialog,\n gotoSelectedLink: gotoSelectedLink,\n leftClickedOnAHref: leftClickedOnAHref,\n setupGotoLinks: setupGotoLinks,\n toggleActiveState: toggleActiveState,\n toggleEnabledState: toggleEnabledState\n };\n\n var register = function (editor) {\n editor.addCommand('mceLink', function () {\n if (Settings.useQuickLink(editor)) {\n editor.fire('contexttoolbar-show', { toolbarKey: 'quicklink' });\n } else {\n Actions.openDialog(editor)();\n }\n });\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n editor.addShortcut('Meta+K', '', function () {\n editor.execCommand('mceLink');\n });\n };\n var Keyboard = { setup: setup };\n\n var setupButtons = function (editor) {\n editor.ui.registry.addToggleButton('link', {\n icon: 'link',\n tooltip: 'Insert/edit link',\n onAction: Actions.openDialog(editor),\n onSetup: Actions.toggleActiveState(editor)\n });\n editor.ui.registry.addButton('openlink', {\n icon: 'new-tab',\n tooltip: 'Open link',\n onAction: Actions.gotoSelectedLink(editor),\n onSetup: Actions.toggleEnabledState(editor)\n });\n editor.ui.registry.addButton('unlink', {\n icon: 'unlink',\n tooltip: 'Remove link',\n onAction: function () {\n return Utils.unlink(editor);\n },\n onSetup: Actions.toggleEnabledState(editor)\n });\n };\n var setupMenuItems = function (editor) {\n editor.ui.registry.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'new-tab',\n onAction: Actions.gotoSelectedLink(editor),\n onSetup: Actions.toggleEnabledState(editor)\n });\n editor.ui.registry.addMenuItem('link', {\n icon: 'link',\n text: 'Link...',\n shortcut: 'Meta+K',\n onAction: Actions.openDialog(editor)\n });\n editor.ui.registry.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onAction: function () {\n return Utils.unlink(editor);\n },\n onSetup: Actions.toggleEnabledState(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 Utils.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(!Utils.getAnchorElement(editor, node));\n return function () {\n };\n };\n editor.ui.registry.addContextForm('quicklink', {\n launch: {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n onSetup: Actions.toggleActiveState(editor)\n },\n label: 'Link',\n predicate: function (node) {\n return !!Utils.getAnchorElement(editor, node) && Settings.hasContextToolbar(editor);\n },\n initValue: function () {\n var elm = Utils.getAnchorElement(editor);\n return !!elm ? Utils.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(!!Utils.getAnchorElement(editor, node));\n return Actions.toggleActiveState(editor)(buttonApi);\n },\n onAction: function (formApi) {\n var anchor = Utils.getAnchorElement(editor);\n var value = formApi.getValue();\n if (!anchor) {\n var attachState = {\n href: value,\n attach: function () {\n }\n };\n var onlyText = Utils.isOnlyTextSelected(editor.selection.getContent());\n var text = onlyText ? Option.some(Utils.getAnchorText(editor.selection, anchor)).filter(function (t) {\n return t.length > 0;\n }).or(Option.from(value)) : Option.none();\n Utils.link(editor, attachState, {\n href: value,\n text: text,\n title: Option.none(),\n rel: Option.none(),\n target: Option.none(),\n class: Option.none()\n });\n formApi.hide();\n } else {\n editor.dom.setAttrib(anchor, 'href', value);\n collapseSelectionToEnd(editor);\n formApi.hide();\n }\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: function (formApi) {\n Utils.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 Actions.gotoSelectedLink(editor)();\n formApi.hide();\n }\n }\n ]\n });\n };\n var Controls = {\n setupButtons: setupButtons,\n setupMenuItems: setupMenuItems,\n setupContextMenu: setupContextMenu,\n setupContextToolbars: setupContextToolbars\n };\n\n function Plugin () {\n global$1.add('link', function (editor) {\n Controls.setupButtons(editor);\n Controls.setupMenuItems(editor);\n Controls.setupContextMenu(editor);\n Controls.setupContextToolbars(editor);\n Actions.setupGotoLinks(editor);\n Commands.register(editor);\n Keyboard.setup(editor);\n });\n }\n\n Plugin();\n\n}(window));\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 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) 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; };\nvar bindHandlers = function (initEvent, listeners, editor) {\n Object.keys(listeners)\n .filter(isValidKey)\n .forEach(function (key) {\n var handler = listeners[key];\n if (typeof handler === 'function') {\n if (key === 'onInit') {\n handler(initEvent, editor);\n }\n else {\n editor.on(key.substring(2), function (e) { return handler(e, editor); });\n }\n }\n });\n};\nvar bindModelHandlers = function (ctx, editor) {\n var modelEvents = ctx.$props.modelEvents ? ctx.$props.modelEvents : null;\n var normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents;\n ctx.$watch('value', function (val, prevVal) {\n if (editor && typeof val === 'string' && val !== prevVal && val !== editor.getContent({ format: ctx.$props.outputFormat })) {\n editor.setContent(val);\n }\n });\n editor.on(normalizedEvents ? normalizedEvents : 'change keyup undo redo', function () {\n ctx.$emit('input', editor.getContent({ format: ctx.$props.outputFormat }));\n });\n};\nvar initEditor = function (initEvent, ctx, editor) {\n var value = ctx.$props.value ? ctx.$props.value : '';\n var initialValue = ctx.$props.initialValue ? ctx.$props.initialValue : '';\n editor.setContent(value || 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;\nvar uuid = function (prefix) {\n var time = Date.now();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n};\nvar isTextarea = function (element) {\n return element !== null && element.tagName.toLowerCase() === 'textarea';\n};\nvar normalizePluginArray = function (plugins) {\n if (typeof plugins === 'undefined' || plugins === '') {\n return [];\n }\n return Array.isArray(plugins) ? plugins : plugins.split(' ');\n};\nvar mergePlugins = function (initPlugins, inputPlugins) {\n return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins));\n};\nvar isNullOrUndefined = function (value) { return value === null || value === undefined; };\nexport { bindHandlers, bindModelHandlers, initEditor, uuid, isTextarea, mergePlugins, isNullOrUndefined };\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { uuid } from './Utils';\nvar createState = function () {\n return {\n listeners: [],\n scriptId: uuid('tiny-script'),\n scriptLoaded: false\n };\n};\nvar CreateScriptLoader = function () {\n var state = createState();\n var injectScriptTag = function (scriptId, doc, url, callback) {\n var scriptTag = doc.createElement('script');\n scriptTag.referrerPolicy = 'origin';\n scriptTag.type = 'application/javascript';\n scriptTag.id = scriptId;\n scriptTag.src = url;\n var handler = function () {\n scriptTag.removeEventListener('load', handler);\n callback();\n };\n scriptTag.addEventListener('load', handler);\n if (doc.head) {\n doc.head.appendChild(scriptTag);\n }\n };\n var load = function (doc, url, callback) {\n if (state.scriptLoaded) {\n callback();\n }\n else {\n state.listeners.push(callback);\n if (!doc.getElementById(state.scriptId)) {\n injectScriptTag(state.scriptId, doc, url, function () {\n state.listeners.forEach(function (fn) { return fn(); });\n state.scriptLoaded = true;\n });\n }\n }\n };\n // Only to be used by tests.\n var reinitialize = function () {\n state = createState();\n };\n return {\n load: load,\n reinitialize: reinitialize\n };\n};\nvar ScriptLoader = CreateScriptLoader();\nexport { ScriptLoader };\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nexport var editorProps = {\n apiKey: String,\n cloudChannel: String,\n id: String,\n init: Object,\n initialValue: String,\n inline: Boolean,\n modelEvents: [String, Array],\n plugins: [String, Array],\n tagName: String,\n toolbar: [String, Array],\n value: String,\n disabled: Boolean,\n tinymceScriptSrc: String,\n outputFormat: {\n type: String,\n validator: function (prop) { return prop === 'html' || prop === 'text'; }\n },\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ScriptLoader } from '../ScriptLoader';\nimport { getTinymce } from '../TinyMCE';\nimport { initEditor, isTextarea, mergePlugins, uuid, isNullOrUndefined } from '../Utils';\nimport { editorProps } from './EditorPropTypes';\nvar renderInline = function (h, id, tagName) {\n return h(tagName ? tagName : 'div', {\n attrs: { id: id }\n });\n};\nvar renderIframe = function (h, id) {\n return h('textarea', {\n attrs: { id: id },\n style: { visibility: 'hidden' }\n });\n};\nvar initialise = function (ctx) { return function () {\n var finalInit = __assign(__assign({}, ctx.$props.init), { readonly: ctx.$props.disabled, selector: \"#\" + ctx.elementId, plugins: mergePlugins(ctx.$props.init && ctx.$props.init.plugins, ctx.$props.plugins), toolbar: ctx.$props.toolbar || (ctx.$props.init && ctx.$props.init.toolbar), inline: ctx.inlineEditor, setup: function (editor) {\n ctx.editor = editor;\n editor.on('init', function (e) { return initEditor(e, ctx, editor); });\n if (ctx.$props.init && typeof ctx.$props.init.setup === 'function') {\n ctx.$props.init.setup(editor);\n }\n } });\n if (isTextarea(ctx.element)) {\n ctx.element.style.visibility = '';\n }\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 channel = this.$props.cloudChannel ? this.$props.cloudChannel : '5';\n var apiKey = this.$props.apiKey ? this.$props.apiKey : 'no-api-key';\n var scriptSrc = isNullOrUndefined(this.$props.tinymceScriptSrc) ?\n \"https://cdn.tiny.cloud/1/\" + apiKey + \"/tinymce/\" + channel + \"/tinymce.min.js\" :\n this.$props.tinymceScriptSrc;\n ScriptLoader.load(this.element.ownerDocument, scriptSrc, initialise(this));\n }\n },\n beforeDestroy: function () {\n if (getTinymce() !== null) {\n getTinymce().remove(this.editor);\n }\n },\n render: function (h) {\n return this.inlineEditor ? renderInline(h, this.elementId, this.$props.tagName) : renderIframe(h, this.elementId);\n }\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { Editor } from './components/Editor';\nexport default Editor;\n","/**\n * 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.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\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 Option.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\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 = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu(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 data = Option.some(x);\n run(callbacks);\n callbacks = [];\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 domGlobals.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(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu,\n pure: pure\n };\n\n var errorReporter = function (err) {\n domGlobals.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$1 = 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$1,\n pure: pure$1\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 toOption = function () {\n return Option.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 toOption: toOption\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 toOption: Option.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 wrap = function (delegate) {\n var toCached = function () {\n return wrap(delegate.toCached());\n };\n var bindFuture = function (f) {\n return wrap(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(delegate.map(function (resA) {\n return resA.bind(f);\n }));\n };\n var mapResult = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.map(f);\n }));\n };\n var mapError = function (f) {\n return wrap(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(Future.nu(function (callback) {\n var timedOut = false;\n var timer = domGlobals.setTimeout(function () {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(function (result) {\n if (!timedOut) {\n domGlobals.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$2 = function (worker) {\n return wrap(Future.nu(worker));\n };\n var value$1 = function (value) {\n return wrap(Future.pure(Result.value(value)));\n };\n var error$1 = function (error) {\n return wrap(Future.pure(Result.error(error)));\n };\n var fromResult = function (result) {\n return wrap(Future.pure(result));\n };\n var fromFuture = function (future) {\n return wrap(future.map(Result.value));\n };\n var fromPromise = function (promise) {\n return nu$2(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$2,\n wrap: wrap,\n pure: value$1,\n value: value$1,\n error: error$1,\n fromResult: fromResult,\n fromFuture: fromFuture,\n fromPromise: fromPromise\n };\n\n var hasOwnProperty = 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 = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var deepMerge = baseMerge(deep);\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.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 domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.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 || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.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: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$4 = 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 !!getUploadUrl(editor);\n };\n var hasUploadHandler = function (editor) {\n return !!getUploadHandler(editor);\n };\n var getUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', undefined, 'function');\n };\n var getUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', undefined, 'string');\n };\n var getUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\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 var Settings = {\n hasDimensions: hasDimensions,\n hasUploadTab: hasUploadTab,\n hasAdvTab: hasAdvTab,\n getPrependUrl: getPrependUrl,\n getClassList: getClassList,\n hasDescription: hasDescription,\n hasImageTitle: hasImageTitle,\n hasImageCaption: hasImageCaption,\n getImageList: getImageList,\n hasUploadUrl: hasUploadUrl,\n hasUploadHandler: hasUploadHandler,\n getUploadUrl: getUploadUrl,\n getUploadHandler: getUploadHandler,\n getUploadBasePath: getUploadBasePath,\n getUploadCredentials: getUploadCredentials,\n showAccessibilityOptions: showAccessibilityOptions,\n isAutomaticUploadsEnabled: isAutomaticUploadsEnabled\n };\n\n var parseIntAndGetMax = function (val1, val2) {\n return Math.max(parseInt(val1, 10), parseInt(val2, 10));\n };\n var getImageSize = function (url, callback) {\n var img = domGlobals.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(Result.value(dimensions));\n };\n img.onerror = function () {\n done(Result.error('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 domGlobals.document.body.appendChild(img);\n img.src = url;\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 = Settings.getImageList(editor);\n if (typeof imageList === 'string') {\n global$4.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 && Settings.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$3(function (resolve, reject) {\n var reader = new domGlobals.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 var Utils = {\n getImageSize: getImageSize,\n removePixelSuffix: removePixelSuffix,\n addPixelSuffix: addPixelSuffix,\n mergeMargins: mergeMargins,\n createImageList: createImageList,\n waitLoadImage: waitLoadImage,\n blobToDataUri: blobToDataUri,\n isPlaceholderImage: isPlaceholderImage\n };\n\n var DOM = global$2.DOM;\n var getHspace = function (image) {\n if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n return Utils.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 Utils.removePixelSuffix(image.style.marginTop);\n } else {\n return '';\n }\n };\n var getBorder = function (image) {\n if (image.style.borderWidth) {\n return Utils.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 setAttrib = function (image, name, value) {\n image.setAttribute(name, value);\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] = Utils.addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n setAttrib(image, name, value);\n }\n };\n };\n var getSize = function (image, name) {\n if (image.style[name]) {\n return Utils.removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n var setHspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n var setVspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n var setBorder = function (image, value) {\n var pxValue = Utils.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 = domGlobals.document.createElement('img');\n setAttrib(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, info) {\n var image = domGlobals.document.createElement('img');\n write(normalizeCss, __assign(__assign({}, data), { caption: false }), image, info);\n setAlt(image, data.alt, data.isDecorative, info);\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, info) {\n if (isDecorative) {\n DOM.setAttrib(image, 'role', 'presentation');\n var sugarImage = Element.fromDom(image);\n set(sugarImage, 'alt', '');\n } else {\n if (info.hasAccessibilityOptions) {\n DOM.setAttrib(image, 'alt', alt);\n } else {\n var sugarImage = Element.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, info) {\n if (newData.alt !== oldData.alt || newData.isDecorative !== oldData.isDecorative) {\n setAlt(image, newData.alt, newData.isDecorative, info);\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, info) {\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', setAttrib);\n updateProp(image, oldData, newData, 'title', setAttrib);\n updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n updateProp(image, oldData, newData, 'class', setAttrib);\n updateProp(image, oldData, newData, 'style', normalized(function (image, value) {\n return setAttrib(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, info);\n };\n\n var normalizeCss = function (editor, cssText) {\n var css = editor.dom.styles.parse(cssText);\n var mergedCss = Utils.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' || Utils.isPlaceholderImage(imgElm))) {\n return null;\n }\n return imgElm;\n };\n var splitTextBlock = function (editor, figure) {\n var dom = editor.dom;\n var textBlock = dom.getParent(figure.parentNode, function (node) {\n return !!editor.schema.getTextBlockElements()[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, info) {\n var elm = create(function (css) {\n return normalizeCss(editor, css);\n }, data, info);\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, info) {\n var image = getSelectedImage(editor);\n write(function (css) {\n return normalizeCss(editor, css);\n }, data, image, info);\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 Utils.waitLoadImage(editor, data, image);\n }\n };\n var insertOrUpdateImage = function (editor, data, info) {\n var image = getSelectedImage(editor);\n if (image) {\n if (data.src) {\n writeImageDataToSelection(editor, data, info);\n } else {\n deleteImage(editor, image);\n }\n } else if (data.src) {\n insertImageAtCaret(editor, data, info);\n }\n };\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 sanitizeList = function (list, extractValue) {\n var out = [];\n global$5.each(list, function (item) {\n var text = isString(item.text) ? item.text : isString(item.title) ? item.title : '';\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 Option.from(list).map(function (list) {\n return sanitizeList(list, extracter);\n });\n } else {\n return Option.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 Option.some(item);\n } else {\n return Option.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 pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n function Uploader (settings) {\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = new domGlobals.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 var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n 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 formData = new domGlobals.FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var uploadBlob = function (blobInfo, handler) {\n return new global$3(function (resolve, reject) {\n try {\n handler(blobInfo, resolve, reject, noop);\n } catch (ex) {\n reject(ex.message);\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var upload = function (blobInfo) {\n return !settings.url && isDefaultHandler(settings.handler) ? global$3.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);\n };\n settings = global$5.extend({\n credentials: false,\n handler: defaultHandler\n }, settings);\n return { upload: upload };\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: 'selectbox',\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 = Future.nu(function (completer) {\n Utils.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(Settings.getClassList(editor));\n var hasAdvTab = Settings.hasAdvTab(editor);\n var hasUploadTab = Settings.hasUploadTab(editor);\n var hasUploadUrl = Settings.hasUploadUrl(editor);\n var hasUploadHandler = Settings.hasUploadHandler(editor);\n var image = readImageDataFromSelection(editor);\n var hasDescription = Settings.hasDescription(editor);\n var hasImageTitle = Settings.hasImageTitle(editor);\n var hasDimensions = Settings.hasDimensions(editor);\n var hasImageCaption = Settings.hasImageCaption(editor);\n var hasAccessibilityOptions = Settings.showAccessibilityOptions(editor);\n var url = Settings.getUploadUrl(editor);\n var basePath = Settings.getUploadBasePath(editor);\n var credentials = Settings.getUploadCredentials(editor);\n var handler = Settings.getUploadHandler(editor);\n var automaticUploads = Settings.isAutomaticUploadsEnabled(editor);\n var prependURL = Option.some(Settings.getPrependUrl(editor)).filter(function (preUrl) {\n return isString(preUrl) && preUrl.length > 0;\n });\n return futureImageList.map(function (imageList) {\n return {\n image: image,\n imageList: imageList,\n classList: classList,\n hasAdvTab: hasAdvTab,\n hasUploadTab: hasUploadTab,\n hasUploadUrl: hasUploadUrl,\n hasUploadHandler: hasUploadHandler,\n hasDescription: hasDescription,\n hasImageTitle: hasImageTitle,\n hasDimensions: hasDimensions,\n hasImageCaption: hasImageCaption,\n url: url,\n basePath: basePath,\n credentials: credentials,\n handler: handler,\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: 'selectbox',\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: 'selectbox',\n label: 'Class',\n items: items\n };\n });\n var caption = {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n };\n return flatten([\n [imageUrl],\n imageList.toArray(),\n info.hasAccessibilityOptions && info.hasDescription ? [isDecorative] : [],\n info.hasDescription ? [imageDescription] : [],\n info.hasImageTitle ? [imageTitle] : [],\n info.hasDimensions ? [imageDimensions] : [],\n [{\n type: 'grid',\n columns: 2,\n items: flatten([\n classList.toArray(),\n info.hasImageCaption ? [caption] : []\n ])\n }]\n ]);\n };\n var makeTab$1 = function (info) {\n return {\n title: 'General',\n name: 'general',\n items: makeItems(info)\n };\n };\n var MainTab = {\n makeTab: makeTab$1,\n makeItems: makeItems\n };\n\n var makeTab$2 = function (info) {\n var items = [{\n type: 'dropzone',\n name: 'fileinput'\n }];\n return {\n title: 'Upload',\n name: 'upload',\n items: items\n };\n };\n var UploadTab = { makeTab: makeTab$2 };\n\n var createState = function (info) {\n return {\n prevImage: ListUtils.findEntry(info.imageList, info.image.src),\n prevAlt: info.image.alt,\n open: true\n };\n };\n var fromImageData = function (image) {\n return {\n src: {\n value: image.src,\n meta: {}\n },\n images: image.src,\n alt: image.alt,\n title: image.title,\n dimensions: {\n width: image.width,\n height: image.height\n },\n classes: image.class,\n caption: image.caption,\n style: image.style,\n vspace: image.vspace,\n border: image.border,\n hspace: image.hspace,\n borderstyle: image.borderStyle,\n fileinput: [],\n isDecorative: image.isDecorative\n };\n };\n var toImageData = function (data) {\n return {\n src: data.src.value,\n alt: 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 Option.some(prependUrl + srcURL);\n }\n return Option.none();\n });\n }\n return Option.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 helpers.imageSize(url).get(function (result) {\n result.each(function (size) {\n if (state.open) {\n api.setData({ dimensions: size });\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 ? Utils.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 ? Utils.removePixelSuffix(String(css['margin-right'])) : '';\n };\n var calcBorderWidth = function (css) {\n return css['border-width'] ? Utils.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 = Utils.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));\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 = domGlobals.URL.createObjectURL(file);\n var uploader = Uploader({\n url: info.url,\n basePath: info.basePath,\n credentials: info.credentials,\n handler: info.handler\n });\n var finalize = function () {\n api.unblock();\n domGlobals.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 Utils.blobToDataUri(file).then(function (dataUrl) {\n var blobInfo = helpers.createBlobCache(file, blobUri, dataUrl);\n if (info.automaticUploads) {\n uploader.upload(blobInfo).then(function (url) {\n updateSrcAndSwitchTab(url);\n finalize();\n }).catch(function (err) {\n finalize();\n helpers.alertErr(api, 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.undoManager.transact(function () {\n insertOrUpdateImage(editor, toImageData(data), info);\n });\n editor.editorUpload.uploadImagesAuto();\n api.close();\n };\n };\n };\n var imageSize = function (editor) {\n return function (url) {\n return FutureResult.nu(function (completer) {\n Utils.getImageSize(editor.documentBaseURI.toAbsolute(url), function (data) {\n var result = data.map(function (dimensions) {\n return {\n width: String(dimensions.width),\n height: String(dimensions.height)\n };\n });\n completer(result);\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 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 (api, message) {\n editor.windowManager.alert(message, api.close);\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 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 };\n var open = function () {\n return collect(editor).map(makeDialog(helpers)).get(function (spec) {\n editor.windowManager.open(spec);\n });\n };\n return { open: open };\n };\n\n var register = function (editor) {\n editor.addCommand('mceImage', Dialog(editor).open);\n };\n var Commands = { register: register };\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 var FilterContent = { setup: setup };\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) && !Utils.isPlaceholderImage(element) ? ['image'] : [];\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global$1.add('image', function (editor) {\n FilterContent.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n });\n }\n\n Plugin();\n\n}(window));\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.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var 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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var emojiMatches = function (emoji, lowerCasePattern) {\n return contains(emoji.title.toLowerCase(), lowerCasePattern) || exists(emoji.keywords, function (k) {\n return contains(k.toLowerCase(), lowerCasePattern);\n });\n };\n var emojisFrom = function (list, pattern, maxResults) {\n var matches = [];\n var lowerCasePattern = pattern.toLowerCase();\n var reachedLimit = maxResults.fold(function () {\n return never;\n }, function (max) {\n return function (size) {\n return size >= max;\n };\n });\n for (var i = 0; i < list.length; i++) {\n if (pattern.length === 0 || emojiMatches(list[i], lowerCasePattern)) {\n matches.push({\n value: list[i].char,\n text: list[i].title,\n icon: list[i].char\n });\n if (reachedLimit(matches.length)) {\n break;\n }\n }\n }\n return matches;\n };\n\n var init = function (editor, database) {\n editor.ui.registry.addAutocompleter('emoticons', {\n ch: ':',\n columns: 'auto',\n minChars: 2,\n fetch: function (pattern, maxResults) {\n return database.waitForLoad().then(function () {\n var candidates = database.listAll();\n return emojisFrom(candidates, pattern, Option.some(maxResults));\n });\n },\n onAction: function (autocompleteApi, rng, value) {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n var 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 var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.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 domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var insertEmoticon = function (editor, ch) {\n editor.insertContent(ch);\n };\n\n var __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 hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$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(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var has = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var DEFAULT_ID = 'tinymce.plugins.emoticons';\n var getEmoticonDatabaseUrl = function (editor, pluginUrl) {\n return editor.getParam('emoticons_database_url', pluginUrl + '/js/emojis' + editor.suffix + '.js');\n };\n var getEmoticonDatabaseId = function (editor) {\n return editor.getParam('emoticons_database_id', DEFAULT_ID, 'string');\n };\n var getAppendedEmoticons = function (editor) {\n return editor.getParam('emoticons_append', {}, 'object');\n };\n var Settings = {\n getEmoticonDatabaseUrl: getEmoticonDatabaseUrl,\n getEmoticonDatabaseId: getEmoticonDatabaseId,\n getAppendedEmoticons: getAppendedEmoticons\n };\n\n var ALL_CATEGORY = 'All';\n var categoryNameMap = {\n symbols: 'Symbols',\n people: 'People',\n animals_and_nature: 'Animals and Nature',\n food_and_drink: 'Food and Drink',\n activity: 'Activity',\n travel_and_places: 'Travel and Places',\n objects: 'Objects',\n flags: 'Flags',\n user: 'User Defined'\n };\n var translateCategory = function (categories, name) {\n return has(categories, name) ? categories[name] : name;\n };\n var getUserDefinedEmoticons = function (editor) {\n var userDefinedEmoticons = Settings.getAppendedEmoticons(editor);\n return map$1(userDefinedEmoticons, function (value) {\n return __assign({\n keywords: [],\n category: 'user'\n }, value);\n });\n };\n var initDatabase = function (editor, databaseUrl, databaseId) {\n var categories = Cell(Option.none());\n var all = Cell(Option.none());\n var processEmojis = function (emojis) {\n var cats = {};\n var everything = [];\n each(emojis, function (lib, title) {\n var entry = {\n title: title,\n keywords: lib.keywords,\n char: lib.char,\n category: translateCategory(categoryNameMap, lib.category)\n };\n var current = cats[entry.category] !== undefined ? cats[entry.category] : [];\n cats[entry.category] = current.concat([entry]);\n everything.push(entry);\n });\n categories.set(Option.some(cats));\n all.set(Option.some(everything));\n };\n editor.on('init', function () {\n global$1.load(databaseId, databaseUrl).then(function (emojis) {\n var userEmojis = getUserDefinedEmoticons(editor);\n processEmojis(merge(emojis, userEmojis));\n }, function (err) {\n domGlobals.console.log('Failed to load emoticons: ' + err);\n categories.set(Option.some({}));\n all.set(Option.some([]));\n });\n });\n var listCategory = function (category) {\n if (category === ALL_CATEGORY) {\n return listAll();\n }\n return categories.get().bind(function (cats) {\n return Option.from(cats[category]);\n }).getOr([]);\n };\n var listAll = function () {\n return all.get().getOr([]);\n };\n var listCategories = function () {\n return [ALL_CATEGORY].concat(keys(categories.get().getOr({})));\n };\n var waitForLoad = function () {\n if (hasLoaded()) {\n return global$3.resolve(true);\n } else {\n return new global$3(function (resolve, reject) {\n var numRetries = 15;\n var interval = global$2.setInterval(function () {\n if (hasLoaded()) {\n global$2.clearInterval(interval);\n resolve(true);\n } else {\n numRetries--;\n if (numRetries < 0) {\n domGlobals.console.log('Could not load emojis from url: ' + databaseUrl);\n global$2.clearInterval(interval);\n reject(false);\n }\n }\n }, 100);\n });\n }\n };\n var hasLoaded = function () {\n return categories.get().isSome() && all.get().isSome();\n };\n return {\n listCategories: listCategories,\n hasLoaded: hasLoaded,\n waitForLoad: waitForLoad,\n listAll: listAll,\n listCategory: listCategory\n };\n };\n\n var patternName = 'pattern';\n var open = function (editor, database) {\n var initialState = {\n pattern: '',\n results: emojisFrom(database.listAll(), '', Option.some(300))\n };\n var currentTab = Cell(ALL_CATEGORY);\n var scan = function (dialogApi) {\n var dialogData = dialogApi.getData();\n var category = currentTab.get();\n var candidates = database.listCategory(category);\n var results = emojisFrom(candidates, dialogData[patternName], category === ALL_CATEGORY ? Option.some(300) : Option.none());\n dialogApi.setData({ results: results });\n };\n var updateFilter = last(function (dialogApi) {\n scan(dialogApi);\n }, 200);\n var searchField = {\n label: 'Search',\n type: 'input',\n name: patternName\n };\n var resultsField = {\n type: 'collection',\n name: 'results'\n };\n var getInitialState = function () {\n var body = {\n type: 'tabpanel',\n tabs: map(database.listCategories(), function (cat) {\n return {\n title: cat,\n name: cat,\n items: [\n searchField,\n resultsField\n ]\n };\n })\n };\n return {\n title: 'Emoticons',\n size: 'normal',\n body: body,\n initialData: initialState,\n onTabChange: function (dialogApi, details) {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: updateFilter.throttle,\n onAction: function (dialogApi, actionData) {\n if (actionData.name === 'results') {\n insertEmoticon(editor, actionData.value);\n dialogApi.close();\n }\n },\n buttons: [{\n type: 'cancel',\n text: 'Close',\n primary: true\n }]\n };\n };\n var dialogApi = editor.windowManager.open(getInitialState());\n dialogApi.focus(patternName);\n if (!database.hasLoaded()) {\n dialogApi.block('Loading emoticons...');\n database.waitForLoad().then(function () {\n dialogApi.redial(getInitialState());\n updateFilter.throttle(dialogApi);\n dialogApi.focus(patternName);\n dialogApi.unblock();\n }).catch(function (err) {\n dialogApi.redial({\n title: 'Emoticons',\n body: {\n type: 'panel',\n items: [{\n type: 'alertbanner',\n level: 'error',\n icon: 'warning',\n text: '

Could not load emoticons

'\n }]\n },\n buttons: [{\n type: 'cancel',\n text: 'Close',\n primary: true\n }],\n initialData: {\n pattern: '',\n results: []\n }\n });\n dialogApi.focus(patternName);\n dialogApi.unblock();\n });\n }\n };\n var Dialog = { open: open };\n\n var register = function (editor, database) {\n var onAction = function () {\n return Dialog.open(editor, database);\n };\n editor.ui.registry.addButton('emoticons', {\n tooltip: 'Emoticons',\n icon: 'emoji',\n onAction: onAction\n });\n editor.ui.registry.addMenuItem('emoticons', {\n text: 'Emoticons...',\n icon: 'emoji',\n onAction: onAction\n });\n };\n var Buttons = { register: register };\n\n function Plugin () {\n global.add('emoticons', function (editor, pluginUrl) {\n var databaseUrl = Settings.getEmoticonDatabaseUrl(editor, pluginUrl);\n var databaseId = Settings.getEmoticonDatabaseId(editor);\n var database = initDatabase(editor, databaseUrl, databaseId);\n Buttons.register(editor, database);\n init(editor, database);\n });\n }\n\n Plugin();\n\n}(window));\n","// Exports the \"anchor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/anchor')\n// ES2015:\n// import 'tinymce/plugins/anchor'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var register = function (editor) {\n editor.addCommand('InsertHorizontalRule', function () {\n editor.execCommand('mceInsertContent', false, '
');\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('hr', {\n icon: 'horizontal-rule',\n tooltip: 'Horizontal line',\n onAction: function () {\n return editor.execCommand('InsertHorizontalRule');\n }\n });\n editor.ui.registry.addMenuItem('hr', {\n icon: 'horizontal-rule',\n text: 'Horizontal line',\n onAction: function () {\n return editor.execCommand('InsertHorizontalRule');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('hr', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var 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 () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\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 if (Object.freeze) {\n Object.freeze(me);\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 Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = isType('null');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.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 find = 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 Option.some(x);\n }\n }\n return Option.none();\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 Option.some(i);\n }\n }\n return Option.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 head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\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 get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\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 fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.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 || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.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: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\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 var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\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 edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\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 isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\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 return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current),\n isChromeOS: isOS(chromeos, current)\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 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 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 if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === 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 trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n var lTrim = function (str) {\n return str.replace(/^\\s+/g, '');\n };\n var rTrim = function (str) {\n return str.replace(/\\s+$/g, '');\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 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 domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var toArray = 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 var Recurse = { toArray: toArray };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\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$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\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 Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = detect$3().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentElement = function (element) {\n return Element.fromDom(element.dom().ownerDocument.documentElement);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.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 = Element.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 prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var prevSiblings = function (element) {\n return reverse(Recurse.toArray(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return Recurse.toArray(element, nextSibling);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.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 var spot = Immutable('element', 'offset');\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 Global = typeof domGlobals.window !== 'undefined' ? domGlobals.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\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\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: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\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 Position(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(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 Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var isSafari = detect$3().browser.isSafari();\n var get$1 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollTo(x, y);\n };\n var intoView = function (element, alignToTop) {\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$2 = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n return Option.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: constant(x),\n y: constant(y),\n width: constant(width),\n height: constant(height),\n right: constant(x + width),\n bottom: constant(y + height)\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n var doc = win.document;\n var scroll = get$1(Element.fromDom(doc));\n return get$2(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 hasPropValue = function (propName, propValue) {\n return function (node) {\n return isElement$1(node) && node[propName] === propValue;\n };\n };\n var hasAttribute = function (attrName, attrValue) {\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 = isNodeType(8);\n var isDocument = isNodeType(9);\n var isDocumentFragment = isNodeType(11);\n var isBr = matchNodeNames(['br']);\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var NodeType = {\n isText: isText$1,\n isElement: isElement$1,\n isComment: isComment,\n isDocument: isDocument,\n isDocumentFragment: isDocumentFragment,\n isBr: isBr,\n isContentEditableTrue: isContentEditableTrue,\n isContentEditableFalse: isContentEditableFalse,\n isRestrictedNode: isRestrictedNode,\n matchNodeNames: matchNodeNames,\n hasPropValue: hasPropValue,\n hasAttribute: hasAttribute,\n hasAttributeValue: hasAttributeValue,\n matchStyleValues: matchStyleValues,\n isBogus: isBogus,\n isBogusAll: isBogusAll,\n isTable: isTable,\n isTextareaOrInput: isTextareaOrInput\n };\n\n var isSupported = 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 domGlobals.console.error('Invalid call to Attr.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$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 Option.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 get$4 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(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 Option.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(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$4(Element.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(Element.fromDom(elm));\n }\n return {\n x: x,\n y: y\n };\n };\n var Position$1 = { getPos: getPos };\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 = Option.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 data = Option.some(x);\n run(callbacks);\n callbacks = [];\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 domGlobals.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 domGlobals.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 toOption = function () {\n return Option.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 toOption: toOption\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 toOption: Option.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 promise = function () {\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\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 domGlobals.setImmediate === 'function' && domGlobals.setImmediate || function (fn) {\n domGlobals.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 function doResolve(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 args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\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 return Promise;\n };\n var promiseObj = window.Promise ? window.Promise : promise();\n\n var requestAnimationFramePromise;\n var requestAnimationFrame = function (callback, element) {\n var i, requestAnimationFrameFunc = domGlobals.window.requestAnimationFrame;\n var vendors = [\n 'ms',\n 'moz',\n 'webkit'\n ];\n var featurefill = function (callback) {\n domGlobals.window.setTimeout(callback, 0);\n };\n for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n requestAnimationFrameFunc = domGlobals.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 domGlobals.setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return domGlobals.setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return domGlobals.clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return domGlobals.clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer, func;\n func = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n domGlobals.clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n domGlobals.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 = domGlobals.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;\n timer = wrappedSetInterval(function () {\n if (!editor.removed) {\n callback();\n } else {\n domGlobals.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 userAgent = domGlobals.navigator.userAgent;\n var platform$1 = detect$3();\n var browser$2 = platform$1.browser;\n var os = platform$1.os;\n var deviceType = platform$1.deviceType;\n var webkit = /WebKit/.test(userAgent) && !browser$2.isEdge();\n var fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!domGlobals.URL.createObjectURL;\n var windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n var Env = {\n opera: browser$2.isOpera(),\n webkit: webkit,\n ie: browser$2.isIE() || browser$2.isEdge() ? browser$2.version.major : false,\n gecko: browser$2.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: domGlobals.window.getSelection && 'Range' in domGlobals.window,\n documentMode: browser$2.isIE() ? domGlobals.document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: true,\n cacheSuffix: null,\n container: null,\n experimentalShadowDom: false,\n canHaveCSP: !browser$2.isIE(),\n desktop: deviceType.isDesktop(),\n windowsPhone: windowsPhone,\n browser: {\n current: browser$2.current,\n version: browser$2.version,\n isChrome: browser$2.isChrome,\n isEdge: browser$2.isEdge,\n isFirefox: browser$2.isFirefox,\n isIE: browser$2.isIE,\n isOpera: browser$2.isOpera,\n isSafari: browser$2.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 isArray$1 = Array.isArray;\n var toArray$1 = function (obj) {\n var array = obj, i, l;\n if (!isArray$1(obj)) {\n array = [];\n for (i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n }\n return array;\n };\n var each$2 = function (o, cb, s) {\n var n, l;\n if (!o) {\n return 0;\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 0;\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 0;\n }\n }\n }\n }\n return 1;\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 var i, l;\n if (a) {\n for (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 i = 0;\n if (arguments.length < 3) {\n accumulator = collection[0];\n }\n for (; i < collection.length; i++) {\n accumulator = iteratee.call(thisArg, accumulator, collection[i], i);\n }\n return accumulator;\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 find$2 = function (array, predicate, thisArg) {\n var idx = findIndex$1(array, predicate, thisArg);\n if (idx !== -1) {\n return array[idx];\n }\n return undefined;\n };\n var last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n var ArrUtils = {\n isArray: isArray$1,\n toArray: toArray$1,\n each: each$2,\n map: map$2,\n filter: filter$2,\n indexOf: indexOf$1,\n reduce: reduce,\n findIndex: findIndex$1,\n find: find$2,\n last: last$1\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$1 = function (obj, type) {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && ArrUtils.isArray(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, ns, cn, scn, c, de = 0;\n s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n 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, ext) {\n var x = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n x[_i - 2] = arguments[_i];\n }\n var i, l, name;\n var args = arguments;\n var value;\n for (i = 1, l = args.length; i < l; i++) {\n ext = args[i];\n for (name in ext) {\n if (ext.hasOwnProperty(name)) {\n value = ext[name];\n if (value !== undefined) {\n obj[name] = 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 ArrUtils.each(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 || domGlobals.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 || domGlobals.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$1(s, 'array')) {\n return s;\n }\n return ArrUtils.map(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: ArrUtils.isArray,\n is: is$1,\n toArray: ArrUtils.toArray,\n makeMap: makeMap,\n each: ArrUtils.each,\n map: ArrUtils.map,\n grep: ArrUtils.filter,\n inArray: ArrUtils.indexOf,\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 function StyleSheetLoader(document, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var maxLoadTime;\n maxLoadTime = settings.maxLoadTime || 5000;\n var _setReferrerPolicy = function (referrerPolicy) {\n settings.referrerPolicy = referrerPolicy;\n };\n var appendToHead = function (node) {\n document.getElementsByTagName('head')[0].appendChild(node);\n };\n var load = function (url, loadedCallback, errorCallback) {\n var link, style, startTime, state;\n var resolve = function (status) {\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 var callbacks = state.passed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n resolve(2);\n };\n var failed = function () {\n var callbacks = state.failed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n resolve(3);\n };\n var isOldWebKit = function () {\n var webKitChunks = domGlobals.navigator.userAgent.match(/WebKit\\/(\\d*)/);\n return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);\n };\n var wait = function (testCallback, waitCallback) {\n if (!testCallback()) {\n if (new Date().getTime() - startTime < maxLoadTime) {\n Delay.setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n var waitForWebKitLinkLoaded = function () {\n wait(function () {\n var styleSheets = document.styleSheets;\n var styleSheet, i = styleSheets.length, owner;\n while (i--) {\n styleSheet = styleSheets[i];\n owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;\n if (owner && owner.id === link.id) {\n passed();\n return true;\n }\n }\n }, waitForWebKitLinkLoaded);\n };\n var waitForGeckoLinkLoaded = function () {\n wait(function () {\n try {\n var cssRules = style.sheet.cssRules;\n passed();\n return !!cssRules;\n } catch (ex) {\n }\n }, waitForGeckoLinkLoaded);\n };\n url = Tools._addCacheSuffix(url);\n if (!loadedStates[url]) {\n state = {\n passed: [],\n failed: []\n };\n loadedStates[url] = state;\n } else {\n state = loadedStates[url];\n }\n if (loadedCallback) {\n state.passed.push(loadedCallback);\n }\n if (errorCallback) {\n state.failed.push(errorCallback);\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 link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.id = 'u' + idCount++;\n link.async = false;\n link.defer = false;\n startTime = new Date().getTime();\n if (settings.contentCssCors) {\n link.crossOrigin = 'anonymous';\n }\n if (settings.referrerPolicy) {\n set(Element.fromDom(link), 'referrerpolicy', settings.referrerPolicy);\n }\n if ('onload' in link && !isOldWebKit()) {\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n } else {\n if (domGlobals.navigator.userAgent.indexOf('Firefox') > 0) {\n style = document.createElement('style');\n style.textContent = '@import \"' + url + '\"';\n waitForGeckoLinkLoaded();\n appendToHead(style);\n return;\n }\n waitForWebKitLinkLoaded();\n }\n appendToHead(link);\n link.href = url;\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 unbox = function (result) {\n return result.fold(identity, identity);\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(unbox));\n } else {\n success(parts.pass.map(unbox));\n }\n });\n };\n return {\n load: load,\n loadAll: loadAll,\n _setReferrerPolicy: _setReferrerPolicy\n };\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 voids = [\n 'area',\n 'base',\n 'basefont',\n 'br',\n 'col',\n 'frame',\n 'hr',\n 'img',\n 'input',\n 'isindex',\n 'link',\n 'meta',\n 'param',\n 'embed',\n 'source',\n 'wbr',\n 'track'\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, constant(true));\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 isVoid = lazyLookup(voids);\n var isTableSection = lazyLookup(tableSections);\n var isTableCell = lazyLookup(tableCells);\n var isWsPreserveElement = lazyLookup(wsElements);\n\n var surroundedBySpans = function (node) {\n var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';\n var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';\n return previousIsSpan && nextIsSpan;\n };\n var isBookmarkNode = function (node) {\n return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var trimNode = function (dom, node) {\n var i, children = node.childNodes;\n if (NodeType.isElement(node) && isBookmarkNode(node)) {\n return;\n }\n for (i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i]);\n }\n if (NodeType.isDocument(node) === false) {\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n var trimmedLength = Tools.trim(node.nodeValue).length;\n if (dom.isBlock(node.parentNode) || trimmedLength > 0) {\n return;\n }\n if (trimmedLength === 0 && surroundedBySpans(node)) {\n return;\n }\n } else if (NodeType.isElement(node)) {\n children = node.childNodes;\n if (children.length === 1 && isBookmarkNode(children[0])) {\n node.parentNode.insertBefore(children[0], node);\n }\n if (children.length || isVoid(Element.fromDom(node))) {\n return;\n }\n }\n dom.remove(node);\n }\n return node;\n };\n var TrimNode = { trimNode: trimNode };\n\n var makeMap$1 = Tools.makeMap;\n var namedEntities, baseEntities, reverseEntities;\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 baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\n };\n var nativeDecode = function (text) {\n var elm;\n elm = Element.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 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 name = split(name);\n ni = name.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[name[ni]] = element;\n }\n };\n var addAttrs = function (name, attributes) {\n var ni, schemaItem, i, l;\n name = split(name);\n ni = name.length;\n attributes = split(attributes);\n while (ni--) {\n schemaItem = schema[name[ni]];\n for (i = 0, l = attributes.length; i < l; i++) {\n schemaItem.attributes[attributes[i]] = {};\n schemaItem.attributesOrder.push(attributes[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 function Schema(settings) {\n var elements = {};\n var children = {};\n var patternElements = [];\n var validStyles;\n var invalidStyles;\n var schemaItems;\n var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;\n var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;\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 schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n validStyles = compileElementMap(settings.valid_styles);\n invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n validClasses = compileElementMap(settings.valid_classes, 'map');\n whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);\n moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);\n 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 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 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 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, key, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)\\])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n validElements = split(validElements, ',');\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (ei = 0, el = validElements.length; ei < el; ei++) {\n matches = elementRuleRegExp.exec(validElements[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 for (key in globalAttributes) {\n attributes[key] = globalAttributes[key];\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 = /^([+\\-]?)(\\w+)\\[([^\\]]+)\\]$/;\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 item = split(item, '/');\n elements[item[1]].outputName = item[0];\n });\n }\n each$3(split('ol ul sub sup blockquote span font a table tbody tr 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 zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\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 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 encodingItems;\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 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, right, bottom, left;\n top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n 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 = '', name, value;\n var serializeStyles = function (name) {\n var styleList, i, l, value;\n styleList = validStyles[name];\n if (styleList) {\n for (i = 0, l = styleList.length; i < l; i++) {\n name = styleList[i];\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;\n styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n if (styleMap && styleMap[name]) {\n return false;\n }\n return true;\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n for (name in styles) {\n value = styles[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 = function () {\n return false;\n };\n var returnTrue = function () {\n return true;\n };\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 getTargetFromShadowDom = function (event, defaultTarget) {\n if (event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath && composedPath.length > 0) {\n return composedPath[0];\n }\n }\n return defaultTarget;\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 || domGlobals.document;\n }\n if (Env.experimentalShadowDom) {\n event.target = getTargetFromShadowDom(originalEvent, event.target);\n }\n if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {\n var eventDoc = event.target.ownerDocument || domGlobals.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.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.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 = returnFalse;\n event.isPropagationStopped = 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 };\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n addEvent(win, 'load', readyHandler);\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 domGlobals.document.documentElement;\n this.hasFocusIn = 'onfocusin' in domGlobals.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 = domGlobals.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, related;\n current = evt.currentTarget;\n 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 = 0;\n return callback;\n };\n EventUtils.prototype.unbind = function (target, names, callback) {\n var id, callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n 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 for (name in eventMap) {\n callbackList = eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n eventMap = {};\n }\n for (name in eventMap) {\n return this;\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 callbackList, i, l, callback;\n var container = this.events[id];\n callbackList = container && container[evt.type];\n if (callbackList) {\n for (i = 0, l = callbackList.length; i < l; i++) {\n 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 i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$3, expando = 'sizzle' + -new Date(), preferredDoc = domGlobals.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) {\n setDocument(context);\n }\n context = context || document;\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 || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n }\n document = 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) {\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, null, [elem]).length > 0;\n };\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document) {\n setDocument(context);\n }\n return contains$3(context, elem);\n };\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document) {\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 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 = domGlobals.window.location && domGlobals.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.activeElement && (!document.hasFocus || document.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 for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n for (i in {\n submit: true,\n reset: true\n }) {\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 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 return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\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 && 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 = domGlobals.document, push$1 = Array.prototype.push, 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 var frag, node, container;\n fragDoc = fragDoc || doc;\n container = fragDoc.createElement('div');\n frag = fragDoc.createDocumentFragment();\n container.innerHTML = html;\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$1 = /^\\s*|\\s*$/g;\n var trim$2 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\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 = domGlobals.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 existingClassName, classState;\n classState = hasClass(node, className);\n if (classState !== state) {\n existingClassName = node.className;\n if (classState) {\n node.className = trim$2((' ' + 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 new 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$2,\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 = 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(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(node, 'nextSibling', 1, until).slice(1);\n },\n prevUntil: function (node, until) {\n return sibling(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 TreeWalker = function () {\n function TreeWalker(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 TreeWalker.prototype.current = function () {\n return this.node;\n };\n TreeWalker.prototype.next = function (shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n };\n TreeWalker.prototype.prev = function (shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n TreeWalker.prototype.prev2 = function (shallow) {\n this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n TreeWalker.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 TreeWalker.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 TreeWalker;\n }();\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 whiteSpaceRegExp$2 = /^[ \\t\\r\\n]*$/;\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 function DOMUtils(doc, settings) {\n var _this = this;\n if (settings === void 0) {\n settings = {};\n }\n var attrHooks;\n var addedStyles = {};\n var win = domGlobals.window;\n var files = {};\n var counter = 0;\n var stdMode = true;\n var boxModel = true;\n var styleSheetLoader = StyleSheetLoader(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 if (elm && doc && typeof elm === 'string') {\n var node = doc.getElementById(elm);\n if (node && node.id !== elm) {\n return doc.getElementsByName(elm)[1];\n } else {\n return node;\n }\n }\n return elm;\n };\n var $$ = function (elm) {\n if (typeof elm === 'string') {\n elm = get(elm);\n }\n return $(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 var originalValue, hook;\n if (value === '') {\n value = null;\n }\n var $elm = $$(elm);\n originalValue = $elm.attr(name);\n if (!$elm.length) {\n return;\n }\n 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 }\n if (!deep) {\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 return null;\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 = function (elm, rootElm) {\n return Position$1.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 var pos, size;\n elm = get(elm);\n pos = getPos(elm);\n 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 || !node.nodeType || node.nodeType === 9) {\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 if (typeof elm === 'string') {\n elm = get(elm);\n }\n result.push(func.call(scope, 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 === domGlobals.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 (url) {\n var head;\n if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n DOMUtils.DOM.loadCSS(url);\n return;\n }\n if (!url) {\n url = '';\n }\n head = doc.getElementsByTagName('head')[0];\n each$5(url.split(','), function (url) {\n var link;\n url = Tools._addCacheSuffix(url);\n if (files[url]) {\n return;\n }\n files[url] = true;\n link = create('link', __assign(__assign({\n rel: 'stylesheet',\n type: 'text/css',\n href: url\n }, settings.contentCssCors ? { crossOrigin: 'anonymous' } : {}), settings.referrerPolicy ? { referrerPolicy: settings.referrerPolicy } : {}));\n head.appendChild(link);\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 NodeType.isElement(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, nextSibling;\n parent = referenceNode.parentNode;\n 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 (NodeType.isElement(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 TreeWalker(node, node.parentNode);\n var whitespace = schema ? schema.getWhiteSpaceElements() : {};\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\n do {\n type = node.nodeType;\n if (NodeType.isElement(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 && !whiteSpaceRegExp$2.test(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(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 r = createRng(), bef, aft, pa;\n if (parentElm && splitElm) {\n r.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n bef = r.extractContents();\n r = createRng();\n r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n aft = r.extractContents();\n pa = parentElm.parentNode;\n pa.insertBefore(TrimNode.trimNode(self, bef), parentElm);\n if (replacementElm) {\n pa.insertBefore(replacementElm, parentElm);\n } else {\n pa.insertBefore(splitElm, parentElm);\n }\n pa.insertBefore(TrimNode.trimNode(self, aft), 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 return events.bind(target, name, func, scope || self);\n };\n var unbind = function (target, name, func) {\n var i;\n if (Tools.isArray(target)) {\n i = target.length;\n var rv = [];\n while (i--) {\n rv[i] = unbind(target[i], name, func);\n }\n return rv;\n }\n if (boundEvents && (target === doc || target === win)) {\n 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 var fire = function (target, name, evt) {\n return events.fire(target, name, evt);\n };\n var getContentEditable = function (node) {\n if (node && NodeType.isElement(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) {\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 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,\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 attrHooks = setupAttrHooks(styles, settings, function () {\n return self;\n });\n return self;\n }\n (function (DOMUtils) {\n DOMUtils.DOM = DOMUtils(domGlobals.document);\n DOMUtils.nodeIndex = findNodeIndex;\n }(DOMUtils || (DOMUtils = {})));\n var DOMUtils$1 = DOMUtils;\n\n var DOM = DOMUtils$1.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, id;\n var done = function () {\n dom.remove(id);\n if (elm) {\n elm.onreadystatechange = elm.onload = elm = null;\n }\n success();\n };\n var error = function () {\n if (isFunction(failure)) {\n failure();\n } else {\n if (typeof domGlobals.console !== 'undefined' && domGlobals.console.log) {\n domGlobals.console.log('Failed to load script: ' + url);\n }\n }\n };\n id = dom.uniqueId();\n elm = domGlobals.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 (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.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 if (state === undefined) {\n this.queue.push(url);\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 loadScripts;\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 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 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(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(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n };\n var removeContext = function (str) {\n return str.replace(/{context:\\w+}$/, '');\n };\n var translated = function (text) {\n return text;\n };\n if (isEmpty(text)) {\n return translated('');\n }\n if (isRaw(text)) {\n return translated(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 translated(removeContext(substitued));\n }\n return translated(removeContext(getLangData(text)));\n };\n var isRtl = function () {\n return getLanguageData().bind(function (items) {\n return get(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 function AddOnManager() {\n var _this = this;\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 = _this.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 (function (AddOnManager) {\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n }(AddOnManager || (AddOnManager = {})));\n var AddOnManager$1 = AddOnManager;\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.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 = domGlobals.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 domGlobals.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 domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.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$3(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$5 = 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$5(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 function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.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\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is(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 return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\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 = Element.fromDom(rng.startContainer);\n var root = Element.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(n, root);\n });\n var getAttr = function (c, property) {\n if (has$1(c, property)) {\n return Option.some(get$3(c, property));\n } else {\n return Option.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 = Element.fromDom(editor.getBody());\n return descendants$1(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n };\n var findAll = function (editor, name) {\n var body = Element.fromDom(editor.getBody());\n var markers = descendants$1(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n var directory = {};\n each(markers, function (m) {\n var uid = get$3(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(Option.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(keys(callbackMap));\n each(annotations, function (name) {\n updateCallbacks(name, function (data) {\n var prev = data.previous.get();\n identify(editor, Option.some(name)).fold(function () {\n if (prev.isSome()) {\n fireNoAnnotation(name);\n data.previous.set(Option.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(Option.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 Option.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$1 = 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) ? Option.from(annotations[name]).map(function (a) {\n return a.settings;\n }) : Option.none();\n };\n return {\n register: register,\n lookup: lookup\n };\n };\n\n var unique = 0;\n var generate = 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 || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var get$6 = 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 = Element.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 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone(original, false);\n };\n var deep = function (original) {\n return clone(original, true);\n };\n\n var ZWSP = zeroWidth;\n var isZwsp = function (chr) {\n return chr === ZWSP;\n };\n var trim$3 = function (text) {\n return text.replace(new RegExp(ZWSP, 'g'), '');\n };\n var Zwsp = {\n isZwsp: isZwsp,\n ZWSP: ZWSP,\n trim: trim$3\n };\n\n var isElement$2 = NodeType.isElement;\n var isText$2 = NodeType.isText;\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) && Zwsp.isZwsp(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 || !NodeType.isBr(node.firstChild);\n };\n var insertInline = function (node, before) {\n var doc, sibling, textNode, parentNode;\n doc = node.ownerDocument;\n textNode = doc.createTextNode(Zwsp.ZWSP);\n 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 (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === Zwsp.ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = domGlobals.document.createElement('br');\n br.setAttribute('data-mce-bogus', '1');\n return br;\n };\n var insertBlock = function (blockName, node, before) {\n var doc, blockNode, parentNode;\n doc = node.ownerDocument;\n 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 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.ZWSP;\n };\n var endsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (NodeType.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 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$1 = NodeType.isContentEditableFalse;\n var isBr$2 = NodeType.isBr;\n var isText$3 = NodeType.isText;\n var isInvalidTextElement = NodeType.matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n var isAtomicInline = NodeType.matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object'\n ]);\n var isTable$2 = NodeType.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 if (isInvalidTextElement(node.parentNode)) {\n return false;\n }\n return true;\n }\n return isAtomicInline(node) || isBr$2(node) || isTable$2(node) || isNonUiContentEditableFalse(node);\n };\n var isUnselectable = function (node) {\n return NodeType.isElement(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 round = Math.round;\n var clone$1 = 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$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n 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 if (rect1.bottom - rect1.height / 2 < 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 lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();\n };\n var someIf = function (b, a) {\n return b ? Option.some(a) : Option.none();\n };\n\n var slice$2 = [].slice;\n var or = function () {\n var x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\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 x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\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 var Predicate = {\n and: and,\n or: or\n };\n\n var isElement$3 = NodeType.isElement;\n var isCaretCandidate$1 = isCaretCandidate;\n var isBlock$1 = NodeType.matchStyleValues('display', 'block table');\n var isFloated = NodeType.matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));\n var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = NodeType.isText;\n var isBr$3 = NodeType.isBr;\n var nodeIndex = DOMUtils$1.nodeIndex;\n var resolveIndex = getNode;\n var createRange = function (doc) {\n return 'createRange' in doc ? doc.createRange() : DOMUtils$1.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) && NodeType.isText(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 var clientRect;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n clientRect = clone$1(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 && NodeType.isText(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, clientRects;\n clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return 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 function CaretPosition(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;\n 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 (function (CaretPosition) {\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 ? NodeType.isText(pos.container()) : false;\n };\n CaretPosition.isElementPosition = function (pos) {\n return CaretPosition.isTextPosition(pos) === false;\n };\n }(CaretPosition || (CaretPosition = {})));\n var CaretPosition$1 = CaretPosition;\n\n var isText$5 = NodeType.isText;\n var isBogus$1 = NodeType.isBogus;\n var nodeIndex$1 = DOMUtils$1.nodeIndex;\n var normalizedParent = function (node) {\n var parentNode = node.parentNode;\n if (isBogus$1(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n var getChildNodes = function (node) {\n if (!node) {\n return [];\n }\n return ArrUtils.reduce(node.childNodes, function (result, node) {\n if (isBogus$1(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 = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index, numTextFragments;\n nodes = getChildNodes(normalizedParent(node));\n index = ArrUtils.findIndex(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n numTextFragments = ArrUtils.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 = ArrUtils.filter(nodes, NodeType.matchNodeNames([node.nodeName]));\n index = ArrUtils.findIndex(nodes, equal(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$2 = 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 = ArrUtils.filter(parents, not(NodeType.isBogus));\n path = path.concat(ArrUtils.map(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 = ArrUtils.filter(nodes, function (node, index) {\n return !isText$5(node) || !isText$5(nodes[index - 1]);\n });\n nodes = ArrUtils.filter(nodes, NodeType.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$1(container, offset);\n };\n var resolve$1 = function (root, path) {\n var parts, container, offset;\n if (!path) {\n return null;\n }\n parts = path.split(',');\n path = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n container = ArrUtils.reduce(path, function (result, value) {\n value = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!value) {\n return null;\n }\n if (value[1] === 'text()') {\n value[1] = '#text';\n }\n return resolvePathItem(result, value[1], parseInt(value[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$1(container.parentNode, offset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n var trimEmptyTextNode = function (dom, node) {\n if (NodeType.isText(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 = Option.from(frag.firstChild);\n var lastChild = Option.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 (NodeType.isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isContentEditableFalse$2 = NodeType.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 && NodeType.isText(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 (NodeType.isText(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 (NodeType.isElement(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 (NodeType.isElement(node)) {\n node = getNode(node, offset);\n if (isContentEditableFalse$2(node)) {\n return node;\n }\n }\n if (isCaretContainer(node)) {\n if (NodeType.isText(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$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),\n end: create$2(selection.dom.getRoot(), CaretPosition$1.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: 1\n });\n return { id: id };\n };\n var getBookmark = function (selection, type, normalized) {\n if (type === 2) {\n return getOffsetBookmark(Zwsp.trim, 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 GetBookmark = {\n getBookmark: getBookmark,\n getUndoBookmark: curry(getOffsetBookmark, identity, true),\n getPersistentBookmark: getPersistentBookmark\n };\n\n var TextWalker = function (startNode, rootNode, isBoundary) {\n if (isBoundary === void 0) {\n isBoundary = never;\n }\n var walker = new TreeWalker(startNode, rootNode);\n var walk = function (direction) {\n var next;\n do {\n next = walker[direction]();\n } while (next && !NodeType.isText(next) && !isBoundary(next));\n return Option.from(next).filter(NodeType.isText);\n };\n return {\n current: function () {\n return Option.from(walker.current()).filter(NodeType.isText);\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) || NodeType.isBr(node) || NodeType.isContentEditableFalse(node);\n };\n var walk = function (node, offset, walker, process) {\n if (NodeType.isText(node)) {\n var newOffset = process(node, offset, node.data);\n if (newOffset !== -1) {\n return Option.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 CARET_ID = '_mce_caret';\n var isCaretNode = function (node) {\n return NodeType.isElement(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 isElement$4 = NodeType.isElement;\n var isText$6 = NodeType.isText;\n var removeNode = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var getNodeValue = function (node) {\n try {\n return node.nodeValue;\n } catch (ex) {\n return '';\n }\n };\n var setNodeValue = function (node, text) {\n if (text.length === 0) {\n removeNode(node);\n } else {\n node.nodeValue = text;\n }\n };\n var trimCount = function (text) {\n var trimmedText = Zwsp.trim(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\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 setNodeValue(caretContainer, text);\n return CaretPosition$1(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$1(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$1.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 var text = Zwsp.trim(getNodeValue(caretContainerNode));\n setNodeValue(caretContainerNode, text);\n }\n };\n var CaretContainerRemove = {\n removeAndReposition: removeAndReposition,\n remove: remove$5\n };\n\n var DOM$1 = DOMUtils$1.DOM;\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', constant(true), '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.settings.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 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 return editor.getParam('object_resizing');\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 Settings = {\n getIframeAttrs: getIframeAttrs,\n getDocType: getDocType,\n getDocumentBaseUrl: getDocumentBaseUrl,\n getBodyId: getBodyId,\n getBodyClass: getBodyClass,\n getContentSecurityPolicy: getContentSecurityPolicy,\n shouldPutBrInPre: shouldPutBrInPre,\n getForcedRootBlock: getForcedRootBlock,\n getForcedRootBlockAttrs: getForcedRootBlockAttrs,\n getBrNewLineSelector: getBrNewLineSelector,\n getNoNewLineSelector: getNoNewLineSelector,\n shouldKeepStyles: shouldKeepStyles,\n shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,\n getFontStyleValues: getFontStyleValues,\n getFontSizeClasses: getFontSizeClasses,\n getIconPackName: getIconPackName,\n getIconsUrl: getIconsUrl,\n getImagesDataImgFilter: getImagesDataImgFilter,\n isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,\n shouldReuseFileName: shouldReuseFileName,\n shouldReplaceBlobUris: shouldReplaceBlobUris,\n getImageUploadUrl: getImageUploadUrl,\n getImageUploadBasePath: getImageUploadBasePath,\n getImagesUploadCredentials: getImagesUploadCredentials,\n getImagesUploadHandler: getImagesUploadHandler,\n shouldUseContentCssCors: shouldUseContentCssCors,\n getReferrerPolicy: getReferrerPolicy,\n getLanguageCode: getLanguageCode,\n getLanguageUrl: getLanguageUrl,\n shouldIndentUseMargin: shouldIndentUseMargin,\n getIndentation: getIndentation,\n getContentCss: getContentCss,\n getDirectionality: getDirectionality,\n getInlineBoundarySelector: getInlineBoundarySelector,\n getObjectResizing: getObjectResizing,\n getResizeImgProportional: getResizeImgProportional,\n getPlaceholder: getPlaceholder\n };\n\n var browser$3 = detect$3().browser;\n var isContentEditableFalse$3 = NodeType.isContentEditableFalse;\n var isTableCell$1 = function (node) {\n return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);\n };\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 contentEditableFalseNodes, node, sibling, i, data;\n contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);\n for (i = 0; i < contentEditableFalseNodes.length; i++) {\n node = contentEditableFalseNodes[i];\n sibling = node.previousSibling;\n if (endsWithCaretContainer(sibling)) {\n 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 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(Option.none());\n var cursorInterval, caretContainerNode;\n var rootBlock = Settings.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$1(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(Option.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 (isContentEditableFalse$3(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 CaretContainerRemove.remove(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.get().each(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.set(Option.none());\n });\n Delay.clearInterval(cursorInterval);\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$3.isIE() || browser$3.isEdge() || browser$3.isFirefox();\n };\n var isFakeCaretTarget = function (node) {\n return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$4 = NodeType.isContentEditableFalse;\n var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer$2 = isCaretContainer;\n var isCaretContainerBlock$1 = isCaretContainerBlock;\n var isElement$5 = NodeType.isElement;\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 TreeWalker(node, rootNode);\n if (isBackwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.prev, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.prev, shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n if (isForwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.next, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.next, 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 var container, offset;\n if (!caretPosition) {\n return null;\n }\n container = caretPosition.container();\n 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)) {\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, offset, location;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n container = range.startContainer;\n 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 (NodeType.isText(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 Option.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 Option.from(pos.getNode()).map(Element.fromDom);\n };\n var getElementFromPrevPosition = function (pos) {\n return Option.from(pos.getNode(true)).map(Element.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 && NodeType.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 = NodeType.isContentEditableFalse;\n var isText$7 = NodeType.isText;\n var isElement$6 = NodeType.isElement;\n var isBr$4 = NodeType.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$1.before(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {\n return CaretPosition$1.after(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$4(node)) {\n return CaretPosition$1.before(node);\n }\n return CaretPosition$1.after(node);\n }\n return CaretPosition$1.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$1(nextSibling, 0);\n } else {\n return CaretPosition$1.before(nextSibling);\n }\n } else {\n return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);\n }\n };\n var findCaretPosition = function (direction, startPos, root) {\n var node, nextNode, innerNode;\n var rootContentEditableFalseElm, caretPosition;\n if (!isElement$6(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {\n caretPosition = CaretPosition$1.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {\n return isBr$4(root.lastChild) ? CaretPosition$1.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$1(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition$1(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$1(innerNode, innerNode.data.length);\n }\n return CaretPosition$1.after(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, nextNode.data.length);\n }\n return CaretPosition$1.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$1(innerNode, 0);\n }\n return CaretPosition$1.before(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, 0);\n }\n return CaretPosition$1.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, constant(true), root, true);\n if (isEditableCaretCandidate$1(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);\n rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition$1.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$1.before(start) : CaretPosition$1.after(start);\n return fromPosition(forward, root, position);\n };\n var afterElement = function (node) {\n return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);\n };\n var isBeforeOrStart = function (position) {\n if (CaretPosition$1.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate(position.getNode());\n }\n };\n var isAfterOrEnd = function (position) {\n if (CaretPosition$1.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$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);\n };\n var isAtBr = function (position) {\n return !CaretPosition$1.isTextPosition(position) && NodeType.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 Option.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 Option.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) : Option.some(pos);\n });\n };\n var positionIn = function (forward, element) {\n var startNode = forward ? element.firstChild : element.lastChild;\n if (NodeType.isText(startNode)) {\n return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate(startNode)) {\n return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Option.none();\n }\n };\n var nextPosition = curry(fromPosition, true);\n var prevPosition = curry(fromPosition, false);\n var CaretFinder = {\n fromPosition: fromPosition,\n nextPosition: nextPosition,\n prevPosition: prevPosition,\n navigate: navigate,\n navigateIgnore: navigateIgnore,\n positionIn: positionIn,\n firstPositionIn: curry(positionIn, true),\n lastPositionIn: curry(positionIn, false)\n };\n\n var isStringPathBookmark = function (bookmark) {\n return typeof bookmark.start === 'string';\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 (NodeType.isElement(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '
';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var rng, pos;\n 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.ZWSP);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return CaretFinder.lastPositionIn(node).fold(function () {\n return false;\n }, 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(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 NodeType.isText(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 (NodeType.isText(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 && NodeType.isText(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\n dom.remove(next);\n if (suffix === 'start') {\n container = prev;\n offset = idx;\n } else {\n container = prev;\n offset = idx;\n }\n }\n }\n return Option.some(CaretPosition$1(container, offset));\n } else {\n return Option.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 Option.some(rng);\n } else {\n return Option.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 Option.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 Option.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 Option.some(bookmark.rng);\n }\n }\n return Option.none();\n };\n var ResolveBookmark = { resolve: resolve$2 };\n\n var getBookmark$1 = function (selection, type, normalized) {\n return GetBookmark.getBookmark(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n ResolveBookmark.resolve(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var Bookmarks = {\n getBookmark: getBookmark$1,\n moveToBookmark: moveToBookmark,\n isBookmarkNode: isBookmarkNode$1\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 = 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 TreeWalker(container, dom.getParent(container, dom.isBlock));\n } else {\n container = nodes[nodes.length - 1];\n walker = new TreeWalker(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) {\n return node && NodeType.isText(node) && /^([\\t \\r\\n]+|)$/.test(node.nodeValue);\n };\n var isEmptyTextNode = function (node) {\n return node && NodeType.isText(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\n var isBookmarkNode$2 = Bookmarks.isBookmarkNode;\n var getParents$2 = getParents$1, isWhiteSpaceNode$1 = isWhiteSpaceNode, isTextBlock$2 = isTextBlock$1;\n var isBogusBr = function (node) {\n return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n var findParentContentEditable = function (dom, node) {\n var parent = node;\n while (parent) {\n if (NodeType.isElement(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);\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 Option.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) : Option.some(result);\n }).orThunk(function () {\n return lastTextNode ? Option.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Option.none();\n });\n };\n var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\n if (NodeType.isText(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(NodeType.isText(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 findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {\n var container, parent, sibling, siblingName, root;\n container = parent = start ? startContainer : endContainer;\n siblingName = start ? 'previousSibling' : 'nextSibling';\n root = dom.getRoot();\n if (NodeType.isText(container) && !isWhiteSpaceNode$1(container)) {\n if (start ? startOffset > 0 : endOffset < container.nodeValue.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 if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {\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 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 (NodeType.isElement(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode(startContainer, startOffset);\n if (NodeType.isText(startContainer)) {\n startOffset = 0;\n }\n }\n if (NodeType.isElement(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (NodeType.isText(endContainer)) {\n endOffset = endContainer.nodeValue.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(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 (NodeType.isText(startContainer)) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(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 (NodeType.isText(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 || (!NodeType.isText(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!format[0].inline || (!NodeType.isText(endContainer) || endOffset === endContainer.nodeValue.length)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, 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, endContainer, endOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n }\n }\n }\n if (NodeType.isElement(startContainer)) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (NodeType.isElement(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 each$7 = Tools.each;\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 nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n if (nodes.length > 0) {\n each$7(nodes, function (node) {\n callback([node]);\n });\n return;\n }\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 var RangeWalk = { walk: walk$1 };\n\n function NodeValue (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) ? Option.from(element.dom().nodeValue) : Option.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$7 = function (element) {\n return api.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText(elem) && get$7(elem) === zeroWidth;\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)) {\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('mce-annotation') : _b, data = __rest(_a, ['uid']);\n var master = Element.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(Option.none());\n var finishWrapper = function () {\n wrapper.set(Option.none());\n };\n var getOrOpenWrapper = function () {\n return wrapper.get().getOrThunk(function () {\n var nu = shallow(master);\n newWrappers.push(nu);\n wrapper.set(Option.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, Element.fromDom);\n processElements(elems);\n };\n RangeWalk.walk(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 initialRng = editor.selection.getRng();\n if (initialRng.collapsed) {\n applyWordGrab(editor, initialRng);\n }\n if (editor.selection.getRng().collapsed) {\n var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n set$1(wrapper, nbsp);\n editor.selection.getRng().insertNode(wrapper.dom());\n editor.selection.select(wrapper.dom());\n } else {\n var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);\n var rng = editor.selection.getRng();\n annotate(editor, rng, name, settings.decorate, data);\n editor.selection.moveToBookmark(bookmark);\n }\n });\n };\n\n var Annotator = function (editor) {\n var registry = create$1();\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, Option.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 whiteSpaceRegExp$3 = /^[ \\t\\r\\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 (!whiteSpaceRegExp$3.test(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 Node$1 = function () {\n function Node(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n Node.create = function (name, attrs) {\n var node = new Node(name, typeLookup[name] || 1);\n if (attrs) {\n for (var attrName in attrs) {\n node.attr(attrName, attrs[attrName]);\n }\n }\n return node;\n };\n Node.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 Node.prototype.attr = function (name, value) {\n var self = this;\n var attrs;\n if (typeof name !== 'string') {\n for (var key in name) {\n self.attr(key, name[key]);\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 Node.prototype.clone = function () {\n var self = this;\n var clone = new Node(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 Node.prototype.wrap = function (wrapper) {\n var self = this;\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n return self;\n };\n Node.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 Node.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 Node.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 Node.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 Node.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 Node.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 Node.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] && whiteSpaceRegExp$3.test(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 Node.prototype.walk = function (prev) {\n return walk$2(this, null, prev);\n };\n return Node;\n }();\n\n var isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n };\n var isInvalidUri = function (settings, uri) {\n if (settings.allow_html_data_urls) {\n return false;\n } else if (/^data:image\\//i.test(uri)) {\n return settings.allow_svg_data_urls === false && /^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, tokenRegExp, shortEndedElements;\n shortEndedElements = schema.getShortEndedElements();\n 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 = /--!?>/;\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 function SaxParser(settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var noop = function () {\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 parse = function (html, format) {\n if (format === void 0) {\n format = 'html';\n }\n var matches, index = 0, value, endRegExp;\n var stack = [];\n var attrList, i, textData, name;\n var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded;\n var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\n var attributesRequired, attributesDefault, attributesForced, processHtml;\n var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;\n var decode = Entities.decode;\n var fixSelfClosing;\n var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href');\n var scriptUriRegExp = /((java|vb)script|mhtml):/i;\n var parsingMode = format === 'html' ? 0 : 1;\n var processEndTag = function (name) {\n var pos, i;\n pos = stack.length;\n while (pos--) {\n if (stack[pos].name === name) {\n break;\n }\n }\n if (pos >= 0) {\n for (i = stack.length - 1; i >= pos; i--) {\n name = stack[i];\n if (name.valid) {\n end(name.name);\n }\n }\n stack.length = pos;\n }\n };\n var 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(value);\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 (match, name, value, val2, val3) {\n var attrRule, i;\n var trimRegExp = /[\\s\\u0000-\\u001F]+/g;\n name = name.toLowerCase();\n value = 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)) {\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 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 attrRegExp = /([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g;\n shortEndedElements = schema.getShortEndedElements();\n selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\n fillAttrsMap = schema.getBoolAttrs();\n validate = settings.validate;\n removeInternalElements = settings.remove_internals;\n fixSelfClosing = settings.fix_self_closing;\n specialElements = schema.getSpecialElements();\n processHtml = html + '>';\n while (matches = tokenRegExp.exec(processHtml)) {\n var matchText = matches[0];\n if (index < matches.index) {\n text(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 text(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, parseAttribute);\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 text(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 return { parse: parse };\n }\n (function (SaxParser) {\n SaxParser.findEndTag = findEndTagIndex;\n }(SaxParser || (SaxParser = {})));\n var SaxParser$1 = SaxParser;\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, shortEndedElements;\n var schema = serializer.schema;\n content = trimHtml(serializer.getTempAttrs(), content);\n 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$1.findEndTag(schema, content, index);\n }\n content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n bogusAllRegExp.lastIndex = index - matchLength;\n }\n return Zwsp.trim(content);\n };\n var trimExternal = trimInternal;\n var TrimHtml = {\n trimExternal: trimExternal,\n trimInternal: trimInternal\n };\n\n var defaultFormat = 'html';\n var trimEmptyContents = function (editor, html) {\n var blockName = Settings.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, body) {\n var content;\n args.format = args.format ? args.format : defaultFormat;\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(TrimHtml.trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = Zwsp.trim(body.innerText || body.textContent);\n } else if (args.format === 'tree') {\n return editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n if (args.format !== 'text' && !isWsPreserveElement(Element.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 getContent = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$1('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, body);\n });\n };\n\n var makeMap$3 = Tools.makeMap;\n var Writer = function (settings) {\n var html = [];\n var indent, indentBefore, indentAfter, encode, htmlOutput;\n settings = settings || {};\n indent = settings.indent;\n indentBefore = makeMap$3(settings.indent_before || '');\n indentAfter = makeMap$3(settings.indent_after || '');\n encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n 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 Serializer = 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 handlers, validate;\n validate = settings.validate;\n 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 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 hasFocus = function (element) {\n var doc = owner(element).dom();\n return element.dom() === doc.activeElement;\n };\n var active = function (_doc) {\n var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;\n return Option.from(doc.activeElement).map(Element.fromDom);\n };\n var search = function (element) {\n return active(owner(element)).filter(function (e) {\n return element.dom().contains(e.dom());\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 argLength = arguments.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 args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\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 if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.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 create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\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 Element.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 Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var browser$4 = detect$3().browser;\n var clamp = function (offset, element) {\n var max = isText(element) ? get$7(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 Selection.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));\n };\n var isOrContains = function (root, elm) {\n return !NodeType.isRestrictedNode(elm.dom()) && (contains$2(root, elm) || eq(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$4.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return Selection.range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);\n };\n var readRange = function (win) {\n var selection = win.getSelection();\n var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.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 Option.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n };\n var bookmarkToNativeRng = function (bookmark) {\n var rng = domGlobals.document.createRange();\n try {\n rng.setStart(bookmark.start().dom(), bookmark.soffset());\n rng.setEnd(bookmark.finish().dom(), bookmark.foffset());\n return Option.some(rng);\n } catch (_) {\n return Option.none();\n }\n };\n var store = function (editor) {\n var newBookmark = shouldStore(editor) ? getBookmark$2(Element.fromDom(editor.getBody())) : Option.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var storeNative = function (editor, rng) {\n var root = Element.fromDom(editor.getBody());\n var range = shouldStore(editor) ? Option.from(rng) : Option.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 : Option.none();\n return bookmark.bind(function (x) {\n return validate(Element.fromDom(editor.getBody()), x);\n }).bind(bookmarkToNativeRng);\n };\n var restore = function (editor) {\n getRng(editor).each(function (rng) {\n editor.selection.setRng(rng);\n });\n };\n var SelectionBookmark = {\n store: store,\n storeNative: storeNative,\n readRange: readRange,\n restore: restore,\n getRng: getRng,\n getBookmark: getBookmark$2,\n validate: validate\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$1.DOM.bind(domGlobals.document, 'mouseup', mouseUpPage);\n editor.on('remove', function () {\n DOMUtils$1.DOM.unbind(domGlobals.document, 'mouseup', mouseUpPage);\n });\n };\n var registerFocusOut = function (editor) {\n editor.on('focusout', function () {\n SelectionBookmark.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 SelectionBookmark.store(editor);\n }\n });\n };\n var register = function (editor) {\n var throttledStore = first(function () {\n SelectionBookmark.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 var SelectionRestore = { register: register };\n\n var documentFocusInHandler;\n var DOM$2 = DOMUtils$1.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 = editor ? editor.settings.custom_ui_selector : '';\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 () {\n try {\n return domGlobals.document.activeElement;\n } catch (ex) {\n return domGlobals.document.body;\n }\n };\n var registerEvents = function (editorManager, e) {\n var editor = e.editor;\n SelectionRestore.register(editor);\n editor.on('focusin', function () {\n var self = this;\n var focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== self) {\n if (focusedEditor) {\n focusedEditor.fire('blur', { focusedEditor: self });\n }\n editorManager.setActive(self);\n editorManager.focusedEditor = self;\n self.fire('focus', { blurredEditor: focusedEditor });\n self.focus(true);\n }\n });\n editor.on('focusout', function () {\n var self = this;\n Delay.setEditorTimeout(self, function () {\n var focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(self, getActiveElement()) && focusedEditor === self) {\n self.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = function (e) {\n var activeEditor = editorManager.activeEditor;\n var target;\n target = e.target;\n if (activeEditor && target.ownerDocument === domGlobals.document) {\n if (target !== domGlobals.document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n activeEditor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n };\n DOM$2.bind(domGlobals.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(domGlobals.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 var FocusController = {\n setup: setup$2,\n isEditorUIElement: isEditorUIElement$1,\n isEditorContentAreaElement: isEditorContentAreaElement,\n isUIElement: isUIElement\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 ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element.fromDom) : Option.none();\n };\n var getFocusInElement = function (root, rng) {\n return getCollapsedNode(rng).bind(function (node) {\n if (isTableSection(node)) {\n return Option.some(node);\n } else if (contains$2(root, node) === false) {\n return Option.some(root);\n } else {\n return Option.none();\n }\n });\n };\n var normalizeSelection = function (editor, rng) {\n getFocusInElement(Element.fromDom(editor.getBody()), rng).bind(function (elm) {\n return CaretFinder.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(Element.fromDom(editor.iframeElement));\n };\n var hasInlineFocus = function (editor) {\n var rawBody = editor.getBody();\n return rawBody && hasElementFocus(Element.fromDom(rawBody));\n };\n var hasUiFocus = function (editor) {\n return active().filter(function (elem) {\n return !FocusController.isEditorContentAreaElement(elem.dom()) && FocusController.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 SelectionBookmark.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 = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n skipFocus ? activateEditor(editor) : focusEditor(editor);\n };\n var EditorFocus = {\n focus: focus,\n hasFocus: hasFocus$1,\n hasEditorOrUiFocus: hasEditorOrUiFocus\n };\n\n var defaultFormat$1 = 'html';\n var isTreeNode = function (content) {\n return content instanceof Node$1;\n };\n var moveSelection = function (editor) {\n if (EditorFocus.hasFocus(editor)) {\n CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = NodeType.isTable(node) ? CaretFinder.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 = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, 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 = Serializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n args.content = isWsPreserveElement(Element.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 = Serializer({ validate: editor.validate }, editor.schema).serialize(content);\n args.content = isWsPreserveElement(Element.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 setContent = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n args.format = args.format ? args.format : defaultFormat$1;\n args.set = true;\n args.content = isTreeNode(content) ? '' : content;\n if (!isTreeNode(content) && !args.no_events) {\n editor.fire('BeforeSetContent', args);\n content = args.content;\n }\n return Option.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 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) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\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 DOM$3 = DOMUtils$1.DOM;\n var restoreOriginalStyles = function (editor) {\n DOM$3.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n var safeDestroy = function (x) {\n return Option.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$6 = 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 = new Array(arguments.length);\n for (var i = 0; i < objects.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 = Immutable('sections', 'settings');\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(settings, 'toolbar_mode').orThunk(function () {\n return get(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 (settings, isPhone) {\n var defaultMobileSettings = {\n resize: false,\n toolbar_mode: getToolbarMode(settings, 'scrolling'),\n toolbar_sticky: false\n };\n var defaultPhoneSettings = { menubar: false };\n return __assign(__assign(__assign({}, defaultTouchSettings), defaultMobileSettings), isPhone ? defaultPhoneSettings : {});\n };\n var getExternalPlugins = 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 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 = isMobileDevice && isSectionTheme(sectionResult, 'mobile', 'mobile') ? filterLegacyMobilePlugins(mobilePlugins) : isMobileDevice && hasSection(sectionResult, 'mobile') ? mobilePlugins : desktopPlugins;\n var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\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, 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(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 Option.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$4(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 = Element.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 Option.from(node).map(Element.fromDom);\n };\n var isEditorAttachedToDom = function (editor) {\n var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(function (container) {\n return contains$2(owner(container), container);\n }).getOr(false);\n };\n var EditorView = {\n isXYInContentArea: isXYInContentArea,\n isEditorAttachedToDom: isEditorAttachedToDom\n };\n\n function NotificationManagerImpl() {\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 function NotificationManager(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 Option.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) {\n if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {\n return;\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 });\n addNotification(notification);\n reposition();\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 = editor.settings.service_message;\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0\n });\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$1.PluginManager;\n\n var ThemeManager = AddOnManager$1.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 return f ? f.apply(scope, arguments) : 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 Option.from(dialogs[dialogs.length - 1]);\n };\n var storeSelectionAndOpenDialog = function (openDialog) {\n editor.editorManager.setActive(editor);\n SelectionBookmark.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 getImplementation().alert(message, funcBind(scope ? scope : this, callback));\n };\n var confirm = function (message, callback, scope) {\n getImplementation().confirm(message, funcBind(scope ? scope : this, 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 domGlobals.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 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 = domGlobals.window.console;\n if (console) {\n if (console.error) {\n console.error.apply(console, arguments);\n } else {\n console.log.apply(console, arguments);\n }\n }\n };\n var ErrorReporter = {\n pluginLoadError: pluginLoadError,\n iconsLoadError: iconsLoadError,\n languageLoadError: languageLoadError,\n pluginInitError: pluginInitError,\n uploadError: uploadError,\n displayError: displayError,\n initError: initError\n };\n\n var getAll = function () {\n return {\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': '',\n 'document-properties': '',\n 'drag': '',\n 'duplicate': '',\n 'edit-block': '',\n 'edit-image': '',\n 'embed-page': '',\n 'embed': '',\n 'emoji': '',\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': '',\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-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 'sort-asc': '',\n 'sort-dsc': '',\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 };\n\n var isContentCssSkinName = function (url) {\n return /^[a-z0-9\\-]+$/i.test(url);\n };\n var getContentCssUrls = function (editor) {\n var contentCss = Settings.getContentCss(editor);\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(contentCss, 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));\n };\n\n function BookmarkManager(selection) {\n return {\n getBookmark: curry(Bookmarks.getBookmark, selection),\n moveToBookmark: curry(Bookmarks.moveToBookmark, selection)\n };\n }\n (function (BookmarkManager) {\n BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;\n }(BookmarkManager || (BookmarkManager = {})));\n var BookmarkManager$1 = BookmarkManager;\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 (NodeType.isElement(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 var RangePoint = { isXYWithinRange: isXYWithinRange };\n\n var VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n END: 35,\n HOME: 36,\n modifierPressed: function (e) {\n return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);\n },\n metaKeyPressed: function (e) {\n return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n var isContentEditableFalse$6 = NodeType.isContentEditableFalse;\n var isContentEditableTrue$2 = NodeType.isContentEditableTrue;\n var getContentEditableRoot = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue$2(node) || isContentEditableFalse$6(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var ControlSelection = function (selection, editor) {\n var dom = editor.dom, each = Tools.each;\n var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;\n var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n var width, height;\n var editableDoc = editor.getDoc(), rootDocument = domGlobals.document;\n var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n var startScrollWidth, startScrollHeight;\n 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 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) && !RangePoint.isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);\n }\n };\n var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTarget = function (elm) {\n return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;\n };\n var isResizable = function (elm) {\n var selector = Settings.getObjectResizing(editor);\n if (selector === false || Env.iOS) {\n return false;\n }\n if (typeof selector !== 'string') {\n selector = 'table,img,figure.image,div';\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n return is(Element.fromDom(elm), selector);\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) && Settings.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 dom.setStyles(getResizeTarget(selectedElmGhost), {\n width: width,\n height: height\n });\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);\n resizeStarted = true;\n }\n };\n var endGhostResize = function () {\n resizeStarted = false;\n var setSizeProp = function (name, value) {\n if (value) {\n if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) {\n dom.setStyle(getResizeTarget(selectedElm), name, value);\n } else {\n dom.setAttrib(getResizeTarget(selectedElm), name, value);\n }\n }\n };\n setSizeProp('width', width);\n setSizeProp('height', height);\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 showResizeRect(selectedElm);\n fireObjectResized(editor, selectedElm, width, height);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n editor.nodeChanged();\n };\n var showResizeRect = function (targetElm) {\n var position, targetWidth, targetHeight, e, rect;\n hideResizeRect();\n unbindResizeHandleEvents();\n position = dom.getPos(targetElm, rootElement);\n selectedElmX = position.x;\n selectedElmY = position.y;\n rect = targetElm.getBoundingClientRect();\n targetWidth = rect.width || rect.right - rect.left;\n targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n selectedElm = targetElm;\n width = height = 0;\n }\n e = editor.fire('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n startX = e.screenX;\n startY = e.screenY;\n startW = getResizeTarget(selectedElm).clientWidth;\n startH = getResizeTarget(selectedElm).clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n handle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n selectedElmGhost = selectedElm.cloneNode(true);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = false;\n selectedElmGhost.unSelectabe = true;\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n selectedElmGhost.removeAttribute('data-mce-selected');\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 selectedElm.setAttribute('data-mce-selected', '1');\n };\n var hideResizeRect = function () {\n var name, handleElm;\n unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute('data-mce-selected');\n }\n for (name in resizeHandles) {\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n }\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute('data-mce-selected');\n });\n controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[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 for (var name_1 in resizeHandles) {\n var handle = resizeHandles[name_1];\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)) {\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 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 = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\n };\n };\n\n function Dimension (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(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$4(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$4(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$8 = 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 element = doc.dom() === domGlobals.document ? Option.none() : Option.from(doc.dom().defaultView.frameElement);\n return element.map(Element.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 = Element.fromDom(domGlobals.document);\n var scroll = get$1(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 Position(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$7(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$8(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 = Element.fromHtml('' + Zwsp.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(Element.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$1(doc).top();\n f(doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n var applyWithMarker = function (editor, f, rng, alignToTop) {\n var body = Element.fromDom(editor.getBody());\n var doc = Element.fromDom(editor.getDoc());\n reflow(body);\n var marker = createMarker(Element.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 = Element.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(Element.fromDom(startElement), Element.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$3(marker.element);\n var viewportBounds = getBounds(domGlobals.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 elementIntoView = function (editor, element, alignToTop) {\n var scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n var rangeIntoView = function (editor, rng, alignToTop) {\n var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n var ScrollIntoView = {\n scrollElementIntoView: elementIntoView,\n scrollRangeIntoView: rangeIntoView\n };\n\n var hasCeProperty = function (node) {\n return NodeType.isContentEditableTrue(node) || NodeType.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 element, rng, rects;\n element = doc.elementFromPoint(clientX, clientY);\n 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 NodeType.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 var CaretRangeFromPoint = { fromPoint: fromPoint$1 };\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 var EventProcessRanges = { processRanges: processRanges };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\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(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents$1 = function (start, root) {\n return parentsUntil$1(start, root, constant(false));\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents$1(start, root));\n };\n var Parents = {\n parentsUntil: parentsUntil$1,\n parents: parents$1,\n parentsAndSelf: parentsAndSelf\n };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (NodeType.isText(sc)) {\n return so === 0 ? Option.some(Element.fromDom(sc)) : Option.none();\n } else {\n return Option.from(sc.childNodes[so]).map(Element.fromDom);\n }\n };\n var getEndNode = function (rng) {\n var ec = rng.endContainer, eo = rng.endOffset;\n if (NodeType.isText(ec)) {\n return eo === ec.data.length ? Option.some(Element.fromDom(ec)) : Option.none();\n } else {\n return Option.from(ec.childNodes[eo - 1]).map(Element.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, startNode));\n var end = find(getLastChildren(elm), curry(eq, 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 TreeWalker(node, root);\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n do {\n if (node.nodeType === 3 && 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 (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(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\n var tableModel = Immutable('element', 'width', 'rows');\n var tableRow = Immutable('element', 'cells');\n var cellPosition = Immutable('x', 'y');\n var getSpan = function (td, key) {\n var value = parseInt(get$3(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(cells[x], element)) {\n return Option.some(cellPosition(x, y));\n }\n }\n }\n return Option.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 = Element.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 var SimpleTableModel = {\n fromDom: fromDom$1,\n toDom: toDom,\n subsection: subsection\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 ? [Element.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n var MultiRange = {\n getRanges: getRanges,\n getSelectedNodes: getSelectedNodes,\n hasMultipleRanges: hasMultipleRanges\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter(MultiRange.getSelectedNodes(ranges), isTableCell);\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 var rangeCells = getCellsFromRanges(ranges);\n return selectedCells.length > 0 ? selectedCells : rangeCells;\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody()));\n };\n var TableCellSelection = {\n getCellsFromRanges: getCellsFromRanges,\n getCellsFromElement: getCellsFromElement,\n getCellsFromElementOrRanges: getCellsFromElementOrRanges,\n getCellsFromEditor: getCellsFromEditor\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 return [\n Element.fromTag('li'),\n Element.fromTag(name(listCont))\n ];\n }).getOr([]);\n });\n };\n var wrap$2 = 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 = Element.fromDom(rng.commonAncestorContainer);\n var parents = 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$2(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n };\n var getParentTable = function (rootElm, cell) {\n return ancestor$1(cell, 'table', curry(eq, 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 = SimpleTableModel.fromDom(tableElm);\n return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n return fromElements([SimpleTableModel.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 = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n var FragmentReader = { read: read$1 };\n\n var getTextContent = function (editor) {\n return Option.from(editor.selection.getRng()).map(function (rng) {\n var bin = editor.dom.add(editor.getBody(), 'div', {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rng.cloneContents());\n var text = Zwsp.trim(bin.innerText);\n editor.dom.remove(bin);\n return text;\n }).getOr('');\n };\n var getHtmlContent = function (editor, args) {\n var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n var sel = editor.selection.getSel();\n var fragment;\n var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));\n fragment = args.contextual ? FragmentReader.read(Element.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 getContent$1 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n args.get = true;\n args.format = args.format || 'html';\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 = getHtmlContent(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 var GetSelectionContent = { getContent: getContent$1 };\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 var RangeCompare = { isEq: isEq$1 };\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$2 = 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 TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (NodeType.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 (NodeType.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 && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n }\n var walker = new TreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Option.none();\n }\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n if (hasParentWithName(node, body, 'A') === false) {\n return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n }\n return Option.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Option.none();\n }\n lastInlineElement = node;\n }\n if (collapsed && lastInlineElement) {\n return Option.some(CaretPosition(lastInlineElement, 0));\n }\n return Option.none();\n };\n var normalizeEndPoint = function (dom, collapsed, start, rng) {\n var container, offset;\n var body = dom.getRoot();\n var node, nonEmptyElementsMap;\n var directionLeft, isAfterNode, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;\n nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer(container)) {\n return Option.none();\n }\n if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (NodeType.isDocument(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 Option.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$3(node)) {\n return Option.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 = NodeType.isText(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$3(container)) {\n return Option.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\n return Option.none();\n }\n if (container.hasChildNodes() && isTable$3(container) === false) {\n node = container;\n var walker = new TreeWalker(container, body);\n do {\n if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {\n normalized = false;\n break;\n }\n if (NodeType.isText(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$2(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 (NodeType.isText(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 (NodeType.isElement(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && NodeType.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 && NodeType.isText(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 ? Option.some(CaretPosition(container, offset)) : Option.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 RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);\n };\n var NormalizeRange = { normalize: normalize };\n\n var prependData = function (target, data) {\n target.insertData(0, data);\n };\n var removeEmpty = function (text) {\n if (text.dom().length === 0) {\n remove(text);\n return Option.none();\n }\n return Option.some(text);\n };\n var rngSetContent = function (rng, fragment) {\n var firstChild = Option.from(fragment.firstChild).map(Element.fromDom);\n var lastChild = Option.from(fragment.lastChild).map(Element.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 lift2(prevText, firstChild.filter(isText), function (prev, start) {\n prependData(start.dom(), prev.dom().data);\n remove(prev);\n });\n lift2(nextText, lastChild.filter(isText), function (next, end) {\n var oldLength = end.dom().length;\n end.dom().appendData(next.dom().data);\n rng.setEnd(end.dom(), oldLength);\n remove(next);\n });\n rng.collapse(false);\n };\n var setupArgs = function (args, content) {\n args = args || { format: 'html' };\n args.set = true;\n args.selection = true;\n args.content = content;\n return args;\n };\n var setContent$1 = function (editor, content, args) {\n args = setupArgs(args, content);\n if (!args.no_events) {\n args = editor.fire('BeforeSetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', args);\n return;\n }\n }\n var rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(args.content));\n editor.selection.setRng(rng);\n ScrollIntoView.scrollRangeIntoView(editor, rng);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n };\n var SetSelectionContent = { setContent: setContent$1 };\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 Option.from(container).map(Element.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) ? Option.some(elm) : parent(elm);\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 && NodeType.isText(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, startOffset, endOffset;\n if (!rng) {\n return root;\n }\n startContainer = rng.startContainer;\n endContainer = rng.endContainer;\n startOffset = rng.startOffset;\n 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, root;\n var selectedBlocks = [];\n 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 TreeWalker(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 Option.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 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(Element.fromDom(node.ownerDocument), Element.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 Selection$1 = function (dom, win, serializer, editor) {\n var bookmarkManager;\n var controlSelection;\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 (!node) {\n moveEndPoint$1(dom, rng, editor.getBody(), true);\n setRng(rng);\n } else {\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n setRng(rng);\n collapse(false);\n }\n };\n var getContent = function (args) {\n return GetSelectionContent.getContent(editor, args);\n };\n var setContent = function (content, args) {\n return SetSelectionContent.setContent(editor, content, args);\n };\n var getStart = function (real) {\n return getStart$2(editor.getBody(), getRng(), real);\n };\n var getEnd$1 = function (real) {\n return getEnd(editor.getBody(), getRng(), 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(), 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();\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 = function () {\n var selection, rng, elm, doc;\n var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n if (!win) {\n return null;\n }\n doc = win.document;\n if (typeof doc === 'undefined' || doc === null) {\n return null;\n }\n if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {\n var bookmark = SelectionBookmark.getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(function (r) {\n return EventProcessRanges.processRanges(editor, [r])[0];\n }).getOr(doc.createRange());\n }\n }\n try {\n if ((selection = getSel()) && !NodeType.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 }\n } catch (ex) {\n }\n rng = EventProcessRanges.processRanges(editor, [rng])[0];\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 sel, node, evt;\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 sel = getSel();\n 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());\n };\n var getSelectedBlocks$1 = function (startElm, endElm) {\n return getSelectedBlocks(dom, getRng(), startElm, endElm);\n };\n var isForward = function () {\n var sel = getSel();\n var anchorRange, focusRange;\n if (!sel || !sel.anchorNode || !sel.focusNode) {\n return true;\n }\n anchorRange = dom.createRng();\n anchorRange.setStart(sel.anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange = dom.createRng();\n focusRange.setStart(sel.focusNode, sel.focusOffset);\n focusRange.collapse(true);\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n var normalize = function () {\n var rng = getRng();\n var sel = getSel();\n if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n var normRng = NormalizeRange.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 ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);\n };\n var placeCaretAt = function (clientX, clientY) {\n return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));\n };\n var getBoundingClientRect = function () {\n var rng = getRng();\n return rng.collapsed ? CaretPosition$1.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,\n getStart: getStart,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize: normalize,\n selectorChanged: selectorChanged,\n selectorChangedWithUnbind: selectorChangedWithUnbind,\n getScrollContainer: getScrollContainer,\n scrollIntoView: scrollIntoView,\n placeCaretAt: placeCaretAt,\n getBoundingClientRect: getBoundingClientRect,\n destroy: destroy\n };\n bookmarkManager = BookmarkManager$1(exports);\n 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 var LegacyFilter = { register: register$1 };\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 Node$1('br', 1)).shortEnded = true;\n } else {\n node.empty().append(new Node$1('#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$1 = 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 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.getNonEmptyElements();\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 break;\n }\n if (prevName === 'br') {\n node = null;\n break;\n }\n }\n prev = prev.prev;\n }\n if (node) {\n node.remove();\n if (isEmpty$1(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 Node$1('#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, node;\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 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 Node$1('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 };\n\n var makeMap$4 = Tools.makeMap, each$8 = 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 nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;\n nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\n nonEmptyElements = schema.getNonEmptyElements();\n whitespaceElements = schema.getWhiteSpaceElements();\n textBlockElements = schema.getTextBlockElements();\n 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$1(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$1(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 === 'ul')) {\n sibling.append(node);\n continue;\n }\n sibling = node.next;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n node.wrap(filterNode(new Node$1('ul', 1)));\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n node.wrap(filterNode(new Node$1('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$8(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$8(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 parser, nodes, i, l, fi, fl, list, name;\n var blockElements;\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 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 Node$1(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 parser = SaxParser$1({\n validate: validate,\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;\n newNode = node.append(createNode('#doctype', 10));\n newNode.value = text;\n removeWhitespaceBefore(node);\n },\n start: function (name, attrs, empty) {\n var newNode, attrFiltersLen, elementRule, attrName, parent;\n 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, elementRule, text, sibling, tempNode;\n 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$1(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$1(schema, nonEmptyElements, whiteSpaceElements, node))) {\n paddEmptyNode(settings, args, blockElements, node);\n }\n node = node.parent;\n }\n }\n }, schema);\n var rootNode = node = new Node$1(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 LegacyFilter.register(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 = Option.from(node.firstChild).exists(function (firstChild) {\n return !Zwsp.isZwsp(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 brNode1, brNode2;\n var isBr = function (node) {\n return node && node.name === 'br';\n };\n brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n var DomSerializerFilters = {\n register: register$3,\n trimTrailingBr: trimTrailingBr\n };\n\n var preProcess = function (editor, node, args) {\n var impl, doc, oldDoc;\n var dom = editor.dom;\n node = node.cloneNode(true);\n impl = domGlobals.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 var DomSerializerPreProcess = { process: process };\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 = 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 = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(Element.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 DomSerializerFilters.trimTrailingBr(rootNode);\n return rootNode;\n };\n var serializeNode = function (settings, schema, node) {\n var htmlSerializer = Serializer(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(editor, args, content);\n };\n var DomSerializer = function (settings, editor) {\n var tempAttrs = ['data-mce-selected'];\n var dom = editor && editor.dom ? editor.dom : DOMUtils$1.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 DomSerializerFilters.register(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 = DomSerializerPreProcess.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: function () {\n return tempAttrs;\n },\n getNodeFilters: htmlParser.getNodeFilters,\n getAttributeFilters: htmlParser.getAttributeFilters\n };\n };\n\n var Serializer$1 = function (settings, editor) {\n var domSerializer = DomSerializer(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 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 = new domGlobals.XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n rejectWithError();\n }\n };\n xhr.onerror = rejectWithError;\n xhr.send();\n } catch (ex) {\n rejectWithError();\n }\n });\n };\n var parseDataUri = function (uri) {\n var type, matches;\n var uriParts = decodeURIComponent(uri).split(',');\n 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 dataUriToBlob = function (uri) {\n return new promiseObj(function (resolve) {\n var str, arr, i;\n var uriParts = parseDataUri(uri);\n try {\n str = domGlobals.atob(uriParts.data);\n } catch (e) {\n resolve(new domGlobals.Blob([]));\n return;\n }\n arr = new Uint8Array(str.length);\n for (i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n resolve(new domGlobals.Blob([arr], { type: uriParts.type }));\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 domGlobals.FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n var Conversions = {\n uriToBlob: uriToBlob,\n blobToDataUri: blobToDataUri,\n parseDataUri: parseDataUri\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 Conversions.uriToBlob(img.src).then(function (blob) {\n Conversions.blobToDataUri(blob).then(function (dataUri) {\n base64 = Conversions.parseDataUri(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 base64 = Conversions.parseDataUri(img.src).data;\n blobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.base64() === base64;\n });\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n Conversions.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 function ImageScanner(uploadStatus, blobCache) {\n var cachedPromises = {};\n var findAll = function (elm, predicate) {\n var images;\n if (!predicate) {\n predicate = constant(true);\n }\n 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]) {\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 function Uploader(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, formData;\n xhr = new domGlobals.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 var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n 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 formData = new domGlobals.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, error) {\n return {\n url: '',\n blobInfo: blobInfo,\n status: false,\n error: error\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 var noop = function () {\n };\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) {\n closeNotification_1();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n resolve(handlerFailure(blobInfo, error));\n };\n progress = function (percent) {\n if (percent < 0 || percent > 100) {\n return;\n }\n if (!notification) {\n notification = openNotification();\n }\n notification.progressBar.value(percent);\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 function UploadStatus () {\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 var Uuid = { uuid: uuid };\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 };\n return mimes[mime.toLowerCase()] || 'dat';\n };\n var create = function (o, blob, base64, filename) {\n if (isString(o)) {\n var id = o;\n return toBlobInfo({\n id: id,\n name: 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 var id, name;\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 id = o.id || Uuid.uuid('blobid');\n name = o.name || id;\n return {\n id: constant(id),\n name: constant(name),\n filename: constant(name + '.' + mimeToExt(o.blob.type)),\n blob: constant(o.blob),\n base64: constant(o.base64),\n blobUri: constant(o.blobUri || domGlobals.URL.createObjectURL(o.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 get = function (id) {\n return findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.id() === id;\n });\n };\n var findFirst = function (predicate) {\n return filter(cache, predicate)[0];\n };\n var getByUri = function (blobUri) {\n return findFirst(function (blobInfo) {\n return blobInfo.blobUri() === blobUri;\n });\n };\n var removeByUri = function (blobUri) {\n cache = filter(cache, function (blobInfo) {\n if (blobInfo.blobUri() === blobUri) {\n domGlobals.URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n var destroy = function () {\n each(cache, function (cachedBlobInfo) {\n domGlobals.URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create: create,\n add: add,\n get: get,\n getByUri: getByUri,\n findFirst: findFirst,\n removeByUri: removeByUri,\n destroy: destroy\n };\n };\n\n var EditorUpload = function (editor) {\n var blobCache = BlobCache();\n var uploader, imageScanner;\n var uploadStatus = UploadStatus();\n var urlFilters = [];\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 content = replaceString(content, 'src=\"' + targetUrl + '\"', 'src=\"' + replacementUrl + '\"');\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 openNotification = function () {\n return editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n };\n var replaceImageUri = function (image, resultUri) {\n blobCache.removeByUri(image.src);\n replaceUrlInUndoStack(image.src, resultUri);\n editor.$(image).attr({\n 'src': Settings.shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n 'data-mce-src': editor.convertURL(resultUri, 'src')\n });\n };\n var uploadImages = function (callback) {\n if (!uploader) {\n uploader = Uploader(uploadStatus, {\n url: Settings.getImageUploadUrl(editor),\n basePath: Settings.getImageUploadBasePath(editor),\n credentials: Settings.getImagesUploadCredentials(editor),\n handler: Settings.getImagesUploadHandler(editor)\n });\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).then(aliveGuard(function (result) {\n var filteredResult = map(result, function (uploadInfo, index) {\n var image = imageInfos[index].image;\n if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {\n replaceImageUri(image, uploadInfo.url);\n } else if (uploadInfo.error) {\n ErrorReporter.uploadError(editor, uploadInfo.error);\n }\n return {\n element: image,\n status: uploadInfo.status\n };\n });\n if (callback) {\n callback(filteredResult);\n }\n return filteredResult;\n }));\n }));\n };\n var uploadImagesAuto = function (callback) {\n if (Settings.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 = Settings.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 ErrorReporter.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 (Settings.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') {\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 getLastChildren$1 = function (elm) {\n var children = [];\n var rawNode = elm.dom();\n while (rawNode) {\n children.push(Element.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, Element.fromHtml('
    '));\n };\n var isPaddingContents = function (elm) {\n return isText(elm) ? get$7(elm) === nbsp : isBr$1(elm);\n };\n var isPaddedElement = function (elm) {\n return filter(children(elm), isPaddingContents).length === 1;\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 var PaddingBr = {\n removeTrailingBr: removeTrailingBr,\n fillWithPaddingBr: fillWithPaddingBr,\n isPaddedElement: isPaddedElement,\n trimBlockTrailingBr: trimBlockTrailingBr\n };\n\n var isEq$2 = isEq;\n var matchesUnInheritedFormatSelector = function (ed, node, name) {\n var formatList = ed.formatter.get(name);\n if (formatList) {\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) {\n return true;\n }\n }\n }\n return false;\n };\n var matchParents = function (editor, node, name, vars) {\n var root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n node = editor.dom.getParent(node, function (node) {\n if (matchesUnInheritedFormatSelector(editor, node, name)) {\n return true;\n }\n return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n });\n return matchNode(editor, node, name, vars);\n };\n var matchName = function (dom, node, format) {\n if (isEq$2(node, format.inline)) {\n return true;\n }\n if (isEq$2(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return node.nodeType === 1 && dom.is(node, format.selector);\n }\n };\n var matchItems = function (dom, node, format, itemName, similar, vars) {\n var key, value;\n var items = format[itemName];\n var i;\n if (format.onmatch) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (typeof items.length === 'undefined') {\n for (key in items) {\n if (items.hasOwnProperty(key)) {\n if (itemName === 'attributes') {\n value = dom.getAttrib(node, key);\n } else {\n value = getStyle(dom, node, key);\n }\n if (similar && !value && !format.exact) {\n return;\n }\n if ((!similar || format.exact) && !isEq$2(value, normalizeStyleValue(dom, replaceVars(items[key], vars), key))) {\n return;\n }\n }\n }\n } else {\n for (i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return format;\n }\n }\n }\n }\n return format;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var format, i, x, classes;\n var dom = ed.dom;\n if (formatList && node) {\n for (i = 0; i < formatList.length; i++) {\n format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n if (classes = format.classes) {\n for (x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, classes[x])) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n };\n var match = function (editor, name, vars, node) {\n var startNode;\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 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 startElement;\n var matchedFormatNames = [];\n var checkedMap = {};\n startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n var i, name;\n for (i = 0; i < names.length; i++) {\n name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n 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\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 && NodeType.isText(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 (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (NodeType.isText(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 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 whitespace = node.data.slice(offset, offset + count);\n var isEndOfContent = offset + count >= node.data.length;\n var isStartOfContent = offset === 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) {\n var whitespaceOffset = rTrim(prevNode.data).length;\n prevNode.appendData(nextNode.data);\n remove(Element.fromDom(nextNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(prevNode, whitespaceOffset);\n }\n return prevNode;\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$1(scope, selector, isRoot).isSome();\n };\n\n var hasWhitespacePreserveParent = function (rootNode, node) {\n var rootElement = Element.fromDom(rootNode);\n var startNode = Element.fromDom(node);\n return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\n };\n var isWhitespace = function (rootNode, node) {\n return NodeType.isText(node) && /^[ \\t\\r\\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;\n };\n var isNamedAnchor = function (node) {\n return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');\n };\n var isContent$1 = function (rootNode, node) {\n return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);\n };\n var isBookmark = NodeType.hasAttribute('data-mce-bookmark');\n var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');\n var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode, skipBogus) {\n var node, brCount = 0;\n if (isContent$1(targetNode, targetNode)) {\n return false;\n } else {\n node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n var walker = new TreeWalker(node, targetNode);\n do {\n if (skipBogus) {\n if (isBogusAll$1(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBogus$2(node)) {\n node = walker.next();\n continue;\n }\n }\n if (NodeType.isBr(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent$1(targetNode, node)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty$2 = function (elm, skipBogus) {\n if (skipBogus === void 0) {\n skipBogus = true;\n }\n return isEmptyNode(elm.dom(), skipBogus);\n };\n var Empty = { isEmpty: isEmpty$2 };\n\n var needsReposition = function (pos, elm) {\n var container = pos.container();\n var offset = pos.offset();\n return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();\n };\n var reposition = function (elm, pos) {\n return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;\n };\n var beforeOrStartOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);\n };\n var afterOrEndOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);\n };\n var getPreviousSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.previousSibling)) {\n return Option.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();\n }\n };\n var getNextSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.nextSibling)) {\n return Option.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();\n }\n };\n var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));\n }, Option.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {\n return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));\n }, Option.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 && editor.schema.getBlockElements().hasOwnProperty(name(elm));\n };\n var paddEmptyBlock = function (elm) {\n if (Empty.isEmpty(elm)) {\n var br = Element.fromHtml('
    ');\n empty(elm);\n append(elm, br);\n return Option.some(CaretPosition$1.before(br.dom()));\n } else {\n return Option.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$1(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, Option.some(paddPos));\n }\n });\n }\n };\n var DeleteElement = { deleteElement: deleteElement };\n\n var ZWSP$1 = Zwsp.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 TreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (NodeType.isText(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var caretContainer = Element.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, Element.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.deleteElement(editor, false, Element.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var textNode = trimZwspFromCaretContainer(node);\n if (rng.startContainer === textNode && rng.startOffset > 0) {\n rng.setStart(textNode, rng.startOffset - 1);\n }\n if (rng.endContainer === textNode && rng.endOffset > 0) {\n rng.setEnd(textNode, rng.endOffset - 1);\n }\n dom.remove(node, true);\n if (block && dom.isEmpty(block)) {\n PaddingBr.fillWithPaddingBr(Element.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 PaddingBr.removeTrailingBr(Element.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 applyCaretFormat = function (editor, name, vars) {\n var rng, caretContainer, textNode, offset, bookmark, container, text;\n var selection = editor.selection;\n rng = selection.getRng();\n offset = rng.startOffset;\n container = rng.startContainer;\n 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 bookmark = selection.getBookmark();\n rng.collapse(true);\n rng = expandRng(editor, rng, 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 rng.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, selection = editor.selection;\n var container, offset, bookmark;\n var hasContentAfter, node, formatNode;\n var parents = [], rng = selection.getRng();\n var caretContainer;\n container = rng.startContainer;\n 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 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);\n selection.moveToBookmark(bookmark);\n } else {\n caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n var newCaretContainer = createCaretContainer(false).dom();\n var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);\n if (caretContainer) {\n insertCaretContainerNode(editor, newCaretContainer, caretContainer);\n } else {\n insertCaretContainerNode(editor, newCaretContainer, formatNode);\n }\n removeCaretContainerNode(editor, caretContainer, false);\n selection.setCursorLocation(caretNode, 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(Element.fromDom(targetNode), caretContainer);\n remove(Element.fromDom(targetNode));\n return CaretPosition$1(innerMost, 0);\n };\n var isFormatElement = function (editor, element) {\n var inlineElements = editor.schema.getTextInlineElements();\n return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());\n };\n\n var postProcessHooks = {}, filter$4 = ArrUtils.filter, each$9 = ArrUtils.each;\n var addPostProcessHook = function (name, hook) {\n var hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = hooks = [];\n }\n postProcessHooks[name].push(hook);\n };\n var postProcess$1 = function (name, editor) {\n each$9(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var isPre, blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('

    ').append(pre2.childNodes);\n };\n isPre = NodeType.matchNodeNames(['pre']);\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$9(filter$4(filter$4(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n var each$a = Tools.each;\n var ElementUtils = function (dom) {\n this.compare = function (node1, node2) {\n if (node1.nodeName !== node2.nodeName) {\n return false;\n }\n var getAttribs = function (node) {\n var attribs = {};\n each$a(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 !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);\n };\n };\n\n var MCE_ATTR_RE = /^(src|href|style)$/;\n var each$b = Tools.each;\n var isEq$3 = isEq;\n var isTableCell$3 = function (node) {\n return /^(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 (NodeType.isElement(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 (NodeType.isText(container) && start && offset >= container.nodeValue.length) {\n container = new TreeWalker(container, ed.getBody()).next() || container;\n }\n if (NodeType.isText(container) && !start && offset === 0) {\n container = new TreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n var wrap$3 = 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 = Element.fromDom(node);\n var wrapper = Element.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 NodeType.isElement(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$4 = 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 = Settings.getForcedRootBlock(ed);\n if (format.block) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find$4(dom, node, false) && !find$4(dom, node.firstChild, true, true)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find$4(dom, node, true) && !find$4(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$b(Tools.grep(node.childNodes), function (node) {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$3(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 removeFormat = 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 false;\n }\n var elm = node;\n if (format.remove !== 'all') {\n each$b(format.styles, function (value, name) {\n value = normalizeStyleValue(dom, replaceVars(value, vars), name);\n if (typeof name === 'number') {\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$b(format.attributes, function (value, name) {\n var valueOut;\n value = replaceVars(value, vars);\n if (typeof name === 'number') {\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$b(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, name, valueOut);\n return;\n }\n }\n }\n if (name === 'class') {\n elm.removeAttribute('className');\n }\n if (MCE_ATTR_RE.test(name)) {\n elm.removeAttribute('data-mce-' + name);\n }\n elm.removeAttribute(name);\n }\n });\n each$b(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 false;\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode$1(ed, elm, format);\n return true;\n }\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each$b(getParents$1(editor.dom, container.parentNode).reverse(), function (parent) {\n var format;\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n 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 wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n var parent, clone, lastClone, firstClone, i, formatRootParent;\n var dom = editor.dom;\n if (formatRoot) {\n formatRootParent = formatRoot.parentNode;\n for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n clone = dom.clone(parent, false);\n for (i = 0; i < formatList.length; i++) {\n if (removeFormat(editor, formatList[i], vars, clone, clone)) {\n clone = 0;\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 }\n }\n return container;\n };\n var remove$7 = function (ed, name, vars, node, similar) {\n var formatList = ed.formatter.get(name), format = formatList[0];\n var bookmark, rng, 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 Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');\n };\n var process = function (node) {\n var children, i, l, lastContentEditable, hasContentEditableState;\n if (NodeType.isElement(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n children = Tools.grep(node.childNodes);\n if (contentEditable && !hasContentEditableState) {\n for (i = 0, l = formatList.length; i < l; 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 (i = 0, l = children.length; i < l; 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 (NodeType.isText(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 commonAncestorContainer = rng.commonAncestorContainer;\n var expandedRng = expandRng(ed, rng, formatList, true);\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 if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {\n if (startContainer.nodeName === 'TR') {\n startContainer = startContainer.firstChild.firstChild || startContainer;\n } else {\n startContainer = startContainer.firstChild || startContainer;\n }\n }\n if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$3(endContainer) && endContainer.firstChild) {\n endContainer = endContainer.firstChild || endContainer;\n }\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n var marker = Option.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 = Option.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$3(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$3(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 RangeWalk.walk(dom, newRng, function (nodes) {\n each(nodes, function (n) {\n if (!Bookmarks.isBookmarkNode(n) && !Bookmarks.isBookmarkNode(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 RangeWalk.walk(dom, expandedRng, function (nodes) {\n each$b(nodes, function (node) {\n process(node);\n if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && getTextDecoration(dom, node.parentNode) === 'underline') {\n removeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: 'underline' }\n }, null, node);\n }\n });\n });\n };\n if (node) {\n if (isNode(node)) {\n 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, l = formatList.length; i < l; 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 || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n removeRngStyle(selection.getRng());\n selection.moveToBookmark(bookmark);\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$c = Tools.each;\n var isElementNode = function (node) {\n return NodeType.isElement(node) && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var findElementSibling = function (node, siblingName) {\n var sibling;\n for (sibling = node; sibling; sibling = sibling[siblingName]) {\n if (NodeType.isText(sibling) && sibling.nodeValue.length !== 0) {\n return node;\n }\n if (NodeType.isElement(sibling) && !Bookmarks.isBookmarkNode(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n var mergeSiblingsNodes = function (dom, prev, next) {\n var sibling, tmpSibling;\n var elementUtils = new 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 processChildElements = function (node, filter, process) {\n each$c(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 hasStyle = function (dom, name) {\n return curry(function (name, node) {\n return !!(node && getStyle(dom, node, name));\n }, name);\n };\n var applyStyle = function (dom, name, value) {\n return curry(function (name, value, node) {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n }, name, value);\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 processTextDecorationsAndColor = function (dom, node) {\n if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\n var textDecoration = getTextDecoration(dom, node.parentNode);\n if (dom.getStyle(node, 'color') && textDecoration) {\n dom.setStyle(node, 'text-decoration', textDecoration);\n } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {\n dom.setStyle(node, 'text-decoration', null);\n }\n }\n };\n var mergeTextDecorationsAndColor = function (dom, format, vars, node) {\n if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n Tools.walk(node, curry(processTextDecorationsAndColor, dom), 'childNodes');\n processTextDecorationsAndColor(dom, 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 mergeSiblings = function (dom, format, vars, node) {\n if (node && format.merge_siblings !== false) {\n node = mergeSiblingsNodes(dom, getNonWhiteSpaceSibling(node), node);\n node = mergeSiblingsNodes(dom, node, getNonWhiteSpaceSibling(node, 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$c(dom.select(selector, node), function (node) {\n if (isElementNode(node)) {\n each$c(format.styles, function (value, name) {\n dom.setStyle(node, name, '');\n });\n }\n });\n }\n };\n var mergeWithChildren = function (editor, formatList, vars, node) {\n each$c(formatList, function (format) {\n each$c(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 createRange$1 = function (sc, so, ec, eo) {\n var rng = domGlobals.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$1.fromRangeStart(rng);\n var endPos = CaretPosition$1.fromRangeEnd(rng);\n var rootNode = rng.commonAncestorContainer;\n return CaretFinder.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 var RangeNormalizer = { normalize: normalize$2 };\n\n var each$d = Tools.each;\n var isElementNode$1 = function (node) {\n return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var applyFormat = function (ed, name, vars, node) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var bookmark, rng;\n var isCollapsed = !node && ed.selection.isCollapsed();\n var dom = ed.dom, 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$d(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$d(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$d(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 (!format.selector) {\n return false;\n }\n each$d(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 wrapName, wrapElm, contentEditable = true;\n wrapName = format.inline || format.block;\n wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n RangeWalk.walk(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 (NodeType.isElement(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (isEq(nodeName, 'br')) {\n currentWrapElm = 0;\n if (format.block) {\n dom.remove(node);\n }\n return;\n }\n if (format.wrapper && matchNode(ed, node, name, vars)) {\n currentWrapElm = 0;\n return;\n }\n if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && isTextBlock$1(ed, nodeName) && isValid(ed, parentName, wrapName)) {\n node = dom.rename(node, wrapName);\n setElementFormat(node);\n newWrappers.push(node);\n currentWrapElm = 0;\n return;\n }\n if (format.selector) {\n var found = applyNodeStyle(formatList, node);\n if (!format.inline || found) {\n currentWrapElm = 0;\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) && (!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 = 0;\n each$d(Tools.grep(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = 0;\n }\n };\n each$d(nodes, process);\n });\n if (format.links === true) {\n each$d(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$d(Tools.grep(node.childNodes), process);\n };\n process(node);\n });\n }\n each$d(newWrappers, function (node) {\n var childCount;\n var getChildCount = function (node) {\n var count = 0;\n each$d(node.childNodes, function (node) {\n if (!isEmptyTextNode(node) && !Bookmarks.isBookmarkNode(node)) {\n count++;\n }\n });\n return count;\n };\n var getChildElementNode = function (root) {\n var child = false;\n each$d(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 child, clone;\n child = getChildElementNode(node);\n if (child && !Bookmarks.isBookmarkNode(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 childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, true);\n return;\n }\n if (format.inline || 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 if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {\n setElementFormat(node, formatList[i]);\n return;\n }\n }\n return;\n }\n if (format) {\n if (node) {\n if (isNode(node)) {\n if (!applyNodeStyle(formatList, node)) {\n 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 || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n var curSelNode = ed.selection.getNode();\n if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n applyFormat(ed, formatList[0].defaultBlock);\n }\n ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n applyRngStyle(dom, expandRng(ed, selection.getRng(), formatList));\n selection.moveToBookmark(bookmark);\n moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n postProcess$1(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 formatChanged = 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 get$9 = function (dom) {\n var formats = {\n valigntop: [{\n selector: 'td,th',\n styles: { verticalAlign: 'top' }\n }],\n valignmiddle: [{\n selector: 'td,th',\n styles: { verticalAlign: 'middle' }\n }],\n valignbottom: [{\n selector: 'td,th',\n styles: { verticalAlign: 'bottom' }\n }],\n alignleft: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-left',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false,\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n }\n ],\n alignright: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-right',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'justify' },\n inherit: false,\n defaultBlock: 'div',\n preview: 'font-family font-size'\n }],\n bold: [\n {\n inline: 'strong',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all'\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all'\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all'\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 }\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 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 () {\n return true;\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,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\s/), function (name) {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n var DefaultFormats = { get: get$9 };\n\n function FormatRegistry(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(DefaultFormats.get(editor.dom));\n register(editor.settings.formats);\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$1.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 var elm;\n item = typeof sItem === 'string' ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n 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, parentRequired;\n var ancestor = ancestry.length > 0 && ancestry[0];\n var ancestorName = ancestor && ancestor.name;\n 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, previewElm, items;\n var previewCss = '', parentFontSize, previewStyles;\n previewStyles = editor.settings.preview_styles;\n if (previewStyles === false) {\n return '';\n }\n if (typeof previewStyles !== 'string') {\n previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';\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 previewStyles = format.preview;\n if (previewStyles === false) {\n return '';\n }\n }\n name = format.block || format.inline || 'span';\n 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 previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$e(format.styles, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setStyle(previewElm, name, value);\n }\n });\n each$e(format.attributes, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setAttrib(previewElm, name, value);\n }\n });\n each$e(format.classes, function (value) {\n value = removeVars(value);\n if (!dom.hasClass(previewElm, value)) {\n dom.addClass(previewElm, value);\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 toggle = function (editor, formats, name, vars, node) {\n var fmt = formats.get(name);\n if (match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n remove$7(editor, name, vars, node);\n } else {\n applyFormat(editor, name, vars, node);\n }\n };\n\n var setup$5 = 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 var FormatShortcuts = { setup: setup$5 };\n\n var Formatter = function (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n FormatShortcuts.setup(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: curry(applyFormat, editor),\n remove: curry(remove$7, editor),\n toggle: curry(toggle, editor, formats),\n match: curry(match, editor),\n matchAll: curry(matchAll, editor),\n matchNode: curry(matchNode, editor),\n canApply: curry(canApply, editor),\n formatChanged: curry(formatChanged, editor, formatChangeState),\n getCssText: curry(getCssText, editor)\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 var Diff = {\n KEEP: KEEP,\n DELETE: DELETE,\n INSERT: INSERT,\n diff: diff\n };\n\n var getOuterHtml = function (elm) {\n if (NodeType.isElement(elm)) {\n return elm.outerHTML;\n } else if (NodeType.isText(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (NodeType.isComment(elm)) {\n return '';\n }\n return '';\n };\n var createFragment$1 = function (html) {\n var frag, node, container;\n container = domGlobals.document.createElement('div');\n frag = domGlobals.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] === Diff.KEEP) {\n index++;\n } else if (action[0] === Diff.INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === Diff.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.diff(currentFragments, fragments), elm);\n return elm;\n };\n var Fragments = {\n read: read$2,\n write: write\n };\n\n var undoLevelDocument = Cell(Option.none());\n var lazyTempDocument = function () {\n return undoLevelDocument.get().getOrThunk(function () {\n var doc = domGlobals.document.implementation.createHTMLDocument('undo');\n undoLevelDocument.set(Option.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, content, trimmedFragments;\n fragments = Fragments.read(editor.getBody());\n trimmedFragments = bind(fragments, function (html) {\n var trimmed = TrimHtml.trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n 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 Fragments.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 = Element.fromTag('body', lazyTempDocument());\n set$1(elm, getLevelContent(level));\n each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);\n return get$6(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 var Levels = {\n createFragmentedLevel: createFragmentedLevel,\n createCompleteLevel: createCompleteLevel,\n createFromEditor: createFromEditor,\n applyToEditor: applyToEditor,\n isEq: isEq$4\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(Option.some(GetBookmark.getUndoBookmark(editor.selection)));\n }\n };\n var addUndoLevel = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n var settings = editor.settings;\n var currentLevel = Levels.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 && Levels.isEq(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 if (settings.custom_undo_redo_levels) {\n if (undoManager.data.length > settings.custom_undo_redo_levels) {\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 = GetBookmark.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 editor.fire('AddUndo', args);\n if (index.get() > 0) {\n editor.setDirty(true);\n editor.fire('change', 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 Levels.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 Levels.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 Levels.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] && !Levels.isEq(Levels.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 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;\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;\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 && Levels.isEq(Levels.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 editor.on('input', function (e) {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(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(Option.none());\n var locks = Cell(0);\n var index = Cell(0);\n var undoManager = {\n data: [],\n typing: false,\n beforeChange: function () {\n beforeChange(editor, locks, beforeBookmark);\n },\n add: function (level, event) {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function () {\n return undo(editor, undoManager, locks, index);\n },\n redo: function () {\n return redo(editor, index, undoManager.data);\n },\n clear: function () {\n clear(editor, undoManager, index);\n },\n reset: function () {\n reset(undoManager);\n },\n hasUndo: function () {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: function () {\n return hasRedo(undoManager, index);\n },\n transact: function (callback) {\n return transact(undoManager, locks, callback);\n },\n ignore: function (callback) {\n ignore(locks, callback);\n },\n extra: function (callback1, callback2) {\n extra(editor, undoManager, index, callback1, callback2);\n }\n };\n registerEvents$1(editor, undoManager, locks);\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 (Empty.isEmpty(Element.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$6 = function (editor) {\n var dom = editor.dom;\n var rootBlock = Settings.getForcedRootBlock(editor);\n var placeholder = Settings.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('remove', function () {\n var body = editor.getBody();\n dom.setAttrib(body, placeholderAttr, null);\n dom.setAttrib(body, 'aria-placeholder', null);\n });\n });\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 Option.none();\n }\n return Option.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$7 = function (editor) {\n var startData = Cell(Option.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: constant(touch.clientX),\n y: constant(touch.clientY),\n target: constant(e.target)\n };\n debounceLongpress.throttle(e);\n longpressFired.set(false);\n startData.set(Option.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(Option.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 var TouchEvents = { setup: setup$7 };\n\n var isBlockElement = function (blockElements, node) {\n return blockElements.hasOwnProperty(node.nodeName);\n };\n var isValidTarget = function (blockElements, node) {\n if (NodeType.isText(node)) {\n return true;\n } else if (NodeType.isElement(node)) {\n return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);\n } else {\n return false;\n }\n };\n var hasBlockParent = function (blockElements, root, node) {\n return exists(Parents.parents(Element.fromDom(node), Element.fromDom(root)), function (elm) {\n return isBlockElement(blockElements, elm.dom());\n });\n };\n var shouldRemoveTextNode = function (blockElements, node) {\n if (NodeType.isText(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 rng;\n var startContainer, startOffset, endContainer, endOffset, rootBlockNode;\n var tempNode, wrapped, restoreSelection;\n var rootNodeName;\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n if (!node || !NodeType.isElement(node) || !forcedRootBlock) {\n return;\n }\n rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n return;\n }\n rng = selection.getRng();\n startContainer = rng.startContainer;\n startOffset = rng.startOffset;\n endContainer = rng.endContainer;\n endOffset = rng.endOffset;\n restoreSelection = EditorFocus.hasFocus(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, Settings.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$8 = function (editor) {\n if (Settings.getForcedRootBlock(editor)) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\n };\n var ForceBlocks = { setup: setup$8 };\n\n var isText$8 = NodeType.isText;\n var startsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[0] === Zwsp.ZWSP;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var createZwsp = function (node) {\n return node.ownerDocument.createTextNode(Zwsp.ZWSP);\n };\n var insertBefore = 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.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.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 = 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.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.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(node) : insertAfter(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 (NodeType.isText(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 CaretContainerRemove.remove(caret.get());\n var text = insertInlineBefore(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, text.length - 1));\n }, function (element) {\n return CaretFinder.firstPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition$1(text, 1);\n } else {\n return CaretPosition$1(caret.get(), 1);\n }\n });\n }, function (element) {\n return CaretFinder.lastPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition$1(text, text.length - 1);\n } else {\n return CaretPosition$1(caret.get(), caret.get().length - 1);\n }\n });\n }, function (element) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlineAfter(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, 1));\n });\n };\n var BoundaryCaret = { renderCaret: renderCaret };\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(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));\n };\n var isRtl$1 = function (element) {\n return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n };\n var findInlineParents = function (isInlineTarget, rootNode, pos) {\n return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n };\n var findRootInline = function (isInlineTarget, rootNode, pos) {\n var parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Option.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 (NodeType.isText(container.nextSibling)) {\n return CaretPosition$1(container.nextSibling, 0);\n } else {\n return CaretPosition$1.after(container);\n }\n } else {\n return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;\n }\n } else {\n if (isCaretContainerInline(container)) {\n if (NodeType.isText(container.previousSibling)) {\n return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);\n } else {\n return CaretPosition$1.before(container);\n }\n } else {\n return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;\n }\n }\n };\n var normalizeForwards = curry(normalizePosition, true);\n var normalizeBackwards = curry(normalizePosition, false);\n var InlineUtils = {\n isInlineTarget: isInlineTarget,\n findRootInline: findRootInline,\n isRtl: isRtl$1,\n isAtZwsp: isAtZwsp,\n normalizePosition: normalizePosition,\n normalizeForwards: normalizeForwards,\n normalizeBackwards: normalizeBackwards,\n hasSameParentBlock: hasSameParentBlock\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 Option.none();\n };\n var LazyEvaluator = { evaluateUntil: evaluateUntil };\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 = InlineUtils.normalizeForwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.before(inline);\n });\n }, Option.none);\n };\n var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n return getParentCaretContainer(rootNode, elm) === null;\n };\n var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n };\n var start = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var prevPos = CaretFinder.prevPosition(inline, nPos);\n return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();\n });\n };\n var end = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var nextPos = CaretFinder.nextPosition(inline, nPos);\n return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();\n });\n };\n var after$3 = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.after(inline);\n });\n }, Option.none);\n };\n var isValidLocation = function (location) {\n return InlineUtils.isRtl(getElement(location)) === false;\n };\n var readLocation = function (isInlineTarget, rootNode, pos) {\n var location = LazyEvaluator.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(InlineUtils.findRootInline(isInlineTarget, rootNode, from), InlineUtils.findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n if (fromInline !== toInline && InlineUtils.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(constant(true), function (fromLocation) {\n return !isEq$5(fromLocation, toLocation);\n });\n };\n var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n var from = InlineUtils.normalizePosition(forward, pos);\n var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.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(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);\n } else {\n return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));\n }\n };\n var findLocation = function (forward, isInlineTarget, rootNode, pos) {\n var from = InlineUtils.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 BoundaryLocation = {\n readLocation: readLocation,\n findLocation: findLocation,\n prevLocation: curry(findLocation, false),\n nextLocation: curry(findLocation, true),\n getElement: getElement,\n outside: outside,\n inside: inside\n };\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$1(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$1.fromRangeEnd(rng) : CaretPosition$1.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 var WordSelection = {\n hasSelectionModifyApi: hasSelectionModifyApi,\n moveByWord: moveByWord\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 isFeatureEnabled = function (editor) {\n return editor.settings.inline_boundaries !== false;\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 BoundaryCaret.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$1.fromRangeStart(editor.selection.getRng());\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var location = BoundaryLocation.findLocation(forward, isInlineTarget, 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 selectedInlines = filter(dom.select('*[data-mce-selected=\"inline-boundary\"]'), 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$1.fromRangeStart(editor.selection.getRng());\n if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {\n setCaretPosition(editor, CaretContainerRemove.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$1.fromRangeStart(editor.selection.getRng());\n BoundaryLocation.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 function () {\n return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\n };\n };\n var moveWord = function (forward, editor, caret) {\n return function () {\n return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;\n };\n };\n var setupSelectedState = function (editor) {\n var caret = Cell(null);\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.on('NodeChange', function (e) {\n if (isFeatureEnabled(editor) && !(Env.browser.isIE() && e.initial)) {\n toggleInlines(isInlineTarget, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);\n }\n });\n return caret;\n };\n var moveNextWord = curry(moveWord, true);\n var movePrevWord = curry(moveWord, false);\n var BoundarySelection = {\n move: move,\n moveNextWord: moveNextWord,\n movePrevWord: movePrevWord,\n setupSelectedState: setupSelectedState,\n setCaretPosition: setCaretPosition\n };\n\n var getNodeClientRects = function (node) {\n var toArrayWithNode = function (clientRects) {\n return map(clientRects, function (clientRect) {\n clientRect = clone$1(clientRect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (NodeType.isElement(node)) {\n return toArrayWithNode(node.getClientRects());\n }\n if (NodeType.isText(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 (node) {\n return foldl(node, function (result, node) {\n return result.concat(getNodeClientRects(node));\n }, []);\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 = 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, node;\n var result = [];\n var targetClientRect;\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, ArrUtils.last(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n };\n targetClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n node = caretPosition.getNode();\n add(node);\n findUntil(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, targetClientRect;\n var getClientRect = function (caretPosition) {\n if (direction === 1) {\n return ArrUtils.last(caretPosition.getClientRects());\n }\n return ArrUtils.last(caretPosition.getClientRects());\n };\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow;\n isAboveFn = isAbove;\n caretPosition = CaretPosition$1.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove;\n isAboveFn = isBelow;\n caretPosition = CaretPosition$1.before(node);\n }\n 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, ArrUtils.last(result))) {\n line++;\n }\n clientRect = clone$1(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$7 = NodeType.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 isInside = function (clientX, clientRect) {\n return clientX >= clientRect.left && clientX <= clientRect.right;\n };\n var findClosestClientRect = function (clientRects, clientX) {\n return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {\n var oldDistance, newDistance;\n oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n if (isInside(clientX, clientRect)) {\n return clientRect;\n }\n if (isInside(clientX, oldClientRect)) {\n return oldClientRect;\n }\n if (newDistance === oldDistance && isContentEditableFalse$7(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, node) {\n while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var findLineNodeRects = function (root, targetNodeRect) {\n var clientRects = [];\n var collect = function (checkPosFn, node) {\n var lineRects;\n 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);\n walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);\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 closestCaret = function (root, clientX, clientY) {\n var closestNodeRect;\n var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));\n var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {\n return clientY >= rect.top && clientY <= rect.bottom;\n });\n closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\n if (closestNodeRect) {\n closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);\n if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n return caretInfo(closestNodeRect, clientX);\n }\n }\n return null;\n };\n\n var isContentEditableTrue$3 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$8 = NodeType.isContentEditableFalse;\n var showCaret = function (direction, editor, node, before, scrollIntoView) {\n return 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 null;\n }\n return getNodeRange(node);\n };\n var renderCaretAtRange = function (editor, range, scrollIntoView) {\n var normalizedRange = normalizeRange(1, editor.getBody(), range);\n var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);\n var caretPositionNode = caretPosition.getNode();\n if (isContentEditableFalse$8(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n var caretPositionBeforeNode = caretPosition.getNode(true);\n if (isContentEditableFalse$8(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n return isContentEditableFalse$8(node) || isContentEditableTrue$3(node);\n });\n if (isContentEditableFalse$8(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return null;\n };\n var renderRangeCaret = function (editor, range, scrollIntoView) {\n if (!range || !range.collapsed) {\n return range;\n }\n var caretRange = renderCaretAtRange(editor, range, scrollIntoView);\n if (caretRange) {\n return caretRange;\n }\n return range;\n };\n\n var isChar = function (forward, predicate, pos) {\n return Option.from(pos.container()).filter(NodeType.isText).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 NodeType.isText(container) && container.data.length === 0;\n };\n var matchesElementPosition = function (before, predicate) {\n return function (pos) {\n return Option.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome();\n };\n };\n var isImageBlock = function (node) {\n return node.nodeName === 'IMG' && get$4(Element.fromDom(node), 'display') === 'block';\n };\n var isCefNode = function (node) {\n return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node);\n };\n var isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n var isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n var isBeforeTable = matchesElementPosition(true, NodeType.isTable);\n var isAfterTable = matchesElementPosition(false, NodeType.isTable);\n var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\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 (NodeType.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 (NodeType.isBr(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Option.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Option.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: Option.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: Option.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 Option.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 }, Option.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 CaretFinder.firstPositionIn(scope).map(function (pos) {\n return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n }).getOr([]);\n };\n var getLastLinePositions = function (scope) {\n return CaretFinder.lastPositionIn(scope).map(function (pos) {\n return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n }).getOr([]);\n };\n\n var isContentEditableFalse$9 = NodeType.isContentEditableFalse;\n var getSelectedNode$1 = getSelectedNode;\n var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {\n var forwards = direction === HDirection.Forwards;\n var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n if (!range.collapsed) {\n var node = getSelectedNode$1(range);\n if (isContentEditableFalse$9(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, true);\n }\n }\n var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeContentEditableFalseFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n var nextCaretPosition = InlineUtils.normalizePosition(forwards, getNextPosFn(caretPosition));\n if (!nextCaretPosition) {\n if (rangeIsInContainerBlock) {\n return range;\n }\n return null;\n }\n if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, true);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaret(editor, nextCaretPosition.toRange(), true);\n }\n return null;\n };\n var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {\n var caretPosition, linePositions, nextLinePositions;\n var closestNextLineRect, caretClientRect, clientX;\n var dist1, dist2, contentEditableFalseNode;\n contentEditableFalseNode = getSelectedNode$1(range);\n caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n nextLinePositions = filter(linePositions, isLine(1));\n caretClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode();\n }\n if (isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode(true);\n }\n if (!caretClientRect) {\n return null;\n }\n clientX = caretClientRect.left;\n closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (closestNextLineRect) {\n if (isContentEditableFalse$9(closestNextLineRect.node)) {\n dist1 = Math.abs(clientX - closestNextLineRect.left);\n dist2 = Math.abs(clientX - closestNextLineRect.right);\n return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);\n }\n }\n if (contentEditableFalseNode) {\n var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);\n closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n }\n };\n var createTextBlock = function (editor) {\n var textBlock = editor.dom.create(Settings.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 pre, caretPos, newBlock;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n if (range.collapsed && editor.settings.forced_root_block) {\n pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n if (direction === 1) {\n caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n } else {\n caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n }\n if (!caretPos) {\n 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 caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var newRange;\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var getVerticalRange = function (editor, down) {\n var newRange;\n var direction = down ? 1 : -1;\n var walkerFn = down ? downUntil : upUntil;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var moveH = function (editor, forward) {\n return function () {\n var newRng = getHorizontalRange(editor, forward);\n if (newRng) {\n editor.selection.setRng(newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var moveV = function (editor, down) {\n return function () {\n var newRng = getVerticalRange(editor, down);\n if (newRng) {\n editor.selection.setRng(newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var isCefPosition = function (forward) {\n return function (pos) {\n return forward ? isAfterContentEditableFalse(pos) : isBeforeContentEditableFalse(pos);\n };\n };\n var moveToLineEndPoint = function (editor, forward) {\n return function () {\n var from = forward ? CaretPosition$1.fromRangeEnd(editor.selection.getRng()) : CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var result = forward ? getPositionsUntilNextLine(editor.getBody(), from) : getPositionsUntilPreviousLine(editor.getBody(), from);\n var to = forward ? last(result.positions) : head(result.positions);\n return to.filter(isCefPosition(forward)).fold(constant(false), function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n };\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$1(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 Option.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 Option.some(newDist < oldDist ? newCorner : oldCorner);\n });\n }, Option.none());\n };\n var getClosestCell = function (getYAxisValue, isTargetCorner, table, x, y) {\n var cells = descendants$1(Element.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, getBottomValue, isAbove$1);\n var getClosestCellBelow = curry(getClosestCell, 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 moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n ScrollIntoView.scrollRangeIntoView(editor, rng);\n };\n var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n return lineInfo.breakAt.map(function (breakPos) {\n return getPositionsUntil(scope, breakPos).breakAt.isSome();\n }).getOr(false);\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) || !NodeType.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$1.fromRangeStart(rng);\n return CaretFinder.positionIn(!forward, table).map(function (pos) {\n return pos.isEqual(caretPos);\n }).getOr(false);\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 var newRng = showCaret(direction, editor, table, !forward, true);\n moveToRange(editor, newRng);\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$1.before(table)), rect.left);\n });\n }).getOr(CaretPosition$1.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$1.after(table)), rect.left);\n });\n }).getOr(CaretPosition$1.after(table));\n };\n var getTable = function (previous, pos) {\n var node = pos.getNode(previous);\n return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();\n };\n var renderBlock = function (down, editor, table, pos) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n if (forcedRootBlock) {\n editor.undoManager.transact(function () {\n var element = Element.fromTag(forcedRootBlock);\n setAll(element, Settings.getForcedRootBlockAttrs(editor));\n append(element, Element.fromTag('br'));\n if (down) {\n after(Element.fromDom(table), element);\n } else {\n before(Element.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 CaretFinder.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$1.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 moveH$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateHorizontally(editor, forward, table);\n });\n }).getOr(false);\n };\n };\n var moveV$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateVertically(editor, forward, table, td);\n });\n }).getOr(false);\n };\n };\n\n var isTarget = function (node) {\n return contains(['figcaption'], name(node));\n };\n var rangeBefore = function (target) {\n var rng = domGlobals.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 = Element.fromTag('br');\n insertElement(root, br, forward);\n return rangeBefore(br);\n };\n var insertBlock$1 = function (root, forward, blockName, attrs) {\n var block = Element.fromTag(blockName);\n var br = Element.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, root);\n return closest(Element.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 = Element.fromDom(editor.getBody());\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var rootBlock = Settings.getForcedRootBlock(editor);\n var rootBlockAttrs = Settings.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$2 = function (editor, forward) {\n return function () {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\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 var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n };\n var execute = function (patterns, evt) {\n return find(match$1(patterns, evt), function (pattern) {\n return pattern.action();\n });\n };\n var MatchKeys = {\n match: match$1,\n action: action,\n execute: execute\n };\n\n var executeKeydownOverride = function (editor, caret, evt) {\n var os = detect$3().os;\n MatchKeys.execute([\n {\n keyCode: VK.RIGHT,\n action: moveH(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: moveH$1(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH$1(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV$1(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$1(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: BoundarySelection.move(editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: BoundarySelection.move(editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.moveNextWord(editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.movePrevWord(editor, caret)\n },\n {\n keyCode: VK.UP,\n action: moveV$2(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$2(editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$9 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride(editor, caret, evt);\n }\n });\n };\n var ArrowKeys = { setup: setup$9 };\n\n var isBeforeRoot = function (rootNode) {\n return function (elm) {\n return eq(rootNode, Element.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)) : Option.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(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);\n if (forward) {\n return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {\n return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n }).getOr(false);\n } else {\n return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {\n return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n }).getOr(false);\n }\n }).getOr(true);\n };\n var DeleteUtils = {\n getParentBlock: getParentBlock$1,\n paddEmptyBody: paddEmptyBody,\n willDeleteLastPositionInElement: willDeleteLastPositionInElement\n };\n\n var blockPosition = function (block, position) {\n return {\n block: constant(block),\n position: constant(position)\n };\n };\n var blockBoundary = function (from, to) {\n return {\n from: constant(from),\n to: constant(to)\n };\n };\n var getBlockPosition = function (rootNode, pos) {\n var rootElm = Element.fromDom(rootNode);\n var containerElm = Element.fromDom(pos.container());\n return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {\n return blockPosition(block, pos);\n });\n };\n var isDifferentBlocks = function (blockBoundary) {\n return eq(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(parent1, parent2);\n });\n }).isSome();\n };\n var isEditable = function (blockBoundary) {\n return NodeType.isContentEditableFalse(blockBoundary.from().block().dom()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block().dom()) === false;\n };\n var skipLastBr = function (rootNode, forward, blockPosition) {\n if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {\n return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {\n if (lastPositionInBlock.isEqual(blockPosition.position())) {\n return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n return getBlockPosition(rootNode, to);\n });\n } else {\n return Option.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$1.fromRangeStart(rng));\n var toBlockPos = fromBlockPos.bind(function (blockPos) {\n return CaretFinder.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) : Option.none();\n };\n var BlockMergeBoundary = { read: read$3 };\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 = Parents.parentsAndSelf(block, rootNode);\n return find(parents.reverse(), function (element) {\n return Empty.isEmpty(element);\n }).each(remove);\n };\n var isEmptyBefore = function (el) {\n return filter(prevSiblings(el), function (el) {\n return !Empty.isEmpty(el);\n }).length === 0;\n };\n var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n if (Empty.isEmpty(toBlock)) {\n PaddingBr.fillWithPaddingBr(toBlock);\n return CaretFinder.firstPositionIn(toBlock.dom());\n }\n if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {\n before(insertionPoint, Element.fromTag('br'));\n }\n var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.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 (Empty.isEmpty(toBlock)) {\n remove(toBlock);\n if (Empty.isEmpty(fromBlock)) {\n PaddingBr.fillWithPaddingBr(fromBlock);\n }\n return CaretFinder.firstPositionIn(fromBlock.dom());\n }\n var position = CaretFinder.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 = Parents.parentsAndSelf(block, toBlock);\n return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);\n };\n var getInsertionPoint = function (fromBlock, toBlock) {\n return contains$2(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();\n };\n var trimBr = function (first, block) {\n CaretFinder.positionIn(first, block.dom()).map(function (position) {\n return position.getNode();\n }).map(Element.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 var MergeBlocks = { mergeBlocks: mergeBlocks };\n\n var backspaceDelete = function (editor, forward) {\n var rootNode = Element.fromDom(editor.getBody());\n var position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {\n return MergeBlocks.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 var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };\n\n var deleteRangeMergeBlocks = function (rootNode, selection) {\n var rng = selection.getRng();\n return lift2(DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {\n if (eq(block1, block2) === false) {\n rng.deleteContents();\n MergeBlocks.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 = Element.fromDom(rawNode);\n var isRoot = curry(eq, root);\n return ancestor(node, isTableCell, 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 = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();\n var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.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 = function (editor) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n };\n var backspaceDelete$1 = function (editor, forward) {\n return editor.selection.isCollapsed() ? false : deleteRange(editor);\n };\n var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };\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(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n var scope = head(parentBlocks).getOr(root);\n return CaretFinder.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 isCompoundElement = function (node) {\n return isTableCell(Element.fromDom(node)) || isListItem(Element.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 NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n var inSameBlock = function (elm) {\n return isInline(Element.fromDom(elm)) && !isInSameBlock(from, to, root);\n };\n return getRelativeCefElm(!forward, from).fold(function () {\n return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);\n }, inSameBlock);\n };\n var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n var toCefElm = to.getNode(forward === false);\n return DeleteUtils.getParentBlock(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) {\n return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);\n }).orThunk(function () {\n return Option.some(DeleteAction.moveToElement(toCefElm));\n });\n };\n var findCefPosition = function (root, forward, from) {\n return CaretFinder.fromPosition(forward, root, from).bind(function (to) {\n if (isCompoundElement(to.getNode())) {\n return Option.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n return Option.none();\n } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else if (forward === false && isBeforeContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else {\n return Option.none();\n }\n });\n };\n var getContentEditableBlockAction = function (forward, elm) {\n if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Option.none();\n }\n };\n var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n return deleteAction.fold(function (elm) {\n return Option.some(DeleteAction.remove(elm));\n }, function (elm) {\n return Option.some(DeleteAction.moveToElement(elm));\n }, function (to) {\n if (isInSameBlock(from, to, root)) {\n return Option.none();\n } else {\n return Option.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 }, Option.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$1.fromRangeStart(normalizedRange);\n var rootElement = Element.fromDom(root);\n if (forward === false && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.remove(from.getNode(true)));\n } else if (forward && isBeforeContentEditableFalse(from)) {\n return Option.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.deleteElement(editor, forward, Element.fromDom(element));\n return true;\n };\n };\n var moveToElement = function (editor, forward) {\n return function (element) {\n var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.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 Option.from(getContentEditableRoot$1(editor.getBody(), node));\n };\n var backspaceDeleteCaret = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n return getAncestorCe(editor, selectedNode).filter(NodeType.isContentEditableFalse).fold(function () {\n var result = read$4(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {\n return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n });\n return result.getOr(false);\n }, function () {\n return true;\n });\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 (NodeType.isContentEditableFalse(selectedNode)) {\n var hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(NodeType.isContentEditableFalse);\n return hasCefAncestor.fold(function () {\n deleteOffscreenSelection(Element.fromDom(editor.getBody()));\n DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\n DeleteUtils.paddEmptyBody(editor);\n return true;\n }, function () {\n return true;\n });\n }\n return false;\n };\n var getContentEditableRoot$1 = function (root, node) {\n while (node && node !== root) {\n if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var paddEmptyElement = function (editor) {\n var br;\n var ceRoot = getContentEditableRoot$1(editor.getBody(), editor.selection.getNode());\n if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {\n br = editor.dom.create('br', { 'data-mce-bogus': '1' });\n editor.dom.setHTML(ceRoot, '');\n ceRoot.appendChild(br);\n editor.selection.setRng(CaretPosition$1.before(br).toRange());\n }\n return true;\n };\n var backspaceDelete$2 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n var CefDelete = {\n backspaceDelete: backspaceDelete$2,\n paddEmptyElement: paddEmptyElement\n };\n\n var trimEmptyTextNode$1 = function (dom, node) {\n if (NodeType.isText(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n var caretRange = showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true);\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 trimEmptyTextNode$1(editor.dom, node);\n return true;\n };\n var deleteCefBoundaryText = function (editor, forward) {\n var range = editor.selection.getRng();\n if (!NodeType.isText(range.commonAncestorContainer)) {\n return false;\n }\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var isBeforeContentEditableFalseFn = forward ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var nextCaretPosition = InlineUtils.normalizePosition(forward, getNextPosFn(caretPosition));\n if (!nextCaretPosition || !isMoveInsideSameBlock(caretPosition, nextCaretPosition)) {\n return false;\n } else if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(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 deleteCefBoundaryText(editor, forward);\n };\n var CefBoundaryDelete = { backspaceDelete: backspaceDelete$3 };\n\n var isFeatureEnabled$1 = function (editor) {\n return editor.settings.inline_boundaries !== false;\n };\n var rangeFromPositions = function (from, to) {\n var range = domGlobals.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(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {\n return pos.isEqual(normalizedLastPos);\n }).getOr(true);\n }).getOr(true);\n };\n var setCaretLocation = function (editor, caret) {\n return function (location) {\n return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n BoundarySelection.setCaretPosition(editor, pos);\n return true;\n }).getOr(false);\n };\n };\n var deleteFromTo = function (editor, caret, from, to) {\n var rootNode = editor.getBody();\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.undoManager.ignore(function () {\n editor.selection.setRng(rangeFromPositions(from, to));\n editor.execCommand('Delete');\n BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.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 = curry(InlineUtils.isInlineTarget, editor);\n var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);\n return fromLocation.bind(function (location) {\n if (forward) {\n return location.fold(constant(Option.some(BoundaryLocation.inside(location))), Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none);\n } else {\n return location.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none, constant(Option.some(BoundaryLocation.inside(location))));\n }\n }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n var toPosition = CaretFinder.navigate(forward, rootNode, from);\n var toLocation = toPosition.bind(function (pos) {\n return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);\n });\n if (fromLocation.isSome() && toLocation.isSome()) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n } else {\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 }).getOr(false);\n }\n });\n };\n var backspaceDelete$4 = function (editor, caret, forward) {\n if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return false;\n };\n var BoundaryDelete = { backspaceDelete: backspaceDelete$4 };\n\n var getParentInlines = function (rootElm, startElm) {\n var parents = 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 = 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.deleteElement(editor, forward, target);\n } else {\n var pos = replaceWithCaretFormat(target.dom(), formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n var deleteCaret = function (editor, forward) {\n var rootElm = Element.fromDom(editor.getBody());\n var startElm = Element.fromDom(editor.selection.getStart());\n var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild);\n return last(parentInlines).map(function (target) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {\n deleteLastPosition(forward, editor, target, parentInlines);\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var backspaceDelete$5 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret(editor, forward) : false;\n };\n var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };\n\n var tableCellRng = function (start, end) {\n return {\n start: constant(start),\n end: constant(end)\n };\n };\n var tableSelection = function (rng, table, cells) {\n return {\n rng: constant(rng),\n table: constant(table),\n cells: constant(cells)\n };\n };\n var deleteAction = Adt.generate([\n { removeTable: ['element'] },\n { emptyCells: ['cells'] }\n ]);\n var isRootFromElement = function (root) {\n return function (cur) {\n return eq(root, cur);\n };\n };\n var getClosestCell$1 = function (container, isRoot) {\n return closest$1(Element.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(cellRng.start(), cellRng.end()) === false;\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(startParentTable, endParentTable), startParentTable);\n });\n });\n };\n var getTableCells = function (table) {\n return descendants$1(table, 'td,th');\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$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(rng.endContainer, isRoot);\n return rng.collapsed ? Option.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) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);\n });\n };\n var isWithinSameTable = function (isRoot, cellRng) {\n return getTableFromCellRng(cellRng, isRoot).isSome();\n };\n var getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {\n return isWithinSameTable(isRoot, cellRng);\n }).orThunk(function () {\n return partialSelection(isRoot, rng);\n });\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 getTableSelectionFromRng = function (root, rng) {\n var isRoot = isRootFromElement(root);\n return getCellRng(rng, isRoot).bind(function (cellRng) {\n return getTableSelectionFromCellRng(cellRng, isRoot);\n });\n };\n var getCellIndex = function (cells, cell) {\n return findIndex(cells, function (x) {\n return eq(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 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 return getTableSelectionFromRng(root, rng).bind(getAction);\n };\n\n var emptyCells = function (editor, cells) {\n each(cells, PaddingBr.fillWithPaddingBr);\n editor.selection.setCursorLocation(cells[0].dom(), 0);\n return true;\n };\n var deleteTableElement = function (editor, table) {\n DeleteElement.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));\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$1 = function (editor, startElm) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n var selectedCells = TableCellSelection.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(Parents.parentsAndSelf(elm, rootElm), isTableCell);\n };\n var getParentCaption = function (rootElm, elm) {\n return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {\n return name(elm) === 'caption';\n });\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) {\n return eq(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n PaddingBr.fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom(), 0);\n return Option.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {\n return CaretFinder.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, Element.fromDom(to.getNode())).map(function (toCaption) {\n return eq(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(Option.some(true));\n };\n var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(function (fromCell) {\n return Empty.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$1.fromRangeStart(editor.selection.getRng());\n return Empty.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$1.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || CaretFinder.fromPosition(forward, editor.getBody(), fromPos).map(function (pos) {\n return isNearTable(forward, pos);\n }).getOr(false);\n };\n var deleteCaret$1 = function (editor, forward, startElm) {\n var rootElm = Element.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$6 = function (editor, forward) {\n var startElm = Element.fromDom(editor.selection.getStart(true));\n var cells = TableCellSelection.getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$1(editor, forward, startElm) : deleteRange$1(editor, startElm);\n };\n var TableDelete = { backspaceDelete: backspaceDelete$6 };\n\n var deleteCaret$2 = function (editor, forward) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return CaretFinder.fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) {\n return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos);\n }).bind(function (pos) {\n return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos));\n }).map(function (elm) {\n editor.selection.select(elm);\n return true;\n }).getOr(false);\n };\n var backspaceDelete$7 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : false;\n };\n var PageBreakDelete = { backspaceDelete: backspaceDelete$7 };\n\n var isEditable$1 = function (target) {\n return closest(target, function (elm) {\n return NodeType.isContentEditableTrue(elm.dom()) || NodeType.isContentEditableFalse(elm.dom());\n }).exists(function (elm) {\n return NodeType.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$4(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, Element.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(Settings.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(), Element.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 = Settings.getIndentation(editor);\n var indentUnit = /[a-z%]+$/i.exec(indentation)[0];\n var indentValue = parseInt(indentation, 10);\n var useMargin = Settings.shouldIndentUseMargin(editor);\n var forcedRootBlock = Settings.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 navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return CaretFinder.navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock = function (root, pos) {\n return find(Parents.parentsAndSelf(Element.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, Element.fromDom(newPos.container()));\n });\n });\n };\n var isAtBlockBoundary = 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, false);\n var isAtEndOfBlock = curry(isAtBlockBoundary, true);\n var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n var backspaceDelete$8 = function (editor, _caret, _forward) {\n if (editor.selection.isCollapsed() && canOutdent(editor)) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n var pos = CaretPosition$1.fromRangeStart(rng);\n var block = dom.getParent(rng.startContainer, dom.isBlock);\n if (block !== null && isAtStartOfBlock(Element.fromDom(block), pos)) {\n handle(editor, 'outdent');\n return true;\n }\n }\n return false;\n };\n var Outdent = { backspaceDelete: backspaceDelete$8 };\n\n var executeKeydownOverride$1 = function (editor, caret, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(Outdent.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BoundaryDelete.backspaceDelete, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BoundaryDelete.backspaceDelete, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(PageBreakDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(PageBreakDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var executeKeyupOverride = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n }\n ], evt);\n };\n var setup$a = 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 var DeleteBackspaceKeys = { setup: setup$a };\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, rng, 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 rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n var walker = new TreeWalker(root, root);\n while (node = walker.current()) {\n if (NodeType.isText(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 (NodeType.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 ScrollIntoView.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 Option.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(Element.fromDom(elm));\n }).isSome();\n };\n var NewLineUtils = {\n moveToCaretPosition: moveToCaretPosition,\n getEditableRoot: getEditableRoot,\n getParentBlock: getParentBlock$2,\n getParentBlockName: getParentBlockName,\n isListItemParentBlock: isListItemParentBlock\n };\n\n var hasFirstChild = function (elm, name) {\n return elm.firstChild && elm.firstChild.nodeName === name;\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 (NodeType.isElement(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 dom.insertAfter(newBlock, getContainerBlock(containerBlock));\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 } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\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 }\n dom.remove(parentBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n var InsertLi = { insert: insert };\n\n var trimZwsp = function (fragment) {\n each(descendants(Element.fromDom(fragment), isText), function (text) {\n var rawNode = text.dom();\n rawNode.nodeValue = Zwsp.trim(rawNode.nodeValue);\n });\n };\n var isEmptyAnchor = function (dom, elm) {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n var isTableCell$4 = 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 (NodeType.isElement(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 (NodeType.isText(container) === false) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.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 (NodeType.isText(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 Option.from(forcedRootBlockAttrs.style).map(editor.dom.parseStyle).each(function (attrStyles) {\n var currentStyles = getAllRaw(Element.fromDom(node));\n var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n editor.dom.setStyles(node, newStyles);\n });\n var attrClassesOpt = Option.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n return attrClasses.split(/\\s+/);\n });\n var currentClassesOpt = Option.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 editor.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 editor.dom.setAttribs(node, remainingAttrs);\n };\n var setForcedBlockAttrs = function (editor, node) {\n var forcedRootBlockName = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n var forcedRootBlockAttrs = Settings.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$4(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 var lastChild;\n block.normalize();\n 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, editableRoot, container, offset, parentBlock, shiftKey;\n var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, 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 (Settings.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) || Bookmarks.isBookmarkNode(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 (NodeType.isText(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 && NodeType.isElement(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 TreeWalker(container, parentBlock);\n if (NodeType.isText(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 (NodeType.isElement(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 (NodeType.isText(node) && !/^[ \\t\\r\\n]*$/.test(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 (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n newBlock = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(newBlock, parentBlock);\n }\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n NormalizeRange.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 = Settings.getForcedRootBlock(editor);\n shiftKey = !!(evt && evt.shiftKey);\n var ctrlKey = !!(evt && evt.ctrlKey);\n if (NodeType.isElement(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 && NodeType.isText(container)) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n 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 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 InsertLi.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 NewLineUtils.moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock()) {\n insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true)) {\n newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n NewLineUtils.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 NewLineUtils.moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.fire('NewBlock', { newBlock: newBlock });\n };\n var InsertBlock = { insert: insert$1 };\n\n var hasRightSideContent = function (schema, container, parentBlock) {\n var walker = new TreeWalker(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 scrollToBr = function (dom, selection, brElm) {\n var marker = dom.create('span', {}, ' ');\n brElm.parentNode.insertBefore(marker, brElm);\n selection.scrollIntoView(marker);\n dom.remove(marker);\n };\n var moveSelectionToBr = function (dom, selection, brElm, extraBr) {\n var rng = 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 selection.setRng(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 NormalizeRange.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 scrollToBr(dom, selection, brElm);\n moveSelectionToBr(dom, selection, brElm, extraBr);\n editor.undoManager.add();\n };\n var insertBrBefore = function (editor, inline) {\n var br = Element.fromTag('br');\n before(Element.fromDom(inline), br);\n editor.undoManager.add();\n };\n var insertBrAfter = function (editor, inline) {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after(Element.fromDom(inline), Element.fromTag('br'));\n }\n var br = Element.fromTag('br');\n after(Element.fromDom(inline), br);\n scrollToBr(editor.dom, editor.selection, br.dom());\n moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);\n editor.undoManager.add();\n };\n var isBeforeBr$1 = function (pos) {\n return NodeType.isBr(pos.getNode());\n };\n var hasBrAfter = function (rootNode, startNode) {\n if (isBeforeBr$1(CaretPosition$1.after(startNode))) {\n return true;\n } else {\n return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {\n return NodeType.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(constant(false), isAnchorLink, isAnchorLink, constant(false));\n };\n var readInlineAnchorLocation = function (editor) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, 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 var InsertBr = { insert: insert$2 };\n\n var matchesSelector = function (editor, selector) {\n return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {\n return selector.length > 0 && is(Element.fromDom(parentBlock), selector);\n }).isSome();\n };\n var shouldInsertBr = function (editor) {\n return matchesSelector(editor, Settings.getBrNewLineSelector(editor));\n };\n var shouldBlockNewLine = function (editor) {\n return matchesSelector(editor, Settings.getNoNewLineSelector(editor));\n };\n var ContextSelectors = {\n shouldInsertBr: shouldInsertBr,\n shouldBlockNewLine: shouldBlockNewLine\n };\n\n var newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n var shouldBlockNewLine$1 = function (editor, shiftKey) {\n return ContextSelectors.shouldBlockNewLine(editor);\n };\n var isBrMode = function (requiredState) {\n return function (editor, shiftKey) {\n var brMode = Settings.getForcedRootBlock(editor) === '';\n return brMode === requiredState;\n };\n };\n var inListBlock = function (requiredState) {\n return function (editor, shiftKey) {\n return NewLineUtils.isListItemParentBlock(editor) === requiredState;\n };\n };\n var inBlock = function (blockName, requiredState) {\n return function (editor, shiftKey) {\n var state = NewLineUtils.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 Settings.shouldPutBrInPre(editor) === requiredState;\n };\n };\n var inBrContext = function (editor, shiftKey) {\n return ContextSelectors.shouldInsertBr(editor);\n };\n var hasShiftKey = function (editor, shiftKey) {\n return shiftKey;\n };\n var canInsertIntoEditableRoot = function (editor) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n var rootEditable = NewLineUtils.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 ? Option.some(action) : Option.none();\n };\n };\n var getAction$1 = function (editor, evt) {\n return LazyEvaluator.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 var NewLineAction = { getAction: getAction$1 };\n\n var insert$3 = function (editor, evt) {\n NewLineAction.getAction(editor, evt).fold(function () {\n InsertBr.insert(editor, evt);\n }, function () {\n InsertBlock.insert(editor, evt);\n }, noop);\n };\n var InsertNewLine = { insert: insert$3 };\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 InsertNewLine.insert(editor, event);\n });\n };\n var setup$b = function (editor) {\n editor.on('keydown', function (event) {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n var EnterKey = { setup: setup$b };\n\n var insertTextAtPosition = function (text, pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (NodeType.isText(container)) {\n container.insertData(offset, text);\n return Option.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(function (elm) {\n var textNode = Element.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 isInMiddleOfText = function (pos) {\n return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n };\n var getClosestBlock$1 = function (root, pos) {\n var parentBlocks = filter(Parents.parentsAndSelf(Element.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) || CaretFinder.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) || CaretFinder.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$4(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return CaretFinder.prevPosition(root.dom(), pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return CaretFinder.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 (NodeType.isText(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 var afterPos = leanRight(pos);\n if (isInPre(afterPos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);\n }\n };\n var needsToBeNbsp = function (root, pos) {\n return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, 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 NodeType.isText(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(chars[i - 1]) && isContent(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 Option.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 ? Option.some(pos) : Option.none();\n });\n };\n var normalizeNbspsInEditor = function (editor) {\n var root = Element.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 locationToCaretPosition = function (root) {\n return function (location) {\n return location.fold(function (element) {\n return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));\n }, function (element) {\n return CaretFinder.firstPositionIn(element);\n }, function (element) {\n return CaretFinder.lastPositionIn(element);\n }, function (element) {\n return CaretFinder.nextPosition(root.dom(), CaretPosition$1.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$1.fromRangeStart(editor.selection.getRng());\n var root = Element.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, 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$2 = function (editor, evt) {\n MatchKeys.execute([{\n keyCode: VK.SPACEBAR,\n action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$c = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, evt);\n }\n });\n };\n var SpaceKey = { setup: setup$c };\n\n var findBlockCaretContainer = function (editor) {\n return descendant(Element.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$d = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n var CaretContainerInput = { setup: setup$d };\n\n var browser$5 = 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$5.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$e = 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 executeKeydownOverride$3 = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.END,\n action: moveToLineEndPoint(editor, true)\n },\n {\n keyCode: VK.HOME,\n action: moveToLineEndPoint(editor, false)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$f = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$3(editor, evt);\n }\n });\n };\n var HomeEndKeys = { setup: setup$f };\n\n var setup$g = function (editor) {\n var caret = BoundarySelection.setupSelectedState(editor);\n CaretContainerInput.setup(editor);\n ArrowKeys.setup(editor, caret);\n DeleteBackspaceKeys.setup(editor, caret);\n EnterKey.setup(editor);\n SpaceKey.setup(editor);\n setup$e(editor);\n HomeEndKeys.setup(editor);\n };\n var KeyboardOverrides = { setup: setup$g };\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, fakeRng;\n nativeRng = editor.selection.getRng();\n fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !RangeCompare.isEq(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 && !this.editor.settings.disable_nodechange && !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, currentPath;\n 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$h = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n var isTextBlockNode = function (node) {\n return NodeType.isElement(node) && isTextBlock(Element.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 CaretFinder.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 CaretFinder.lastPositionIn(container).each(function (pos) {\n return rng.setEnd(pos.container(), pos.offset());\n });\n }\n }\n editor.selection.setRng(RangeNormalizer.normalize(rng));\n };\n var setup$i = function (editor) {\n editor.on('click', function (e) {\n if (e.detail >= 3) {\n normalizeSelection$1(editor);\n }\n });\n };\n\n var getAbsolutePosition = function (elm) {\n var doc, docElem, win, clientRect;\n clientRect = elm.getBoundingClientRect();\n doc = elm.ownerDocument;\n docElem = doc.documentElement;\n 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 var MousePosition = { calc: calc };\n\n var isContentEditableFalse$a = NodeType.isContentEditableFalse, isContentEditableTrue$4 = NodeType.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 clonedElm = elm.cloneNode(true);\n editor.dom.setStyles(clonedElm, {\n width: width,\n height: height\n });\n editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);\n var ghostElm = editor.dom.create('div', {\n 'class': 'mce-drag-container',\n 'data-mce-bogus': 'all',\n 'unselectable': 'on',\n 'contenteditable': 'false'\n });\n editor.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 editor.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 hasDraggableElement = function (state) {\n return state.element;\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), Predicate.or(isContentEditableFalse$a, isContentEditableTrue$4)).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.element = ceElm;\n state.screenX = e.screenX;\n state.screenY = e.screenY;\n state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;\n state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;\n state.relX = e.pageX - elmPos.x;\n state.relY = e.pageY - elmPos.y;\n state.width = ceElm.offsetWidth;\n state.height = ceElm.offsetHeight;\n state.ghost = createGhost(editor, ceElm, state.width, state.height);\n }\n }\n };\n };\n var move$1 = function (state, editor) {\n var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n editor._selectionOverrides.hideFakeCaret();\n editor.selection.placeCaretAt(clientX, clientY);\n }, 0);\n return function (e) {\n var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (hasDraggableElement(state) && !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, MousePosition.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 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 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 targetClone: targetClone_1,\n clientX: e.clientX,\n clientY: e.clientY\n });\n if (!args.isDefaultPrevented()) {\n targetClone_1 = args.targetClone;\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 removeDragState(state);\n };\n };\n var stop = function (state, editor) {\n return function () {\n if (state.dragging) {\n editor.fire('dragend');\n }\n removeDragState(state);\n };\n };\n var removeDragState = function (state) {\n state.dragging = false;\n state.element = null;\n removeElement(state.ghost);\n };\n var bindFakeDragEvents = function (editor) {\n var state = {};\n var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;\n pageDom = DOMUtils$1.DOM;\n rootDocument = domGlobals.document;\n dragStartHandler = start$1(state, editor);\n dragHandler = move$1(state, editor);\n dropHandler = drop(state, editor);\n 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) || isContentEditableFalse$a(editor.dom.getContentEditableParent(realTarget))) {\n e.preventDefault();\n }\n });\n };\n var init = function (editor) {\n bindFakeDragEvents(editor);\n blockIeDrop(editor);\n };\n var DragDropOverrides = { init: init };\n\n var setup$j = function (editor) {\n var renderFocusCaret = first(function () {\n if (!editor.removed && editor.getBody().contains(domGlobals.document.activeElement)) {\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var caretRange = renderRangeCaret(editor, editor.selection.getRng(), 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 var CefFocus = { setup: setup$j };\n\n var isContentEditableTrue$5 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$b = NodeType.isContentEditableFalse;\n var getContentEditableRoot$2 = function (editor, node) {\n var root = editor.getBody();\n while (node && node !== root) {\n if (isContentEditableTrue$5(node) || isContentEditableFalse$b(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var SelectionOverrides = function (editor) {\n var isBlock = function (node) {\n return editor.dom.isBlock(node);\n };\n var rootNode = editor.getBody();\n var fakeCaret = FakeCaret(editor, rootNode, isBlock, function () {\n return EditorFocus.hasFocus(editor);\n });\n var realSelectionId = 'sel-' + editor.dom.uniqueId();\n var selectedContentEditableNode;\n var isFakeSelectionElement = function (elm) {\n return editor.dom.hasClass(elm, 'mce-offscreen-selection');\n };\n var getRealSelectionElement = function () {\n var container = editor.dom.get(realSelectionId);\n return container ? container.getElementsByTagName('*')[0] : container;\n };\n var setRange = function (range) {\n if (range) {\n editor.selection.setRng(range);\n }\n };\n var getRange = function () {\n return editor.selection.getRng();\n };\n var showCaret = function (direction, node, before, scrollIntoView) {\n if (scrollIntoView === void 0) {\n scrollIntoView = true;\n }\n var e;\n 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 editor.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 editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n var registerEvents = function () {\n editor.on('mouseup', function (e) {\n var range = getRange();\n if (range.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {\n setRange(renderCaretAtRange(editor, range, false));\n }\n });\n editor.on('click', function (e) {\n var contentEditableRoot;\n contentEditableRoot = getContentEditableRoot$2(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n if (isContentEditableTrue$5(contentEditableRoot)) {\n if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {\n removeContentEditableSelection();\n }\n }\n }\n });\n editor.on('blur NewBlock', function () {\n removeContentEditableSelection();\n });\n editor.on('ResizeWindow FullscreenStateChanged', function () {\n return fakeCaret.reposition();\n });\n var handleTouchSelect = function (editor) {\n editor.on('tap', function (e) {\n var contentEditableRoot = getContentEditableRoot$2(editor, e.target);\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n }\n }, true);\n };\n var hasNormalCaretPosition = function (elm) {\n var caretWalker = CaretWalker(elm);\n if (!elm.firstChild) {\n return false;\n }\n var startPos = CaretPosition$1.before(elm.firstChild);\n var newPos = caretWalker.next(startPos);\n return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos);\n };\n var isInSameBlock = function (node1, node2) {\n var block1 = editor.dom.getParent(node1, editor.dom.isBlock);\n var block2 = editor.dom.getParent(node2, editor.dom.isBlock);\n return block1 === block2;\n };\n var hasBetterMouseTarget = function (targetNode, caretNode) {\n var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);\n var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);\n if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$b(getContentEditableRoot$2(editor, targetBlock)) === false) {\n return true;\n }\n return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n };\n handleTouchSelect(editor);\n editor.on('mousedown', function (e) {\n var contentEditableRoot;\n var targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n return;\n }\n contentEditableRoot = getContentEditableRoot$2(editor, targetElm);\n if (contentEditableRoot) {\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n } else {\n removeContentEditableSelection();\n if (!(isContentEditableTrue$5(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {\n hideFakeCaret();\n editor.selection.placeCaretAt(e.clientX, e.clientY);\n }\n }\n } else if (isFakeCaretTarget(targetElm) === false) {\n removeContentEditableSelection();\n hideFakeCaret();\n var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);\n if (caretInfo) {\n if (!hasBetterMouseTarget(e.target, caretInfo.node)) {\n e.preventDefault();\n var range = showCaret(1, caretInfo.node, caretInfo.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 switch (e.keyCode) {\n default:\n if (isContentEditableFalse$b(editor.selection.getNode())) {\n e.preventDefault();\n }\n break;\n }\n });\n editor.on('GetSelectionRange', function (e) {\n var rng = e.range;\n if (selectedContentEditableNode) {\n if (!selectedContentEditableNode.parentNode) {\n selectedContentEditableNode = null;\n return;\n }\n rng = rng.cloneRange();\n rng.selectNode(selectedContentEditableNode);\n e.range = rng;\n }\n });\n editor.on('SetSelectionRange', function (e) {\n e.range = normalizeShortEndedElementSelection(e.range);\n var rng = setContentEditableSelection(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 if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(rng.startContainer.parentNode)) {\n removeContentEditableSelection();\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);\n }\n }\n });\n DragDropOverrides.init(editor);\n CefFocus.setup(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 = editor.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 setContentEditableSelection = function (range, forward) {\n var node;\n var $ = editor.$;\n var dom = editor.dom;\n var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n if (forward === false) {\n caretPosition = getNormalizedRangeEndPoint(-1, rootNode, range);\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(-1, caretPosition.getNode(true), false, false);\n }\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n } else {\n caretPosition = getNormalizedRangeEndPoint(1, rootNode, range);\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(1, caretPosition.getNode(true), false, false);\n }\n }\n }\n return null;\n }\n startContainer = range.startContainer;\n startOffset = range.startOffset;\n 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 node = startContainer.childNodes[startOffset];\n }\n if (!isContentEditableFalse$b(node)) {\n return null;\n }\n targetClone = origTargetClone = node.cloneNode(true);\n e = editor.fire('ObjectSelected', {\n target: node,\n targetClone: targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n $realSelectionContainer = descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n return $([]);\n }, function (elm) {\n return $([elm.dom()]);\n });\n targetClone = e.targetClone;\n if ($realSelectionContainer.length === 0) {\n $realSelectionContainer = $('
    ').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n range = editor.dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('

    \\xA0

    ').append(targetClone);\n range.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n range.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append(nbsp).append(targetClone).append(nbsp);\n range.setStart($realSelectionContainer[0].firstChild, 1);\n range.setEnd($realSelectionContainer[0].lastChild, 0);\n }\n $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n $realSelectionContainer[0].focus();\n sel = editor.selection.getSel();\n sel.removeAllRanges();\n sel.addRange(range);\n var nodeElm = Element.fromDom(node);\n each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n if (!eq(nodeElm, elm)) {\n remove$1(elm, 'data-mce-selected');\n }\n });\n if (!editor.dom.getAttrib(node, 'data-mce-selected')) {\n node.setAttribute('data-mce-selected', '1');\n }\n selectedContentEditableNode = node;\n hideFakeCaret();\n return range;\n };\n var removeContentEditableSelection = function () {\n if (selectedContentEditableNode) {\n selectedContentEditableNode.removeAttribute('data-mce-selected');\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove);\n selectedContentEditableNode = null;\n }\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove);\n selectedContentEditableNode = null;\n };\n var destroy = function () {\n fakeCaret.destroy();\n selectedContentEditableNode = null;\n };\n var hideFakeCaret = function () {\n fakeCaret.hide();\n };\n if (Env.ceFalse) {\n registerEvents();\n }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var Quirks = function (editor) {\n var each = Tools.each;\n var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, 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 (!domGlobals.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, container, offset, root, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n container = rng.startContainer;\n offset = rng.startOffset;\n 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 (!settings.object_resizing) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!settings.readonly) {\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 (settings.forced_root_block) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', Settings.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 (domGlobals.document.activeElement === domGlobals.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 = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());\n selection.setRng(rng);\n insertClipboardContents(internalContent.html, true);\n }\n }\n });\n };\n var refreshContentEditable = function () {\n };\n var isHidden = function () {\n var sel;\n if (!isGecko || editor.removed) {\n return false;\n }\n sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n inputMethodFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n return {\n refreshContentEditable: refreshContentEditable,\n isHidden: isHidden\n };\n };\n\n var DOM$4 = DOMUtils$1.DOM;\n var appendStyle = function (editor, text) {\n var head = Element.fromDom(editor.getDoc().head);\n var tag = Element.fromTag('style');\n set(tag, 'type', 'text/css');\n append(tag, Element.fromText(text));\n append(head, tag);\n };\n var createParser = function (editor) {\n var parser = DomParser(editor.settings, 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, node, type;\n while (i--) {\n node = nodes[i];\n 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, node;\n while (i--) {\n 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, node;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new Node$1('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 CaretFinder.firstPositionIn(root).each(function (pos) {\n var node = pos.getNode();\n var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos;\n if (Env.browser.isIE()) {\n SelectionBookmark.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 ? DOM$4.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var initContentBody = function (editor, skipWrite) {\n var settings = editor.settings;\n var targetElm = editor.getElement();\n var doc = editor.getDoc(), body, contentCssText;\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 editor.on('remove', function () {\n var bodyEl = this.getBody();\n DOM$4.removeClass(bodyEl, 'mce-content-body');\n DOM$4.removeClass(bodyEl, 'mce-edit-focus');\n DOM$4.setAttrib(bodyEl, 'contentEditable', null);\n });\n DOM$4.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = domGlobals.document;\n editor.contentWindow = domGlobals.window;\n editor.bodyElement = targetElm;\n editor.contentAreaContainer = targetElm;\n settings.root_name = targetElm.nodeName.toLowerCase();\n }\n 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$1(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: Settings.shouldUseContentCssCors(editor),\n referrerPolicy: Settings.getReferrerPolicy(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = Serializer$1(settings, editor);\n editor.selection = Selection$1(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 TouchEvents.setup(editor);\n setup$h(editor);\n setup$i(editor);\n KeyboardOverrides.setup(editor);\n ForceBlocks.setup(editor);\n setup$6(editor);\n firePreInit(editor);\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 = Settings.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 editor.load({\n initial: true,\n format: 'html'\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 contentCssText = '';\n Tools.each(editor.contentStyles, function (style) {\n contentCssText += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText);\n }\n getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {\n initEditor(editor);\n }, function (urls) {\n initEditor(editor);\n });\n if (settings.content_style) {\n appendStyle(editor, settings.content_style);\n }\n };\n var InitContentBody = { initContentBody: initContentBody };\n\n var DOM$5 = DOMUtils$1.DOM;\n var relaxDomain = function (editor, ifr) {\n if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.browser.isIE()) {\n var bodyUuid = Uuid.uuid('mce');\n editor[bodyUuid] = function () {\n InitContentBody.initContentBody(editor);\n };\n var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + domGlobals.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 = Element.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 bodyId, bodyClass, iframeHTML;\n iframeHTML = Settings.getDocType(editor) + '';\n if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n bodyId = Settings.getBodyId(editor);\n bodyClass = Settings.getBodyClass(editor);\n if (Settings.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, Settings.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.initContentBody(editor);\n }\n };\n var InitIframe = { init: init$1 };\n\n var DOM$6 = DOMUtils$1.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 ErrorReporter.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(editor.settings.plugins.split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initIcons = function (editor) {\n var iconPackName = Tools.trim(editor.settings.icons);\n var currentIcons = editor.ui.registry.getAll().icons;\n var defaultIcons = getAll();\n var loadIcons = __assign(__assign({}, defaultIcons), 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 = editor.settings.theme;\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 = editor.settings.theme;\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 };\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(editor.settings.theme)) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(editor.settings.theme)) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var init$2 = function (editor) {\n editor.fire('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initPlugins(editor);\n var boxInfo = renderThemeUi(editor);\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n return InitContentBody.initContentBody(editor);\n } else {\n return InitIframe.init(editor, boxInfo);\n }\n };\n var Init = { init: init$2 };\n\n var DOM$7 = DOMUtils$1.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var languageCode = Settings.getLanguageCode(editor);\n var languageUrl = Settings.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 ErrorReporter.languageLoadError(editor, url_1, languageCode);\n });\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var settings = editor.settings, theme = settings.theme;\n if (isString(theme)) {\n if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\n var themeUrl = settings.theme_url;\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 Option.from(Settings.getIconsUrl(editor)).filter(function (url) {\n return url.length > 0;\n }).map(function (url) {\n return {\n url: url,\n name: Option.none()\n };\n });\n };\n var getIconsUrlMetaFromName = function (editor) {\n return Option.from(Settings.getIconPackName(editor)).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.js',\n name: Option.some(name)\n };\n });\n };\n var loadIcons = function (scriptLoader, editor) {\n getIconsUrlMetaFromUrl(editor).orThunk(function () {\n return getIconsUrlMetaFromName(editor);\n }).each(function (urlMeta) {\n scriptLoader.add(urlMeta.url, noop, undefined, function () {\n ErrorReporter.iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n var loadPlugins = function (editor, settings, suffix) {\n if (isArray(settings.plugins)) {\n settings.plugins = settings.plugins.join(' ');\n }\n Tools.each(settings.external_plugins, function (url, name) {\n PluginManager.load(name, url, noop, undefined, function () {\n ErrorReporter.pluginLoadError(editor, url, name);\n });\n settings.plugins += ' ' + name;\n });\n Tools.each(settings.plugins.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 ErrorReporter.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 ErrorReporter.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);\n loadPlugins(editor, editor.settings, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n Init.init(editor);\n }\n }, editor, function () {\n if (!editor.removed) {\n Init.init(editor);\n }\n });\n });\n };\n var render = function (editor) {\n var settings = editor.settings, id = editor.id;\n I18n.setCode(Settings.getLanguageCode(editor));\n var readyHandler = function () {\n DOM$7.unbind(domGlobals.window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$7.bind(domGlobals.window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n if (!Env.contentEditable) {\n return;\n }\n if (!settings.inline) {\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 (settings.hidden_input && !NodeType.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 (settings.submit_patch && !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 (settings.encoding === 'xml') {\n editor.on('GetContent', function (e) {\n if (e.save) {\n e.content = DOM$7.encode(e.content);\n }\n });\n }\n if (settings.add_form_submit_trigger) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (settings.add_unload_trigger) {\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 var Render = { render: render };\n\n var hasOnlyOneChild$1 = 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$1(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 || NodeType.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$1.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$1.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$1 = 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$1 = 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$1.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$1(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$1(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n var InsertList = {\n isListFragment: isListFragment,\n insertAtCaret: insertAtCaret,\n isParentBlockLi: isParentBlockLi,\n trimListItems: trimListItems,\n listItems: listItems$1\n };\n\n var isAfterNbsp = function (container, offset) {\n return NodeType.isText(container) && container.nodeValue[offset - 1] === nbsp;\n };\n var trimOrPadLeftRight = function (rng, html) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n var hasSiblingText = function (siblingName) {\n return container[siblingName] && container[siblingName].nodeType === 3;\n };\n if (container.nodeType === 3) {\n if (offset > 0) {\n html = html.replace(/^ /, ' ');\n } else if (!hasSiblingText('previousSibling')) {\n html = html.replace(/^ /, ' ');\n }\n if (offset < container.length) {\n html = html.replace(/ (
    |)$/, ' ');\n } else if (!hasSiblingText('nextSibling')) {\n html = html.replace(/( | )(
    |)$/, ' ');\n }\n }\n return html;\n };\n var trimNbspAfterDeleteAndPadValue = function (rng, value) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n if (container.nodeType === 3 && rng.collapsed) {\n if (container.data[offset] === nbsp) {\n container.deleteData(offset, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value += ' ';\n }\n } else if (container.data[offset - 1] === nbsp) {\n container.deleteData(offset - 1, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value = ' ' + value;\n }\n }\n }\n return value;\n };\n\n var isTableCell$5 = NodeType.matchNodeNames([\n 'td',\n 'th'\n ]);\n var selectionSetContent = function (editor, content) {\n var rng = editor.selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {\n container.insertData(offset - 1, ' ');\n container.deleteData(offset, 1);\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n editor.selection.setRng(rng);\n }\n editor.selection.setContent(content);\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 selectionSetContent(editor, value);\n }\n }\n };\n var trimBrsFromTableCell = function (dom, elm) {\n Option.from(dom.getParent(elm, 'td,th')).map(Element.fromDom).each(PaddingBr.trimBlockTrailingBr);\n };\n var reduceInlineTextElements = function (editor, merge) {\n var textInlineElements = editor.schema.getTextInlineElements();\n var dom = editor.dom;\n if (merge) {\n var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {\n if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {\n dom.remove(node, true);\n }\n }\n });\n }\n };\n var markFragmentElements = function (fragment) {\n var node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n var umarkFragmentElements = 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 parentEditableFalseElm, parentBlock, nextRng;\n var dom = editor.dom, selection = editor.selection;\n var node, node2;\n var getContentEditableFalseParent = function (node) {\n var root = editor.getBody();\n for (; node && node !== root; node = node.parentNode) {\n if (editor.dom.getContentEditable(node) === 'false') {\n return node;\n }\n }\n return null;\n };\n if (!marker) {\n return;\n }\n editor.selection.scrollIntoView(marker);\n parentEditableFalseElm = getContentEditableFalseParent(marker);\n if (parentEditableFalseElm) {\n dom.remove(marker);\n selection.select(parentEditableFalseElm);\n return;\n }\n var rng = dom.createRng();\n 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$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n 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$5(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 insertHtmlAtCaret = function (editor, value, details) {\n var parser, serializer, parentNode, rootNode, fragment, args;\n var marker, rng, node, bookmarkHtml, merge;\n var selection = editor.selection, dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(selection.getRng(), value);\n }\n parser = editor.parser;\n merge = details.merge;\n serializer = Serializer({ validate: editor.settings.validate }, editor.schema);\n 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 editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));\n editor.getDoc().execCommand('Delete', false, null);\n value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);\n }\n parentNode = selection.getNode();\n var parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n fragment = parser.parse(value, parserArgs);\n if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {\n rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);\n editor.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 selectionSetContent(editor, 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 umarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(editor.dom, editor.selection.getStart());\n editor.fire('SetContent', args);\n editor.addVisual();\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 insertHtmlAtCaret(editor, result.content, result.details);\n };\n var InsertContent = { insertAtCaret: insertAtCaret$1 };\n\n var nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor) {\n if (Outdent.backspaceDelete(editor, false)) {\n return;\n } else if (CefDelete.backspaceDelete(editor, false)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (BoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, false)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, false)) {\n return;\n } else {\n nativeCommand(editor, 'Delete');\n DeleteUtils.paddEmptyBody(editor);\n }\n };\n var forwardDeleteCommand = function (editor) {\n if (CefDelete.backspaceDelete(editor, true)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (BoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, true)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, true)) {\n return;\n } else {\n nativeCommand(editor, 'ForwardDelete');\n }\n };\n var DeleteCommands = {\n deleteCommand: deleteCommand,\n forwardDeleteCommand: forwardDeleteCommand\n };\n\n var ancestor$3 = function (scope, transform, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.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 Option.none();\n };\n var closest$2 = function (scope, transform, isRoot) {\n var current = transform(scope);\n return current.orThunk(function () {\n return isRoot(scope) ? Option.none() : ancestor$3(scope, transform, isRoot);\n });\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(legacyPropNames, propName).bind(function (legacyPropName) {\n return getOpt(elm, legacyPropName);\n });\n } else {\n return Option.none();\n }\n });\n };\n var isRoot = function (elm) {\n return eq(Element.fromDom(rootElm), elm);\n };\n return closest$2(Element.fromDom(elm), function (elm) {\n return getProperty(elm);\n }, isRoot);\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 }\n return fontSize;\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));\n };\n var getFontProp = function (propName) {\n return function (rootElm, elm) {\n return Option.from(elm).map(Element.fromDom).filter(isElement).bind(function (element) {\n return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));\n }).getOr('');\n };\n };\n var FontInfo = {\n getFontSize: getFontProp('font-size'),\n getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),\n toPt: toPt\n };\n\n var findFirstCaretElement = function (editor) {\n return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {\n var container = caret.container();\n return NodeType.isText(container) ? container.parentNode : container;\n });\n };\n var isRangeAtStartOfNode = function (rng, root) {\n return rng.startContainer === root && rng.startOffset === 0;\n };\n var getCaretElement = function (editor) {\n return Option.from(editor.selection.getRng()).bind(function (rng) {\n var root = editor.getBody();\n return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));\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 = Settings.getFontStyleValues(editor);\n var fontClasses = Settings.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 getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n });\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 getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n });\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, customCommand, 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 SelectionBookmark.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 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 var self = this;\n type = type || 'exec';\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': function () {\n },\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 listElm, listParent;\n self.execNativeCommand(command);\n 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 '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 InsertContent.insertAtCaret(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 InsertNewLine.insert(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': function () {\n },\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 var anchor;\n if (typeof value === 'string') {\n value = { href: value };\n }\n 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(), NodeType.isContentEditableTrue);\n if (editingHost) {\n var rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n },\n 'delete': function () {\n DeleteCommands.deleteCommand(editor);\n },\n 'forwardDelete': function () {\n DeleteCommands.forwardDeleteCommand(editor);\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n InsertBr.insert(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var nodes = editor.selection.isCollapsed() ? [editor.dom.getParent(editor.selection.getNode(), editor.dom.isBlock)] : editor.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 };\n return EditorCommands;\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 (name, args) {\n var handlers, i, l, callback;\n name = name.toLowerCase();\n args = args || {};\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 handlers = this.bindings[name];\n if (handlers) {\n for (i = 0, l = handlers.length; i < l; i++) {\n 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 var handlers, names, i;\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 names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = this.bindings[name];\n if (!handlers) {\n handlers = this.bindings[name] = [];\n this.toggleEvent(name, 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 i, handlers, bindingName, names, hi;\n if (name) {\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = this.bindings[name];\n if (!name) {\n for (bindingName in this.bindings) {\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 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[name] = handlers;\n }\n }\n }\n if (!handlers.length) {\n this.toggleEvent(name, false);\n delete this.bindings[name];\n }\n }\n }\n } else {\n for (name in this.bindings) {\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 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, 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 Option.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 = Element.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 (EditorFocus.hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n }\n };\n var isReadOnly = function (editor) {\n return editor.readonly;\n };\n var registerFilters = function (editor) {\n editor.parser.addAttributeFilter('contenteditable', function (nodes) {\n if (isReadOnly(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(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 isInAnchor = function (editor, target) {\n return editor.dom.getParent(target, 'a') !== null;\n };\n var preventReadOnlyEvents = function (editor, e) {\n var target = e.target;\n if (isClickEvent(e) && !VK.metaKeyPressed(e) && isInAnchor(editor, target)) {\n e.preventDefault();\n }\n };\n var registerReadOnlySelectionBlockers = function (editor) {\n editor.on('ShowCaret', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('ObjectSelected', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n };\n\n var DOM$8 = DOMUtils$1.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 if (editor.settings.event_root) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$8.select(editor.settings.event_root)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n var isListening = function (editor) {\n return !editor.hidden && !isReadOnly(editor);\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly(editor)) {\n preventReadOnlyEvents(editor, e);\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var eventRootElm, delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n eventRootElm = getEventTarget(editor, eventName);\n if (editor.settings.event_root) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n var name;\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n for (name in customEventRootDelegates) {\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 var name;\n if (self.delegates) {\n for (name in self.delegates) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\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 domGlobals.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 domGlobals.console.error('problem while deactivating editor mode ' + mode + ':', e);\n }\n }\n }), _a));\n };\n\n var create$4 = 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(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 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 cmd;\n cmd = cmdFunc;\n if (typeof cmdFunc === 'string') {\n cmdFunc = function () {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n cmdFunc = function () {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n }\n each$g(explode$3(Tools.trim(pattern)), function (pattern) {\n var shortcut = self.createShortcut(pattern, desc, cmdFunc, 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.parseShortcut = function (pattern) {\n var id, 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 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 Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts;\n shortcuts = Tools.map(explode$3(pattern, '>'), this.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$5 = 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$5();\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(domGlobals.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 = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\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 items, breakPoint = 0, out = '', i, l;\n var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n 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 = [], tr, outPath;\n 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$1.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$1.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy);\n }\n AddOnManager$1.languageLoad = this.settings.language_load;\n AddOnManager$1.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 = { registry: registry() };\n var self = this;\n var modeInstance = create$4(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.render(this);\n };\n Editor.prototype.focus = function (skipFocus) {\n EditorFocus.focus(this, skipFocus);\n };\n Editor.prototype.hasFocus = function () {\n return EditorFocus.hasFocus(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, Array.prototype.slice.call(arguments, 1));\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.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 = NodeType.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 (!NodeType.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(this, content, args);\n };\n Editor.prototype.getContent = function (args) {\n return getContent(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(this, this.startContent, { format: 'raw' });\n } else {\n setContent(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 var self = this;\n var settings = self.settings;\n var dom = self.dom;\n var cls;\n elm = elm || self.getBody();\n if (self.hasVisual === undefined) {\n self.hasVisual = settings.visual;\n }\n each$i(dom.select('table,a', elm), function (elm) {\n var value;\n switch (elm.nodeName) {\n case 'TABLE':\n cls = settings.visual_table_class || 'mce-item-table';\n value = dom.getAttrib(elm, 'border');\n if ((!value || value === '0') && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n return;\n case 'A':\n if (!dom.getAttrib(elm, 'href')) {\n value = dom.getAttrib(elm, 'name') || elm.id;\n cls = settings.visual_anchor_class || 'mce-item-anchor';\n if (value && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n }\n return;\n }\n });\n self.fire('VisualAid', {\n element: elm,\n hasVisual: self.hasVisual\n });\n };\n Editor.prototype.remove = function () {\n remove$6(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$1.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 = domGlobals.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: '2.2',\n releaseDate: '2020-04-23',\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(domGlobals.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 = domGlobals.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 && domGlobals.document.currentScript) {\n var src = domGlobals.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 FocusController.setup(self);\n },\n overrideDefaults: function (defaultSettings) {\n var baseUrl, suffix;\n baseUrl = defaultSettings.base_url;\n if (baseUrl) {\n this._setBaseUrl(baseUrl);\n }\n suffix = defaultSettings.suffix;\n if (defaultSettings.suffix) {\n this.suffix = suffix;\n }\n this.defaultSettings = defaultSettings;\n var pluginBaseUrls = defaultSettings.plugin_base_urls;\n for (var name_1 in pluginBaseUrls) {\n AddOnManager$1.PluginManager.urls[name_1] = pluginBaseUrls[name_1];\n }\n },\n init: function (settings) {\n var self = this;\n var result, invalidInlineTargets;\n 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 = elm.name;\n if (id && !DOM$a.get(id)) {\n id = elm.name;\n } else {\n id = DOM$a.uniqueId();\n }\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, Array.prototype.slice.call(arguments, 2));\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 l, targets = [];\n if (Env.browser.isIE() && Env.browser.version.major < 11) {\n ErrorReporter.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 ErrorReporter.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 l = settings.elements || '';\n if (l.length > 0) {\n each$j(explode$4(l), function (id) {\n var elm;\n if (elm = DOM$a.get(id)) {\n targets.push(elm);\n } else {\n each$j(domGlobals.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 ErrorReporter.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;\n 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', 0, 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 function RangeUtils(dom) {\n var walk = function (rng, callback) {\n return RangeWalk.walk(dom, rng, callback);\n };\n var split = split$1;\n var normalize = function (rng) {\n return NormalizeRange.normalize(dom, rng).fold(constant(false), 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\n };\n }\n (function (RangeUtils) {\n RangeUtils.compareRanges = RangeCompare.isEq;\n RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode;\n }(RangeUtils || (RangeUtils = {})));\n var RangeUtils$1 = RangeUtils;\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 domGlobals.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 = domGlobals.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$6 = 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$6();\n\n var min = Math.min, max = Math.max, round$2 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x, y, w, h, targetW, targetH;\n x = targetRect.x;\n y = targetRect.y;\n w = rect.w;\n h = rect.h;\n targetW = targetRect.w;\n targetH = targetRect.h;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += round$2(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += round$2(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= h;\n }\n if (rel[4] === 'r') {\n x -= w;\n }\n if (rel[3] === 'c') {\n y -= round$2(h / 2);\n }\n if (rel[4] === 'c') {\n x -= round$2(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, y1, x2, y2;\n x1 = max(rect.x, cropRect.x);\n y1 = max(rect.y, cropRect.y);\n x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n 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 underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;\n x1 = rect.x;\n y1 = rect.y;\n x2 = rect.x + rect.w;\n y2 = rect.y + rect.h;\n cx2 = clampRect.x + clampRect.w;\n cy2 = clampRect.y + clampRect.h;\n underflowX1 = max(0, clampRect.x - x1);\n underflowY1 = max(0, clampRect.y - y1);\n overflowX2 = max(0, x2 - cx2);\n 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 each$k = Tools.each, extend$5 = Tools.extend;\n var extendClass, initializing;\n var Class = function () {\n };\n Class.extend = extendClass = function (prop) {\n var self = this;\n var _super = self.prototype;\n var prototype, name, member;\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 var ret;\n self._super = _super[name];\n ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n prototype = new self();\n initializing = false;\n if (prop.Mixins) {\n each$k(prop.Mixins, function (mixin) {\n for (var name_1 in mixin) {\n if (name_1 !== 'init') {\n prop[name_1] = mixin[name_1];\n }\n }\n });\n if (_super.Mixins) {\n prop.Mixins = _super.Mixins.concat(prop.Mixins);\n }\n }\n if (prop.Methods) {\n each$k(prop.Methods.split(','), function (name) {\n prop[name] = dummy;\n });\n }\n if (prop.Properties) {\n each$k(prop.Properties.split(','), function (name) {\n var fieldName = '_' + name;\n prop[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 (prop.Statics) {\n each$k(prop.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (prop.Defaults && _super.Defaults) {\n prop.Defaults = extend$5({}, _super.Defaults, prop.Defaults);\n }\n for (name in prop) {\n member = prop[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$3 = 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, d, minRGB, maxRGB;\n h = 0;\n s = 0;\n v = 0;\n r = r / 255;\n g = g / 255;\n b = b / 255;\n minRGB = min$1(r, min$1(g, b));\n 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 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$3(h),\n s: round$3(s * 100),\n v: round$3(v * 100)\n };\n };\n var hsvToRgb = function (hue, saturation, brightness) {\n var side, chroma, x, match;\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$3(255 * brightness);\n return;\n }\n side = hue / 60;\n chroma = brightness * saturation;\n x = chroma * (1 - Math.abs(side % 2 - 1));\n 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$3(255 * (r + match));\n g = round$3(255 * (g + match));\n b = round$3(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$1.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 domGlobals.XMLHttpRequest();\n if (xhr) {\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\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$8 = 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 localStorage = domGlobals.window.localStorage;\n } catch (e) {\n localStorage = create$8();\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 },\n dom: {\n EventUtils: EventUtils,\n Sizzle: Sizzle,\n DomQuery: DomQuery,\n TreeWalker: TreeWalker,\n TextSeeker: TextSeeker,\n DOMUtils: DOMUtils$1,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils$1,\n Serializer: Serializer$1,\n ControlSelection: ControlSelection,\n BookmarkManager: BookmarkManager$1,\n Selection: Selection$1,\n Event: EventUtils.Event\n },\n html: {\n Styles: Styles,\n Entities: Entities,\n Node: Node$1,\n Schema: Schema,\n SaxParser: SaxParser$1,\n DomParser: DomParser,\n Writer: Writer,\n Serializer: Serializer\n },\n Env: Env,\n AddOnManager: AddOnManager$1,\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$1.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: AddOnManager$1.PluginManager,\n ThemeManager: AddOnManager$1.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}(window));\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.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var never = constant(false);\n var always = constant(true);\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 punctuationStr = '[!-#%-*,-\\\\/:;?@\\\\[-\\\\]_{}\\xA1\\xAB\\xB7\\xBB\\xBF;\\xB7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uff3f\\uFF5B\\uFF5D\\uFF5F-\\uFF65]';\n var regExps = {\n aletter: '[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05F3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24B6-\\u24E9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]',\n midnumlet: '[-\\'\\\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]',\n midletter: '[:\\xB7\\xB7\\u05F4\\u2027\\uFE13\\uFE55\\uFF1A]',\n midnum: '[\\xB1+*/,;;\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B]',\n numeric: '[0-9\\u0660-\\u0669\\u066B\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]',\n cr: '\\\\r',\n lf: '\\\\n',\n newline: '[\\x0B\\f\\x85\\u2028\\u2029]',\n extend: '[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\uA672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]',\n format: '[\\xAD\\u0600-\\u0603\\u06DD\\u070F\\u17b4\\u17b5\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF\\uFFF9-\\uFFFB]',\n katakana: '[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32D0-\\u32FE\\u3300-\\u3357\\uff66-\\uff9d]',\n extendnumlet: '[=_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f\\u2200-\\u22FF<>]',\n punctuation: punctuationStr\n };\n var characterIndices = {\n ALETTER: 0,\n MIDNUMLET: 1,\n MIDLETTER: 2,\n MIDNUM: 3,\n NUMERIC: 4,\n CR: 5,\n LF: 6,\n NEWLINE: 7,\n EXTEND: 8,\n FORMAT: 9,\n KATAKANA: 10,\n EXTENDNUMLET: 11,\n AT: 12,\n OTHER: 13\n };\n var SETS = [\n new RegExp(regExps.aletter),\n new RegExp(regExps.midnumlet),\n new RegExp(regExps.midletter),\n new RegExp(regExps.midnum),\n new RegExp(regExps.numeric),\n new RegExp(regExps.cr),\n new RegExp(regExps.lf),\n new RegExp(regExps.newline),\n new RegExp(regExps.extend),\n new RegExp(regExps.format),\n new RegExp(regExps.katakana),\n new RegExp(regExps.extendnumlet),\n new RegExp('@')\n ];\n var EMPTY_STRING = '';\n var PUNCTUATION = new RegExp('^' + regExps.punctuation + '$');\n var WHITESPACE = /^\\s+$/;\n\n var 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 if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\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 isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\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 from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var SETS$1 = SETS;\n var OTHER = characterIndices.OTHER;\n var getType = function (char) {\n var type = OTHER;\n var setsLength = SETS$1.length;\n for (var j = 0; j < setsLength; ++j) {\n var set = SETS$1[j];\n if (set && set.test(char)) {\n type = j;\n break;\n }\n }\n return type;\n };\n var memoize = function (func) {\n var cache = {};\n return function (char) {\n if (cache[char]) {\n return cache[char];\n } else {\n var result = func(char);\n cache[char] = result;\n return result;\n }\n };\n };\n var classify = function (characters) {\n var memoized = memoize(getType);\n return map(characters, memoized);\n };\n\n var isWordBoundary = function (map, index) {\n var prevType;\n var type = map[index];\n var nextType = map[index + 1];\n var nextNextType;\n if (index < 0 || index > map.length - 1 && index !== 0) {\n return false;\n }\n if (type === characterIndices.ALETTER && nextType === characterIndices.ALETTER) {\n return false;\n }\n nextNextType = map[index + 2];\n if (type === characterIndices.ALETTER && (nextType === characterIndices.MIDLETTER || nextType === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextNextType === characterIndices.ALETTER) {\n return false;\n }\n prevType = map[index - 1];\n if ((type === characterIndices.MIDLETTER || type === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextType === characterIndices.ALETTER && prevType === characterIndices.ALETTER) {\n return false;\n }\n if ((type === characterIndices.NUMERIC || type === characterIndices.ALETTER) && (nextType === characterIndices.NUMERIC || nextType === characterIndices.ALETTER)) {\n return false;\n }\n if ((type === characterIndices.MIDNUM || type === characterIndices.MIDNUMLET) && nextType === characterIndices.NUMERIC && prevType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.NUMERIC && (nextType === characterIndices.MIDNUM || nextType === characterIndices.MIDNUMLET) && nextNextType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.EXTEND || type === characterIndices.FORMAT || prevType === characterIndices.EXTEND || prevType === characterIndices.FORMAT || nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT) {\n return false;\n }\n if (type === characterIndices.CR && nextType === characterIndices.LF) {\n return false;\n }\n if (type === characterIndices.NEWLINE || type === characterIndices.CR || type === characterIndices.LF) {\n return true;\n }\n if (nextType === characterIndices.NEWLINE || nextType === characterIndices.CR || nextType === characterIndices.LF) {\n return true;\n }\n if (type === characterIndices.KATAKANA && nextType === characterIndices.KATAKANA) {\n return false;\n }\n if (nextType === characterIndices.EXTENDNUMLET && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTENDNUMLET)) {\n return false;\n }\n if (type === characterIndices.EXTENDNUMLET && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA)) {\n return false;\n }\n if (type === characterIndices.AT) {\n return false;\n }\n return true;\n };\n\n var zeroWidth = '\\uFEFF';\n\n var EMPTY_STRING$1 = EMPTY_STRING;\n var WHITESPACE$1 = WHITESPACE;\n var PUNCTUATION$1 = PUNCTUATION;\n var isProtocol = function (str) {\n return str === 'http' || str === 'https';\n };\n var findWordEnd = function (characters, startIndex) {\n var i;\n for (i = startIndex; i < characters.length; i++) {\n if (WHITESPACE$1.test(characters[i])) {\n break;\n }\n }\n return i;\n };\n var findUrlEnd = function (characters, startIndex) {\n var endIndex = findWordEnd(characters, startIndex + 1);\n var peakedWord = characters.slice(startIndex + 1, endIndex).join(EMPTY_STRING$1);\n return peakedWord.substr(0, 3) === '://' ? endIndex : startIndex;\n };\n var findWords = function (chars, sChars, characterMap, options) {\n var words = [];\n var word = [];\n for (var i = 0; i < characterMap.length; ++i) {\n word.push(chars[i]);\n if (isWordBoundary(characterMap, i)) {\n var ch = sChars[i];\n if ((options.includeWhitespace || !WHITESPACE$1.test(ch)) && (options.includePunctuation || !PUNCTUATION$1.test(ch))) {\n var startOfWord = i - word.length + 1;\n var endOfWord = i + 1;\n var str = sChars.slice(startOfWord, endOfWord).join(EMPTY_STRING$1);\n if (isProtocol(str)) {\n var endOfUrl = findUrlEnd(sChars, i);\n var url = chars.slice(endOfWord, endOfUrl);\n Array.prototype.push.apply(word, url);\n i = endOfUrl;\n }\n words.push(word);\n }\n word = [];\n }\n }\n return words;\n };\n var getDefaultOptions = function () {\n return {\n includeWhitespace: false,\n includePunctuation: false\n };\n };\n var getWords = function (chars, extract, options) {\n options = __assign(__assign({}, getDefaultOptions()), options);\n var filteredChars = [];\n var extractedChars = [];\n for (var i = 0; i < chars.length; i++) {\n var ch = extract(chars[i]);\n if (ch !== zeroWidth) {\n filteredChars.push(chars[i]);\n extractedChars.push(ch);\n }\n }\n var characterMap = classify(extractedChars);\n return findWords(filteredChars, extractedChars, characterMap, options);\n };\n\n var getWords$1 = getWords;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var getText = function (node, schema) {\n var blockElements = schema.getBlockElements();\n var shortEndedElements = schema.getShortEndedElements();\n var isNewline = function (node) {\n return blockElements[node.nodeName] || shortEndedElements[node.nodeName];\n };\n var textBlocks = [];\n var txt = '';\n var treeWalker = new global$1(node, node);\n while (node = treeWalker.next()) {\n if (node.nodeType === 3) {\n txt += node.data;\n } else if (isNewline(node) && txt.length) {\n textBlocks.push(txt);\n txt = '';\n }\n }\n if (txt.length) {\n textBlocks.push(txt);\n }\n return textBlocks;\n };\n\n var strLen = function (str) {\n return str.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n };\n var countWords = function (node, schema) {\n var text = getText(node, schema).join('\\n');\n return getWords$1(text.split(''), identity).length;\n };\n var countCharacters = function (node, schema) {\n var text = getText(node, schema).join('');\n return strLen(text);\n };\n var countCharactersWithoutSpaces = function (node, schema) {\n var text = getText(node, schema).join('').replace(/\\s/g, '');\n return strLen(text);\n };\n\n var createBodyCounter = function (editor, count) {\n return function () {\n return count(editor.getBody(), editor.schema);\n };\n };\n var createSelectionCounter = function (editor, count) {\n return function () {\n return count(editor.selection.getRng().cloneContents(), editor.schema);\n };\n };\n var createBodyWordCounter = function (editor) {\n return createBodyCounter(editor, countWords);\n };\n var get = function (editor) {\n return {\n body: {\n getWordCount: createBodyWordCounter(editor),\n getCharacterCount: createBodyCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createBodyCounter(editor, countCharactersWithoutSpaces)\n },\n selection: {\n getWordCount: createSelectionCounter(editor, countWords),\n getCharacterCount: createSelectionCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createSelectionCounter(editor, countCharactersWithoutSpaces)\n },\n getCount: createBodyWordCounter(editor)\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var fireWordCountUpdate = function (editor, api) {\n editor.fire('wordCountUpdate', {\n wordCount: {\n words: api.body.getWordCount(),\n characters: api.body.getCharacterCount(),\n charactersWithoutSpaces: api.body.getCharacterCountWithoutSpaces()\n }\n });\n };\n\n var updateCount = function (editor, api) {\n fireWordCountUpdate(editor, api);\n };\n var setup = function (editor, api, delay) {\n var debouncedUpdate = global$2.debounce(function () {\n return updateCount(editor, api);\n }, delay);\n editor.on('init', function () {\n updateCount(editor, api);\n global$2.setEditorTimeout(editor, function () {\n editor.on('SetContent BeforeAddUndo Undo Redo keyup', debouncedUpdate);\n }, 0);\n });\n };\n\n var open = function (editor, api) {\n editor.windowManager.open({\n title: 'Word Count',\n body: {\n type: 'panel',\n items: [{\n type: 'table',\n header: [\n 'Count',\n 'Document',\n 'Selection'\n ],\n cells: [\n [\n 'Words',\n String(api.body.getWordCount()),\n String(api.selection.getWordCount())\n ],\n [\n 'Characters (no spaces)',\n String(api.body.getCharacterCountWithoutSpaces()),\n String(api.selection.getCharacterCountWithoutSpaces())\n ],\n [\n 'Characters',\n String(api.body.getCharacterCount()),\n String(api.selection.getCharacterCount())\n ]\n ]\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }]\n });\n };\n\n var register = function (editor, api) {\n editor.ui.registry.addButton('wordcount', {\n tooltip: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n editor.ui.registry.addMenuItem('wordcount', {\n text: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n };\n\n function Plugin (delay) {\n if (delay === void 0) {\n delay = 300;\n }\n global.add('wordcount', function (editor) {\n var api = get(editor);\n register(editor, api);\n setup(editor, api, delay);\n return api;\n });\n }\n\n Plugin();\n\n}());\n","/**\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.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var setContent = function (editor, html) {\n editor.focus();\n editor.undoManager.transact(function () {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n var getContent = function (editor) {\n return editor.getContent({ source_view: true });\n };\n var Content = {\n setContent: setContent,\n getContent: getContent\n };\n\n var open = function (editor) {\n var editorContent = Content.getContent(editor);\n editor.windowManager.open({\n title: 'Source Code',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n type: 'textarea',\n name: 'code'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { code: editorContent },\n onSubmit: function (api) {\n Content.setContent(editor, api.getData().code);\n api.close();\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceCodeEditor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('code', {\n icon: 'sourcecode',\n tooltip: 'Source code',\n onAction: function () {\n return Dialog.open(editor);\n }\n });\n editor.ui.registry.addMenuItem('code', {\n icon: 'sourcecode',\n text: 'Source code',\n onAction: function () {\n return Dialog.open(editor);\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('code', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n return {};\n });\n }\n\n Plugin();\n\n}());\n"],"sourceRoot":""}