chunk-8788ed04.9c44f13d.js.map 4.2 MB

1
  1. {"version":3,"sources":["webpack:///./node_modules/tinymce/themes/silver/theme.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/themes/silver/index.js","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/tinymce/plugins/media/plugin.js","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./resources/src/views/announcements/Form.vue?7d40","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./resources/src/api/announcements.js","webpack:///./resources/src/views/announcements/Form.vue?a691","webpack:///./resources/src/components/Tinymce/TinymceEditor.vue?f0b4","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:///resources/src/components/Tinymce/TinymceEditor.vue","webpack:///./resources/src/components/Tinymce/TinymceEditor.vue?1b04","webpack:///./resources/src/components/Tinymce/TinymceEditor.vue","webpack:///resources/src/views/announcements/Form.vue","webpack:///./resources/src/views/announcements/Form.vue?014c","webpack:///./resources/src/views/announcements/Form.vue","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/TinyMCE.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/plugins/wordcount/plugin.js"],"names":["domGlobals","noop","noarg","f","compose","fa","fb","args","_i","arguments","length","apply","compose1","fbc","fab","a","constant","value","identity","x","curry","fn","initialArgs","restArgs","all","concat","not","t","die","msg","Error","never","always","global$1","tinymce","util","Tools","resolve","__assign","Object","assign","s","i","n","p","prototype","hasOwnProperty","call","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArrays","il","r","Array","k","j","jl","SimpleResultType","none","NONE","eq","o","isNone","thunk","id","me","fold","_s","is","isSome","getOr","getOrThunk","getOrDie","getOrNull","getOrUndefined","undefined","or","orThunk","map","each","bind","exists","forall","filter","equals","equals_","toArray","toString","some","constant_a","self","v","elementEq","b","from","Option","typeOf","isPrototypeOf","constructor","name","String","isType","type","isSimpleType","isString","isObject","isArray","isBoolean","isUndefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","len","nativeSlice","slice","nativeIndexOf","nativePush","push","rawIndexOf","ts","xs","contains","range","num","chunk","array","size","eachr","partition","pass","fail","arr","foldr","acc","foldl","findUntil","until","find","findIndex","flatten","reverse","difference","a1","a2","mapToObject","sort","comparator","copy","head","last","from$1","findMap","_opt","_f","mapError","_","onValue","toOption","isValue","isError","error","message","opt","onError","fromOption","err","Result","res","stype","serror","svalue","partition$1","results","values","errors","obj","val","map$1","Value","bind$1","bindError","toResult","fromResult","SimpleResult","keys","each$1","props","map$2","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","filter$1","mapToArray","find$1","get","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","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","_instantiator","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","_v","strictObjOf","objSchema","strictArrayOfObj","strictArrayOf","option","optionOf","optionNumber","optionString","optionFunction","optionArrayOf","optionObjOf","optionObjOfOnly","defaulted$1","defaultedOf","defaultedNumber","defaultedString","defaultedStringEnum","defaultedBoolean","defaultedFunction","defaultedPostMsg","defaultedArrayOf","defaultedObjOf","state$1","Cell","initial","set","fromHtml","html","scope","doc","document","div","createElement","innerHTML","hasChildNodes","childNodes","fromDom","fromTag","tag","node","fromText","text","createTextNode","dom","fromPoint","docElm","y","elementFromPoint","Element","compareDocumentPosition","documentPositionContainedBy","Node","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","unknown$1","nu$2","current","version","info","isBrowser","isEdge","isChrome","isIE","isOpera","isFirefox","isSafari","Browser","windows","ios","android","linux","osx","solaris","freebsd","chromeos","unknown$2","nu$3","isOS","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","blank","trim","normalVersionRegex","checkContains","uastring","PlatformInfo","detect$2","deviceType","PlatformDetection","query","window","matchMedia","matches","platform","navigator","detect$3","DOCUMENT","DOCUMENT_FRAGMENT","ELEMENT","TEXT","element","selector","nodeType","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","querySelectorAll","one","querySelector","eq$1","e1","e2","regularContains","d1","d2","ieContains","contains$2","ensureIsRoot","isRoot","ancestor","transform","stop","parentNode","el","transformed","closest","isSource","component","simulatedEvent","event","nu$4","parts","all$1","handlers","handler","any","read","can","abort","run","fuse","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","Function","nodeName","isType$1","isElement","isText","isDocument","isDocumentFragment","owner","ownerDocument","documentOrOwner","dos","documentElement","defaultView","parent","offsetParent","nextSibling","children","child","index","cs","firstChild","before","marker","parent$1","insertBefore","after","sibling","append","prepend","firstChild$1","appendChild","appendAt","before$1","elements","append$1","empty","textContent","rogue","remove","removeChild","unwrap","wrapper","children$1","fromHtml$1","get$1","content","owner$1","docDom","fragment","createDocumentFragment","contentElements","getOuter","container","clone","cloneNode","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","freeze","__proto__","unique","generate$1","prefix","date","Date","time","getTime","random","Math","floor","idAttr","prefix$1","idAttr$1","write","writeOnly","defineProperty","writable","read$1","generate$2","make","NoContextApi","getComp","debugInfo","triggerFocus","triggerEscape","build","addToWorld","removeFromWorld","addToGui","removeFromGui","broadcast","broadcastOn","broadcastEvent","isConnected","singleton","markAsBehaviourApi","apiName","apiFunction","endIndex","openBracketIndex","parameters","substring","split","toFunctionAnnotation","cleanParameters","markAsExtraApi","extraName","markAsSketchApi","premadeTag","premade","comp","getPremade","spec","makeApi","rest","getApis","NoState","init","nu$5","readState","generateFrom","validated","behaviours","list","optBlobThunk","output","blob","config","getBehaviours","bData","getData","byInnerKey","indexKey","chain","nu$6","classes","attributes","styles","merge$1","defnA","mod","combine","baseMod","modsByBehaviour","behaviour","exhibit","byAspect","modification","combineObjects","combinedClasses","combinedAttributes","combinedStyles","sortKeys","keyName","order","sorted","aKey","bKey","aIndex","bIndex","uncurried","purpose","curried","cHandler","curryArgs","descHandler","extraArgs","getCurried","behaviourTuple","nameToHandlers","groupByEvents","behaviourEvents","combine$1","eventOrder","byEventName","combineGroups","assemble","rawHandler","missingOrderError","eventName","tuples","fuse$1","sortedTuples","combined","assembled","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","isShadowRoot","supported","attachShadow","getRootNode","isSupported$1","getContentContainer","body","getShadowRoot","getShadowHost","host","getOriginalEventTarget","isOpenShadowHost","eventAny","composed","composedPath","shadowRoot","inBody","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","d","paths","frameElement","Navigation","find$3","frames","offset","loc","pointed","point","rect","bounds$1","xy","w","absolute$1","position","ClosestOrAncestor","EventConfiguration","ancestor$1","descendant","descend","child_1","closest$2","ancestor$2","descendant$1","closest$3","is$1","find$4","queryElem","dependent","dep","manager","ariaId","link","unlink","isAriaPartOf","isPartOf","unknown$3","AttributeValue","eventConfig","makeEventLogger","initialTarget","sequence","startTime","logEventCut","_name","logEventStopped","logNoParent","logEventNoHandlers","logEventResponse","finishTime","processEvent","status","patterns","NORMAL","noLogger","LOGGING","logger","STOP","getTrace","stack","lines","line","ignoreEvent","monitorEvent","menuFields","itemFields","itemSchema","_initSize","itemMarkers","tieredMenuMarkers","markers","required","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","snapshot","initSize","nu$7","bubble","direction","boundsRestriction","adt$2","southeast","southwest","northeast","northwest","south","north","east","west","cata","cataVertical","middle","cataHorizontal","getRestriction","anchor","restriction","restrictions","dir","adjustBounds","boundsRestrictions","bubbleOffsets","applyRestriction","bubbleOffset","adjustedLeft","adjustedTop","adjustedRight","adjustedBottom","eastX","middleX","westX","northY","southY","centreY","eastEdgeX","westEdgeX","southeast$1","bubbles","southwest$1","northeast$1","northwest$1","north$1","south$1","east$1","west$1","all$2","allRtl","aboveOrBelow","aboveOrBelowRtl","belowOrAbove","belowOrAboveRtl","executeEvent","bConfig","bState","executor","loadEvent","_simulatedEvent","create","active","configSchema","schemaSchema","doCreate","createModes","modes","wrapApi","bName","revokeBehaviour","getConfig","wrappedApis","apiF","wrappedExtra","extraF","revoke","prepared","configAsRaw","initialConfig","behaviourInfo","exhibitor","derive$1","capabilities","simpleSchema","create$1","modeSchema","createModes$1","branchKey","chooseChannels","channels","universal","events$1","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","onReceive","ActiveReceiving","ReceivingSchema","Receiving","posConfig","useFixed","ActivePosition","getDocument","focus$1","blur","hasFocus","root","activeElement","preserve","ownerDoc","refocus","focused","oldFocus","newFocus","NuPositionCss","applyPositionCss","addPx","adt$3","relative","fixed","positionWithDirection","posName","decision","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","reposition","origin","toBox","rel","viewport$1","pos","removeScroll","outerScroll","cata$1","onNone","onRelative","onFixed","anchorBox","box$1","cycleBy","delta","min","clamp","adt$4","fit","nofit","calcReposition","newX","newY","boundsX","boundsY","boundsWidth","boundsHeight","xInBounds","yInBounds","originInBounds","xFit","yFit","sizeInBounds","deltaW","abs","deltaH","maxX","maxY","limitX","limitY","attempt","candidateX","candidateY","bubbleLeft","bubbleTop","adjustedBounds","boundsBottom","boundsRight","upAvailable","downAvailable","maxHeight","westAvailable","eastAvailable","maxWidth","on","classesOn","off","classesOff","candidateYforTest","attempts","elementBox","panelWidth","panelHeight","attemptBestFit","layout","attemptLayout","newReposition","newDeltaW","newDeltaH","improved","abc","bestNext","elementSize","options","preference","setClasses","classInfo","setHeight","maxHeightFunction","setWidth","maxWidthFunction","setMaxHeight","anchored","available","expandable","defaultOr","dephault","simple","layouts","overrideOptions","go","allAlignments","nu$8","yoffset","getClasses","xDelta","yDelta","alignmentsOn","alignmentsOff","innerNorthwest","innerNortheast","innerNorth","innerSouthwest","innerSoutheast","innerSouth","innerWest","innerEast","nu$9","onDirection","isLtr","isRtl","getDirection","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","soffset","finish","foffset","SimRange","adt$5","cata$2","onBefore","onOn","onAfter","getStart","situ","before$2","after$1","Situ","adt$6","domRange","exact","exactFromRange","simRange","getStart$1","selection","rng","startContainer","startSitu","_finishSitu","_soffset","_finish","_foffset","relative$1","getWin","range$1","Selection","setStart","setStartBefore","setStartAfter","setFinish","setEndBefore","setEnd","setEndAfter","relativeToNative","finishSitu","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","descendOnce","adt$8","screen","toFixed","toAbsolute","sum","points","sumAsFixed","positions","sumAsAbsolute","absolute$2","hasSameOwner","frameOwner","compOwner","getRootPoint","capRect","newLeft","newTop","newWidth","newHeight","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","showAbove","layoutsRtl","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","_data","getAttachPoint","built","open","newState","onOpen","setContent","openWhileCloaked","transaction","cloak","decloak","close","onClose","clear","isOpen","_sandbox","_sConfig","isPartOf$1","getState","store","cssKey","newValue","restore","oldValue","_sState","sink","cloakVisibilityAttr","hasPosition","SandboxApis","events$2","sandboxConfig","sandboxState","ActiveSandbox","SandboxSchema","contents","SandboxState","Sandboxing","dismissPopups","repositionPopups","mouseReleased","schema$2","receivingChannel","rawSpec","isPart","isExtraPart","fireEventInstead","fe","schema$3","receivingChannel$1","doReposition","onLoad","repConfig","repState","onUnload","setValue","getValue","getState$1","RepresentApis","events$3","resetOnDom","_se","ActiveRepresenting","memory","mode","isNotSet","manual","dataset","dataByValue","dataByText","lookup","itemString","update","items","currentDataByValue","currentDataByText","newDataByValue","newDataByText","meta","init$1","RepresentState","setValue$1","onSetValue","getValue$1","getDataKey","getFallbackEntry","onLoad$1","initialValue","onUnload$1","DatasetStore","getValue$2","_repState","setValue$2","onLoad$2","ManualStore","setValue$3","getValue$3","onLoad$3","initVal","onUnload$2","MemoryStore","RepresentSchema","Representing","setValueFrom","source","field$1","forbidden","get$c","dump","augment","SketchBehaviours","_placeholder","adt$9","single","multiple","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","uiType","substitute","req","childSpecs","substituted","valuesThunk","preprocessor","preprocess","substituteAll","oneReplace","replacements","used","substitutePlaces","ps","ph","placeholder","adt$a","optional","fFactory","sketch","fSchema","fName","fPname","typeSpec","fGroupSchema","fDefaults","fOverrides","requiredSpec","externalSpec","optionalSpec","groupSpec","asNamedPart","part","name$1","asCommon","convert","adtConstructor","partSchema","external$1","PartType","combine$2","partSpec","partValidated","defaults","internals","externals","pname","factory","_partSpec","_partValidated","units","u","generate$4","np","g","doGenerateOne","generateOne","schemas","names","substitutes","getPart","partKey","getPartOrDie","getParts","partKeys","system","pk","getAllParts","pUid","_k","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","partSchemas","partUidsSchemas","asRawOrDie$1","baseS","single$1","specWithUid","supplyUid","composite","partUidsSchema","components$1","hasUid","isSketchSpec","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","_hState","itemClass","getDelta","selected","dest","getPrevious","getNext","HighlightApis","HighlightSchema","Highlighting","BACKSPACE","TAB","ENTER","ESCAPE","SPACE","LEFT","UP","RIGHT","DOWN","cyclePrev","tryPrev","cycleNext","tryNext","inSet","which","and","preds","isShift","shiftKey","isControl","ctrlKey","isNotShift","rule","classification","choose$2","transitions","transition","reportFocusShifting","prevFocus","noChange","focusee","highlights","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusInside","OnFocusMode","focusIn","tryGoInsideComponent","isEnterOrSpace","OnEnterOrSpaceMode","keyboardEvents","create$3","cyclicField","isVisible","tabbingConfig","visibilitySelector","findInitial","tabstops","visibles","firstTabstop","findCurrent","focusManager","isTabstop","useTabstopAt","_tabbingState","goFromTabstop","stopIndex","cycle","cyclic","tabstop","optStopIndex","goBackwards","navigate","goForwards","onEnter","exit","onEscape","AcyclicType","CyclicType","doDefaultExecute","defaultExecute","isComplex","stopEventForFirefox","_component","schema$4","execute$1","executeConfig","_executeState","spaceExec","useSpace","enterExec","useEnter","downExec","useDown","execKeys","useControlEnter","ExecutionType","flatgrid","dimensions","setGridSize","numRows","numColumns","getNumRows","getNumColumns","init$2","KeyingState","useH","movement","move","use","west$2","moveLeft","moveRight","east$2","useV","north$2","south$2","isHidden","locate","locateVisible","visible","findIndex$1","withGrid","numCols","oldRow","oldColumn","address","newIndex","row","column","cycleHorizontal","onLastRow","colsInRow","newColumn","cycleVertical","newRow","newCol","cycleRight","cycleLeft","cycleUp","cycleDown","schema$5","gridConfig","_gridState","first","execute$2","doMove","gridState","identified","handleTab","captureTab","doEscape","moveNorth","moveSouth","getKeydownRules$1","getKeyupRules$1","FlatgridType","horizontal","isDisabledButton","tryCycle","schema$6","findCurrent$1","flowConfig","execute$3","focusIn$1","_state","getInitial","moveLeft$1","moveRight$1","doMove$1","flowState","executeOnMove","doEscape$1","getKeydownRules$2","_flowState","westMovers","allowVertical","eastMovers","getKeyupRules$2","FlowType","toCell","matrix","rowIndex","columnIndex","cell","cycleHorizontal$1","startCol","deltaCol","newColIndex","cycleVertical$1","colIndex","startRow","deltaRow","nextRowIndex","colsInNextRow","nextColIndex","moveHorizontal","moveVertical","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","moveLeft$2","moveRight$2","moveUp","moveDown","schema$7","focusIn$2","matrixConfig","previousSelector","selectors","execute$4","toMatrix","rows","doMove$2","ifCycle","ifMove","cycles","inRow","cellsInRow","allRows","moveLeft$3","moveRight$3","moveNorth$1","moveSouth$1","getKeydownRules$3","getKeyupRules$3","MatrixType","schema$8","execute$5","menuConfig","focusIn$3","moveUp$1","moveDown$1","fireShiftTab","menuState","moveOnTab","fireTab","getKeydownRules$4","getKeyupRules$4","MenuType","schema$9","getKeydownRules$5","specialInfo","onSpace","onShiftEnter","onShiftTab","onTab","onUp","onDown","onLeft","onRight","getKeyupRules$5","stopSpaceKeyup","SpecialType","acyclic","flow","flatgrid$1","execution","menu","special","KeyboardBranches","isFlatgridState","keyState","Keying","keyConfig","sendFocusIn","set$5","replaceConfig","replaceState","insert","childSpec","append$2","appendee","prepend$1","prependee","remove$7","removee","foundChild","_replaceConfig","replaceAt","replaceeIndex","replacer","replacee","replaceBy","replaceePred","ReplaceApis","Replacing","events$4","eventHandlers","focus$2","focusConfig","ignore","onFocus","blur$1","isFocused","FocusApis","exhibit$1","tabindex","events$5","stopMousedown","ActiveFocus","FocusSchema","Focusing","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","_widget","widgetBehaviours","schema$c","itemSchema$1","separator","configureGrid","movementInfo","configureMatrix","rowSelector","configureMenu","parts$1","itemInfo","unit","fakeFocus","schema$d","grid","focus$4","make$1","_spec","_externals","menuBehaviours","selectedItem","role","Menu","transpose","trace","byItem","byMenu","triggerItem","triggerMenu","generate$5","menus","expansions","menuItems","menuPaths","_triggerItem","init$3","primary","directory","isClear","setMenuBuilt","menuName","setContents","sPrimary","sMenus","sExpansions","sPaths","getTriggeringItem","menuValue","getTriggerData","getItemByValue","getPreparedMenu","triggeringItemValue","triggeredItem","triggeredMenu","triggeringItem","triggeringPath","getTriggeringPath","itemValue","extraPath","lookupItem","revPath","triggers","menuIndex","expand","collapse","refresh","lookupMenu","extractPreparedMenu","otherMenus","menuValues","getPrimary","getMenus","prep","LayeredState","make$2","_rawUiSpec","ExpandHighlightDecision","submenuParentItems","buildMenus","primaryName","makeSketch","nbMenu","layeredState","setup","componentMap","toDirectory","getItemValue","_container","_menuName","setActiveMenu","mv","closeOthers","others","backgroundMenu","stayInDom","getSubmenuParents","parentItems","itemComp","updateAriaExpansions","updateMenuPath","latestMenuName","menuPrep","activeMenu","buildIfRequired","expandRight","HighlightSubmenu","activeMenuPrep","onOpenSubmenu","collapseLeft","onCollapseMenu","updateView","keyOnItem","getSource","onExecute","onOpenMenu","highlightImmediately","navigateOnHover","HighlightParent","getActiveItem","collapseMenuApi","currentItem","highlightPrimary","extractMenuFromContainer","repositionMenus","maybeActivePrimary","allMenus","preparedMenus","primaryMenu","onRepositionMenu","collapseMenu","tmenuBehaviours","_keyInfo","selectedMenu","collapseItem","tieredData","singleData","collapseItem$1","tieredMenu","tmenu","makeMenu","menuSandbox","menuSpec","lazySink","isFirstTierSubmenu","triggeringPaths","getSubmenuLayouts","submenuTriggers","st","submenuLayouts","isPartOfRelated","related","getRelated","thing","showAt","showWithin","showWithinBounds","showMenuAt","showMenuWithinBounds","hide","getContent","inlineBehaviours","onShow","onHide","fireDismissalEventInstead","fireRepositionEventInstead","InlineView","westEdgeX$1","middleX$1","eastEdgeX$1","northY$2","southY$2","southeast$3","southwest$3","northeast$3","northwest$3","north$3","south$3","global$2","factory$1","lookupAttr","getModAttributes","roleAttrs","buttonBehaviours","Button","record","anyInSystem","asSpec","defaultIcon","icons","get$d","getFirst$1","notificationIconMap","success","warning","factory$2","memBannerText","translationProvider","renderPercentBar","percent","renderPercentText","memBannerProgress","progress","updateProgress","updateText","text$1","banner","iconChoices","icon","level","memButton","iconProvider","onAction","closeButton","Notification","NotificationManagerImpl","editor","extras","uiMothership","backstage","getLayoutDirection","prePositionNotifications","notifications","notification","moveTo","positionNotifications","firstItem","moveRel","getEl","settings","closeCallback","hideCloseButton","timeout","notificationWrapper","progressBar","shared","providers","getSink","header","isPositionedAtTop","setTimeout","layoutDirection_1","nodeAnchor","anchors","nuText","getArgs","ItemResponse","rate","timer","cancel","clearTimeout","throttle","last$2","global$3","isBoundary","isBlock","getContentEditable","repeatLeft","process","rootNode","backwards","autocompleteSelector","create$4","detect$4","getNode","getDoc","extractContents","insertNode","elm","normalize","setCursorLocation","isValidTextRange","getText","isWhitespace","chr","stripTriggerChar","triggerCh","findChar","char","charAt","findStart","initRange","minChars","findTriggerChIndex","getParent","getRoot","spot","cloneRange","triggerCharIndex","lastIndexOf","triggerChar","getContext","createRng","selectNode","onKeypress","redirectKeyToItem","getItem","getView","isActive","cancelIfNecessary","isMenuOpen","stopImmediatePropagation","isProcessingAction","AutocompleterEditorEvents","global$4","point$2","isText$1","TEXT_NODE","isElement$1","ELEMENT_NODE","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","ToolbarMode","ItemResponse$1","navClass","selectableClass","colorClass","presetClasses","normal","color","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","iconClassRtl","classForPreset","presets","forMenu","hasIcons","markers$1","menuClasses","dom$1","chunk$1","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","forCollection","initItems","_hasIcons","_item","forHorizontalCollection","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_presets","structure","createPartialMenuWithAlloyItems","commonMenuItemFields","choiceMenuItemSchema","createChoiceMenuItem","fancyTypes","fancyMenuItemSchema","createFancyMenuItem","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","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","_tConfig","_tState","setComponents","tState","specs","tooltip","TooltippingApis","events$8","tooltipConfig","show","tooltipDom","tooltipComponents","ActiveTooltipping","Tooltipping","global$5","global$6","nativeDisabled","onLoad$5","disableConfig","disableState","disabled","disable","enable","hasNative","useNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","_disableState","disableClass","onDisabled","onEnabled","isDisabled","set$7","DisableApis","exhibit$3","events$9","ActiveDisable","DisableSchema","Disabling","global$7","getSkinUrl","skin","getParam","skinUrl","skinName","documentBaseURI","baseURL","isReadOnly","isSkinDisabled","getHeightSetting","getElement","getWidthSetting","DOM","getStyle","getMinWidthSetting","getMinHeightSetting","getMaxWidthSetting","getMaxHeightSetting","getUserStyleFormats","isMergeStyleFormats","getRemovedMenuItems","isMenubarEnabled","isToolbarEnabled","toolbar","isToolbarTrue","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsSetting","toolbars","toolbarArray","ToolbarLocation","getToolbarMode","getToolbarGroups","getToolbarLocation","auto","isToolbarLocationBottom","fixedContainerSelector","fixedContainerElement","inline","useFixedContainer","getUiContainer","fixedContainer","isDistractionFree","isStickyToolbar","isDraggableModal","getMenubar","getToolbar","getFilePickerCallback","getFilePickerTypes","getFileBrowserCallbackTypes","noTypeaheadUrls","getAnchorTop","getAnchorBottom","getFilePickerValidatorHandler","ReadOnlyChannel","ReadOnlyDataSchema","broadcastReadonly","uiComponents","readonly","outerContainer","mothership","setupReadonlyModeSwitch","setMode","receivingConfig","button","splitButton","toolbarButton","DisablingConfigs","runWithApi","getApi","onControlAttached","editorOffCell","onDestroy","onSetup","onControlDetached","onMenuItemExecute","itemResponse","triggersSubmenu","CLOSE_ON_EXECUTE","menuItemEventOrder","componentRenderPipeline","renderCommonItem","providersbackstage","optComponents","buildData","global$8","convertText","mac","alt","ctrl","shift","access","other","shortcut","updated","segment","renderIcon","iconHtml","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderColorStructure","itemText","iconSvg","providerBackstage","colorPickerCommand","removeColorCommand","getDom","common","title","baseDom","renderNormalItemStructure","renderIcons","textRender","rtlClass","leftIcon","checkmark","checkMark","domTitle","ariaLabel","htmlContent","menuItem","shortcutContent","caret","rtlIcon","rtlTransform","renderItemStructure","providersBackstage","fallbackIcon","getIconName","iconName","needRtlClass","iconContent","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","se","makeCells","cells","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","renderInsertTableMenuItem","sizeLabelId","memLabel","hexColour","shorthandRegex","longformRegex","isHexString","hex","getLongForm","hexString","m","extractValues","longForm","splitForm","exec","toHex","fromRgba","rgbaColour","red","green","blue","round","rgbRegex","rgbaRegex","alpha","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fromStringValues","fromString","rgbaString","rgbMatch","rgbaMatch","rgba","fireSkinLoaded","fire","fireSkinLoadError","fireResizeEditor","fireResizeContent","fireScrollContent","fireTextColorChange","global$9","storageName","ColorCache","storageString","localstorage","parse","prune","diff","cache","unshift","pop","setItem","idx","splice","choiceItem","defaultColors","colorCache","mapColors","colorMap","colors","canvas","ctx","byteAsHex","colorByte","alphaByte","bg","colorByteWithWhiteBg","toUpperCase","asHexColor","clearRect","fillStyle","fillRect","getImageData","getColorCols","defaultCols","hasCustomColors","getColorMap","getColors","unmapped","getCurrentColors","addColor","getCurrentColor","format","getParents","applyFormat","undoManager","transact","formatter","nodeChanged","removeFormat","registerCommands","addCommand","calcCols","sqrt","getColorCols$1","getAdditionalColors","hasCustom","applyColor","onChoice","dialog","colorPickerDialog","colorOpt","execCommand","getColors$1","getFetch","callback","setIconColor","splitButtonApi","newColor","setIconFillAndStroke","pathId","setIconFill","setIconStroke","registerTextColorButton","lastColor","addSplitButton","select","optCurrentRgb","currentRgb","currentHex","_splitButtonApi","onItemAction","registerTextColorMenuItem","addNestedMenuItem","getSubmenuItems","fancytype","getOnSubmit","colorpicker","details","initialData","submit","windowManager","buttons","onSubmit","onCancel","register$1","lastForeColor","lastBackColor","createPartialChoiceMenu","presetItemTypes","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","rowClass","deriveCollectionMovement","renderColorSwatchItem","colorinput","widgetSpec","FocusMode","fancyMenuItems","inserttable","colorswatch","valueOpt","renderFancyMenuItem","render","renderNormalItem","renderNestedItem","downwardsCaret","renderSeparatorItem","renderToggleMenuItem","autocomplete","nested","toggle$1","fancy","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$2","bind$3","capture$1","fromRawEvent$1","closest$4","DelayedFunction","fun","ref","schedule","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","touches","isFarEnough","touch","distX","distY","monitor","startData","longpressFired","longpress$1","handleTouchstart","handleTouchmove","handleTouchend","isSame","fireIfReady","isDangerous","keyEv","settingsSchema","bindFocus","bindBlur","setup$1","rawSettings","tapEvent","simpleEvents","tapStopped","stopped","pasteTimeout","onPaste","onKeydown","stopBackspace","onFocusIn","focusoutTimeout","onFocusOut","derive$2","rawTarget","getTarget","fromSource","isStopped","isCut","fromExternal","adt$b","resume","complete","doTriggerHandler","eventType","handlerInfo","eventHandler","doTriggerOnUntilStopped","triggerHandler","listeners","_logger","listener","triggerUntilStopped","triggerOnUntilStopped","broadcastHandler","EventRegistry","registerId","findHandler","filterByType","isAboveRoot","unregisterId","handlersById","_eventName","Registry","readOrTag","failOnDuplicate","tagId","conflict","unregister","getById","factory$3","domWithoutAttributes","containerBehaviours","Container","takeover","domEvents","_alloyId","broadcast$1","destroy","broadcastData","receivers","receiver","renderBar","interpreter","schema$e","parts$3","excludeFactory","factory$4","fieldBehaviours","descriptor","descriptorId","getField","getLabel","FormField","exhibit$4","tabConfig","tabAttr","ActiveTabstopping","TabstopSchema","Tabstopping","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel","formChangeEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderCollection","runOnItem","escapeAttribute","htmlLines","mapItemName","readonlyClass","tgt","collectionEvents","currentActive","iterCollectionItems","applyAttributes","childElm","schema$f","focusBehaviours","selectOnFocus","setSelectionRange","inputBehaviours","dom$2","inputAttributes","inputStyles","inputClasses","factory$5","Input","exports$1","module","exports","define","require","amd","global","EphoxContactWrapper","code","1","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","runClearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","Item","nextTick","env","argv","versions","addListener","once","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","umask","2","setImmediate","setTimeoutFunc","thisArg","Promise","TypeError","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","reject","promise","finale","_unhandledRejectionFn","Handler","reason","ex","prom","remaining","race","_setImmediateFn","_setUnhandledRejectionFn","3","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","4","promisePolyfill","Global","boltExport","HighlightOnOpen","nu$a","baseFn","callbacks","nCallback","isReady","cbs","pure","LazyValue","errorReporter","make$3","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","nu$b","pure$1","Future","ariaElements","isAriaElement","markValid","invalidConfig","invalidClass","notify","notifyInfo","getContainer","validHtml","onValid","markInvalid","invalidState","onInvalid","_invalidState","validatorInfo","validate","run$1","onValidate","valid","isInvalid","InvalidateApis","events$a","onEvent","validateOnLoad","ActiveInvalidate","InvalidateSchema","Invalidating","validation","getCoupled","coupleConfig","coupleState","getOrCreate","CouplingApis","CouplingSchema","init$5","coupled","CouplingState","Coupling","partType","getAnchor","getHotspot","getAnchorOverrides","mapFetch","fetcher","openF","highlightOnOpen","futureData","getLazySink","tdata","HighlightFirst","open$1","onOpenSync","processed","close$1","_onOpenSync","_highlightOnOpen","togglePopup","showing","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox","ariaOwner","sandboxClasses","sandboxBehaviours","sandboxFields","schema$g","parts$4","factory$6","switchToMenu","HighlightNone","triggerExecute","dropdownBehaviours","Dropdown","exhibit$5","unselectable","events$b","ActiveUnselecting","Unselecting","renderPanelButton","colorInputChangeEvent","colorSwatchChangeEvent","colorPickerCancelEvent","renderColorInput","colorInputBackstage","inputValue","span","emitSwatchChange","colorBit","memColorButton","colorPicker","colorButton","_field","hsvColour","fromRgb","minRGB","maxRGB","calcHex","rgb","fieldsUpdate","sliderUpdate","paletteUpdate","labelPart","edgePart","model","edgeActions","det","mouseIsDown","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","spectrumPart","modelDetail","getValueFromEvent","spectrum","SliderParts","_sliderChangeEvent","sliderChangeEvent","isTouchEvent","evt","getEventSource","touchEvent","mouseEvent","r$1","l","minX","minY","min1X","min1Y","max1X","max1Y","range$2","xRange","yRange","halfX","halfY","step","stepSize","snap","snapToGrid","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","currentValue","xValue","yValue","xyValue","fireSliderChange","setToTLEdgeXY","setToTEdge","setToTEdgeXY","setToTREdgeXY","setToREdge","setToREdgeXY","setToBREdgeXY","setToBEdge","setToBEdgeXY","setToBLEdgeXY","setToLEdge","setToLEdgeXY","reduceBy","increaseBy","capValue","snapValueOf","initValue","extraValue","remainder","adjustment","rawSteps","maxSteps","numSteps","findOffsetOf","findValueOf","hasMinEdge","hasMaxEdge","minBound","maxBound","screenRange","capMin","capMax","findOffsetOfValue","maxOffset","centerMinEdge","centerMaxEdge","getBounds$1","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$1","sliderValue","findValueOfOffset","sliderVal","setToMin","setToMax","moveBy","handleMovement","findOffsetOfValue$1","minEdge","maxEdge","minOffset","findPositionOfValue","slider","setPositionFromValue","thumb","edges","getSpectrum","getLeftEdge","getRightEdge","thumbRadius","HorizontalModel","fireSliderChange$2","sliderValue$1","findValueOfOffset$1","setValueFrom$1","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue$2","findPositionOfValue$1","setPositionFromValue$1","getTopEdge","getBottomEdge","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange$3","sliderValue$2","setValueFrom$2","moveBy$2","isVerticalMovement","handleMovement$2","setToMin$2","mX","mY","setToMax$2","getValueFromEvent$2","setPositionFromValue$2","xPos","yPos","thumbXRadius","thumbYRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","TwoDModel","SliderSchema","getThumb","changeValue","onChange","resetToMin","resetToMax","fireOnChoose","onChoose","wasDown","onDragStart","onDragEnd","sliderBehaviours","getInitialValue","onInit","Slider","sliderFactory","getClass","_thumb","owner$3","schema$h","getPartName","sketch$1","fSpec","fieldParts","make$4","toResult$1","formBehaviours","form","resPs","resPThunk","pName","Form","validInput","invalidInput","validatingInput","translatePrefix","rgbFormFactory","onValidHexx","onInvalidHexx","invalidation","isValid","renderTextField","description","helptext","comps","concats","copyRgbToHex","hexField","copyRgbToForm","memPreview","updatePreview","preview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","updateHex","rgbFormSketcher","paletteFactory","_translate","setColour","grdWhite","createLinearGradient","addColorStop","grdBlack","setSliderColour","_detail","_slider","saturationBrightnessPaletteSketcher","setRgba","_apis","makeFactory","rgbForm","onInvalidHex","sbPalette","paletteRgba","memPalette","memRgb","updatePalette","palette","updateFields","runUpdates","updates","paletteUpdates","oldRgb","hsvColour$1","newHsvColour","nuHex","sliderUpdates","colourPickerSketcher","self$1","memento","mem","childAt","ComposingConfigs","english","getEnglishText","translate$1","renderColorPicker","colourPickerFactory","memPicker","picker","optRgbForm","optHex","formValues","pattern","global$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","platformNeedsSandboxing","getDynamicSource","isSandbox","cachedValue","_frameComponent","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","noSizeConversion","_input","ratioSizeConversion","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","pLock","formGroup","getFieldPart","isField1","widthField","heightField","_lock","newSize","optCurrent","optOther","value1","value2","undo","redo","zoom","back","swap","tempTransform","transformApply","internal","saveState","disable$1","enable$1","external$2","renderEditPanel","imagePanel","createButton","createIconButton","disableAllComponents","eventcomp","enableAllComponents","panelDom","noop$1","emit$1","emitDisable","emitEnable","emitTransform","emitTempTransform","getBackSwap","memContainer","ButtonPanel","emitTransformApply","createBackButton","createSpacer","createApplyButton","makeCropTransform","getRect","cropPanelComponents","hideCrop","CropPanel","memSize","constrain","makeResizeTransform","resizePanelComponents","sizeInput","ResizePanel","makeValueTransform","horizontalFlip","verticalFlip","counterclockwiseRotate","clockwiseRotate","flipRotateOnAction","operation","flipRotateComponents","FlipRotatePanel","makeSlider","makeVariableSlider","valTransform","variableFilterPanelComponents","createVariableFilterPanel","filterPanelComponents","FilterPanel","BrightnessPanel","ContrastPanel","GammaPanel","makeColorTransform","makeColorSlider","redOpt","memRed","blueOpt","memBlue","greenOpt","memGreen","colorizePanelComponents","ColorizePanel","getTransformPanelEvent","panel","cropPanelUpdate","_anyInSystem","showCrop","resizePanelUpdate","measurements","getMeasurements","sharpenTransform","invertTransform","buttonPanelComponents","getApplyButton","global$b","global$c","global$d","global$e","global$f","getDocumentSize","scrollWidth","scrollHeight","updateWithTouchData","changedTouches","DragHelper","$eventOverlay","downButton","startX","startY","handleElement","getElementById","cursor","docSize","handleElm","screenX","screenY","runtimeStyle","zIndex","opacity","appendTo","drag","deltaX","deltaY","create$7","currentRect","viewPortRect","clampRect","containerElm","dragHelpers","handles","xMul","yMul","blockers","getAbsoluteRect","outerRect","relativeRect","getRelativeRect","innerRect","getInnerRect","moveRect","startRect","instance","setInnerRect","createDragHelper","blocker","repaint","activeHandle","moveAndBlock","keyCode","SPACEBAR","toggleVisibility","updateElementRect","setRect","setViewPortRect","setClampRect","helper","extend","CropRect","loadImage","renderImagePanel","initialUrl","memBg","zoomState","cropRect","rectState","viewRectState","repaintImg","img","panelW","panelH","cRect","zoomFit","updateSrc","url","aImg","lastViewRect","viewRect","inflate","currentZoom","newZoom","newRect","setButtonEnabled","enabled","renderSideBar","updateButtonUndoStates","undoEnabled","redoEnabled","memUndo","memRedo","UndoStack","removed","canUndo","canRedo","Delimiter","makeState","blobState","tempState","undoStack","getBlobState","setBlobState","getTempState","temp","updateTempState","newTempState","createState","destroyTempState","destroyState","destroyStates","states","addBlobState","addTempState","applyTempState","postApply","currentState","getHistoryStates","renderImageTools","historyStates","sideBar","disableUndoRedo","_oImg","unblock","imageResultToBlob","block","editPanel","applyButton","blobManipulate","oImg","manipulate","tempManipulate","manipulateApply","currentUrl","renderLabel$2","backstageShared","renderPanel","factory$8","initialValues","selectClasses","selectAttributes","selectBehaviours","found","HtmlSelect","renderSelectBox","translatedOptions","chevron","selectWrap","renderTable","renderTh","renderHeader","renderTd","renderTr","renderRows","baseInputBehaviours","multiline","validatingBehaviours","vl","inputMode","inputmode","classname","flex","extraClasses2","maximized","renderInput","renderTextarea","events$c","streamConfig","streamState","streams","stream","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","pv","sandboxIsOpen","openClass","onItemExecute","dismissOnBlur","typeahead","typeaheadBehaviours","schema$j","parts$6","populateFromBrowse","Typeahead","wrap$2","bindFuture","resA","bindResult","mapResult","foldResult","whenError","whenValue","withTimeout","errorThunk","timedOut","nu$c","worker","value$2","error$1","fromResult$1","fromFuture","future","fromPromise","completer","FutureResult","separator$2","toMenuItem","staticMenuItem","toMenuItems","targets","filterLinkTargets","filteredTargets","headerTargets","linkInfo","anchorTargets","anchorTargetTop","anchorTop","anchorTargetBottom","anchorBottom","historyTargets","history","joinMenuLists","bothEmpty","filterByQuery","term","lowerCaseTerm","getItems","fileType","urlBackstage","urlInputValue","getLinkInformation","getHistory","errorId","renderUrlInput","updateHistory","urlEntry","addToHistory","filetype","memUrlBox","_newValue","getValidationHandler","memInvalidIcon","invalidComp","_menu","_entry","makeIcon","errId","memStatus","optUrlPicker","getUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","fieldname","chosenData","renderAlertBanner","iconTooltip","renderCheckbox","repBehaviour","toggleCheckboxHandler","className","memIcons","renderHtmlPanel","make$6","makeIframe","iframeSpec","factories","bar","collection","alertbanner","textarea","iframe","checkbox","dropzone","selectbox","sizeinput","urlinput","customeditor","htmlpanel","imagetools","table","noFormParts","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","bubbleAlignments","valignCentre","alignCentre","alignLeft","alignRight","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","lazyUseEditableAreaAnchor","editableAreaAnchor","standardAnchor","getBannerAnchor","getCursorAnchor","bodyElement","getNodeAnchor","getAnchors","isToolbarTop","useFixedToolbarContainer","getContentAreaContainer","inlineDialog","hasCustomColors$1","getColors$2","getColorCols$2","ColorInputBackstage","isDraggableModal$1","DialogBackstage","HeaderBackstage","getDockingMode","setDockingMode","defaultStyleFormats","isNestedFormat","isBlockFormat","isInlineFormat","isSelectorFormat","mapFormats","userFormats","fmt","customFormats","formats","formatName","registerCustomFormats","registerFormats","getStyleFormats","registeredUserFormats","processBasic","isSelectedFor","getPreviewFor","formatterSpec","getStylePreview","register$3","enrichSupported","enrichMenu","submenuSpec","enrichCustom","customSpec","newItem","doEnrich","newItems_1","getStyleItems","init$7","parseStyle","getCssText","settingsFormats","settingsFlattenedFormats","eventsFormats","eventsFlattenedFormats","replaceSettings","_e","enriched","modifications","fromSettings","fromEvents","getFlattenedKeys","trim$1","hasContentEditableState","contentEditable","isContentEditableTrue","isContentEditableFalse","create$8","isChildOfContentEditableTrue","getElementText","innerText","getOrGenerateId","isAnchor","isValidAnchor","isEditable","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","elms","getAnchorTargets","getTargetElements","hasTitle","find$5","LinkTargets","STORAGE_KEY","HISTORY_LENGTH","isHttpUrl","isArrayOfUrl","isRecordOfUrlArray","getAllHistory","unparsedHistory","SyntaxError","setAllHistory","itemsWithoutUrl","isTruthy","makeMap","getPicker","getPickerTypes","optFileTypes","optLegacyTypes","optTypes","_picker","types","getPickerSetting","pickerTypes","entry","getTextSetting","UrlInputBackstage","init$8","contextMenuState","styleselect","isContextMenuOpen","setContextMenuState","expandable$1","showContextToolbarEvent","hideContextToolbarEvent","schema$k","parts$7","factory$9","tgroupBehaviours","itemSelector","ToolbarGroup","schema$l","enhanceGroups","parts$8","factory$a","setGroups","groups","getGroupContainer","shell","toolbarBehaviours","Toolbar","generate$6","output$1","within","withinWidth","apportion","total","parray","toUnit","fitLast","fits","overflow","overflower","fitAll","tryFit","divide","partition$3","storedGroups","bGroups","findFocusedComp","focusedElm","setOverflow","overflowGroup","builtGroups","focusedComp","availableWidth","overflows","schema$m","schema$n","parts$9","schema$o","parts$a","toggledClass","toggle$2","toolbarSandbox","position$2","bounder","setGroups$1","makeSandbox$1","factory$b","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","_slideState","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","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","_d","needsRtlClass","renderFloatingToolbarButton","identifyButtons","renderCommonToolbarButton","specialisation","toolbarButtonBehaviours","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","displayChannel","underlinePath","buttonComp","_b","_c","getFormApi","runOnExecute$1","formApi","renderContextButton","bridged","renderContextToggleButton","generateOne$1","generate$7","mementos","asSpecs","findPrimary","compInSystem","buildInitGroups","commands","renderContextForm","toolbarType","ContextForm","getHorizontalBounds","contentAreaBox","viewportBounds","contentBoxWidth","maxViewportWidth","getVerticalBounds","isToolbarLocationTop","headerBox","isToolbarBelowContentArea","isToolbarAbove","containerBounds","getContextToolbarBounds","toolbarOrMenubarEnabled","matchTargetWith","ctxs","toolbarApi","contextToolbars","contextForms","filterByPositionForStartNode","doesPositionExist","filterToolbarsByPosition","hasSelectionToolbars","hasNodeToolbars","nodeToolbars","selectionToolbars","filterByPositionForAncestorNode","findPosition_1","basePosition","matchStartNode","nodeCandidates","editorCandidates","nodeMatches","editorMatches","matchAncestor","startNode","scopes","ancestorElem","inNodeScope","lookup$1","rootElem","isOutsideRoot","inEditorScope","categorise","forms","formNavigators","lookupTable","registerForm","contextForm","launch","registerToolbar","contextToolbar","forwardSlideEvent","backSlideEvent","changeSlideEvent","resizingClass","renderContextToolbar","currentWidth","newContents","oldContents","forwardContents","generateSelectItems","_editor","generateItem","rawItem","response","si","invalid","validateItems","preItems","getCurrentValue","shouldHide","createMenuItems","createSelectButton","getComponent","setInitialValue","nodeChangeHandler","rawFormats","buildBasicStaticDataset","ResizeTypes","delimiter","SemiColon","buildBasicSettingsDataset","settingName","alignMenuItems","command","getSpec","getMatchingValue","_format","updateSelectMenuIcon","alignment","canApply","createAlignSelect","alignSelectMenu","defaultFontsFormats","systemStackFonts","splitFonts","fontFamily","fonts","font","isSystemFontStack","matchesSystemStack","getSpec$1","getFirstFont","queryCommandValue","matchOpt","updateSelectMenuText","createFontSelect","fontSelectMenu","defaultFontsizeFormats","legacyFontSizes","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","_comp","getScopes","alloySpec","buildToolbar","buildContextToolbarGroups","allButtons","buildContextMenuGroups","default","toolbarKey","launchContext","sElem","launchContextToolbar","setEditorTimeout","setup$3","ship","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onWindowScroll","onWindowResize","onEditorResize","parts$d","partType$1","schema$r","customListDetail","itemsPart","parts$e","name$2","factory$f","_external","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","makeItem","itemsToRemove","builtLists","setupItem","listBehaviours","CustomList","getOffsetParent","isFixed","offsetParent$1","getOrigin","morphAdt","static","appear","contextualInfo","transitionClass","fadeOutClass","fadeInClass","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","isVisibleForModes","getPrior","getInitialPosition","storePrior","setInitialPosition","revertToOriginal","offsetBox_1","_left","_top","_right","_bottom","morphToOriginal","getModes","morphToFixed","winBox","isTop","getMorph","isDocked","getMorphToOriginal","morphToStatic","onUndocked","morphToCoord","method","onDocked","updateVisibility","morphToDocked","contextual","contextInfo","lazyContext","setVisible","refreshInternal","lazyViewport","morph","setDocked","resetInternal","refresh$4","reset","setModes","DockingApis","events$f","dockInfo","dockState","onShown","onHidden","ActiveDocking","DockingSchema","init$b","docked","initialBounds","DockingState","Docking","visibility","editorStickyOnClass","editorStickyOffClass","scrollFromBehindHeader","containerHeader","viewHeight","innerHeight","scrollPos","markerElement","markerPos","markerHeight","markerTop","markerBottom","editorHeaderPos","editorHeaderHeight","editorHeaderTop","editorHeaderBottom","editorHeaderDockedAtTop","editorHeaderDockedAtBottom","isDockedMode","updateIframeContentFlow","getOccupiedHeight","parentElem","padding","parentWidth","updateSinkVisibility","sinkElem","updateEditorClasses","editorContainer","restoreFocus","focusedElem","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","_key","doShow","doHide","hideSlot","hideSlots","hideAllSlots","showSlot","slotBehaviours","slotApis","SlotContainer","sidebarSchema","createSidebar","setup$6","sidebars","addToggleButton","handleToggle","makePanels","panelConfigs","sidepanel","optSidePanelSpec","sidePanelSpec","makeSidebar","slotContainer","setSidebar","sidebar","optSlider","toggleSidebar","optSlotContainer","whichSidebar","sidebarOpen","fixSize","autoSize","renderSidebar","getAttrs","fromHtml$2","renderSpinner","toggleThrobber","renderThrobber","setup$7","lazyThrobber","throbberState","timerId","factory$h","getSocket","getHeader","setToolbar","setToolbars","mToolbar","refreshToolbar","getThrobber","focusToolbar","optToolbar","setMenubar","menubar","focusMenubar","partMenubar","toolbarFactory","sliding","partMultipleToolbar","_mToolbar","tc","_index","partToolbar","renderer","lazyToolbar","lazyMoreButton","partHeader","partSocket","partSidebar","partThrobber","OuterContainer","grps","grp","renderedToolbars","defaultMenubar","defaultMenus","edit","tools","help","make$8","removedMenuItems","itemName","removedMenuItem","parseItemsString","identifyMenus","rawMenuData","userDefinedMenus","validMenus","menuData","isNotSeparator","fireSkinLoaded$1","_skinLoaded","fireSkinLoadError$1","loadSkin","isInline","skinUiCss","contentCSS","styleSheetLoader","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents","initialDocEle","lastWindowDimensions","innerWidth","lastDocumentDimensions","resizeWindow","outer","resizeDocument","docEle","inner","elementLoad","lastToolbarWidth","eTargetNode","targetNode","uiRoot","socket","limit","_ui","addQueryValueHandler","toolbarMode","refreshDrawer","iframeContainer","Iframe","revocable","doRevoke","isSet","unbindable","value$3","parseToInt","numToPx","calcCappedSize","minSize","maxSize","minOverride","maxOverride","getHeight$1","baseHeight","minHeight","getHeightWithFallback","getWidth$1","baseWidth","minWidth","getWidthWithFallback","InlineHeader","targetElm","floatContainer","isSticky","editorMaxWidthOpt","headerBackstage","isSplitToolbar","calcToolbarOffset","tbar","calcMode","toolbar_1","toolbarHeight","targetBounds","roomAtTop","docHeight","roomAtBottom","winBounds","isRoomAtBottomViewport","setupMode","verticalDir","updateChromeWidth","bodyMargin","updateChromePosition","repositionPopups$1","updateChromeUi","resetDocking","floatContainerComp","updateMode","updateUi","currentMode","newMode","addClass","removeClass","getTargetPosAndBounds","setupEvents$1","prevPosAndBounds","resizeContent","prevPos","prevBounds","hasResized","requestAnimationFrame","render$1","uiContainer","Inline","register$5","alignToolbarButtons","cmd","alignNoneToolbarButton","addButton","toggleFormat","registerFormatButtons","_idx","name_1","registerCommandButtons","registerCommandToggleButtons","registerButtons","registerMenuItems","addMenuItem","register$6","toggleUndoRedoState","checkState","onUndoStateChange","registerMenuItems$1","registerButtons$1","register$7","toggleVisualAidState","hasVisual","onVisualAid","registerMenuItems$2","addToggleMenuItem","registerToolbarButton","register$8","toggleOutdentState","queryCommandState","onNodeChange","registerButtons$2","register$9","register$a","setup$8","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","getMenuItems","defaultItems","contextMenus","isContextMenuDisabled","getContextMenu","isSeparator$1","separator$3","makeContextItem","addContextMenuGroup","groupItems","lastMenuItem","generateContextMenu","selectedElement","sections","allItems","isNativeOverrideKeyEvent","isTriggeredByKeyboard","pointerType","setup$9","hideContextMenu","showContextMenu","initAndShow$2","hideEvents","adt$c","subtract","add$4","transform$1","changes","asFixed","coord","asAbsolute","asOffset","withinRange","coord1","coord2","getDeltas","toStyles","stylesOpt","translate$2","absolute$3","fixed$1","absorb","partialCoord","originalCoord","absorbOne","stencil","optX","optY","parseAttrToInt","NaN","get$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","changeZIndex","zindex","instigate","anyComponent","discard","createComponent","blockerClass","blockerEvents","SnapSchema","schema$t","getCurrentCoord","location","clampCoords","coords","absoluteCoord","newCoords","offset$1","calcNewCoord","optSnaps","currentCoord","snapping","onSensor","dragBy","onDrag","calcStartData","move$1","dragState","dragMode","dragStartData","getStartData","dlt","updateStartState","setStartData","init$c","dragApi","forceDrop","drop","delayDrop","getData$1","getDelta$1","MouseData","events$g","stop$1","schema$u","init$d","getDataFrom","getData$2","getDelta$2","TouchData","events$h","blockerCell","schema$v","events$i","schema$w","mouse","mouseOrTouch","DraggingBranches","init$e","previous","calculateDelta","dragEvent","nuData","DragState","Dragging","dragger","snapWidth","snapOffset","calcSnap","selectorOpt","td","selectorHandle","sensorLeft","sensorTop","sensorWidth","sensorHeight","getSnapsConfig","isSameCell","cellOpt","currentTd","createSelector","setup$a","tlTds","brTds","startCell","finishCell","getTopLeftSnap","memTopLeft","getTopLeftSnaps","getBottomRightSnap","memBottomRight","getBottomRightSnaps","topLeftSnaps","bottomRightSnaps","bottomRight","showOrHideHandle","isAbove","isBelow","cellRect","viewportHeight","aboveViewport","belowViewport","getSnapConfig","snapTopLeft","snapLastTopLeft","snapBottomRight","snapLastBottomRight","otherCells","upOrLeftCells","downOrRightCells","getDimensions","resizeType","originalHeight","originalWidth","Both","resize$3","dim","isHidden$1","renderElementPath","getDataPath","newPathElements","_btn","divider","newAcc","updatePath","newPath","parent_1","isDefaultPrevented","isPropagationStopped","renderWordCount","replaceCountText","words","characters","currentVal","wordCount","renderStatusbar","renderResizeHandlerIcon","renderBranding","linkHtml","getResizeType","None","Vertical","getTextComponents","getComponents","setup$b","lazyOuterContainer","platformClasses","touchPlatformClass","deviceClasses","isToolbarBottom","dirAttributes","verticalDirAttributes","isHeaderDocked","memAnchorBar","lazyAnchorBar","throbber","sb","statusbar","socketSidebarContainer","hasMultipleToolbar","hasToolbar","hasMenubar","getPartToolbar","editorComponents","containerComponents","border","getUi","broadcastAll","setEditorSize","parsedHeight","parsedWidth","renderUI","toolbarGroupButtonConfig","addGroupToolbarButton","toolbarOpt","describedBy","describedElement","describeElement","describeId","labelledBy","labelledElement","labelElement","schema$x","basic","parts$f","dragBlockClass","getDragBounds","factory$i","dialogBusyEvent","dialogIdleEvent","busyBehaviours","showDialog","busyComp","externalBlocker","_blocker","bc","getBusySpec","busySpec","busy","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","getFooter","modalBehaviours","ModalDialog","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseButtonFields","dialogButtonFields","normalButtonFields","menuButtonFields","dialogButtonSchema","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","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","toValidValues","renderBodyPanel","memForm","formValue","vals","factory$j","tabButtonBehaviours","TabButton","schema$y","tabsPart","barDetail","dismissTab$1","tabbar","changeTab$1","clickToDismiss","tabClass","parts$g","factory$k","tabbarBehaviours","selectedClass","tab","Tabbar","factory$l","tabviewBehaviours","Tabview","schema$z","barPart","tabs","viewPart","parts$h","factory$m","tabValue","tabview","tabWithValue","tabData","onChangeTab","changeTabBy","section","byPred","tabSectionBehaviours","selectFirst","onDismissTab","getViewItems","showTab","tabKey","getTabIfNotActive","optTab","TabSection","measureHeights","allTabs","tabviewComp","_tab","getMaxHeight","heights","getMaxTabviewHeight","tablist","documentElement$1","tabviewHeight","isTabListBeside","currentTabHeight","dialogTopMargin","dialogBottomMargin","dialogHeight","chromeHeight","setTabviewHeight","updateTabviewHeight","dialogBody","maxTabHeight","getTabview","smartTabHeight","extraEvents","maxTabHeightOpt","oldHeight","naiveTabHeight","SendDataToSectionChannel","SendDataToViewChannel","renderTabPanel","storedValue","updateDataWithForm","formData","validData","currentData","setDataOnForm","oldTab","tabMode","_viewItems","oldName","tsection","dialogChannel","titleChannel","bodyChannel","footerChannel","bodySendMessageChannel","renderBody","ariaAttrs","incoming","isTabPanel","ariaAttributes","renderInlineBody","contentId","renderModalBody","bodySpec","renderIframeBody","hiddenHeader","pClose","pUntitled","pBodyMessage","pFooter","footer","pFooterGroup","startButtons","endButtons","renderDialog","dialogClass","blockerBackdropClass","scrollLockClass","extraStyles","dialogEvents","renderClose","renderTitle","renderDragHandle","renderInlineHeader","titleId","renderModalHeader","pTitle","pHandle","draghandle","draggable","getEventExtras","lazyDialog","closeWindow","onBlock","blockEvent","bs","onUnblock","renderModalDialog","mapMenuButtons","mapItems","extractCellsToObject","menuButton","innerAcc","initCommonEvents","fireApiEvent","_event","initUrlDialog","getInstanceApi","withSpec","currentDialog","initDialog","currentDialogInit","cur","onTabChange","newTabName","oldTabName","SilverDialogEvents","makeButton","lookup$2","footerButtons","buttonName","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","getCompByName","form_1","getFormWrapper","footerState","validateData","dialogState","getDialogApi","doRedial","menuItemStates","withRoot","valueComp","representedValues","menuItemCurrentState","setData","prevData","instanceApi","mergedData","newInternalData","bodyState","tabSection","dialogInit","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","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","Theme","windowMgr","getWindowManagerImpl","getNotificationManagerImpl","groupBy","wasType","fromElements","lastChild","fireListEvent","matchNodeName","matchNodeNames","regex","isTextNode","isListNode","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isTextBlock","getTextBlockElements","blockElements","isBogusBr","previousSibling","isEmpty","keepBookmarks","isChildOfBody","isChildOf","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","shouldIndentOnTab","getForcedRootBlock","getForcedRootBlockAttrs","createTextBlock","contentNode","textBlock","hasContentNode","getBlockElements","createFragment","blockName","tagName","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","hasFirstChildList","hasLastChildList","isIndented","cloneItemContent","li","createEntry","dirty","indentEntry","indentation","cloneListProperties","cleanListProperties","closestSiblingEntry","normalizeEntries","matchingEntry","parseItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","parser","newDepth","parseLists","initialDepth","sourceList","outdentedComposer","normalizedEntries","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","splitList","ul","removeAndKeepBookmarks","bookmarks","newBlock","tmpRng","insertAfter","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","getNormalizedPoint","normalizeRange","outRng","rangeStart","rangeEnd","selectionIndentation","isHandled","bookmark","getBookmark","moveToBookmark","indentListSelection","outdentListSelection","flattenListSelection","DOM$1","createBookmark","setupEndPoint","offsetNode","resolveBookmark","restoreEndPoint","nodeIndex","listToggleActionFromListName","listName","isCustomList","listState","activate","inList","updateListStyle","setStyle","updateListAttrs","updateListWithDetails","removeStyles","getEndPointNode","getSelectedTextBlocks","textBlocks","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","detailStyle","applyList","listItemName","listBlock","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList","newList","toggleMultipleLists","hasListStyleDetail","toggleSingleList","toggleList","selectedSubLists","DOM$2","normalizeList","normalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","getNonEmptyElements","walker","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","mergeLiElements","listNode","$","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","rng_1","otherLi_1","removeBlock","parentBlock","backspaceDeleteIntoListCaret","otherLi_2","backspaceDeleteCaret","backspaceDeleteRange","startListParent","backspaceDelete","DELETE","currentList","getAttrib","setAttrib","queryListCommandState","addQueryStateHandler","hasRtcPlugin","setupTabKey","metaKeyPressed","hasPlugin","plugin","plugins","inArray","listProperties","addContextMenu","Plugin","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","getVideoScriptMatch","trimPx","getEphoxEmbedData","altsource","poster","htmlToData","isEphoxEmbed","allow_conditional_comments","movie","videoScript","guess","mimes","mp3","m4a","wav","mp4","webm","ogg","swf","fileEnd","mime","setAttributes","updatedAttrs","updateEphoxEmbed","styleMap","serializeStyle","sources","updateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","imgAttrs","urlPatterns","allowFullscreen","getProtocol","protocolMatches","getUrl","newUrl","matchPattern","getIframeHtml","getFlashHtml","getAudioHtml","audioTemplateCallback","altsourcemime","getVideoHtml","videoTemplateCallback","sourcemime","getScriptHtml","dataToHtml","dataIn","embed","convertURL","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","dims","errorMessage","notificationManager","snippetToData","embedSnippet","isMediaElement","getEditorData","snippet","serializer","serialize","addEmbedHtml","snippetData","selectPlaceholder","beforeObjects","afterObjects","handleInsert","submitForm","editorData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","generalTab","embedTextarea","embedTab","advancedFormItems","advancedTab","showDialog$1","sanitize","blocked","attrName","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","transparentSrc","createPreviewIframeNode","previewWrapper","previewNode","allowfullscreen","class","frameborder","shimNode","sourceNode","attrValue","ai","attribs","escape","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","nodes","ceFalse","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addNodeFilter","addAttributeFilter","realElm","innerNode","realElmName","unescape","$elm","selectedNode","hasClass","objectType","stateSelectorAdapter","selectorChangedWithUnbind","COMMENT","isComment","startsWith","isNotEmpty","rawParent","prevSibling","sourceDom","targetDom","cssText","rowspan","colspan","detailnew","isNew","extended","rowdata","elementnew","rowdatanew","rowcells","rowdetails","finishRow","finishCol","ancestors","ancestors$1","children$2","child$1","child$2","getAttrValue","getSpan","hasColspan","hasRowspan","getCssValue","firstLayer","filterFirstLayer","tags","isRootOrUpperTable","fromTable","rows$1","parentSection","parentName","cells$1","fromPastedRows","example","getAt","warehouse","findItem","filtered","filterItems","maxRows","maxColumns","currentRow","cr","cc","newpos","grid$1","fromTable$1","justCells","Warehouse","statsStruct","minRow","minCol","maxRow","maxCol","findSelectedStats","house","totalColumns","totalRows","endRow","endCol","seenSelected","fillInGaps","stats","needCell","clean","emptyRows","selectedSelector","unselectedCells","copy$1","cloneChildren","createCell","replica","pasteReplace","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cellOperations","formatsToClone","docu","lastNode","gap","paste","fromDom$1","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","isWithin","isRectangular","isRect","detailIsWithin","detailA","detailB","getAnyBox","startCoords","finishCoords","sc","fc","getBox","intercepts","parentCell","innerCell","isContainedBy","c1","c2","deltaColumn","getWarehouse","intercepts$1","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","getBox$1","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","up","down","copyTo","afterAll","appendAll","setText","universe","look","oneAll","unsafeOne","commonElement","ancestors$2","ps1","ps2","ind","pruned1","pruned2","firstpath","secondpath","sharedOne","ancestors$3","sharedOne$1","_universe","ancestors$4","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve","sels","lastSelectedSelector","getEdges","firstSelectedSelector","tbl","expandTo","shiftSelection","retrieve$1","retrieveBox","firstAncestor","lastAncestor","fA","lA","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","firstSelected","lastSelected","Ephemera","type$1","onMultiple","onSingle","none$1","selections","unmergable","hasSpan","mergable","_env","noMenu","paste$1","clipboard","generators","pasteRows","extractSelected","serializeElements","getTextContent","registerEvents","cellSelection","multiCellContext","domCell","isTable","pasteCells","only","detached","editable","body$1","ResizeWire","rowInfo","colInfo","rtlEdge","ltrEdge","getTop","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","cols","rowsArr","getBlock","isSingle","getFallback","decide","inBlock","singleInBlock","detailOption","deduce","aa","needManualCalc","toNumber","px","getProp","getCalculatedHeight","boxSizing","paddingTop","paddingBottom","borderTop","borderBottom","borders","getCalculatedWidth","paddingLeft","paddingRight","borderLeft","borderRight","rGenericSizeRegex","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","getPercentSize","relativeParent","setPixelWidth","amount","setPercentageWidth","getHeightValue","normalizePixelSize","getTotalHeight","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getGenericWidth","setGenericWidth","getPixelTableWidth","getPercentTableWidth","isPercentSizing","isPixelSizing","isNoneSizing","percentageBasedSizeRegex","pixelBasedSizeRegex","getRaw$1","getRawW","getRawH","getWidthFrom","columns$1","backups","columnCell","deduced","getDeduced","getRawWidths","getPercentageWidths","minCellWidth","getPixelWidths","getHeightFrom","rowCell","getPixelHeights","getRawHeights","validateFor","rawAmount","Size","redistributeToPercent","widths","totalWidth","colType","ratio","pc","redistributeToPx","newTotalWidth","redistributeEmpty","newWidthType","redistributeValues","_pc","redistribute","newType","floats","roundDown","floored","redistributeToW","newWidths","redistributeToH","newHeights","getUnit","redistribute$1","optWidth","optHeight","wUnit","oldWidths","nuWidths","hUnit","totalHeight","oldHeights","nuHeights","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","getPercentTableWidth$1","ResizeDirection","TableDirection","directionAt","Immutable","struct","Event","trigger","typeDefs","ColumnContext","neighbours","determine","zero","onOnly","singleColumnWidth","newNext","newThis","diffx","onMiddle","_prev","measures","recalculateWidth","recalculateHeight","matchRowHeight","sumUp","adjustWidth","getCellDelta","getWidths","newSizes","setElementWidth","adjustTableWidth","adjustHeight","newCellSizes","newRowSizes","adjustWidthTo","namespace","dashNamespace","Blocker","layerClass","reqMessage","unsuppMessage","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","dupe","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","DragMode","DragSink","DragApi","compare","mutation","mdown","mup","mmove","mout","MouseDrag","InDrag","dataOption","NoDrag","Movement","noDragState","inDragState","throttledDrop","runIfActive","findClosestContentEditable","styles$1","resolve$1","Mutation","BarMutation","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","resizeBarDragging","BarManager","resizing","hoverTable","getResizer","_dataRow","_dataCol","currentCol","oldX","startAdjust","findClosestEditableTable","destroy$1","hideBars","showBars","lazySizing","beforeResize","afterResize","startDrag","TableResize","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","fireTableSelectionChange","fireTableSelectionClear","defaultTableToolbar","defaultStyles","determineDefaultStyles","isPixelsForced","editorWidth","isResponsiveForced","defaultAttributes","getTableSizingMode","getTableResponseWidth","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPercentagesForced","getTableHeaderType","defaultValue","validValues","getCloneElements","cloneElements","hasObjectResizing","objectResizing","getNodeName","getBody$1","getPixelWidth$1","getPixelHeight","removePxSuffix","addPxSuffix","removeDataStyle","getRawWidth$1","isPercentage","ltr$1","rtl$1","noneSize","percentageSize","initialWidth","_delta","pixelSize","chooseSize","fallbackWidth","getTableSize","TableSize","cleanupLegacyAttributes","convertToPercentSize","convertToPixelSize","convertToNoneSize","enforcePercentage","tableSizing","enforcePixels","enforceNone","syncPixels","computedWidth","createContainer","getResizeHandler","startW","startRawW","selectionRng","lazyResize","lazyWire","sz","rawWire","rawTable","percentW","targetPercentW","toEnd","freefallRtl","freefallRtl$1","universe$1","freefallRtl$2","halve","main","getGridSize","setIfNot","newRows","newCells","insertThead","renderSection","gridSection","sectionName","tb","tr","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","copy$2","clonedCell","addCell","gridRow","setCells","mutateCell","mapCells","getCell","getCellElement","cellLength","getColumn","getRow","findDiff","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","toDetails","seen","updateSeen","ri","ci","toGrid","rowCells","fromWarehouse","deriveRows","rendered","findRow","rowOfCells","toDetailList","findInWarehouse","postAction","genWrappers","sizing","newElements","onCell","onPasteByEditor","cell$1","lc","onMergable","_warehouse","onUnmergable","onCells","substitution","unmerge","isToReplace","uniqueCells","currentCell","splitCols","prevCell","splitRows","rowPrevCells","replacement","_loop_2","sub","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","measureHeight","rowLengthA","rowLengthB","fill","generator","rowFill","colFill","tailor","fillCols","fillRows","modifiedCols","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","fittedGrid","insertCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","insertRowAt","between","withinSpan","insertColumnAt","deleteColumnsAt","deleteRowsAt","replaceIn","isTarget","notStartRow","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","verifyGenerators","elementToData","toData","nuFrom","recent","getOrInit","makeNew","replaceOrInit","merging","Generators","blockList","universe$2","isBlock$1","isList$1","isEmptyTag$1","merge$2","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","elementFromGrid","findIn","uniqueRows","currentDetail","uniqueColumns","opInsertRowsBefore","targetIndex","newGrid","newG","_row","opInsertRowsAfter","opInsertColumnsBefore","opInsertColumnsAfter","opMakeRowHeader","opMakeColumnHeader","opUnmakeRowHeader","opUnmakeColumnHeader","opEraseColumns","_comparator","_genWrappers","opEraseRows","opMergeCells","opUnmergeCells","opPasteCells","pasteDetails","gridify","wh","mergedGrid","nuGrid","gridifyRows","opPasteColsBefore","opPasteColsAfter","opPasteRowsBefore","opPasteRowsAfter","opGetColumnType","selectedCells","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","getCellsType","headerPred","headerCells","insertRowsBefore","insertRowsAfter","insertColumnsBefore","insertColumnsAfter","eraseColumns","eraseRows","makeColumnHeader","unmakeColumnHeader","mergeCells","unmergeCells","pasteColsBefore","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnType","getSection","mapSectionNameToType","detectHeaderRow","isThead","areAllCellsThs","thead","ths","getRowType","_rowConfig","switchRowSection","rowElm","newSectionName","tableElm","oldSectionElm","oldSectionName","sectionElm_1","firstTableChild_1","switchCellType","newCellType","switchSectionType","determineHeaderRowType","allTableRows","detectedType","headerRowTypeSetting","headerRowType","Selections","getSelectionStartFromSelector","getSelectionStartCell","getSelectionStartCellOrCaption","getCellsFromSelection","getRowsFromSelection","rowsOpt","TableActions","isTableBody","lastRowGuard","lastColumnGuard","guard","des","deleteRow","deleteColumn","insertRowsBefore$1","insertRowsAfter$1","insertColumnsBefore$1","insertColumnsAfter$1","mergeCells$1","unmergeCells$1","pasteColsBefore$1","pasteColsAfter$1","pasteRowsBefore$1","pasteRowsAfter$1","pasteCells$1","extractType","validTypes","setTableCellType","setTableRowType","makeColumnHeader$1","unmakeColumnHeader$1","getTableRowType","rowTypes","hasHeader","hasFooter","hasBody","getTableCellType","getTableColType","DefaultRenderOptions","tableHeaderCell","tableCell","createRow","rowHeaders","columnHeaders","createRows","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","theadRowHeaders","theadRows","tbody","numRowHeaders","tbodyRows","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage$1","colHeaders","insertTableWithDataValidation","errorMsg","checkInput","headerRows","headerColumns","getClipboardElements","getClipboard","elems","setClipboardElements","setClipboard","elmsOpt","resizeHandler","selectionTargets","insertTable","setClipboardRows","setRows","getClipboardRows","getRows","setClipboardCols","setColumns","getClipboardCols","getColumns","constrainSpan","currentColspan","copyCols","cellsToCopy","copiedCells","fakeTR","copyRows","slicedGrid","slicedDetails","getTDTHOverallStyle","firstChildStyle","checkChildren","currentStyle","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","buildListItems","inputList","startItems","appendItems","rgbToHex","extractAdvancedStyles","borderwidth","borderstyle","bordercolor","backgroundcolor","getSharedValues","baseData","comparisonData","itemKey","comparisonValue","getAdvancedTab","dialogName","advTabItems","borderWidth","getAlignment","getHAlignment","getVAlignment","extractDataFromSettings","hasAdvTableTab","extractAdvancedStyleData","defaultData","cellspacing","cellpadding","caption","getBorder","advStyle","getCellPaddingCellSpacing","spacing","extractDataFromTableElement","optBorderWidth","extractDataFromRowElement","extractDataFromCellElement","celltype","halign","valign","getClassList","children$3","classlist","modifiers","testTruthy","setFormat","DomModifier","ifTruthy","updateSimpleProps","modifier","updateAdvancedProps","applyCellData","isSingleCell","cellElm","onSubmitCellForm","cellsData","dialogTabPanel","dialogPanel","getClassList$1","formChildren","getItems$1","updateSimpleProps$1","updateAdvancedProps$1","applyRowData","oldData","isSingleRow","onSubmitRowForm","rowsData","getItems$2","insertNewTable","rowColCountItems","alwaysItems","appearanceItems","alignmentItem","classListItem","styleTDTH","applyDataToElement","onSubmitTableForm","captionElm","addVisual","open$2","generalPanel","nonAdvancedForm","advancedForm","eraseTable","cellOrCaption","setSizingMode","isForcedSizing","getTableFromCell","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutCol","_grid","mceTableCutRow","mceTableCopyCol","mceTableCopyRow","mceTablePasteColBefore","mceTablePasteColAfter","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","mceTableSizingMode","func","mceTableCellType","mceTableRowType","mceTableProps","mceTableRowProps","mceTableCellProps","registerQueryCommands","mceTableColType","Clipboard","clearClipboard","clearRows","clearColumns","none$2","CellLocation","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","_lazyWire","rootElements","handle$1","body_1","isRoot_1","Response","Situs","convertToRange","makeSitus","sync","selectRange","detect$5","cellSel","annotations","updateSelection","newSels","clearBeforeUpdate","traverse","backtrack","_direction","sidestep","advance","successors","go$1","ruleOpt","succ","Walkers","hone","left$1","right$1","isLeaf","before$3","seekLeft","after$4","seekRight","universe$3","before$4","after$5","seekLeft$1","seekRight$1","failedUp","failedDown","isOverlapping","bridge","beforeBounds","afterBounds","isRow","verify","beforeOffset","afterOffset","failure","afterCell","beforeCell","_sharedRow","onSuccess","onFailedUp","onFailedDown","BeforeAfter","inParent","indexInParent","gatherer","cand","gather","handleBr","findBr","handleParent","br","adjacent","tryBr","analysis","_message","getTop$1","getBottom","getPartialBox","getRangedRect","toCaret","getElemBox","getBoxAt","getEntireBox","JUMP_SIZE","NUM_RETRIES","retry","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","adjustUp","higherCaret","upMovement","adjuster","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","situsFromPoint","newCaret","ieTryDown","ieTryUp","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","findSpot","brNeighbour","fromSitus","scan$1","tryCursor","situs","tryAgain","tryAt","otherRetry","ieRetry","handle$2","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","findCell","MouseSelection","clearState","selectContents","isKey","keycode","isUp","isDown","isNavigation","ltr$3","isBackward","rtl$3","toRaw","sr","Rect","by","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","getScrollY","rc","keyboard","clearToNavigate","realEvent","update$1","removeClasses","byClass","ephemera","addSelectionClass","removeSelectionClasses","byAttr","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","hasInternalTarget","CellSelection","tableOpt","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","ns","wrappedEvent","isLeftMouse","isLeftButtonPressed","mouseDown","mouseOver","mouseUp","getDoubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","doubleTap","getSelectionTargets","changeHandlers","findTargets","table$1","isCaption","resetTargets","onSetupTable","onSetupCellOrRow","onSetupPasteable","getClipboardData","onSetupMergeable","onSetupUnmergeable","addButtons","addMenuButton","addToolbars","addContextToolbar","addMenuItems","insertTableAction","tableProperties","deleteTable","cellFormats","tablecellbackgroundcolor","backgroundColor","remove_similar","tablecellbordercolor","borderColor","tablecellborderstyle","borderStyle","tablecellborderwidth","addTempAttr","Plugin$1","getAnnouncements","axios","editAnnouncement","storeAnnouncement","post","updateAnnouncement","put","_vm","_h","$createElement","_self","scopedSlots","_u","proxy","editMode","$event","$$v","$set","expression","_l","staticRenderFns","staticClass","myValue","validEvents","isValidKey","bindHandlers","initEvent","forEach","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","created","watch","mounted","$el","scriptSrc","beforeDestroy","Editor","baseUrl","language","language_url","skin_url","content_css","branding","images_upload_handler","xhr","token","XMLHttpRequest","withCredentials","setRequestHeader","onload","json","responseText","FormData","blobInfo","filename","send","methods","LzForm","TinymceEditor","mixins","area_id","expiration_time","areas","showDetail","handelIncrease","getGlobal","getTinymce","isNull","hasAdvTab","hasUploadTab","getPrependUrl","hasDescription","hasImageTitle","hasImageCaption","getImageList","hasUploadUrl","getUploadUrl","hasUploadHandler","getUploadHandler","getUploadBasePath","getUploadCredentials","showAccessibilityOptions","isAutomaticUploadsEnabled","parseIntAndGetMax","val1","val2","getImageSize","onerror","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","imgElm","selectImage","isPlaceholderImage","getHspace","marginLeft","marginRight","getVspace","marginTop","marginBottom","hasCaption","updateAttrib","wrapInFigure","figureElm","removeFigure","toggleCaption","normalizeStyle","normalizeCss","setSize","getSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","getBorderStyle","isFigure","isImage","getIsDecorative","getAlt","hspace","vspace","isDecorative","getStyleValue","setAlt","figure","updateProp","sugarImage","updateAlt","normalized","mergedCss","compressed","getSelectedImage","splitTextBlock","readImageDataFromSelection","insertImageAtCaret","outerHTML","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","insertOrUpdateImage","partialData","selectedImageData","sanitizeList","extractValue","sanitizer","extracter","isGroup","findEntryDelegate","findEntry","optList","ListUtils","pathJoin","path1","path2","Uploader","defaultHandler","credentials","upload","onprogress","basePath","uploadBlob","isDefaultHandler","makeTab","_info","AdvTab","collect","urlListSanitizer","futureImageList","hasAdvTab$1","hasUploadTab$1","hasUploadUrl$1","hasUploadHandler$1","hasDescription$1","hasImageTitle$1","hasDimensions$1","hasImageCaption$1","hasAccessibilityOptions","automaticUploads","prependURL","preUrl","makeItems","imageUrl","imageDescription","imageTitle","imageDimensions","makeTab$1","MainTab","makeTab$2","UploadTab","prevImage","prevAlt","fromImageData","images","fileinput","toImageData","removeEmptyAlt","addPrependUrl2","srcURL","prependUrl","addPrependUrl","formFillFromMeta2","formFillFromMeta","calculateImageSize","helpers","imageSize","updateImagesDropdown","changeSrc","changeImages","calcVSpace","matchingTopBottom","calcHSpace","matchingLeftRight","calcBorderWidth","calcBorderStyle","calcStyle","changeStyle2","dataCopy","changeStyle","changeAStyle","changeFileInput","blobUri","uploader","finalize","updateSrcAndSwitchTab","dataUrl","createBlobCache","alertErr","addToBlobCache","changeHandler","closeHandler","makeDialogBody","tabPanel","makeDialog","submitHandler","editorUpload","uploadImagesAuto","blobCache","normalizeCss$1","stylesArg","Dialog","openLater","hasImageClass","toggleContentEditableState","toggleContentEditable","isEquatableType","compareFn","contramap","eqa","tripleEq","eqString","eqArray","eqSortedArray","eqRecord","kx","ky","q","eqAny","tx","ty","typeOf$1","sort$1","bifilter","equal","isArray$1","indexOf$1","reduce","iteratee","accumulator","lTrim","rTrim","platform$1","webkit","fileApi","windowsPhone","Env","gecko","iOS","caretAfter","documentMode","cacheSuffix","experimentalShadowDom","canHaveCSP","desktop","whiteSpaceRegExp","delim","sp","scn","de","cn","createNS","onCreate","exts","ext","walk","explode","_addCacheSuffix","hasOwn","getHead","toArray$1","recurse","eq$2","filterSelf","prevSiblings","nextSiblings","childNodesCount","getStyleContainer","intoView","alignToTop","scrollIntoViewIfNeeded","scrollIntoView","isNodeType","isRestrictedNode","getPrototypeOf","lowercasedNames","matchStyleValues","cssValue","computed","hasAttributeValue","isBogus","isBogusAll","isTextareaOrInput","isComment$1","isDocument$1","isDocumentFragment$1","browser$1","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","hasChild","blocks","voids","tableCells","tableSections","headings","listItems","wsElements","lazyLookup","isHeading","isTable$1","isBr$1","isVoid","isTableSection","isTableCell","isWsPreserveElement","whiteSpaceRegExp$1","isWhitespaceText","surroundedBySpans","previousIsSpan","nextIsSpan","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","baseEntities","'","reverseEntities","nativeDecode","buildEntitiesLookup","radix","entity","fromCharCode","namedEntities","encodeRaw","encodeAllRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","decode","Entities","mapCache","dummyObj","makeMap$2","each$3","extend$1","explode$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","attributesOrder","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","patternElements","customElementsMap","createLookupTable","extendWith","schemaItems","verify_html","valid_elements","validStyles","valid_styles","invalidStyles","invalid_styles","validClasses","valid_classes","whiteSpaceElementsMap","selfClosingElementsMap","shortEndedElementsMap","boolAttrMap","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","blockElementsMap","textInlineElementsMap","patternToRegExp","addValidElements","validElements","ei","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","valid_children","extended_valid_elements","dd","dt","th","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getTextInlineElements","getShortEndedElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","getWhiteSpaceElements","isValidChild","attrPatterns","getCustomElements","support","Expr","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","documentIsHTML","rbuggyQSA","rbuggyMatches","contains$3","isZwsp","removeZwsp","Styles","rgbRegExp","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","encodingItems","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","compress2","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","url2","url3","str2","allow_script_urls","allow_svg_data_urls","lastIndex","serializeStyles","styleList","i_1","eventExpandoPrefix","mouseEventRe","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","hasIsDefaultPrevented","returnTrue","returnFalse","addEvent","attachEvent","removeEvent","detachEvent","getTargetFromShadowDom","defaultTarget","fix","originalEvent","srcElement","eventDoc","cancelBubble","isImmediatePropagationStopped","metaKey","bindOnReady","eventUtils","domLoaded","isDocReady","readyState","readyHandler","EventUtils","expando","hasMouseEnterLeave","hasFocusIn","callbackList","fakeName","nativeHandler","defaultNativeHandler","executeHandlers","namesList","mouseEnterLeave","currentTarget","relatedTarget","eventMap","parentWindow","getElementsByTagName","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","push_native","indexOf$2","booleans","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","seed","nid","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","checkNonElements","doneName","xml","oldCache","outerCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","hasCompare","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","duplicates","detectDuplicates","sortStable","createPseudo","excess","unquoted","nodeNameSelector","operator","check","what","ofType","useCache","pseudo","matched","lang","elemLang","hash","tabIndex","selectedIndex","even","odd","lt","gt","nth","filters","parseOnly","soFar","preFilters","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$2","trim$2","each$4","hook","removeAttr","camel","dashed","prependTo","replaceWith","wrapInner","classState","existingClassName","object","siblingName","firstSibling","wrappedResult","parentsUntil","nextUntil","prevUntil","overrideDefaults","TreeWalker","prev2","findSibling","findPreviousNode","startName","module$1","requestAnimationFramePromise","par","asyncValues","asyncValue","par$1","futures","unite","promiseObj","requestAnimationFrameFunc","vendors","featurefill","wrappedSetTimeout","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","debounce","Delay","setEditorInterval","StyleSheetLoader","documentOrShadowRoot","idCount","loadedStates","edos","maxLoadTime","_setReferrerPolicy","addStyle","loadedCallback","errorCallback","passed","failed","isOldWebKit","webKitChunks","wait","testCallback","waitCallback","waitForWebKitLinkLoaded","styleSheet","styleSheets","ownerNode","owningElement","waitForGeckoLinkLoaded","cssRules","sheet","async","defer","contentCssCors","crossOrigin","loadF","loadAll","urls","WeakMap","forElement","referenceElement","rootDom","sl","each$5","grep$1","simpleSelectorRe","setupAttrHooks","keepValues","keep_values","keepUrlHook","updateInternalStyleAttr","findNodeIndex","lastNodeType","DOMUtils","_this","addedStyles","counter","stdMode","boxModel","boundEvents","ownEvents","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","clone_1","root_element","getViewPort","argWin","getPos$1","update_styles","setStyles","selectorVal","_findSib","getPrev","setHTML","canHaveHTML","parentElm","newElm","createHTML","outHtml","keepChildren","$node","removeAllAttribs","removeAttributeNode","styleElm","loadCSS","cls","uniqueId","getOuterHTML","setOuterHTML","reference","referenceNode","oldElm","replaceChild","attrNode","findCommonAncestor","pe","rgbVal","isNonEmptyElement","isNamedAnchor","brCount","bogusVal","splitElm","replacementElm","beforeFragment","afterFragment","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","wrappedLanguages","addOn","addOnConstructor","createUrl","resource","addComponents","pluginName","pluginUrl","loadDependencies","addOnUrl","deps","urlString","PluginManager","ThemeManager","AddOnManager$1","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","findMarkers","isAnnotation","findAll","nodesAlready","_registry","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","identifyParserNode","spans","persistent","TextWalker","TextSeeker","isBlockBoundary","newOffset","forwards","ZWSP","isZwsp$1","trim$3","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","someIf","clone$2","isEqual","rect1","rect2","isValidOverflow","overflowY","containsXY","getSelectedNode","extendingChars","isExtendingChar","isContentEditableTrue$1","isContentEditableFalse$1","isBr$2","isText$3","isInvalidTextElement","isAtomicInline","isTable$2","isCaretContainer$1","isCaretCandidate","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic","isEditableCaretCandidate","isElement$3","isCaretCandidate$1","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$3","resolveIndex","isWhiteSpace","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","nbsp$1","clientRect","getBoundingClientRectWebKitText","ec","so","eo","newRng","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","fromRangeStart","fromRangeEnd","pos1","pos2","isTextPosition","isElementPosition","HDirection","CaretPosition$1","trimEmptyTextNode","insertFragment","rangeInsertNode","isText$5","isBogus$1","nodeIndex$1","normalizedParent","getChildNodes","normalizedTextOffset","equal$1","normalizedNodeIndex","numTextFragments","createPathItem","outputOffset","resolvePathItem","findTextPosition","dataLen","targetOffset","isContentEditableFalse$2","getNormalizedTextOffset","trimmedOffset","getPoint","getLocation","findIndex$2","moveEndPoint","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","getUndoBookmark","defaultPreviewStyles","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","contentCss","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","getEventRoot","getServiceMessage","getTheme","shouldValidate","isInlineBoundariesEnabled","getFormats","getPreviewStyles","getCustomUiSelector","getThemeUrl","isInline$1","hasHiddenInput","shouldPatchSubmit","isEncodingXml","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","hasForcedRootBlock","getCustomUndoRedoLevels","shouldDisableNodeChange","hasContentCssCors","getPlugins","getExternalPlugins","shouldBlockUnsupportedDrop","isElement$4","isText$6","removeNode","getNodeValue","setNodeValue","trimCount","trimmedText","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","browser$2","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","firstPositionIn","lastPositionIn","CARET_ID","isCaretNode","getParentCaretContainer","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","addBogus","resolveCaretPositionBookmark","insertZwsp","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","appendData","resolvePaths","resolveId","endPos","spos","epos","resolveIndex$1","resolve$2","getBookmark$1","isBookmarkNode$1","is$2","expected","actual","isNbsp","isWhiteSpace$1","isContent","isNode","isInlineBlock","moveStart","isWhiteSpaceNode","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","isEmptyTextNode","replaceVars","vars","isEq","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$1","isVariableFormatName","hasVariableValues","isVariableValue","fieldValues","areSimilarFormats","otherFormatName","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","textOffset","spaceResult","findSelectorEndPoint","curFormat","findBlockEndPoint","scopeRoot","findParentContainer","block_expand","expandRng","includeTrailingSpace","startPoint","endPoint","clampToExistingChildren","getEndChild","walk$1","collectSiblings","findEndPoint","walkBoundary","siblings_1","getSelectedNodes","hasMultipleRanges","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","getCellsFromEditor","getSel","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","moveEndPoint$1","hasAnyRanges","runOnRanges","fakeSelectionNodes","fakeNodeRng","fillBookmark","isZeroWidth","wrapName","applyWordGrab","makeAnnotation","eDoc","decorate","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","hasFakeSelection","Annotator","annotationChanged","typeLookup","walk$2","isEmptyTextNode$1","selfAttrs","cloneAttrs","selfAttr","refNode","makeMap$3","Writer","indent","indentBefore","indent_before","indentAfter","indent_after","entity_encoding","htmlOutput","element_format","pi","doctype","Serializer","8","7","10","11","sortedAttrs","elementRule","extractBase64DataUris","dataImageUri","uris","imageId","restoreDataUris","parseDataUri","decodeURIComponent","isValidPrefixAttrName","isInvalidUri","allow_html_data_urls","findEndTagIndex","startIndex","shortEndedElements","tokenRegExp","isConditionalComment","findCommentEndIndex","lcHtml","endIfIndex","endCommentRegexp","checkBogusAttribute","regExp","attrString","SaxParser","fix_self_closing","parseInternal","base64Extract","endRegExp","attrList","textData","isInternalElement","isShortEnded","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","anyAttributesRequired","filteredUrlAttrs","scriptUriRegExp","parsingMode","processEndTag","processText","processComment","processAttr","processMalformedComment","startTag","parseAttribute","val3","attrRule","trimRegExp","fillAttrsMap","attrRegExp","selfClosing","self_closing_elements","removeInternalElements","remove_internals","fixSelfClosing","processHtml","bogusValue","isValidCdataSection","preserve_cdata","findEndTag","documentFocusInHandler","SaxParser$1","trimHtml","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","bogusAllRegExp","getTempAttrs","trimExternal","trimEmptyContents","emptyRegExp","getContentFromBody","getInner","no_events","getContentInternal","each$7","ElementUtils","compareObjects","obj1","obj2","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBeforeImageBlock","isAfterImageBlock","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","hasWhitespacePreserveParent","rootElement","isContent$1","isBookmark","isBogus$2","isBogusAll$1","isEmptyNode","skipBogus","isEmpty$1","getLastChildren$1","rawNode","removeTrailingBr","allBrs","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","dropLast","parentsUntil$1","parents$1","parentsAndSelf","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","whitespaceOffset","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","startPosition","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition$1","findCaretPosOutsideElmAfterDelete","eqRawNode","isBlock$2","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","tableCellRng","tableSelection","deleteAction","removeTable","emptyCells","deleteCellSelection","isRootFromElement","getClosestCell","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","isSingleCellTable","getTableCells","getCellRng","endCell","getCellRangeFromStartTable","partialSelection","isWithinSameTable","getTableSelectionFromCellRng","getTableSelection","optCellRng","cRng","getCellIndex","getSelectedCells","isSingleCellTableContentSelected","getActionFromRange","deleteCellContents","deleteContents","lastBlock","additionalCleanupNodes","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","startElm","getParentCaption","deleteRange","getParentCell","deleteBetweenCells","fromCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","fromPos","deleteCaret","createRange$1","normalizeBlockSelectionRange","commonAncestorContainer","newEndPos","normalize$1","hasOnlyOneChild","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","nonEmptyElements","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems$1","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","cloneContents","findFirstIn","caretPos","caretWalker","newCaretPos","findLastOf","insertMiddle","insertAtCaret","liTarget","liElms","BEGINNING","END","isAt","newPos","isAfterNbsp","trimOrPadLeftRight","hasSiblingText","trimNbspAfterDeleteAndPadValue","isTableCell$2","isTableCellContentSelected","selectionSetContent","insertData","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","textInlineElements","root_1","elementUtils_1","testNode","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","nextRng","getContentEditableFalseParent","parentEditableFalseElm","findNextCaretRng","deleteSelectedContent","insertHtmlAtCaret","bookmarkHtml","caretElement","parentElement","parserArgs","_selectionOverrides","showBlockCaretContainer","browser$3","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","getBookmark$2","bookmarkToNativeRng","newBookmark","storeNative","isEditorUIElement","FocusManager","isManualNodeChange","selectionChange","registerPageMouseUp","throttledStore","mouseUpPage","registerFocusOut","registerMouseUp","registerEditorEvents","isEditorUIElement$1","isEditorContentAreaElement","isUIElement","customSelector","getActiveElement","editorManager","focusedEditor","blurredEditor","activeEditor","unregisterDocumentEvents","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","focusBody","hasElementFocus","hasIframeFocus","iframeElement","hasInlineFocus","rawBody","hasUiFocus","hasFocus$1","hasEditorOrUiFocus","focusEditor","quirks","refreshContentEditable","bookmarkRng","contentEditableHost","activateEditor","skipFocus","findMatchingNodes","nodeFilters","attributeFilters","attrMatches","name_2","filter$3","defaultFormat","isTreeNode","moveSelection","setEditorHtml","setContentString","forcedRootBlockName","padd","isRootContent","setContentTree","getNodeFilters","getAttributeFilters","setContentInternal","split$1","isEq$1","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","onmatch","matchAll","matchedFormatNames","checkedMap","startElement","defaultBlock","matchAllOnNode","formatNames","matchSimilar","ZWSP$1","CARET_ID$1","importNode","getEmptyCaretContainers","isCaretContainerEmpty","findFirstTextNode","createCaretContainer","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","cleanFormatNode","validFormats","matchedFormats","uniqueFormats","fmtName","clonedFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","cleanedFormatNode","caretTextNode","disableCaretContainer","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","postProcessHooks","filter$4","each$8","addPostProcessHook","hooks","postProcess","hasPreSibling","pre","isPre","joinPre","pre1","pre2","each$9","isElementNode","findElementSibling","mergeSiblingsNodes","tmpSibling","elementUtils","mergeSiblings","merge_siblings","newNode","clearChildStyles","clear_child_styles","links","processChildElements","unwrapEmptySpan","hasStyle","applyStyle","removeResult","MCE_ATTR_RE","each$a","isEq$2","isTableCellOrRow","isChildOfInlineParent","lastIdx","normalizeTableSelection","childNode","wrapWithSiblings","matchName$1","isColorFormatAndAnchor","removeNode$1","rootBlockElm","forcedRootBlock","list_block","forced_root_block_attrs","removeFormatInternal","compareNode","stylesModified","preserve_attributes","attrsToPreserve","valueOut","newName","findFormatRoot","formatRoot","removeFormatFromClone","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","lastContentEditable","removeRngStyle","textDecorations","textDecoration","ceFalseOverride","each$b","mergeTextDecorationsAndColor","processTextDecorationsAndColor","mergeBackgroundColorAndFontSize","mergeSubSup","mergeWithChildren","mergeWithParents","merge_with_parents","each$c","isElementNode$1","setElementFormat","onformat","styleVal","applyNodeStyle","applyRngStyle","nodeSpecific","wrapElm","currentWrapElm","getChildCount","getChildElementNode","mergeStyles","childCount","curSelNode","forced_root_block","fake","processRanges","tableModel","tableRow","cellPosition","fillout","y2","x2","cellExists","skipCellsX","findElementPos","extractRows","sx","sy","ey","subTable","createDomTable","tableElement","tableBody","modelRowsToDomRows","toDom","subsection","endElement","findParentListContainer","getFullySelectedListWrappers","_li","listCont","listElm","listStyles","_style","wrap$3","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","firstCell","fullTableModel","sectionedTableModel","getSelectionFragment","trimLeadingCollapsibleText","isCollapsibleWhitespace","getInnerText","bin","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","getSelectedContentInternal","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","getOuterHtml","createFragment$1","insertAt","removeAt","applyDiff","fragments","currentFragments","undoLevelDocument","lazyTempDocument","implementation","createHTMLDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$3","isUnlocked","locks","setTyping","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange","addUndoLevel","currentLevel","lastLevel","bm","customUndoRedoLevels","setDirty","callback1","callback2","hasUndo","hasRedo","isTreeNode$1","runSerializerFiltersOnFragment","createDummyUndoLevel","makePlainAdaptor","getModel","makeRtcAdaptor","tinymceEditor","rtcEditor","defaultVars","_undoManager","_locks","_node","_similar","_args","_details","getSelectedContent","getRawModel","isRtc","editorCast","rtcInstance","rtc","isRemote","getRtcInstanceWithFallback","getRtcInstanceWithError","beforeChange$1","addUndoLevel$1","undo$1","redo$1","clear$1","reset$1","hasUndo$1","hasRedo$1","transact$1","ignore$1","extra$1","applyFormat$1","removeFormat$1","defaultFormat$1","getContent$1","setContent$1","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","DOM$3","restoreOriginalStyles","orgDisplay","safeDestroy","clearDomReferences","contentAreaContainer","formElement","restoreForm","_mceOldSubmit","formEventDelegate","save","is_removing","unbindAllNativeEvents","automatic","destroyed","_beforeUnload","theme","hasOwnProperty$2","deep$1","sectionResult","deviceDetection","legacyMobilePlugins","defaultTouchSettings","table_grid","object_resizing","normalizePlugins","pluginNames","trimmedPlugins","filterLegacyMobilePlugins","extractSections","sectionSettings","hasSection","isSectionTheme","getSectionConfig","getDefaultSettings","documentBaseUrl","baseDefaults","toolbar_mode","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_urls","remove_script_host","visual","font_size_legacy_values","hidden_input","inline_styles","convert_fonts_to_spans","getDefaultMobileSettings","mobileSettings","defaultMobileSettings","toolbar_sticky","defaultPhoneSettings","getExternalPlugins$1","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","propName","rawElm","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect$1","isInsideElementContentArea","bodyElm","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","unimplemented","NotificationManager","getImplementation","getTopNotification","addNotification","closeNotification","otherNotification","getNotifications","serviceMessage","WindowManagerImpl","getParams","setParams","WindowManager","dialogs","funcBind","fireOpenEvent","fireCloseEvent","addDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","openDialog","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","pluginInitError","initError","isContentCssSkinName","getContentCssUrls","contentCssFile","appendContentCssFromSettings","excludeFromDescend","fireScrollIntoViewEvent","scrollEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","cleanup","createMarker","elementMarker","withMarker","preserveWith","applyWithMarker","withScrollEvents","scrollToMarker","intoWindowIfNeeded","viewportBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollElementIntoView","scroller","scrollRangeIntoView","hasCeProperty","findParent","findClosestIeRange","createTextRange","moveToElementText","moveToPoint","moveOutOfContentEditableFalse","pointDoc","getEndpointElement","real","getStart$2","skipEmptyTextNodes","getNode$1","endElm","select$1","getContent$2","isEq$4","rng1","findParent$1","hasParent","hasParentWithName","isTable$3","isTableCell$3","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","prependData","rngSetContent","prevText","nextText","oldLength","setupArgs","cleanContent","setContent$2","contentArgs","createContextualFragment","BookmarkManager","BookmarkManager$1","isXYWithinRange","VK","HOME","modifierPressed","altKey","isContentEditableFalse$6","isContentEditableTrue$2","getContentEditableRoot","ControlSelection","selectedElm","selectedElmGhost","resizeHelper","selectedHandle","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","editableDoc","rootDocument","resizeHandles","nw","ne","sw","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTarget","isResizable","setGhostElmSize","ghostElm","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","setSizeProp","showResizeRect","hideResizeRect","unbindResizeHandleEvents","targetWidth","targetHeight","unSelectabe","updateResizeRect","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","handleMSControlSelect_1","delayedSelect","throttledUpdateResizeRect","composing","deleteFromCallbackMap","newCallbacks","SelectorChanged","selectorChangedData","currentSelectors","matchedSelectors","isNativeIeSelection","isAttachedToDom","isValidRange","Selection$1","selectedRange","explicitRange","getRng$1","getEnd$1","bookmarkManager","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","ieRange","setNode","getSelectedBlocks$1","anchorRange","focusRange","selectorChanged","getScrollContainer","scrollContainer","placeCaretAt","controlSelection","removeAttrs","addFontToSpansFilter","domParser","fontSizes","face","addStrikeToSpanFilter","addFilters","blobUriToBlob","rejectWithError","responseType","parseDataUri$1","uriParts","buildBlob","uriToBlob","imageToBlobInfo","getByUri","dataUri","getByData","getAllImages","ImageScanner","uploadStatus","cachedPromises","isUploaded","promises","imageInfo","newPromise","paddEmptyNode","brPreferred","padd_empty_with_br","isPaddedWithNbsp","hasOnlyChild","isPadded","isEmpty$2","whitespaceElements","isLineBreakNode","isBogusImage","isInternalImageSource","isValidDataImg","images_dataimg_filter","imgElem_1","registerBase64ImageFilter","blob_cache","processImage","inputSrc","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","addNoOpener","newRel","allow_unsafe_link_target","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","makeMap$4","each$d","explode$2","extend$2","DomParser","matchedNodes","matchedAttributes","root_name","fixInvalidChildren","newParent","tempNode","nonSplitableElements","textBlockElements","filterNode","fi","fl","isInWhiteSpacePreservedElement","invalidChildren","getRootBlockName","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","addRootBlocks","rootBlockNode","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","attrFiltersLen","htmlParser","internalName","hasChildren","trimTrailingBr","brNode1","brNode2","preProcess","oldDoc","impl","shouldFireEvent","hasEventListeners","postProcess$1","outArgs","getHtmlFromNode","parseHtml","serializeNode","htmlSerializer","toHtml","DomSerializer","addRules","setRules","Serializer$1","domSerializer","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","BlobCache","mimeToExt","toBlobInfo","findFirst","cachedBlobInfo","removeByUri","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replaceUrlInUndoStack","replaceImageUriInView","uploadImages","scanForImages","imageInfos","filteredResult","uploadInfo","uploadUri","isValidDataUriImage","dataImgFilter","addFilter","resultItem","replaceBlobUris","source_view","registeredFormatListeners","currentFormats","updateAndFireChangeCallbacks","formatChangeData","formatsList","newFormats","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","_fmt","_itemName","removeformat","FormatRegistry","BreakType","each$e","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","ancestorName","parentRequired","siblingElm","parseSelectorItem","$0","$3","$4","parseSelector","previewFrag","parentFontSize","previewCss","previewStyles","removeVars","previewOpt","previewElm","numValue","addShortcut","Formatter","formatChangeState","registerEvents$1","isFirstTypedCharacter","addNonTypingUndoLevel","isDirty","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","isForcedRootBlockFalse","firstElementChild","updatePlaceholder","showPlaceholder","isPlaceholderShown","debounceLongpress","isEqualNode","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","rootNodeName","restoreSelection","hasSelectionModifyApi","modify","moveByWord","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertBefore$1","insertAfter$1","insertInline$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","strongRtl","hasStrongRtl","isInlineTarget","isRtl$1","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","evaluateUntil","fns","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","nextPos","isValidLocation","readLocation","getName","outside","isEq$5","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation","setCaretPosition","setSelected","renderCaretLocation","findLocation$1","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","renderInsideInlineCaret","inlines","_inline","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","VDirection","walk$3","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastPos","lastRect","lastDist","newDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","isAtFirstLine","isAtLastLine","getPositionsAbove","getPositionsBelow","getFirstLinePositions","getLastLinePositions","getNodeClientRects","toArrayWithNode","customEventRootDelegates","beforeUnloadDelegate","findUntil$1","walkUntil","isAboveFn","isBeflowFn","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","positionsUntil","isBelowFn","getClientRect","isAboveLine","isLine","isContentEditableFalse$7","findNode$1","distanceToRectLeft","distanceToRectRight","isInsideX","isInsideY","findClosestClientRect","oldClientRect","oldDistance","newDistance","walkUntil$1","includeChildren","findLineNodeRects","targetNodeRect","checkPosFn","lineRects","getFakeCaretTargets","caretInfo","closestFakeCaret","fakeTargetNodeRects","targetNodeRects","closestNodeRect","isContentEditableTrue$3","isContentEditableFalse$8","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","caretRange","isContentEditableFalse$9","getSelectedNode$1","moveToCeFalseHorizontally","getNextPosFn","isBeforeContentEditableFalseFn","rangeIsInContainerBlock","nextCaretPosition","peekCaretPosition","moveToCeFalseVertically","walkerFn","closestNextLineRect","dist1","dist2","contentEditableFalseNode","linePositions","nextLinePositions","caretClientRect","caretPositions","exitPreBlock","getNextVisualCaretPosition","getPrevVisualCaretPosition","getHorizontalRange","newRange","getVerticalRange","moveH","moveV","isCefPosition","moveToLineEndPoint","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell$1","isTargetCorner","corner","getBottomValue","getTopValue","isAbove$1","isBelow$1","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","moveToRange","hasNextBreak","lineInfo","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","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","executeKeydownOverride","isBeforeRoot","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","firstPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","blockPosition","blockBoundary","getBlockPosition","isDifferentBlocks","hasSameParent","parent1","parent2","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$3","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","fromBlock","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$1","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$1","backspaceDelete$2","_forward","isBr$5","parentBlocks","isBeforeBr","isAfterBr","findPreviousBr","findNextBr","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","read$4","deleteElement$1","hideFakeCaret","getAncestorCe","getContentEditableRoot$1","deleteOffscreenSelection","hasCefAncestor","paddEmptyElement","backspaceDelete$3","trimEmptyTextNode$1","deleteContentAndShowCaret","deleteCefBoundaryText","backspaceDelete$4","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope$1","backspaceDeleteCollapsed","toPosition","backspaceDelete$5","getParentInlines","hasOnlyOneChild$1","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret$1","backspaceDelete$6","deleteCaret$2","backspaceDelete$7","isEditable$1","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","styleValue","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentUnit","indentValue","navigateIgnoreEmptyTextNodes","getClosestBlock","isAtBeforeAfterBlockBoundary","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","backspaceDelete$8","executeKeydownOverride$1","executeKeyupOverride","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot","editableRoot","getParentBlock$2","getParentBlockName","isListItemParentBlock","hasFirstChild","hasParent$1","isListBlock","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","createNewBlock","newBlockName","trimZwsp","isEmptyAnchor","isTableCell$4","emptyBlock","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","getEditableRoot$1","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","wrapSelfAndSiblingsInDefaultBlock","addBrToBlockIfNeeded","insert$1","parentBlockName","isAfterLastNodeInContainer","clonedNode","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","hasRightSideContent","scrollToBr","brElm","moveSelectionToBr","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr$1","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","insert$2","anchorLocation","shouldInsertBr","shouldBlockNewLine","newLineAction","shouldBlockNewLine$1","_shiftKey","isBrMode","requiredState","brMode","inListBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre$1","inBrContext","canInsertIntoEditableRoot","rootEditable","match$2","predicates","isMatch","getAction$1","insert$3","handleEnterKeyEvent","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","findBlockCaretContainer","removeIeControlRect","blockCaretContainer","handleBlockContainer","browser$4","setupIeInput","keypressThrotter","setup$f","isComposing","executeKeydownOverride$3","setup$g","registerKeyboardOverrides","setup$h","NodeChange","lastPath","nativeRng","fakeRng","isSameElementPath","currentPath","preventSummaryToggle","filterDetails","setup$i","isTextBlockNode","normalizeSelection$1","setup$j","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","isContentEditableFalse$a","isContentEditableTrue$4","isDraggable","isValidDropTarget","dragElement","cloneElement","cloneElm","createGhost","clonedElm","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","blockUnsupportedFileDrop","preventFileDrop","defaultPrevented","preventFileDropIfUIElement","editorRoot","eventNames","setup$k","renderFocusCaret","isContentEditableTrue$5","isContentEditableFalse$b","getContentEditableRoot$2","SelectionOverrides","selectedContentEditableNode","fakeCaret","realSelectionId","isFakeSelectionElement","getRealSelectionElement","setRange","getRange","contentEditableRoot","removeContentEditableSelection","handleTouchSelect","setContentEditableSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","fakeCaretInfo","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","Range","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","template","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","selection_1","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","DOM$4","appendStyle","getRootName","removeUndefined","mkParserSettings","mkSerializerSettings","boolean_attributes","move_caret_before_on_enter_elements","non_empty_elements","short_ended_elements","text_inline_elements","whitespace_elements","createParser","autoFocus","auto_focus","moveSelectionToFirstCaretPosition","bindPendingEventDelegates","execCallback","getStyleSheetLoader","preInit","rtcMode","browser_spellcheck","gecko_spellcheck","spellcheck","directionality","protect","startContent","contentCssText_1","_urls","content_style","initContentBody","skipWrite","orgVisibility","iframeHTML","hex_colors","force_hex_style_colors","annotator","_nodeChangeDispatcher","loadingRtc","setProgressState","DOM$5","relaxDomain","ifr","domain","hostname","bodyUuid","domainRelaxUrl","createIframeElement","customAttrs","frameBorder","allowTransparency","getURI","bodyId","bodyClass","createIframe","isDomainRelaxed","boxInfo","hidden","DOM$6","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initIcons","iconPackName","currentIcons","loadIcons","svgData","addIcon","initTheme","renderFromLoadedTheme","renderFromThemeFunc","iframeHeight","createThemeFalseResult","renderThemeFalseIframe","renderThemeFalse","renderThemeUi","DOM$7","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","url_1","loadTheme","themeUrl","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","urlMeta","loadPlugins","depPlugin","url_2","getStyleSheetLoader$1","resetContent","triggerSave","set_dirty","ancestor$3","legacyPropNames","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","getComputedFontProp","getFontProp","getFontSize","getFontFamily","findFirstCaretElement","isRangeAtStartOfNode","getCaretElement","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","processValue","insertAtCaret$1","nativeCommand","deleteCommand","forwardDeleteCommand","each$f","map$3","inArray$2","EditorCommands","setupCommands","skip_focus","customCommand","addCommands","commandList","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","selectionBookmark","queryCommandEnabled","listParent","editingHost","alignStates","Undo","Redo","internalContentEditableAttr","setContentEditable","switchOffContentEditableTrue","switchOnContentEditableTrue","removeFakeSelection","restoreFakeSelection","toggleReadOnly","isReadOnly$1","registerFilters","registerReadOnlyContentFilters","isClickEvent","isInAnchor","preventReadOnlyEvents","registerReadOnlySelectionBlockers","nativeEvents","EventDispatcher","bindings","toggleEvent","isNative","beforeFire","wrappedCallback","hi","bindingName","getEventDispatcher","_eventDispatcher","toggleNativeEvent","Observable","dispatcherArgs","DOM$8","getEventTarget","eventRoot","isListening","fireEvent","bindEventDelegate","delegates","eventRootElm","editors","EditorObservable","_pendingNativeEvents","defaultModes","switchToMode","activeMode","availableModes","oldMode","deactivate","editorReadOnly","registerMode","design","each$g","explode$3","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","desc","cmdFunc","createShortcut","parseShortcut","charCode","addAutocompleter","addContextForm","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","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","tinyMCEPreInit","srcScript","currentScript","pluginBaseUrls","plugin_base_urls","pluginBaseUrl","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","relativePosition","targetW","targetH","findBestRelativePosition","constrainRect","rels","intersect","x1","y1","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","fromClientRect","each$k","extend$5","Class","_super","mixin","Mixins","dummy","createMethod","Methods","Properties","Statics","Defaults","member","localStorage","min$1","max$1","round$2","Color","rgb2hsv","hsvToRgb","toRgb","toHsv","hexCode","JSONUtils","JSONP","XHR","ready","success_scope","error_scope","overrideMimeType","content_type","crossDomain","requestheaders","extend$6","JSONRequest","sendRPC","ecb","scb","xhrArgs","create$9","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","nextType","nextNextType","prevType","EMPTY_STRING$1","WHITESPACE$1","PUNCTUATION$1","isProtocol","findWordEnd","findUrlEnd","peakedWord","findWords","sChars","characterMap","word","includeWhitespace","includePunctuation","startOfWord","endOfWord","endOfUrl","getDefaultOptions","getWords","filteredChars","extractedChars","getWords$1","isNewline","txt","treeWalker","strLen","countWords","countCharacters","countCharactersWithoutSpaces","createBodyCounter","createSelectionCounter","createBodyWordCounter","getWordCount","getCharacterCount","getCharacterCountWithoutSpaces","getCount","fireWordCountUpdate","charactersWithoutSpaces","updateCount","debouncedUpdate"],"mappings":"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cliF,GAETkiF,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,KACA,IACA,KACA,KACA,KACA,EACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,IAEF,SAASC,GAASC,EAASC,GAIzB,IAHA,IAEIxnH,EAFAsoF,EAAM,GACNm/B,EAAM,IAAIvvH,MAAM,IAEXf,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAIiB,EAAI,EAAGA,EAAI,EAAGA,IACrBkwF,EAAIlwF,GAAKovH,EAAQpvH,EAAQ,EAAJjB,GAEvB,IAASiB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B4H,EAAM,EACN,IAAK,IAAI7H,EAAI,EAAGA,EAAI,EAAGA,IACrB6H,GAAOunH,EAAQnvH,EAAQ,EAAJD,GAASmwF,EAAInwF,GAElCsvH,EAAIrvH,EAAQ,EAAJjB,GAAS6I,GAGrB,OAAOynH,EAET,SAASC,GAAetyD,EAAQ1/D,GAC9B,IAAIE,EAcJ,OAbAF,EAAQwxH,GAAQxxH,GAAQ,EAAG,GAC3BA,GAAS,IACLA,EAAQ,EACVE,EAAI,IAAMF,EAAQ,IAAM,K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I5+C,uBAAsE,WAA7C/D,GAAM9e,GAAQZ,QAAQqe,GAAO,YAIhF,OAHAmX,EAAM6sC,EAAI5+C,wBACV38B,EAAI0uC,EAAIvR,MAAQxkB,EAAI4Q,gBAAgByU,YAAczG,EAAKyG,YAAcrlB,EAAI4Q,gBAAgB4U,WACzFvkB,EAAI80B,EAAItR,KAAOzkB,EAAI4Q,gBAAgBuU,WAAavG,EAAKuG,WAAanlB,EAAI4Q,gBAAgB2U,UAC/E,CACLl+B,EAAGA,EACH4Z,EAAGA,GAGP8P,EAAe6xD,EACf,MAAO7xD,GAAgBA,IAAiB09I,GAAW19I,EAAa3I,WAAa4hP,GAASj5O,EAAc09I,GAClGpnK,GAAK0pB,EAAakU,YAAc,EAChChkB,GAAK8P,EAAamU,WAAa,EAC/BnU,EAAeA,EAAaA,aAE9BA,EAAe6xD,EAAIj5D,WACnB,MAAOoH,GAAgBA,IAAiB09I,GAAW19I,EAAa3I,WAAa4hP,GAASj5O,EAAc09I,GAClGpnK,GAAK0pB,EAAasU,YAAc,EAChCpkB,GAAK8P,EAAaoU,WAAa,EAC/BpU,EAAeA,EAAapH,WAE9B1I,GAAK2oP,GAAsBzoP,GAAQZ,QAAQqiE,IAE7C,MAAO,CACLv7E,EAAGA,EACH4Z,EAAGA,IAIHgpP,GAAS,CACX,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,WAEEC,GAAQ,CACV,OACA,OACA,WACA,KACA,MACA,QACA,KACA,MACA,QACA,UACA,OACA,OACA,QACA,QACA,SACA,MACA,SAEEC,GAAa,CACf,KACA,MAEEC,GAAgB,CAClB,QACA,QACA,SAEEp2D,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA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","file":"js/chunk-8788ed04.9c44f13d.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.4.2 (2020-08-17)\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 compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n var isArrayOf = function (value, pred) {\n if (isArray(value)) {\n for (var i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? 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 findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Option.none();\n };\n var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return 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 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 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 SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n var fold = function (res, onError, onValue) {\n return res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n };\n var partition$1 = function (results) {\n var values = [];\n var errors = [];\n each(results, function (obj) {\n fold(obj, function (err) {\n return errors.push(err);\n }, function (val) {\n return values.push(val);\n });\n });\n return {\n values: values,\n errors: errors\n };\n };\n var mapError = function (res, f) {\n if (res.stype === SimpleResultType.Error) {\n return {\n stype: SimpleResultType.Error,\n serror: f(res.serror)\n };\n } else {\n return res;\n }\n };\n var map$1 = function (res, f) {\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n } else {\n return res;\n }\n };\n var bind$1 = function (res, f) {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n var bindError = function (res, f) {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n var svalue = function (v) {\n return {\n stype: SimpleResultType.Value,\n svalue: v\n };\n };\n var serror = function (e) {\n return {\n stype: SimpleResultType.Error,\n serror: e\n };\n };\n var toResult = function (res) {\n return fold(res, Result.error, Result.value);\n };\n var fromResult = function (res) {\n return res.fold(serror, svalue);\n };\n var SimpleResult = {\n fromResult: fromResult,\n toResult: toResult,\n svalue: svalue,\n partition: partition$1,\n serror: serror,\n bind: bind$1,\n bindError: bindError,\n map: map$1,\n mapError: mapError,\n fold: fold\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$2 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each$1(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var find$1 = function (obj, pred) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n if (pred(x, i, obj)) {\n return 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 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 return keys(filter$1(obj, function (value) {\n return value !== undefined && value !== null;\n }));\n };\n var objOfOnly = function (fields) {\n var delegate = objOf(fields);\n var fieldNames = foldr(fields, function (acc, f) {\n return f.fold(function (key) {\n return deepMerge(acc, wrap$1(key, true));\n }, constant(acc));\n }, {});\n var extract = function (path, strength, o) {\n var keys = isBoolean(o) ? [] : getSetKeys(o);\n var extra = filter(keys, function (k) {\n return !hasNonNullableKey(fieldNames, k);\n });\n return extra.length === 0 ? delegate.extract(path, strength, o) : unsupportedFields(path, extra);\n };\n return {\n extract: extract,\n toString: delegate.toString\n };\n };\n var objOf = function (fields) {\n var extract = function (path, strength, o) {\n return cExtract(path, o, fields, strength);\n };\n var toString = function () {\n var fieldStrings = map(fields, function (field) {\n return field.fold(function (key, okey, presence, prop) {\n return key + ' -> ' + prop.toString();\n }, function (okey, _instantiator) {\n return 'state(' + okey + ')';\n });\n });\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var arrOf = function (prop) {\n var extract = function (path, strength, array) {\n var results = map(array, function (a, i) {\n return prop.extract(path.concat(['[' + i + ']']), strength, a);\n });\n return ResultCombine.consolidateArr(results);\n };\n var toString = function () {\n return 'array(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var oneOf = function (props) {\n var extract = function (path, strength, val) {\n var errors = [];\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var res = prop.extract(path, strength, val);\n if (res.stype === SimpleResultType.Value) {\n return res;\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n var toString = function () {\n return 'oneOf(' + map(props, function (prop) {\n return prop.toString();\n }).join(', ') + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var setOf = function (validator, prop) {\n var validateKeys = function (path, keys) {\n return arrOf(value$1(validator)).extract(path, identity, keys);\n };\n var extract = function (path, strength, o) {\n var keys$1 = keys(o);\n var validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, function (validKeys) {\n var schema = map(validKeys, function (vk) {\n return adt$1.field(vk, vk, strict(), prop);\n });\n return objOf(schema).extract(path, strength, o);\n });\n };\n var toString = function () {\n return 'setOf(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var 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$2(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 return {\n get: get,\n set: set\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 documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\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 unknown$1 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$2,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$3({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$3 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$3,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var 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 return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim = blank(/^\\s+|\\s+$/g);\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var 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 = cached(function () {\n return PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? 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$1 = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var contains$2 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : constant(false);\n };\n var ancestor = function (scope, transform, isRoot) {\n var element = scope.dom();\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = 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 var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Option.none() : ancestor(scope, transform, stop);\n });\n };\n\n var isSource = function (component, simulatedEvent) {\n return eq$1(component.element(), simulatedEvent.event().target());\n };\n\n var nu$4 = function (parts) {\n if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) {\n throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!');\n }\n return asRawOrDie('Extracting event.handler', objOfOnly([\n defaulted$1('can', 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$2(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 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 var isDocument = isType$1(DOCUMENT);\n var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT);\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var documentElement = function (element) {\n return 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\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var appendAt = function (parent, element, index) {\n child(parent, index).fold(function () {\n append(parent, element);\n }, function (v) {\n before(v, element);\n });\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove(rogue);\n });\n };\n var remove = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove(wrapper);\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\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 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$1(originator, component.element()) && !eq$1(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(void 0, __spreadArrays([\n component.getApis(),\n component\n ], rest));\n }, f);\n };\n\n var NoState = {\n init: function () {\n return nu$5({\n readState: function () {\n return 'No State required';\n }\n });\n }\n };\n var nu$5 = function (spec) {\n return spec;\n };\n\n var generateFrom = function (spec, all) {\n var schema = map(all, function (a) {\n return optionObjOf(a.name(), [\n strict$1('config'),\n defaulted$1('state', NoState)\n ]);\n });\n var validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(function (errInfo) {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, function (v) {\n return v;\n });\n return {\n list: all,\n data: map$2(validated, function (optBlobThunk) {\n var output = optBlobThunk.map(function (blob) {\n return {\n config: blob.config,\n state: blob.state.init(blob.config)\n };\n });\n return function () {\n return output;\n };\n })\n };\n };\n var getBehaviours = function (bData) {\n return bData.list;\n };\n var getData = function (bData) {\n return bData.data;\n };\n\n var byInnerKey = function (data, tuple) {\n var r = {};\n each$1(data, function (detail, key) {\n each$1(detail, function (value, indexKey) {\n var chain = get(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 'alloy.receive': [\n 'receiving',\n 'reflecting',\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 isShadowRoot = function (dos) {\n return isDocumentFragment(dos);\n };\n var supported = isFunction(domGlobals.Element.prototype.attachShadow) && isFunction(domGlobals.Node.prototype.getRootNode);\n var isSupported$1 = constant(supported);\n var getRootNode = supported ? function (e) {\n return Element.fromDom(e.dom().getRootNode());\n } : documentOrOwner;\n var getContentContainer = function (dos) {\n return isShadowRoot(dos) ? dos : Element.fromDom(documentOrOwner(dos).dom().body);\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Option.some(r) : Option.none();\n };\n var getShadowHost = function (e) {\n return Element.fromDom(e.dom().host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported$1() && isNonNullable(event.target)) {\n var el = Element.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(Element.fromDom(event.target))) {\n var eventAny = event;\n if (eventAny.composed && eventAny.composedPath) {\n var composedPath = eventAny.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Option.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom().shadowRoot);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n return getShadowRoot(Element.fromDom(dom)).fold(function () {\n return dom.ownerDocument.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var body = 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 return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n 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 (getOpt(element, 'style').map(trim).is('')) {\n remove$1(element, 'style');\n }\n };\n var reflow = function (e) {\n return e.dom().offsetWidth;\n };\n\n var get$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 if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom()) {\n return 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 return 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(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$2 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var capture = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, true);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var get$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: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? 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 = function (point, width, height) {\n return {\n point: point,\n width: width,\n height: height\n };\n };\n var rect = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n };\n var bounds$1 = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var box = function (element) {\n var xy = absolute(element);\n var w = getOuter$2(element);\n var h = getOuter$1(element);\n return bounds$1(xy.left(), xy.top(), w, h);\n };\n var absolute$1 = function (element) {\n var position = find$3(element);\n var width = getOuter$2(element);\n var height = getOuter$1(element);\n return bounds$1(position.left(), position.top(), width, height);\n };\n var win = function () {\n return getBounds(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 var is$1 = function (element, selector) {\n return is(element, selector);\n };\n return ClosestOrAncestor(is$1, ancestor$2, scope, selector, isRoot);\n };\n\n var find$4 = function (queryElem) {\n var dependent = closest$1(queryElem, function (elem) {\n if (!isElement(elem)) {\n return false;\n }\n var id = get$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: ariaId,\n link: link,\n unlink: unlink\n };\n };\n\n var isAriaPartOf = function (component, queryElem) {\n return find$4(queryElem).exists(function (owner) {\n return isPartOf(component, owner);\n });\n };\n var isPartOf = function (component, queryElem) {\n return closest$2(queryElem, function (el) {\n return eq$1(el, component.element());\n }, 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 = function (x, y, bubble, direction, boundsRestriction, label) {\n return {\n x: constant(x),\n y: constant(y),\n bubble: constant(bubble),\n direction: constant(direction),\n boundsRestriction: constant(boundsRestriction),\n label: constant(label)\n };\n };\n\n var adt$2 = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n var cata = function (subject, southeast, southwest, northeast, northwest, south, north, east, west) {\n return subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n };\n var cataVertical = function (subject, south, middle, north) {\n return subject.fold(south, south, north, north, south, north, middle, middle);\n };\n var cataHorizontal = function (subject, east, middle, west) {\n return subject.fold(east, west, east, west, middle, middle, east, west);\n };\n var southeast = adt$2.southeast;\n var southwest = adt$2.southwest;\n var northeast = adt$2.northeast;\n var northwest = adt$2.northwest;\n var south = adt$2.south;\n var north = adt$2.north;\n var east = adt$2.east;\n var west = adt$2.west;\n\n var getRestriction = function (anchor, restriction) {\n switch (restriction) {\n case 1:\n return anchor.x;\n case 0:\n return anchor.x + anchor.width;\n case 2:\n return anchor.y;\n case 3:\n return anchor.y + anchor.height;\n }\n };\n var boundsRestriction = function (anchor, restrictions) {\n return mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], function (dir) {\n return get(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$2(apis, function (apiF, apiName) {\n return wrapApi(name, apiF, apiName);\n });\n var wrappedExtra = map$2(extra, function (extraF, extraName) {\n return markAsExtraApi(extraF, extraName);\n });\n var me = __assign(__assign(__assign({}, wrappedExtra), wrappedApis), {\n revoke: curry(revokeBehaviour, name),\n config: function (spec) {\n var prepared = asRawOrDie(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me: me,\n configAsRaw: cached(function () {\n return asRawOrDie(name + '-config', configSchema, spec);\n }),\n initialConfig: spec,\n state: state\n }\n };\n },\n schema: 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 getDocument = function () {\n return Element.fromDom(domGlobals.document);\n };\n\n var focus$1 = function (element) {\n return element.dom().focus();\n };\n var blur = function (element) {\n return element.dom().blur();\n };\n var hasFocus = function (element) {\n var root = getRootNode(element).dom();\n return element.dom() === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Option.from(root.dom().activeElement).map(Element.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom().contains(e.dom());\n });\n };\n\n var preserve = function (f, container) {\n var ownerDoc = owner(container);\n var refocus = active(ownerDoc).bind(function (focused) {\n var hasFocus = function (elem) {\n return eq$1(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$1(newFocus, oldFocus);\n }).fold(function () {\n focus$1(oldFocus);\n }, noop);\n });\n return result;\n };\n\n var NuPositionCss = function (position, left, top, right, bottom) {\n return {\n position: constant(position),\n left: constant(left),\n top: constant(top),\n right: constant(right),\n bottom: constant(bottom)\n };\n };\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 = function (anchorBox, origin) {\n return {\n anchorBox: constant(anchorBox),\n origin: constant(origin)\n };\n };\n var box$1 = function (anchorBox, origin) {\n return anchor(anchorBox, origin);\n };\n\n var cycleBy = function (value, delta, min, max) {\n var r = value + delta;\n 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 adt$4 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'deltaW',\n 'deltaH'\n ]\n }\n ]);\n var calcReposition = function (newX, newY, width, height, bounds) {\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n var boundsWidth = bounds.width;\n var boundsHeight = bounds.height;\n var xInBounds = newX >= boundsX;\n var yInBounds = newY >= boundsY;\n var originInBounds = xInBounds && yInBounds;\n var xFit = newX + width <= boundsX + boundsWidth;\n var yFit = newY + height <= boundsY + boundsHeight;\n var sizeInBounds = xFit && yFit;\n var deltaW = Math.abs(Math.min(width, xInBounds ? boundsX + boundsWidth - newX : boundsX - (newX + width)));\n var deltaH = Math.abs(Math.min(height, yInBounds ? boundsY + boundsHeight - newY : boundsY - (newY + height)));\n var maxX = Math.max(bounds.x, bounds.right - width);\n var maxY = Math.max(bounds.y, bounds.bottom - height);\n var limitX = clamp(newX, bounds.x, maxX);\n var limitY = clamp(newY, bounds.y, maxY);\n return {\n originInBounds: originInBounds,\n sizeInBounds: sizeInBounds,\n limitX: limitX,\n limitY: limitY,\n deltaW: deltaW,\n deltaH: deltaH\n };\n };\n var attempt = function (candidate, width, height, bounds) {\n var candidateX = candidate.x();\n var candidateY = candidate.y();\n var bubbleOffsets = candidate.bubble().offset();\n var bubbleLeft = bubbleOffsets.left();\n var bubbleTop = bubbleOffsets.top();\n var adjustedBounds = adjustBounds(bounds, candidate.boundsRestriction(), bubbleOffsets);\n var boundsY = adjustedBounds.y;\n var boundsBottom = adjustedBounds.bottom;\n var boundsX = adjustedBounds.x;\n var boundsRight = adjustedBounds.right;\n var newX = candidateX + bubbleLeft;\n var newY = candidateY + bubbleTop;\n var _a = calcReposition(newX, newY, width, height, adjustedBounds), originInBounds = _a.originInBounds, sizeInBounds = _a.sizeInBounds, limitX = _a.limitX, limitY = _a.limitY, deltaW = _a.deltaW, deltaH = _a.deltaH;\n var upAvailable = constant(limitY + deltaH - boundsY);\n var downAvailable = constant(boundsBottom - limitY);\n var maxHeight = cataVertical(candidate.direction(), downAvailable, downAvailable, upAvailable);\n var westAvailable = constant(limitX + deltaW - boundsX);\n var eastAvailable = constant(boundsRight - limitX);\n var maxWidth = cataHorizontal(candidate.direction(), eastAvailable, eastAvailable, westAvailable);\n var reposition = {\n x: limitX,\n y: limitY,\n width: deltaW,\n height: deltaH,\n maxHeight: maxHeight,\n maxWidth: maxWidth,\n direction: candidate.direction(),\n classes: {\n on: candidate.bubble().classesOn(),\n off: candidate.bubble().classesOff()\n },\n label: candidate.label(),\n candidateYforTest: newY\n };\n return originInBounds && sizeInBounds ? adt$4.fit(reposition) : adt$4.nofit(reposition, deltaW, deltaH);\n };\n var attempts = function (candidates, anchorBox, elementBox, bubbles, bounds) {\n var panelWidth = elementBox.width;\n var panelHeight = elementBox.height;\n var attemptBestFit = function (layout, reposition, deltaW, deltaH) {\n var next = layout(anchorBox, elementBox, bubbles);\n var attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(adt$4.fit, function (newReposition, newDeltaW, newDeltaH) {\n var improved = newDeltaH > deltaH || newDeltaW > deltaW;\n return improved ? adt$4.nofit(newReposition, newDeltaW, newDeltaH) : adt$4.nofit(reposition, deltaW, deltaH);\n });\n };\n var abc = foldl(candidates, function (b, a) {\n var bestNext = curry(attemptBestFit, a);\n return b.fold(adt$4.fit, bestNext);\n }, adt$4.nofit({\n x: anchorBox.x,\n y: anchorBox.y,\n width: elementBox.width,\n height: elementBox.height,\n maxHeight: elementBox.height,\n maxWidth: elementBox.width,\n direction: southeast(),\n classes: {\n on: [],\n off: []\n },\n label: 'none',\n candidateYforTest: anchorBox.y\n }, -1, -1));\n return abc.fold(identity, identity);\n };\n\n var elementSize = function (p) {\n return {\n width: getOuter$2(p),\n height: getOuter$1(p)\n };\n };\n var layout = function (anchorBox, element, bubbles, options) {\n remove$6(element, 'max-height');\n remove$6(element, 'max-width');\n var elementBox = elementSize(element);\n return attempts(options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n var setClasses = function (element, decision) {\n var classInfo = decision.classes;\n remove$5(element, classInfo.off);\n add$3(element, classInfo.on);\n };\n var setHeight = function (element, decision, options) {\n var maxHeightFunction = options.maxHeightFunction;\n maxHeightFunction(element, decision.maxHeight);\n };\n var setWidth = function (element, decision, options) {\n var maxWidthFunction = options.maxWidthFunction;\n maxWidthFunction(element, decision.maxWidth);\n };\n var position = function (element, decision, options) {\n applyPositionCss(element, reposition(options.origin, decision));\n };\n\n var setMaxHeight = function (element, maxHeight) {\n setMax(element, Math.floor(maxHeight));\n };\n var anchored = constant(function (element, available) {\n setMaxHeight(element, available);\n setAll$1(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n var expandable = constant(function (element, available) {\n setMaxHeight(element, available);\n });\n\n var defaultOr = function (options, key, dephault) {\n return options[key] === undefined ? dephault : options[key];\n };\n var simple = function (anchor, element, bubble, layouts, getBounds, overrideOptions) {\n var maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n var maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n var anchorBox = anchor.anchorBox();\n var origin = anchor.origin();\n var options = {\n bounds: viewport$1(origin, getBounds),\n origin: origin,\n preference: layouts,\n maxHeightFunction: maxHeightFunction,\n maxWidthFunction: maxWidthFunction\n };\n go(anchorBox, element, bubble, options);\n };\n var go = function (anchorBox, element, bubble, options) {\n var decision = layout(anchorBox, element, bubble, options);\n position(element, decision, options);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n };\n\n var allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right'\n ];\n var nu$8 = function (width, yoffset, classes) {\n var getClasses = function (prop) {\n return get(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 = function (start, soffset, finish, foffset) {\n return {\n start: constant(start),\n soffset: constant(soffset),\n finish: constant(finish),\n foffset: constant(foffset)\n };\n };\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$1(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 = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n var descendOnce = function (element, offset) {\n var children$1 = children(element);\n if (children$1.length === 0) {\n return point(element, offset);\n } else if (offset < children$1.length) {\n return point(children$1[offset], 0);\n } else {\n var last = children$1[children$1.length - 1];\n var len = isText(last) ? get$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$1(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\n var point$1 = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\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 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 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 = capRect(rect.left, rect.top, rect.width, rect.height);\n var elem = anchorInfo.node.getOr(component.element());\n return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n });\n };\n var NodeAnchor = [\n strict$1('node'),\n strict$1('root'),\n option('bubble'),\n schema$1(),\n defaulted$1('overrides', {}),\n defaulted$1('showAbove', false),\n output('placement', placement$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 getOpt(sandbox.element(), attr).fold(function () {\n return remove$6(sandbox.element(), cssKey);\n }, function (oldValue) {\n return set$2(sandbox.element(), cssKey, oldValue);\n });\n };\n var cloak = function (sandbox, sConfig, _sState) {\n var sink = sConfig.getAttachPoint(sandbox);\n set$2(sandbox.element(), 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n var hasPosition = function (element) {\n return exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], function (pos) {\n return getRaw(element, pos).isSome();\n });\n };\n var decloak = function (sandbox, sConfig, _sState) {\n if (!hasPosition(sandbox.element())) {\n remove$6(sandbox.element(), 'position');\n }\n restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n };\n\n var SandboxApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n cloak: cloak,\n decloak: decloak,\n open: open,\n openWhileCloaked: openWhileCloaked,\n close: close,\n isOpen: isOpen,\n isPartOf: isPartOf$1,\n getState: getState,\n setContent: setContent\n });\n\n var events$2 = function (sandboxConfig, sandboxState) {\n return derive([run(sandboxClose(), function (sandbox, _simulatedEvent) {\n close(sandbox, sandboxConfig, sandboxState);\n })]);\n };\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$2\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n strict$1('isPartOf'),\n strict$1('getAttachPoint'),\n defaulted$1('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n var init = function () {\n var contents = Cell(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$2(placeholders, function (ph, name) {\n return oneReplace(name, ph);\n });\n var outcome = substituteAll(owner, detail, components, ps);\n each$1(ps, function (p) {\n if (p.used() === false && p.required()) {\n throw new Error('Placeholder: ' + p.name() + ' was not found in components list\\nNamespace: ' + owner.getOr('none') + '\\nComponents: ' + JSON.stringify(detail.components, null, 2));\n }\n });\n return outcome;\n };\n var single = adt$9.single;\n var multiple = adt$9.multiple;\n var placeholder = constant(_placeholder);\n\n var adt$a = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n var fFactory = defaulted$1('factory', { sketch: identity });\n var fSchema = defaulted$1('schema', []);\n var fName = strict$1('name');\n var fPname = field('pname', 'pname', defaultedThunk(function (typeSpec) {\n return '<alloy.' + generate$1(typeSpec.name) + '>';\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$2(detail.partUids, function (pUid, _k) {\n return constant(system.getByUid(pUid));\n });\n };\n var getAllPartNames = function (detail) {\n return keys(detail.partUids);\n };\n var getPartsOrDie = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each(partKeys, function (pk) {\n r[pk] = constant(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n var defaultUids = function (baseUid, partTypes) {\n var partNames = names(partTypes);\n return wrapAll$1(map(partNames, function (pn) {\n return {\n key: pn,\n value: baseUid + '-' + pn\n };\n }));\n };\n var defaultUidsSchema = function (partTypes) {\n return field('partUids', 'partUids', mergeWithThunk(function (spec) {\n return defaultUids(spec.uid, partTypes);\n }), anyValue$1());\n };\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$4,\n generateOne: generateOne,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components,\n defaultUids: defaultUids,\n defaultUidsSchema: defaultUidsSchema,\n getAllParts: getAllParts,\n getAllPartNames: getAllPartNames,\n getPart: getPart,\n getPartOrDie: getPartOrDie,\n getParts: getParts,\n getPartsOrDie: getPartsOrDie\n });\n\n var base = function (partSchemas, partUidsSchemas) {\n var ps = partSchemas.length > 0 ? [strictObjOf('parts', partSchemas)] : [];\n return ps.concat([\n strict$1('uid'),\n defaulted$1('dom', {}),\n defaulted$1('components', []),\n snapshot('originalSpec'),\n defaulted$1('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n var asRawOrDie$1 = function (label, schema, spec, partSchemas, partUidsSchemas) {\n var baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n var single$1 = function (owner, schema, factory, spec) {\n var specWithUid = supplyUid(spec);\n var detail = asRawOrDie$1(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n var composite = function (owner, schema, partTypes, factory, spec) {\n var specWithUid = supplyUid(spec);\n var partSchemas = schemas(partTypes);\n var partUidsSchema = defaultUidsSchema(partTypes);\n var detail = asRawOrDie$1(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n var subs = substitutes(owner, detail, partTypes);\n var components$1 = components(owner, detail, subs.internals());\n return factory(detail, components$1, specWithUid, subs.externals());\n };\n var hasUid = function (spec) {\n return has(spec, 'uid');\n };\n var supplyUid = function (spec) {\n return hasUid(spec) ? spec : __assign(__assign({}, spec), { uid: generate$2('uid') });\n };\n\n 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$2(config.apis, makeApi);\n var extraApis = map$2(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: 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$2(config.apis, makeApi);\n var extraApis = map$2(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: 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$1(n, p);\n });\n });\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus: prevFocus,\n newFocus: newFocus\n });\n }\n };\n var dom = function () {\n var get = function (component) {\n return search(component.element());\n };\n var set = function (component, focusee) {\n var prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element());\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: set\n };\n };\n var highlights = function () {\n var get = function (component) {\n return Highlighting.getHighlighted(component).map(function (item) {\n return item.element();\n });\n };\n var set = function (component, element) {\n var prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, function (item) {\n Highlighting.highlight(component, item);\n });\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: set\n };\n };\n\n var FocusInsideModes;\n (function (FocusInsideModes) {\n FocusInsideModes['OnFocusMode'] = 'onFocus';\n FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';\n FocusInsideModes['OnApiMode'] = 'onApi';\n }(FocusInsideModes || (FocusInsideModes = {})));\n\n var typical = function (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) {\n var schema = function () {\n return infoSchema.concat([\n defaulted$1('focusManager', dom()),\n defaultedOf('focusInside', 'onFocus', valueOf(function (val) {\n return contains([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside');\n })),\n output('handler', me),\n output('state', stateInit),\n output('sendFocusIn', optFocusIn)\n ]);\n };\n var processKey = function (component, simulatedEvent, getRules, keyingConfig, keyingState) {\n var rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose$2(rules, simulatedEvent.event()).bind(function (rule) {\n return rule(component, simulatedEvent, keyingConfig, keyingState);\n });\n };\n var toEvents = function (keyingConfig, keyingState) {\n var onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? 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 var keyboardEvents = [\n run(keydown(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(function () {\n tryGoInsideComponent(component, simulatedEvent);\n }, function (_) {\n simulatedEvent.stop();\n });\n }),\n run(keyup(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(function (_) {\n simulatedEvent.stop();\n });\n })\n ];\n return derive(onFocusHandler.toArray().concat(keyboardEvents));\n };\n var me = {\n schema: schema,\n processKey: processKey,\n toEvents: toEvents\n };\n return me;\n };\n\n var create$3 = function (cyclicField) {\n var schema = [\n option('onEscape'),\n option('onEnter'),\n defaulted$1('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted$1('firstTabstop', 0),\n defaulted$1('useTabstopAt', 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$1, tabstop));\n return optStopIndex.bind(function (stopIndex) {\n return goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle);\n });\n });\n };\n var goBackwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var goForwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var execute = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEnter.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var exit = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEscape.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var getKeydownRules = constant([\n rule(and([\n isShift,\n inSet(TAB())\n ]), goBackwards),\n rule(inSet(TAB()), goForwards),\n rule(inSet(ESCAPE()), exit),\n rule(and([\n isNotShift,\n inSet(ENTER())\n ]), execute)\n ]);\n var getKeyupRules = constant([]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, function () {\n return 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 var isComplex = inside(focused) && inSet(SPACE())(simulatedEvent.event());\n return isComplex ? 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: numRows,\n numColumns: numColumns\n }));\n };\n var getNumRows = function () {\n return dimensions.get().map(function (d) {\n return d.numRows;\n });\n };\n var getNumColumns = function () {\n return dimensions.get().map(function (d) {\n return d.numColumns;\n });\n };\n return nu$5({\n readState: function () {\n return dimensions.get().map(function (d) {\n return {\n numRows: String(d.numRows),\n numColumns: String(d.numColumns)\n };\n }).getOr({\n numRows: '?',\n numColumns: '?'\n });\n },\n setGridSize: setGridSize,\n getNumRows: getNumRows,\n getNumColumns: getNumColumns\n });\n };\n var init$2 = function (spec) {\n return spec.state(spec);\n };\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid,\n init: init$2\n });\n\n var useH = function (movement) {\n return function (component, simulatedEvent, config, state) {\n var move = movement(component.element());\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var west$2 = function (moveLeft, moveRight) {\n var movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n var east$2 = function (moveLeft, moveRight) {\n var movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n var useV = function (move) {\n return function (component, simulatedEvent, config, state) {\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var use = function (move, component, simulatedEvent, config, state) {\n var outcome = config.focusManager.get(component).bind(function (focused) {\n return move(component.element(), focused, config, state);\n });\n return outcome.map(function (newFocus) {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n var north$2 = useV;\n var south$2 = useV;\n var move = useV;\n\n var isHidden = function (dom) {\n return dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n };\n var isVisible = function (element) {\n return !isHidden(element.dom());\n };\n\n var locate = function (candidates, predicate) {\n return findIndex(candidates, predicate).map(function (index) {\n return {\n index: 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$1(x, current);\n };\n var candidates = descendants(container, selector);\n var visible = filter(candidates, isVisible);\n return locate(visible, predicate);\n };\n var findIndex$1 = function (elements, target) {\n return findIndex(elements, function (elem) {\n return eq$1(target, elem);\n });\n };\n\n var withGrid = function (values, index, numCols, f) {\n var oldRow = Math.floor(index / numCols);\n var oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(function (address) {\n var newIndex = address.row() * numCols + address.column();\n return newIndex >= 0 && newIndex < values.length ? 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 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 {\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$1(removee.element(), child.element());\n });\n foundChild.each(detach);\n };\n var contents = function (component, _replaceConfig) {\n return component.components();\n };\n var replaceAt = function (component, replaceConfig, replaceState, replaceeIndex, replacer) {\n var children = contents(component);\n return 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$2(byMenu, function (_triggerItem, submenu) {\n return [submenu].concat(trace(items, byItem, byMenu, submenu));\n });\n return map$2(items, function (menu) {\n return get(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$2(menus, function (spec, name) {\n var makeSketch = function () {\n return Menu.sketch(__assign(__assign({}, spec), {\n value: name,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: detail.onHighlight,\n focusManager: detail.fakeFocus ? highlights() : dom()\n }));\n };\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n };\n var layeredState = LayeredState.init();\n var setup = function (container) {\n var componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n var directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n var getItemValue = function (item) {\n return Representing.getValue(item).value;\n };\n var getItemByValue = function (_container, menus, itemValue) {\n return findMap(menus, function (menu) {\n if (!menu.getSystem().isConnected()) {\n return 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$2(detail.data.menus, function (data, _menuName) {\n return bind(data.items, function (item) {\n return item.type === 'separator' ? [] : [item.data.value];\n });\n });\n };\n var setActiveMenu = function (container, menu) {\n Highlighting.highlight(container, menu);\n Highlighting.getHighlighted(menu).orThunk(function () {\n return Highlighting.getFirst(menu);\n }).each(function (item) {\n dispatch(container, item.element(), focusItem());\n });\n };\n var getMenus = function (state, menuValues) {\n return cat(map(menuValues, function (mv) {\n return state.lookupMenu(mv).bind(function (prep) {\n return prep.type === 'prepared' ? 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 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.toLowerCase()]).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n var getOr = function (name, icons, fallback) {\n return Option.from(icons()[name.toLowerCase()]).or(fallback).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n var getFirst$1 = function (names, icons) {\n return findMap(names, function (name) {\n return Option.from(icons()[name.toLowerCase()]);\n }).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n\n var notificationIconMap = {\n success: 'checkmark',\n error: 'warning',\n err: 'error',\n warning: 'warning',\n warn: 'warning',\n info: 'info'\n };\n var factory$2 = function (detail) {\n var memBannerText = record({\n dom: {\n tag: 'p',\n innerHtml: detail.translationProvider(detail.text)\n },\n behaviours: derive$1([Replacing.config({})])\n });\n var renderPercentBar = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n attributes: { style: 'width: ' + percent + '%' }\n }\n };\n };\n var renderPercentText = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: percent + '%'\n }\n };\n };\n var memBannerProgress = record({\n dom: {\n tag: 'div',\n classes: detail.progress ? [\n 'tox-progress-bar',\n 'tox-progress-indicator'\n ] : ['tox-progress-bar']\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(0)]\n },\n renderPercentText(0)\n ],\n behaviours: derive$1([Replacing.config({})])\n });\n var updateProgress = function (comp, percent) {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(function (progress) {\n Replacing.set(progress, [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(percent)]\n },\n renderPercentText(percent)\n ]);\n });\n }\n };\n var updateText = function (comp, text$1) {\n if (comp.getSystem().isConnected()) {\n var banner = memBannerText.get(comp);\n Replacing.set(banner, [text(text$1)]);\n }\n };\n var apis = {\n updateProgress: updateProgress,\n updateText: updateText\n };\n var iconChoices = flatten([\n detail.icon.toArray(),\n detail.level.toArray(),\n detail.level.bind(function (level) {\n return Option.from(notificationIconMap[level]);\n }).toArray()\n ]);\n var memButton = record(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-notification__dismiss',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-icon'],\n innerHtml: get$d('close', detail.iconProvider),\n attributes: { 'aria-label': detail.translationProvider('Close') }\n }\n }],\n action: function (comp) {\n detail.onAction(comp);\n }\n }));\n var components = [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon'],\n innerHtml: getFirst$1(iconChoices, detail.iconProvider)\n }\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n }\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: detail.level.map(function (level) {\n return [\n 'tox-notification',\n 'tox-notification--in',\n 'tox-notification--' + level\n ];\n }).getOr([\n 'tox-notification',\n 'tox-notification--in'\n ])\n },\n behaviours: derive$1([\n Focusing.config({}),\n config('notification-events', [run(focusin(), function (comp) {\n memButton.getOpt(comp).each(Focusing.focus);\n })])\n ]),\n components: components.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(!detail.closeButton ? [] : [memButton.asSpec()]),\n apis: apis\n };\n };\n var Notification = single$2({\n name: 'Notification',\n factory: factory$2,\n configFields: [\n option('level'),\n strict$1('progress'),\n strict$1('icon'),\n strict$1('onAction'),\n strict$1('text'),\n strict$1('iconProvider'),\n strict$1('translationProvider'),\n defaultedBoolean('closeButton', true)\n ],\n apis: {\n updateProgress: function (apis, comp, percent) {\n apis.updateProgress(comp, percent);\n },\n updateText: function (apis, comp, text) {\n apis.updateText(comp, text);\n }\n }\n });\n\n function NotificationManagerImpl (editor, extras, uiMothership) {\n var backstage = extras.backstage;\n var getLayoutDirection = function (rel) {\n switch (rel) {\n case 'bc-bc':\n return south$3;\n case 'tc-tc':\n return north$3;\n case 'tc-bc':\n return north$1;\n case 'bc-tc':\n default:\n return south$1;\n }\n };\n var prePositionNotifications = function (notifications) {\n each(notifications, function (notification) {\n return notification.moveTo(0, 0);\n });\n };\n var positionNotifications = function (notifications) {\n if (notifications.length > 0) {\n head(notifications).each(function (firstItem) {\n return firstItem.moveRel(null, 'banner');\n });\n each(notifications, function (notification, index) {\n if (index > 0) {\n notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n }\n });\n }\n };\n var reposition = function (notifications) {\n prePositionNotifications(notifications);\n positionNotifications(notifications);\n };\n var open = function (settings, closeCallback) {\n var hideCloseButton = !settings.closeButton && settings.timeout && (settings.timeout > 0 || settings.timeout < 0);\n var close = function () {\n closeCallback();\n InlineView.hide(notificationWrapper);\n };\n var notification = build$1(Notification.sketch({\n text: settings.text,\n level: contains([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: 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 }, backstage.shared.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} })));\n uiMothership.add(notificationWrapper);\n if (settings.timeout > 0) {\n global$2.setTimeout(function () {\n close();\n }, settings.timeout);\n }\n return {\n close: close,\n moveTo: function (x, y) {\n InlineView.showAt(notificationWrapper, {\n anchor: 'makeshift',\n x: x,\n y: y\n }, premade$1(notification));\n },\n moveRel: function (element, rel) {\n if (rel !== 'banner') {\n var layoutDirection_1 = getLayoutDirection(rel);\n var nodeAnchor = {\n anchor: 'node',\n root: body(),\n node: 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$3 = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n var isBoundary = function (dom, node) {\n return dom.isBlock(node) || contains([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n };\n var repeatLeft = function (dom, node, offset, process, rootNode) {\n var search = global$3(dom, function (node) {\n return isBoundary(dom, node);\n });\n return 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('<span data-mce-autocompleter=\"1\" data-mce-bogus=\"1\"></span>', 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$4 = 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$4.all(map(autocompleters, function (ac) {\n var fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(function (results) {\n return {\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction\n };\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$2(popups, function (popup) {\n return createAutocompleter(popup).fold(function (err) {\n throw new Error(formatError(err));\n }, function (x) {\n return x;\n });\n });\n var triggerChars = stringArray(mapToArray(dataset, function (v) {\n return v.ch;\n }));\n var datasetValues = values(dataset);\n var lookupByChar = function (ch) {\n return filter(datasetValues, function (dv) {\n return dv.ch === ch;\n });\n };\n return {\n dataset: dataset,\n triggerChars: triggerChars,\n lookupByChar: lookupByChar\n };\n };\n\n var ItemResponse;\n (function (ItemResponse) {\n ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';\n ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';\n }(ItemResponse || (ItemResponse = {})));\n var ItemResponse$1 = ItemResponse;\n\n var navClass = 'tox-menu-nav__js';\n var selectableClass = 'tox-collection__item';\n var colorClass = 'tox-swatch';\n var presetClasses = {\n normal: navClass,\n color: colorClass\n };\n var tickedClass = 'tox-collection__item--enabled';\n var groupHeadingClass = 'tox-collection__group-heading';\n var iconClass = 'tox-collection__item-icon';\n var textClass = 'tox-collection__item-label';\n var accessoryClass = 'tox-collection__item-accessory';\n var caretClass = 'tox-collection__item-caret';\n var checkmarkClass = 'tox-collection__item-checkmark';\n var activeClass = 'tox-collection__item--active';\n var iconClassRtl = 'tox-collection__item-icon-rtl';\n var classForPreset = function (presets) {\n return get(presetClasses, presets).getOr(navClass);\n };\n\n var forMenu = function (presets) {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n var classes = function (presets) {\n return {\n backgroundMenu: 'tox-background-menu',\n selectedMenu: 'tox-selected-menu',\n selectedItem: 'tox-collection__item--active',\n hasIcons: 'tox-menu--has-icons',\n menu: forMenu(presets),\n tieredMenu: 'tox-tiered-menu'\n };\n };\n\n var markers$1 = function (presets) {\n var menuClasses = classes(presets);\n return {\n backgroundMenu: menuClasses.backgroundMenu,\n selectedMenu: menuClasses.selectedMenu,\n menu: menuClasses.menu,\n selectedItem: menuClasses.selectedItem,\n item: classForPreset(presets)\n };\n };\n var dom$1 = function (hasIcons, columns, presets) {\n var menuClasses = classes(presets);\n return {\n tag: 'div',\n classes: flatten([\n [\n menuClasses.menu,\n 'tox-menu-' + columns + '-column'\n ],\n hasIcons ? [menuClasses.hasIcons] : []\n ])\n };\n };\n var components$1 = [Menu.parts().items({})];\n var part = function (hasIcons, columns, presets) {\n var menuClasses = classes(presets);\n var d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers$1(presets)\n };\n };\n\n var chunk$1 = function (rowDom, numColumns) {\n return function (items) {\n var chunks = chunk(items, numColumns);\n return map(chunks, function (c) {\n return {\n dom: rowDom,\n components: c\n };\n });\n };\n };\n var forSwatch = function (columns) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-swatches-menu'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-swatches']\n },\n components: [Menu.parts().items({\n preprocess: columns !== 'auto' ? chunk$1({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity\n })]\n }]\n };\n };\n var forToolbar = function (columns) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n 'tox-collection--toolbar',\n 'tox-collection--toolbar-lg'\n ]\n },\n components: [Menu.parts().items({\n preprocess: chunk$1({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)\n })]\n };\n };\n var preprocessCollection = function (items, isSeparator) {\n var allSplits = [];\n var currentSplit = [];\n each(items, function (item, i) {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has(item.dom, 'innerHtml')) {\n currentSplit.push(item);\n }\n } else {\n currentSplit.push(item);\n }\n });\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n return map(allSplits, function (s) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n };\n });\n };\n var forCollection = function (columns, initItems, _hasIcons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [Menu.parts().items({\n preprocess: function (items) {\n if (columns !== 'auto' && columns > 1) {\n return chunk$1({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(items);\n } else {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n }\n })]\n };\n };\n var forHorizontalCollection = function (initItems, _hasIcons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts().items({\n preprocess: function (items) {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n })]\n };\n };\n\n var menuHasIcons = function (xs) {\n return exists(xs, function (item) {\n return 'icon' in item && item.icon !== undefined;\n });\n };\n var handleError = function (error) {\n 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 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 choiceMenuItemSchema = objOf([\n strictString('type'),\n defaultedBoolean('active', false),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createChoiceMenuItem = function (spec) {\n return asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n };\n\n var fancyTypes = [\n 'inserttable',\n 'colorswatch'\n ];\n var fancyMenuItemSchema = objOf([\n strictString('type'),\n strictStringEnum('fancytype', fancyTypes),\n defaultedFunction('onAction', noop)\n ]);\n var createFancyMenuItem = function (spec) {\n return asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n };\n\n var menuItemSchema = objOf([\n strictString('type'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedFunction('onAction', noop),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createMenuItem = function (spec) {\n return asRaw('menuitem', menuItemSchema, spec);\n };\n\n var nestedMenuItemSchema = objOf([\n strictString('type'),\n strictFunction('getSubmenuItems'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createNestedMenuItem = function (spec) {\n return asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n };\n\n var toggleMenuItemSchema = objOf([\n strictString('type'),\n optionString('icon'),\n defaultedBoolean('active', false),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n strictFunction('onAction')\n ].concat(commonMenuItemFields));\n var createToggleMenuItem = function (spec) {\n return asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n };\n\n var detectSize = function (comp, margin, selectorClass) {\n var descendants$1 = descendants(comp.element(), '.' + selectorClass);\n if (descendants$1.length > 0) {\n var columnLength = findIndex(descendants$1, function (c) {\n var thisTop = c.dom().getBoundingClientRect().top;\n var cTop = descendants$1[0].dom().getBoundingClientRect().top;\n return Math.abs(thisTop - cTop) > margin;\n }).getOr(descendants$1.length);\n return 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$5 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n var onLoad$5 = function (component, disableConfig, disableState) {\n var f = disableConfig.disabled() ? disable : enable;\n f(component, disableConfig, disableState);\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.toArray() : [] });\n };\n var events$9 = function (disableConfig, disableState) {\n return derive([\n abort(execute(), function (component, _simulatedEvent) {\n return isDisabled(component, disableConfig);\n }),\n loadEvent(disableConfig, disableState, onLoad$5)\n ]);\n };\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$9\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted$1('useNative', true),\n option('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n var Disabling = create$1({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var getSkinUrl = function (editor) {\n var skin = editor.getParam('skin');\n var skinUrl = editor.getParam('skin_url');\n if (skin !== false) {\n var skinName = skin ? skin : 'oxide';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$7.baseURL + '/skins/ui/' + skinName;\n }\n }\n return skinUrl;\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var isSkinDisabled = function (editor) {\n return editor.getParam('skin') === false;\n };\n var getHeightSetting = function (editor) {\n return editor.getParam('height', Math.max(editor.getElement().offsetHeight, 200));\n };\n var getWidthSetting = function (editor) {\n return editor.getParam('width', global$5.DOM.getStyle(editor.getElement(), 'width'));\n };\n var getMinWidthSetting = function (editor) {\n return Option.from(editor.getParam('min_width')).filter(isNumber);\n };\n var getMinHeightSetting = function (editor) {\n return Option.from(editor.getParam('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 toolbars = range(9, function (num) {\n return editor.getParam('toolbar' + (num + 1), false, 'string');\n });\n var toolbarArray = filter(toolbars, function (toolbar) {\n return typeof toolbar === 'string';\n });\n return toolbarArray.length > 0 ? 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['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation || (ToolbarLocation = {})));\n var getToolbarGroups = function (editor) {\n return editor.getParam('toolbar_groups', {}, 'object');\n };\n var getToolbarLocation = function (editor) {\n return editor.getParam('toolbar_location', ToolbarLocation.auto, 'string');\n };\n var isToolbarLocationBottom = function (editor) {\n return getToolbarLocation(editor) === ToolbarLocation.bottom;\n };\n var fixedContainerSelector = function (editor) {\n return editor.getParam('fixed_toolbar_container', '', 'string');\n };\n var 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 var getMenus = function (editor) {\n var menu = editor.getParam('menu');\n if (menu) {\n return map$2(menu, function (menu) {\n return __assign(__assign({}, menu), { items: menu.items });\n });\n } else {\n return {};\n }\n };\n var getMenubar = function (editor) {\n return editor.getParam('menubar');\n };\n var getToolbar = function (editor) {\n return editor.getParam('toolbar', true);\n };\n var getFilePickerCallback = function (editor) {\n return editor.getParam('file_picker_callback');\n };\n var getFilePickerTypes = function (editor) {\n return editor.getParam('file_picker_types');\n };\n var getFileBrowserCallbackTypes = function (editor) {\n return editor.getParam('file_browser_callback_types');\n };\n var noTypeaheadUrls = function (editor) {\n return editor.getParam('typeahead_urls') === false;\n };\n var getAnchorTop = function (editor) {\n return editor.getParam('anchor_top', '#top');\n };\n var getAnchorBottom = function (editor) {\n return editor.getParam('anchor_bottom', '#bottom');\n };\n var getFilePickerValidatorHandler = function (editor) {\n var handler = editor.getParam('file_picker_validator_handler', undefined, 'function');\n if (handler === undefined) {\n return editor.getParam('filepicker_validator_handler', undefined, 'function');\n } else {\n return handler;\n }\n };\n\n var ReadOnlyChannel = 'silver.readonly';\n var ReadOnlyDataSchema = objOf([strictBoolean('readonly')]);\n var broadcastReadonly = function (uiComponents, readonly) {\n var outerContainer = uiComponents.outerContainer;\n var target = outerContainer.element();\n if (readonly) {\n uiComponents.mothership.broadcastOn([dismissPopups()], { target: target });\n uiComponents.uiMothership.broadcastOn([dismissPopups()], { target: target });\n }\n uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n };\n var setupReadonlyModeSwitch = function (editor, uiComponents) {\n editor.on('init', function () {\n if (editor.mode.isReadOnly()) {\n broadcastReadonly(uiComponents, true);\n }\n });\n editor.on('SwitchMode', function () {\n return broadcastReadonly(uiComponents, editor.mode.isReadOnly());\n });\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n };\n var receivingConfig = function () {\n var _a;\n return Receiving.config({\n channels: (_a = {}, _a[ReadOnlyChannel] = {\n schema: ReadOnlyDataSchema,\n onReceive: function (comp, data) {\n Disabling.set(comp, data.readonly);\n }\n }, _a)\n });\n };\n\n var item = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n };\n var button = function (disabled) {\n return Disabling.config({ disabled: disabled });\n };\n var splitButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n };\n var toolbarButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n };\n var DisablingConfigs = {\n item: item,\n button: button,\n splitButton: splitButton,\n toolbarButton: toolbarButton\n };\n\n var runWithApi = function (info, comp) {\n var api = info.getApi(comp);\n return function (f) {\n f(api);\n };\n };\n var onControlAttached = function (info, editorOffCell) {\n return runOnAttached(function (comp) {\n var run = runWithApi(info, comp);\n run(function (api) {\n var onDestroy = info.onSetup(api);\n if (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 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, providersbackstage) {\n var editorOffCell = Cell(noop);\n return {\n type: 'item',\n dom: structure.dom,\n components: componentRenderPipeline(structure.optComponents),\n data: spec.data,\n eventOrder: menuItemEventOrder,\n hasSubmenu: spec.triggersSubmenu,\n itemBehaviours: derive$1([\n config('item-events', [\n onMenuItemExecute(spec, itemResponse),\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n DisablingConfigs.item(function () {\n return spec.disabled || providersbackstage.isReadOnly();\n }),\n receivingConfig(),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n var buildData = function (source) {\n return {\n value: source.value,\n meta: __assign({ text: source.text.getOr('') }, source.meta)\n };\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var convertText = function (source) {\n var mac = {\n alt: '&#x2325;',\n ctrl: '&#x2303;',\n shift: '&#x21E7;',\n meta: '&#x2318;',\n access: '&#x2303;&#x2325;'\n };\n var other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n var replace = global$8.mac ? mac : other;\n var shortcut = source.split('+');\n var updated = map(shortcut, function (segment) {\n var search = segment.toLowerCase().trim();\n return has(replace, search) ? replace[search] : segment;\n });\n return global$8.mac ? updated.join('') : updated.join('+');\n };\n\n var renderIcon = function (iconHtml) {\n return {\n dom: {\n tag: 'div',\n classes: [iconClass],\n innerHtml: iconHtml\n }\n };\n };\n var renderText = function (text$1) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text(global$6.translate(text$1))]\n };\n };\n var renderHtml = function (html) {\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$6.translate(text$1))]\n }]\n };\n };\n var renderShortcut = function (shortcut) {\n return {\n dom: {\n tag: 'div',\n classes: [accessoryClass],\n innerHtml: convertText(shortcut)\n }\n };\n };\n var renderCheckmark = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [checkmarkClass],\n innerHtml: get$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 ? icon.or(Option.some('')).map(renderIcon) : Option.none();\n var checkmark = info.checkMark;\n var domTitle = info.ariaLabel.map(function (label) {\n return { attributes: { title: global$6.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 checkmark,\n info.caret\n ]\n };\n return menuItem;\n };\n var rtlIcon = [\n 'list-num-default',\n 'list-num-lower-alpha',\n 'list-num-lower-greek',\n 'list-num-lower-roman',\n 'list-num-upper-alpha',\n 'list-num-upper-roman'\n ];\n var rtlTransform = [\n 'list-bull-circle',\n 'list-bull-default',\n 'list-bull-square'\n ];\n var renderItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {\n if (fallbackIcon === void 0) {\n fallbackIcon = Option.none();\n }\n var getIconName = function (iconName) {\n return iconName.map(function (name) {\n return global$6.isRtl() && contains(rtlIcon, name) ? name + '-rtl' : name;\n });\n };\n var needRtlClass = global$6.isRtl() && info.iconContent.exists(function (name) {\n return contains(rtlTransform, name);\n });\n var icon = getIconName(info.iconContent).map(function (iconName) {\n return getOr(iconName, providersBackstage.icons, fallbackIcon);\n });\n var textRender = 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 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$5.DOM.encode(text);\n };\n var replaceText = function (text, matchText) {\n var translated = global$6.translate(text);\n var encoded = encodeText(translated);\n if (matchText.length > 0) {\n var escapedMatchRegex = new RegExp(escapeRegExp(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, function (match) {\n return '<span class=\"tox-autocompleter-highlight\">' + match + '</span>';\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, sharedBackstage.providers);\n };\n\n var renderChoiceItem = function (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: presets,\n textContent: useText ? spec.text : 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, renderIcons);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: function (_api) {\n return onItemValueHandler(spec.value);\n },\n onSetup: function (api) {\n api.setActive(isSelected);\n return function () {\n };\n },\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var parts$2 = 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 var renderInsertTableMenuItem = function (spec) {\n var numRows = 10;\n var numColumns = 10;\n var sizeLabelId = generate$1('size-label');\n var cells = makeCells(sizeLabelId, numRows, numColumns);\n var memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label'],\n attributes: { id: sizeLabelId }\n },\n components: [text('0x0')],\n behaviours: derive$1([Replacing.config({})])\n });\n return {\n type: 'widget',\n data: { value: generate$1('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$2().widget({\n dom: {\n tag: 'div',\n classes: ['tox-insert-table-picker']\n },\n components: makeComponents(cells).concat(memLabel.asSpec()),\n behaviours: derive$1([\n config('insert-table-picker', [\n runWithTarget(cellOverEvent, function (c, t, e) {\n var row = e.event().row();\n var col = e.event().col();\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row, col)]);\n }),\n runWithTarget(cellExecuteEvent, function (c, _, e) {\n spec.onAction({\n numRows: e.event().row() + 1,\n numColumns: e.event().col() + 1\n });\n emit(c, sandboxClose());\n })\n ]),\n Keying.config({\n initSize: {\n numRows: numRows,\n numColumns: numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n var hexColour = function (value) {\n return { value: value };\n };\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n var isHexString = function (hex) {\n return shorthandRegex.test(hex) || longformRegex.test(hex);\n };\n var getLongForm = function (hex) {\n var hexString = hex.value.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n return { value: hexString };\n };\n var extractValues = function (hex) {\n var longForm = getLongForm(hex);\n var splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n var toHex = function (component) {\n var hex = component.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n var fromRgba = function (rgbaColour) {\n var value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n var min = Math.min;\n var max = Math.max;\n var round = Math.round;\n var rgbRegex = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/;\n var rgbaRegex = /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*(\\d?(?:\\.\\d+)?)\\)/;\n var rgbaColour = function (red, green, blue, alpha) {\n return {\n red: red,\n green: green,\n blue: blue,\n alpha: alpha\n };\n };\n var isRgbaComponent = function (value) {\n var num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n var fromHsv = function (hsv) {\n var r;\n var g;\n var b;\n var hue = (hsv.hue || 0) % 360;\n var saturation = hsv.saturation / 100;\n var brightness = hsv.value / 100;\n saturation = max(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round(255 * brightness);\n return rgbaColour(r, g, b, 1);\n }\n var side = hue / 60;\n var chroma = brightness * saturation;\n var x = chroma * (1 - Math.abs(side % 2 - 1));\n var match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round(255 * (r + match));\n g = round(255 * (g + match));\n b = round(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n var fromHex = function (hexColour) {\n var result = extractValues(hexColour);\n var red = parseInt(result[1], 16);\n var green = parseInt(result[2], 16);\n var blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n var fromStringValues = function (red, green, blue, alpha) {\n var r = parseInt(red, 10);\n var g = parseInt(green, 10);\n var b = parseInt(blue, 10);\n var a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n var fromString = function (rgbaString) {\n if (rgbaString === 'transparent') {\n return 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 red = rgbaColour(255, 0, 0, 1);\n\n var fireSkinLoaded = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireSkinLoadError = function (editor, error) {\n return editor.fire('SkinLoadError', error);\n };\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n var fireResizeContent = function (editor, e) {\n return editor.fire('ResizeContent', e);\n };\n var fireScrollContent = function (editor, e) {\n return editor.fire('ScrollContent', e);\n };\n var fireTextColorChange = function (editor, data) {\n return editor.fire('TextColorChange', data);\n };\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n var storageName = 'tinymce-custom-colors';\n function ColorCache (max) {\n if (max === void 0) {\n max = 10;\n }\n var storageString = global$9.getItem(storageName);\n var localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n var prune = function (list) {\n var diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n var cache = prune(localstorage);\n var add = function (key) {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$9.setItem(storageName, JSON.stringify(cache));\n };\n var remove = function (idx) {\n cache.splice(idx, 1);\n };\n var state = function () {\n return cache.slice(0);\n };\n return {\n add: add,\n state: state\n };\n }\n\n var choiceItem = 'choiceitem';\n var defaultColors = [\n {\n type: choiceItem,\n text: 'Light Green',\n value: '#BFEDD2'\n },\n {\n type: choiceItem,\n text: 'Light Yellow',\n value: '#FBEEB8'\n },\n {\n type: choiceItem,\n text: 'Light Red',\n value: '#F8CAC6'\n },\n {\n type: choiceItem,\n text: 'Light Purple',\n value: '#ECCAFA'\n },\n {\n type: choiceItem,\n text: 'Light Blue',\n value: '#C2E0F4'\n },\n {\n type: choiceItem,\n text: 'Green',\n value: '#2DC26B'\n },\n {\n type: choiceItem,\n text: 'Yellow',\n value: '#F1C40F'\n },\n {\n type: choiceItem,\n text: 'Red',\n value: '#E03E2D'\n },\n {\n type: choiceItem,\n text: 'Purple',\n value: '#B96AD9'\n },\n {\n type: choiceItem,\n text: 'Blue',\n value: '#3598DB'\n },\n {\n type: choiceItem,\n text: 'Dark Turquoise',\n value: '#169179'\n },\n {\n type: choiceItem,\n text: 'Orange',\n value: '#E67E23'\n },\n {\n type: choiceItem,\n text: 'Dark Red',\n value: '#BA372A'\n },\n {\n type: choiceItem,\n text: 'Dark Purple',\n value: '#843FA1'\n },\n {\n type: choiceItem,\n text: 'Dark Blue',\n value: '#236FA1'\n },\n {\n type: choiceItem,\n text: 'Light Gray',\n value: '#ECF0F1'\n },\n {\n type: choiceItem,\n text: 'Medium Gray',\n value: '#CED4D9'\n },\n {\n type: choiceItem,\n text: 'Gray',\n value: '#95A5A6'\n },\n {\n type: choiceItem,\n text: 'Dark Gray',\n value: '#7E8C8D'\n },\n {\n type: choiceItem,\n text: 'Navy Blue',\n value: '#34495E'\n },\n {\n type: choiceItem,\n text: 'Black',\n value: '#000000'\n },\n {\n type: choiceItem,\n text: 'White',\n value: '#ffffff'\n }\n ];\n var colorCache = ColorCache(10);\n var mapColors = function (colorMap) {\n var colors = [];\n var canvas = 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\n var getCurrentColor = function (editor, format) {\n var color;\n editor.dom.getParents(editor.selection.getStart(), function (elm) {\n var value;\n if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {\n color = color ? color : value;\n }\n });\n return color;\n };\n var applyFormat = function (editor, format, value) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.apply(format, { value: value });\n editor.nodeChanged();\n });\n };\n var removeFormat = function (editor, format) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.remove(format, { value: null }, null, true);\n editor.nodeChanged();\n });\n };\n var registerCommands = function (editor) {\n editor.addCommand('mceApplyTextcolor', function (format, value) {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', function (format) {\n removeFormat(editor, format);\n });\n };\n var calcCols = function (colors) {\n return Math.max(5, Math.ceil(Math.sqrt(colors)));\n };\n var getColorCols$1 = function (editor) {\n var colors = getColors(editor);\n var defaultCols = calcCols(colors.length);\n return getColorCols(editor, defaultCols);\n };\n var getAdditionalColors = function (hasCustom) {\n var type = 'choiceitem';\n var remove = {\n type: type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n var custom = {\n type: type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n var applyColor = function (editor, format, value, onChoice) {\n if (value === 'custom') {\n var dialog = colorPickerDialog(editor);\n dialog(function (colorOpt) {\n colorOpt.each(function (color) {\n addColor(color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, '#000000');\n } else if (value === 'remove') {\n onChoice('');\n editor.execCommand('mceRemoveTextcolor', format);\n } else {\n onChoice(value);\n editor.execCommand('mceApplyTextcolor', format, value);\n }\n };\n var getColors$1 = function (colors, hasCustom) {\n return colors.concat(getCurrentColors().concat(getAdditionalColors(hasCustom)));\n };\n var getFetch = function (colors, hasCustom) {\n return function (callback) {\n callback(getColors$1(colors, hasCustom));\n };\n };\n var setIconColor = function (splitButtonApi, name, newColor) {\n var setIconFillAndStroke = function (pathId, color) {\n splitButtonApi.setIconFill(pathId, color);\n splitButtonApi.setIconStroke(pathId, color);\n };\n var id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n setIconFillAndStroke(id, newColor);\n };\n var registerTextColorButton = function (editor, name, format, tooltip, lastColor) {\n editor.ui.registry.addSplitButton(name, {\n tooltip: tooltip,\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: function (value) {\n var optCurrentRgb = 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(getColors(editor), 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 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\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, menuHasIcons(items)));\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 = getColors$1(backstage.colorinput.getColors(), backstage.colorinput.hasCustomColors());\n var columns = backstage.colorinput.getColorCols();\n var presets = 'color';\n var menuSpec = createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {\n spec.onAction({ value: value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, 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, providersBackstage);\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, providersBackstage);\n };\n\n var renderSeparatorItem = function (spec) {\n var innerHtml = spec.text.fold(function () {\n return {};\n }, function (text) {\n return { innerHtml: text };\n });\n return {\n type: 'separator',\n dom: __assign({\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n }, innerHtml),\n components: []\n };\n };\n\n var renderToggleMenuItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: 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, renderIcons);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var autocomplete = renderAutocompleteItem;\n var separator = renderSeparatorItem;\n var normal = renderNormalItem;\n var nested = renderNestedItem;\n var toggle$1 = renderToggleMenuItem;\n var fancy = renderFancyMenuItem;\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n var createMenuItemFromBridge = function (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) {\n var providersBackstage = backstage.shared.providers;\n var parseForHorizontalMenu = function (menuitem) {\n return !isHorizontalMenu ? menuitem : __assign(__assign({}, menuitem), {\n shortcut: 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, menuHasIcons));\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(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(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$2 = constant(true);\n var bind$3 = function (element, event, handler) {\n return bind$2(element, event, filter$2, handler);\n };\n var capture$1 = function (element, event, handler) {\n return capture(element, event, filter$2, handler);\n };\n var fromRawEvent$1 = fromRawEvent;\n\n var closest$4 = function (scope, selector, isRoot) {\n return closest$3(scope, selector, isRoot).isSome();\n };\n\n 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: touch.clientX,\n y: 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$1(data.target, event.target());\n };\n return startData.get().filter(isSame).map(function (_data) {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n var handlers = wrapAll$1([\n {\n key: touchstart(),\n value: handleTouchstart\n },\n {\n key: touchmove(),\n value: handleTouchmove\n },\n {\n key: touchend(),\n value: handleTouchend\n }\n ]);\n var fireIfReady = function (event, type) {\n return get(handlers, type).bind(function (handler) {\n return handler(event);\n });\n };\n return { fireIfReady: fireIfReady };\n };\n\n var isDangerous = function (event) {\n var keyEv = event.raw();\n return keyEv.which === BACKSPACE()[0] && !contains([\n 'input',\n 'textarea'\n ], name(event.target())) && !closest$4(event.target(), '[contenteditable=\"true\"]');\n };\n var isFirefox = function () {\n return detect$3().browser.isFirefox();\n };\n var settingsSchema = objOfOnly([\n strictFunction('triggerEvent'),\n defaulted$1('stopBackspace', true)\n ]);\n var bindFocus = function (container, handler) {\n if (isFirefox()) {\n return capture$1(container, 'focus', handler);\n } else {\n return bind$3(container, 'focusin', handler);\n }\n };\n var bindBlur = function (container, handler) {\n if (isFirefox()) {\n return capture$1(container, 'blur', handler);\n } else {\n return bind$3(container, 'focusout', handler);\n }\n };\n var setup$1 = function (container, rawSettings) {\n var settings = asRawOrDie('Getting GUI events settings', settingsSchema, rawSettings);\n var pointerEvents = [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'gesturestart',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mousemove',\n 'mouseout',\n 'click'\n ];\n var tapEvent = monitor(settings);\n var simpleEvents = map(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), function (type) {\n return bind$3(container, type, function (event) {\n tapEvent.fireIfReady(event, type).each(function (tapStopped) {\n if (tapStopped) {\n event.kill();\n }\n });\n var stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n });\n });\n var pasteTimeout = Cell(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 = function (element, descHandler) {\n return {\n element: element,\n descHandler: descHandler\n };\n };\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$1(el, parent);\n });\n };\n var registry = Registry();\n var lookup = function (eventName, target) {\n return registry.find(isAboveRoot, eventName, target);\n };\n var domEvents = setup$1(root.element(), {\n triggerEvent: function (eventName, event) {\n return monitorEvent(eventName, event.target(), function (logger) {\n return triggerUntilStopped(lookup, eventName, event, logger);\n });\n }\n });\n var systemApi = {\n debugInfo: constant('real'),\n triggerEvent: function (eventName, target, data) {\n monitorEvent(eventName, target, function (logger) {\n return triggerOnUntilStopped(lookup, eventName, data, target, logger);\n });\n },\n triggerFocus: function (target, originator) {\n read$1(target).fold(function () {\n focus$1(target);\n }, function (_alloyId) {\n monitorEvent(focus(), target, function (logger) {\n triggerHandler(lookup, focus(), {\n originator: 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 renderBar = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-bar',\n 'tox-form__controls-h-stack'\n ]\n },\n components: map(spec.items, backstage.interpreter)\n };\n };\n\n var schema$e = constant([\n defaulted$1('prefix', 'form-field'),\n field$1('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n var parts$3 = constant([\n optional({\n schema: [strict$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: function (spec) {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [strict$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: function (spec) {\n var excludeFactory = exclude$1(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [strict$1('factory')],\n name: 'field'\n })\n ]);\n\n var factory$4 = function (detail, components, _spec, _externals) {\n var behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: function (container) {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (field) {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: function (field, value) {\n Composing.getCurrent(field).each(function (current) {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n var events = derive([runOnAttached(function (component, _simulatedEvent) {\n var ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(function (field) {\n var id = generate$1(detail.prefix);\n ps.label().each(function (label) {\n set$1(label.element(), 'for', id);\n set$1(field.element(), 'id', id);\n });\n ps['aria-descriptor']().each(function (descriptor) {\n var descriptorId = generate$1(detail.prefix);\n set$1(descriptor.element(), 'id', descriptorId);\n set$1(field.element(), 'aria-describedby', descriptorId);\n });\n });\n })]);\n var apis = {\n getField: function (container) {\n return getPart(container, detail, 'field');\n },\n getLabel: function (container) {\n return getPart(container, detail, 'label');\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: behaviours,\n events: events,\n apis: apis\n };\n };\n var FormField = composite$1({\n name: 'FormField',\n configFields: schema$e(),\n partFields: parts$3(),\n factory: factory$4,\n apis: {\n getField: function (apis, comp) {\n return apis.getField(comp);\n },\n getLabel: function (apis, comp) {\n return apis.getLabel(comp);\n }\n }\n });\n\n var exhibit$4 = function (base, tabConfig) {\n return nu$6({\n attributes: wrapAll$1([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n };\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4\n });\n\n var TabstopSchema = [defaulted$1('tabAttr', 'data-alloy-tabstop')];\n\n var Tabstopping = create$1({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n var renderFormFieldWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n var spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n var renderFormField = function (pLabel, pField) {\n return renderFormFieldWith(pLabel, pField, [], []);\n };\n var renderFormFieldSpecWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n return {\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n };\n };\n var renderFormFieldDom = function () {\n return renderFormFieldDomWith([]);\n };\n var renderFormFieldDomWith = function (extraClasses) {\n return {\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n };\n };\n var renderLabel = function (label, providersBackstage) {\n return FormField.parts().label({\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n });\n };\n\n var formChangeEvent = generate$1('form-component-change');\n var formCloseEvent = generate$1('form-close');\n var formCancelEvent = generate$1('form-cancel');\n var formActionEvent = generate$1('form-action');\n var formSubmitEvent = generate$1('form-submit');\n var formBlockEvent = generate$1('form-block');\n var formUnblockEvent = generate$1('form-unblock');\n var formTabChangeEvent = generate$1('form-tabchange');\n var formResizeEvent = generate$1('form-resize');\n\n var renderCollection = function (spec, providersBackstage) {\n var 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 '&quot;';\n }\n return ch;\n };\n var setContents = function (comp, items) {\n var htmlLines = map(items, function (item) {\n var itemText = global$6.translate(item.text);\n var textContent = spec.columns === 1 ? '<div class=\"tox-collection__item-label\">' + itemText + '</div>' : '';\n var iconContent = '<div class=\"tox-collection__item-icon\">' + item.icon + '</div>';\n var mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n var ariaLabel = itemText.replace(/\\_| \\- |\\-/g, function (match) {\n return mapItemName[match];\n });\n var readonlyClass = providersBackstage.isReadOnly() ? ' tox-collection__item--state-disabled' : '';\n return '<div class=\"tox-collection__item' + readonlyClass + '\" tabindex=\"-1\" data-collection-item-value=\"' + escapeAttribute(item.value) + '\" title=\"' + ariaLabel + '\" aria-label=\"' + ariaLabel + '\">' + iconContent + textContent + '</div>';\n });\n var chunks = spec.columns > 1 && spec.columns !== 'auto' ? chunk(htmlLines, spec.columns) : [htmlLines];\n var html = map(chunks, function (ch) {\n return '<div class=\"tox-collection__group\">' + ch.join('') + '</div>';\n });\n set(comp.element(), html.join(''));\n };\n var onClick = runOnItem(function (comp, se, tgt, itemValue) {\n se.stop();\n if (!providersBackstage.isReadOnly()) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }\n });\n var collectionEvents = [\n run(mouseover(), runOnItem(function (comp, se, tgt) {\n focus$1(tgt);\n })),\n run(click(), onClick),\n run(tap(), onClick),\n run(focusin(), runOnItem(function (comp, se, tgt) {\n descendant$1(comp.element(), '.' + activeClass).each(function (currentActive) {\n remove$4(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run(focusout(), runOnItem(function (comp) {\n descendant$1(comp.element(), '.' + activeClass).each(function (currentActive) {\n remove$4(currentActive, activeClass);\n });\n })),\n runOnExecute(runOnItem(function (comp, se, tgt, itemValue) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n var iterCollectionItems = function (comp, applyAttributes) {\n return map(descendants(comp.element(), '.tox-collection__item'), applyAttributes);\n };\n var pField = FormField.parts().field({\n dom: {\n tag: 'div',\n classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])\n },\n components: [],\n factory: { sketch: identity },\n behaviours: derive$1([\n Disabling.config({\n disabled: providersBackstage.isReadOnly,\n onDisabled: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$1(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n remove$4(childElm, 'tox-collection__item--state-disabled');\n remove$1(childElm, 'aria-disabled');\n });\n }\n }),\n receivingConfig(),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: []\n },\n onSetValue: function (comp, items) {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(function (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n }\n emit(comp, formResizeEvent);\n }\n }),\n Tabstopping.config({}),\n Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n config('collection-events', collectionEvents)\n ]),\n eventOrder: {\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ]\n }\n });\n var extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n var schema$f = constant([\n option('data'),\n defaulted$1('inputAttributes', {}),\n defaulted$1('inputStyles', {}),\n defaulted$1('tag', 'input'),\n defaulted$1('inputClasses', []),\n onHandler('onSetValue'),\n defaulted$1('styles', {}),\n defaulted$1('eventOrder', {}),\n field$1('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted$1('selectOnFocus', true)\n ]);\n var focusBehaviours = function (detail) {\n return derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : function (component) {\n var input = component.element();\n var value = get$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 if (!isReady()) {\n data = Option.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n 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$a(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$a,\n pure: pure\n };\n\n var errorReporter = function (err) {\n 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$1 = function (a) {\n return make$3(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$b,\n pure: pure$1\n };\n\n var ariaElements = [\n 'input',\n 'textarea'\n ];\n var isAriaElement = function (elem) {\n var name$1 = name(elem);\n return contains(ariaElements, name$1);\n };\n var markValid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element());\n remove$4(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element())) {\n set$1(component.element(), 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n var markInvalid = function (component, invalidConfig, invalidState, text) {\n var elem = invalidConfig.getRoot(component).getOr(component.element());\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element())) {\n set$1(component.element(), 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n var query = function (component, invalidConfig, _invalidState) {\n return invalidConfig.validator.fold(function () {\n return Future.pure(Result.value(true));\n }, function (validatorInfo) {\n return validatorInfo.validate(component);\n });\n };\n var run$1 = function (component, invalidConfig, invalidState) {\n invalidConfig.notify.each(function (notifyInfo) {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(function (valid) {\n if (component.getSystem().isConnected()) {\n return valid.fold(function (err) {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, function (v) {\n markValid(component, invalidConfig);\n return Result.value(v);\n });\n } else {\n return Result.error('No longer in system');\n }\n });\n };\n var isInvalid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element());\n return has$2(elem, invalidConfig.invalidClass);\n };\n\n var InvalidateApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n markValid: markValid,\n markInvalid: markInvalid,\n query: query,\n run: run$1,\n isInvalid: isInvalid\n });\n\n var events$a = function (invalidConfig, invalidState) {\n return invalidConfig.validator.map(function (validatorInfo) {\n return derive([run(validatorInfo.onEvent, function (component) {\n run$1(component, invalidConfig, invalidState).get(identity);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(function (component) {\n run$1(component, invalidConfig, invalidState).get(noop);\n })] : []));\n }).getOr({});\n };\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$a\n });\n\n var InvalidateSchema = [\n strict$1('invalidClass'),\n defaulted$1('getRoot', 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 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 DisablingConfigs.button(sharedBackstage.providers.isReadOnly),\n receivingConfig(),\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return 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 Disabling.config({ disabled: sharedBackstage.providers.isReadOnly }),\n receivingConfig(),\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: function (comp) {\n return parent(comp.element());\n },\n notify: {\n onValid: function (comp) {\n var val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: function (input) {\n var inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n var span = 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 addColor(value);\n });\n }, '#ffffff');\n } else if (value === 'remove') {\n emitSwatchChange(colorBit, '');\n } else {\n emitSwatchChange(colorBit, value);\n }\n });\n };\n var memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: function () {\n return [\n southwest$1,\n southeast$1,\n south$1\n ];\n },\n onLtr: function () {\n return [\n southeast$1,\n southwest$1,\n south$1\n ];\n }\n },\n components: [],\n fetch: getFetch(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(),\n presets: 'color',\n onItemAction: onItemAction\n }, sharedBackstage));\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: pLabel.toArray().concat([{\n dom: {\n tag: 'div',\n classes: ['tox-color-input']\n },\n components: [\n pField,\n memColorButton.asSpec()\n ]\n }]),\n fieldBehaviours: derive$1([config('form-field-events', [\n run(colorInputChangeEvent, function (comp, se) {\n memColorButton.getOpt(comp).each(function (colorButton) {\n set$2(colorButton.element(), 'background-color', se.event().color());\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run(colorSwatchChangeEvent, function (comp, se) {\n FormField.getField(comp).each(function (field) {\n Representing.setValue(field, se.event().value());\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run(colorPickerCancelEvent, function (comp, _se) {\n FormField.getField(comp).each(function (_field) {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n var hsvColour = function (hue, saturation, value) {\n return {\n hue: hue,\n saturation: saturation,\n value: value\n };\n };\n var fromRgb = function (rgbaColour) {\n var h = 0;\n var s = 0;\n var v = 0;\n var r = rgbaColour.red / 255;\n var g = rgbaColour.green / 255;\n var b = rgbaColour.blue / 255;\n var minRGB = Math.min(r, Math.min(g, b));\n var maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n var d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n var calcHex = function (value) {\n var hue = (100 - value) / 100 * 360;\n var hsv = hsvColour(hue, 100, 100);\n var rgb = fromHsv(hsv);\n return fromRgba(rgb);\n };\n\n var fieldsUpdate = generate$1('rgb-hex-update');\n var sliderUpdate = generate$1('slider-update');\n var paletteUpdate = generate$1('palette-update');\n\n var labelPart = optional({\n schema: [strict$1('dom')],\n name: 'label'\n });\n var edgePart = function (name) {\n return optional({\n name: '' + name + '-edge',\n overrides: function (detail) {\n var action = detail.model.manager.edgeActions[name];\n return action.fold(function () {\n return {};\n }, function (a) {\n return {\n events: derive([\n runActionExtra(touchstart(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousedown(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousemove(), function (comp, se, det) {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n };\n });\n }\n });\n };\n var tlEdgePart = edgePart('top-left');\n var tedgePart = edgePart('top');\n var trEdgePart = edgePart('top-right');\n var redgePart = edgePart('right');\n var brEdgePart = edgePart('bottom-right');\n var bedgePart = edgePart('bottom');\n var blEdgePart = edgePart('bottom-left');\n var ledgePart = edgePart('left');\n var thumbPart = required({\n name: 'thumb',\n defaults: constant({ dom: { styles: { position: 'absolute' } } }),\n overrides: function (detail) {\n return {\n events: derive([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n var spectrumPart = required({\n schema: [state$1('mouseIsDown', function () {\n return Cell(false);\n })],\n name: 'spectrum',\n overrides: function (detail) {\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var setValueFrom = function (component, simulatedEvent) {\n return model.getValueFromEvent(simulatedEvent).map(function (value) {\n return model.setValueFrom(component, detail, value);\n });\n };\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: function (spectrum) {\n return model.onLeft(spectrum, detail);\n },\n onRight: function (spectrum) {\n return model.onRight(spectrum, detail);\n },\n onUp: function (spectrum) {\n return model.onUp(spectrum, detail);\n },\n onDown: function (spectrum) {\n return model.onDown(spectrum, detail);\n }\n }),\n Focusing.config({})\n ]),\n events: derive([\n run(touchstart(), setValueFrom),\n run(touchmove(), setValueFrom),\n run(mousedown(), setValueFrom),\n run(mousemove(), function (spectrum, se) {\n if (detail.mouseIsDown.get()) {\n setValueFrom(spectrum, se);\n }\n })\n ])\n };\n }\n });\n var SliderParts = [\n labelPart,\n ledgePart,\n redgePart,\n tedgePart,\n bedgePart,\n tlEdgePart,\n trEdgePart,\n blEdgePart,\n brEdgePart,\n thumbPart,\n spectrumPart\n ];\n\n var _sliderChangeEvent = 'slider.change.value';\n var sliderChangeEvent = constant(_sliderChangeEvent);\n var isTouchEvent = function (evt) {\n return evt.type.indexOf('touch') !== -1;\n };\n var getEventSource = function (simulatedEvent) {\n var evt = simulatedEvent.event().raw();\n if (isTouchEvent(evt)) {\n var touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? 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 '<alloy.field.' + name + '>';\n };\n var sketch$1 = function (fSpec) {\n var parts = function () {\n var record = [];\n var field = function (name, config) {\n record.push(name);\n return generateOne(owner$3, getPartName(name), config);\n };\n return {\n field: field,\n record: function () {\n return record;\n }\n };\n }();\n var spec = fSpec(parts);\n var partNames = parts.record();\n var fieldParts = map(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName(n)\n });\n });\n return composite(owner$3, schema$h, fieldParts, make$4, spec);\n };\n var toResult$1 = function (o, e) {\n return o.fold(function () {\n return Result.error(e);\n }, Result.value);\n };\n var make$4 = function (detail, components) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: function (form) {\n var resPs = getAllParts(form, detail);\n return map$2(resPs, function (resPThunk, pName) {\n return resPThunk().bind(function (v) {\n var opt = Composing.getCurrent(v);\n return toResult$1(opt, new Error('Cannot find a current component to extract the value from for form part \\'' + pName + '\\': ' + element(v.element())));\n }).map(Representing.getValue);\n });\n },\n setValue: function (form, values) {\n each$1(values, function (newValue, key) {\n getPart(form, detail, key).each(function (wrapper) {\n Composing.getCurrent(wrapper).each(function (field) {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: function (form, key) {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n };\n };\n var Form = {\n getField: makeApi(function (apis, component, key) {\n return apis.getField(component, key);\n }),\n sketch: sketch$1\n };\n\n var validInput = generate$1('valid-input');\n var invalidInput = generate$1('invalid-input');\n var validatingInput = generate$1('validating-input');\n var translatePrefix = 'colorcustom.rgb.';\n var rgbFormFactory = function (translate, getClass, onValidHexx, onInvalidHexx) {\n var invalidation = function (label, isValid) {\n return Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: function (comp) {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: function (comp) {\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: function (comp) {\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: function (comp) {\n var value = Representing.getValue(comp);\n var res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n };\n var renderTextField = function (isValid, name, label, description, data) {\n var helptext = translate(translatePrefix + 'range');\n var pLabel = FormField.parts().label({\n dom: {\n tag: 'label',\n innerHtml: label,\n attributes: { 'aria-label': description }\n }\n });\n var pField = FormField.parts().field({\n data: data,\n factory: Input,\n inputAttributes: __assign({ type: 'text' }, name === 'hex' ? { 'aria-live': 'polite' } : {}),\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid),\n Tabstopping.config({})\n ]),\n onSetValue: function (input) {\n if (Invalidating.isInvalid(input)) {\n var run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n var comps = [\n pLabel,\n pField\n ];\n var concats = name !== 'hex' ? [FormField.parts()['aria-descriptor']({ text: helptext })] : [];\n var components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components: components\n };\n };\n var copyRgbToHex = function (form, rgba) {\n var hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(function (hexField) {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value });\n }\n });\n return hex;\n };\n var copyRgbToForm = function (form, rgb) {\n var red = rgb.red;\n var green = rgb.green;\n var blue = rgb.blue;\n Representing.setValue(form, {\n red: red,\n green: green,\n blue: blue\n });\n };\n var memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n var updatePreview = function (anyInSystem, hex) {\n memPreview.getOpt(anyInSystem).each(function (preview) {\n set$2(preview.element(), 'background-color', '#' + hex.value);\n });\n };\n var factory = function () {\n var state = {\n red: Cell(Option.some(255)),\n green: Cell(Option.some(255)),\n blue: Cell(Option.some(255)),\n hex: 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: '<div class=' + getClass('sv-palette-inner-thumb') + ' role=\"presentation\"></div>'\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(red));\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: Cell(red) };\n var memPalette = record(sbPalette.sketch({}));\n var memRgb = record(rgbForm.sketch({}));\n var updatePalette = function (anyInSystem, hex) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n var rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n sbPalette.setRgba(palette, rgba);\n });\n };\n var updateFields = function (anyInSystem, hex) {\n memRgb.getOpt(anyInSystem).each(function (form) {\n rgbForm.updateHex(form, hex);\n });\n };\n var runUpdates = function (anyInSystem, hex, updates) {\n each(updates, function (update) {\n update(anyInSystem, hex);\n });\n };\n var paletteUpdates = function () {\n var updates = [updateFields];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event().value();\n var oldRgb = state.paletteRgba.get();\n var hsvColour$1 = fromRgb(oldRgb);\n var newHsvColour = hsvColour(hsvColour$1.hue, value.x(), 100 - value.y());\n var rgb = fromHsv(newHsvColour);\n var nuHex = fromRgba(rgb);\n runUpdates(form, nuHex, updates);\n };\n };\n var sliderUpdates = function () {\n var updates = [\n updatePalette,\n updateFields\n ];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event().value();\n var hex = calcHex(value.y());\n runUpdates(form, hex, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n sliderFactory(translate, getClass),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run(paletteUpdate, paletteUpdates()),\n run(sliderUpdate, sliderUpdates())\n ]),\n Composing.config({\n find: function (comp) {\n return memRgb.getOpt(comp);\n }\n }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n var colourPickerSketcher = single$2({\n name: 'ColourPicker',\n configFields: [\n strict$1('dom'),\n defaulted$1('onValidHex', noop),\n defaulted$1('onInvalidHex', noop)\n ],\n factory: factory\n });\n return colourPickerSketcher;\n };\n\n var self$1 = function () {\n return Composing.config({ find: 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([\n Tabstopping.config({}),\n DisablingConfigs.button(providersBackstage.isReadOnly),\n receivingConfig()\n ])\n })\n ]\n }]\n };\n };\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var pField = FormField.parts().field({ factory: { sketch: renderField } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n var renderGrid = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-form__grid',\n 'tox-form__grid--' + spec.columns + 'col'\n ]\n },\n components: map(spec.items, backstage.interpreter)\n };\n };\n\n var beforeObject = generate$1('alloy-fake-before-tabstop');\n var afterObject = generate$1('alloy-fake-after-tabstop');\n var craftWithClasses = function (classes) {\n return {\n dom: {\n tag: 'div',\n styles: {\n width: '1px',\n height: '1px',\n outline: 'none'\n },\n attributes: { tabindex: '0' },\n classes: classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n var craft = function (spec) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-navobj']\n },\n components: [\n craftWithClasses([beforeObject]),\n spec,\n craftWithClasses([afterObject])\n ],\n behaviours: derive$1([ComposingConfigs.childAt(1)])\n };\n };\n var triggerTab = function (placeholder, shiftKey) {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey: shiftKey\n }\n });\n };\n var onFocus$1 = function (container, targetComp) {\n var target = targetComp.element();\n if (has$2(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has$2(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n var isPseudoStop = function (element) {\n return closest$4(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), constant(false));\n };\n\n var platformNeedsSandboxing = !(detect$3().browser.isIE() || detect$3().browser.isEdge());\n var getDynamicSource = function (isSandbox) {\n var cachedValue = Cell('');\n return {\n getValue: function (_frameComponent) {\n return cachedValue.get();\n },\n setValue: function (frameComponent, html) {\n if (!isSandbox) {\n set$1(frameComponent.element(), 'src', 'javascript:\\'\\'');\n var doc = frameComponent.element().dom().contentWindow.document;\n doc.open();\n doc.write(html);\n doc.close();\n } else {\n set$1(frameComponent.element(), 'srcdoc', html);\n }\n cachedValue.set(html);\n }\n };\n };\n var renderIFrame = function (spec, providersBackstage) {\n var isSandbox = platformNeedsSandboxing && spec.sandboxed;\n var attributes = __assign(__assign({}, spec.label.map(function (title) {\n return { title: title };\n }).getOr({})), isSandbox ? { sandbox: 'allow-scripts allow-same-origin' } : {});\n var sourcing = getDynamicSource(isSandbox);\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var factory = function (newSpec) {\n return craft({\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes: attributes\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n RepresentingConfigs.withComp(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 var toDataURL = constant(uri);\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(function () {\n return spec.disabled || sharedBackstage.providers.isReadOnly();\n }),\n receivingConfig(),\n Unselecting.config({}),\n Replacing.config({}),\n config('dropdown-events', [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config('menubutton-update-display-text', [\n run(updateMenuText, function (comp, se) {\n optMemDisplayText.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayText) {\n Replacing.set(displayText, [text(sharedBackstage.providers.translate(se.event().text()))]);\n });\n }),\n run(updateMenuIcon, function (comp, se) {\n optMemDisplayIcon.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayIcon) {\n Replacing.set(displayIcon, [renderReplacableIconFromPack(se.event().icon(), sharedBackstage.providers.icons)]);\n });\n })\n ])\n ])),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n mousedown: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ]\n }),\n sandboxBehaviours: derive$1([Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n })]),\n lazySink: sharedBackstage.getSink,\n toggleClass: prefix + '--active',\n parts: { menu: part(false, spec.columns, spec.presets) },\n fetch: function () {\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$2(data.menus, function (menuItems, menuName) {\n return createPartialMenu(menuName, menuItems, itemResponse, backstage, false);\n });\n var menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return 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, providersBackstage) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var action = actionOpt.fold(function () {\n return {};\n }, function (action) {\n return { action: action };\n });\n var common = __assign({\n buttonBehaviours: derive$1([\n DisablingConfigs.button(function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }),\n receivingConfig(),\n Tabstopping.config({}),\n config('button press', [\n preventDefault('click'),\n preventDefault('mousedown')\n ])\n ].concat(extraBehaviours)),\n eventOrder: {\n click: [\n 'button press',\n 'alloy.base.behaviour'\n ],\n mousedown: [\n 'button press',\n 'alloy.base.behaviour'\n ]\n }\n }, action);\n var domFinal = deepMerge(common, { dom: dom });\n return deepMerge(domFinal, { components: components });\n };\n var renderIconButtonSpec = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var tooltipAttributes = spec.tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n var dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: tooltipAttributes\n };\n var icon = spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n });\n var components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n var renderIconButton = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var iconButtonSpec = renderIconButtonSpec(spec, 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, providersBackstage);\n };\n var renderButton = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var buttonSpec = renderButtonSpec(spec, 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 Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }\n }),\n receivingConfig(),\n Tabstopping.config({})\n ])\n });\n var formGroup = function (components) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: components\n };\n };\n var getFieldPart = function (isField1) {\n return FormField.parts().field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }\n }),\n receivingConfig(),\n Tabstopping.config({}),\n config('size-input-events', [\n run(focusin(), function (component, _simulatedEvent) {\n emitWith(component, ratioEvent, { isField1: isField1 });\n }),\n run(change(), function (component, _simulatedEvent) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n };\n var getLabel = function (label) {\n return {\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n };\n };\n var widthField = FormCoupledInputs.parts().field1(formGroup([\n FormField.parts().label(getLabel('Width')),\n getFieldPart(true)\n ]));\n var heightField = FormCoupledInputs.parts().field2(formGroup([\n FormField.parts().label(getLabel('Height')),\n getFieldPart(false)\n ]));\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel('&nbsp;'),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: function (current, other, _lock) {\n parseSize(Representing.getValue(current)).each(function (size) {\n converter(size).each(function (newSize) {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n },\n onDisabled: function (comp) {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n receivingConfig(),\n config('size-input-events2', [run(ratioEvent, function (component, simulatedEvent) {\n var isField1 = simulatedEvent.event().isField1();\n var optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n var optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n var value1 = optCurrent.map(Representing.getValue).getOr('');\n var value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n var undo = constant(generate$1('undo'));\n var redo = constant(generate$1('redo'));\n var zoom = constant(generate$1('zoom'));\n var back = constant(generate$1('back'));\n var apply = constant(generate$1('apply'));\n var swap = constant(generate$1('swap'));\n var transform = constant(generate$1('transform'));\n var tempTransform = constant(generate$1('temp-transform'));\n var transformApply = constant(generate$1('transform-apply'));\n var internal = {\n undo: undo,\n redo: redo,\n zoom: zoom,\n back: back,\n apply: apply,\n swap: swap,\n transform: transform,\n tempTransform: tempTransform,\n transformApply: transformApply\n };\n var saveState = constant('save-state');\n var disable$1 = constant('disable');\n var enable$1 = constant('enable');\n var external$2 = {\n formActionEvent: formActionEvent,\n saveState: saveState,\n disable: disable$1,\n enable: enable$1\n };\n\n var renderEditPanel = function (imagePanel, providersBackstage) {\n var createButton = function (text, action, disabled, primary) {\n return record(renderButton({\n name: text,\n text: text,\n disabled: disabled,\n primary: primary,\n icon: 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 max = Math.max;\n var documentElement = doc.documentElement;\n var body = doc.body;\n var scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n var clientWidth = max(documentElement.clientWidth, body.clientWidth);\n var offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n var scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n var clientHeight = max(documentElement.clientHeight, body.clientHeight);\n var offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n }\n 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 startX, startY;\n settings = settings || {};\n var handleElement = doc.getElementById(settings.handle || id);\n var start = function (e) {\n var docSize = getDocumentSize(doc);\n var cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n var handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (domGlobals.window.getComputedStyle) {\n cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$b('<div></div>').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 var drag = function (e) {\n updateWithTouchData(e);\n if (e.button !== downButton) {\n return stop(e);\n }\n e.deltaX = e.screenX - startX;\n e.deltaY = e.screenY - startY;\n e.preventDefault();\n settings.drag(e);\n };\n var stop = function (e) {\n updateWithTouchData(e);\n global$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 dragHelpers;\n var prefix = 'tox-';\n var id = prefix + 'crid-' + count++;\n var handles = [\n {\n name: 'move',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: 0,\n deltaH: 0,\n label: 'Crop Mask'\n },\n {\n name: 'nw',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: -1,\n deltaH: -1,\n label: 'Top Left Crop Handle'\n },\n {\n name: 'ne',\n xMul: 1,\n yMul: 0,\n deltaX: 0,\n deltaY: 1,\n deltaW: 1,\n deltaH: -1,\n label: 'Top Right Crop Handle'\n },\n {\n name: 'sw',\n xMul: 0,\n yMul: 1,\n deltaX: 1,\n deltaY: 0,\n deltaW: -1,\n deltaH: 1,\n label: 'Bottom Left Crop Handle'\n },\n {\n name: 'se',\n xMul: 1,\n yMul: 1,\n deltaX: 0,\n deltaY: 0,\n deltaW: 1,\n deltaH: 1,\n label: 'Bottom Right Crop Handle'\n }\n ];\n var blockers = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ];\n var getAbsoluteRect = function (outerRect, relativeRect) {\n return {\n x: relativeRect.x + outerRect.x,\n y: relativeRect.y + outerRect.y,\n w: relativeRect.w,\n h: relativeRect.h\n };\n };\n var getRelativeRect = function (outerRect, innerRect) {\n return {\n x: innerRect.x - outerRect.x,\n y: innerRect.y - outerRect.y,\n w: innerRect.w,\n h: innerRect.h\n };\n };\n var getInnerRect = function () {\n return getRelativeRect(clampRect, currentRect);\n };\n 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('<div id=\"' + id + '\" class=\"' + prefix + 'croprect-container\"' + ' role=\"grid\" aria-dropeffect=\"execute\">').appendTo(containerElm);\n global$e.each(blockers, function (blocker) {\n global$b('#' + id, containerElm).append('<div id=\"' + id + '-' + blocker + '\"class=\"' + prefix + 'croprect-block\" style=\"display: none\" data-mce-bogus=\"all\">');\n });\n global$e.each(handles, function (handle) {\n global$b('#' + id, containerElm).append('<div id=\"' + id + '-' + handle.name + '\" class=\"' + prefix + 'croprect-handle ' + prefix + 'croprect-handle-' + handle.name + '\"' + 'style=\"display: none\" data-mce-bogus=\"all\" role=\"gridcell\" tabindex=\"-1\"' + ' aria-label=\"' + handle.label + '\" aria-grabbed=\"false\" title=\"' + handle.label + '\">');\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 = 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 var 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$4(function (resolve) {\n var loaded = function () {\n image.removeEventListener('load', loaded);\n resolve(image);\n };\n if (image.complete) {\n resolve(image);\n } else {\n image.addEventListener('load', loaded);\n }\n });\n };\n var renderImagePanel = function (initialUrl) {\n var memBg = record({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image-bg'],\n attributes: { role: 'presentation' }\n }\n });\n var zoomState = Cell(1);\n var cropRect = Cell(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 = 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 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 renderPanel = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map(spec.items, backstage.shared.interpreter)\n };\n };\n\n var factory$8 = function (detail, _spec) {\n var options = map(detail.options, function (option) {\n return {\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n };\n });\n var initialValues = detail.data.map(function (v) {\n return wrap$1('initialValue', v);\n }).getOr({});\n return {\n uid: detail.uid,\n dom: {\n tag: 'select',\n classes: detail.selectClasses,\n attributes: detail.selectAttributes\n },\n components: options,\n behaviours: augment(detail.selectBehaviours, [\n Focusing.config({}),\n Representing.config({\n store: __assign({\n mode: 'manual',\n getValue: function (select) {\n return get$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({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }\n }),\n Tabstopping.config({}),\n config('selectbox-change', [run(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var chevron = spec.size > 1 ? 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([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderTable = function (spec, providersBackstage) {\n var renderTh = function (text) {\n return {\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderHeader = function (header) {\n return {\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map(header, renderTh)\n }]\n };\n };\n var renderTd = function (text) {\n return {\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderTr = function (row) {\n return {\n dom: { tag: 'tr' },\n components: map(row, renderTd)\n };\n };\n var renderRows = function (rows) {\n return {\n dom: { tag: 'tbody' },\n components: map(rows, renderTr)\n };\n };\n return {\n dom: {\n tag: 'table',\n classes: ['tox-dialog__table']\n },\n components: [\n renderHeader(spec.header),\n renderRows(spec.cells)\n ],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n\n var renderTextField = function (spec, providersBackstage) {\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var baseInputBehaviours = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }\n }),\n receivingConfig(),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: function (comp) {\n emit(comp, formSubmitEvent);\n return 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 = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ];\n return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n };\n var renderInput = function (spec, providersBackstage) {\n return renderTextField({\n name: spec.name,\n multiline: false,\n label: spec.label,\n inputMode: spec.inputMode,\n placeholder: spec.placeholder,\n flex: false,\n disabled: spec.disabled,\n classname: 'tox-textfield',\n validation: 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('<top>', url);\n }).toArray();\n };\n var anchorTargetBottom = function (linkInfo) {\n return Option.from(linkInfo.anchorBottom).map(function (url) {\n return staticMenuItem('<bottom>', url);\n }).toArray();\n };\n var historyTargets = function (history) {\n return map(history, function (url) {\n return staticMenuItem(url, url);\n });\n };\n var joinMenuLists = function (items) {\n return foldl(items, function (a, b) {\n var bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator$2, b);\n }, []);\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n return filter(menuItems, function (item) {\n var text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(item.value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n var getItems = function (fileType, input, urlBackstage) {\n var urlInputValue = Representing.getValue(input);\n var term = urlInputValue.meta.text !== undefined ? urlInputValue.meta.text : urlInputValue.value;\n var info = urlBackstage.getLinkInformation();\n return info.fold(function () {\n return [];\n }, function (linkInfo) {\n var history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n return fileType === 'file' ? joinMenuLists([\n history,\n filterByQuery(term, headerTargets(linkInfo)),\n filterByQuery(term, flatten([\n anchorTargetTop(linkInfo),\n anchorTargets(linkInfo),\n anchorTargetBottom(linkInfo)\n ]))\n ]) : history;\n });\n };\n var errorId = generate$1('aria-invalid');\n var renderUrlInput = function (spec, backstage, urlBackstage) {\n var _a;\n var providersBackstage = backstage.shared.providers;\n var updateHistory = function (component) {\n var urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n var pField = FormField.parts().field({\n factory: Typeahead,\n dismissOnBlur: true,\n inputClasses: ['tox-textfield'],\n sandboxClasses: ['tox-dialog__popups'],\n inputAttributes: {\n 'aria-errormessage': errorId,\n 'type': 'url'\n },\n minChars: 0,\n responseTime: 0,\n fetch: function (input) {\n var items = getItems(spec.filetype, input, urlBackstage);\n var tdata = build$2(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, false);\n return Future.pure(tdata);\n },\n getHotspot: function (comp) {\n return memUrlBox.getOpt(comp);\n },\n onSetValue: function (comp, _newValue) {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1(flatten([\n urlBackstage.getValidationHandler().map(function (handler) {\n return Invalidating.config({\n getRoot: function (comp) {\n return parent(comp.element());\n },\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: function (comp, err) {\n memInvalidIcon.getOpt(comp).each(function (invalidComp) {\n set$1(invalidComp.element(), 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: function (input) {\n var urlEntry = Representing.getValue(input);\n return FutureResult.nu(function (completer) {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, function (validation) {\n if (validation.status === 'invalid') {\n var err = Result.error(validation.message);\n completer(err);\n } else {\n var val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n });\n }).toArray(),\n [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }\n }),\n Tabstopping.config({}),\n config('urlinput-events', flatten([\n spec.filetype === 'file' ? [run(input(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n })] : [],\n [\n run(change(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run(postPaste(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ]\n ]))\n ]\n ])),\n eventOrder: (_a = {}, _a[input()] = [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ], _a),\n model: {\n getDisplayText: function (itemData) {\n return itemData.value;\n },\n selectsOver: false,\n populateFromBrowse: false\n },\n markers: { openClass: 'tox-textfield--popup-open' },\n lazySink: backstage.shared.getSink,\n parts: { menu: part(false, 1, 'normal') },\n onExecute: function (_menu, component, _entry) {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: function (typeahead, _sandbox, _item, _value) {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var makeIcon = function (name, errId, icon, label) {\n if (icon === void 0) {\n icon = name;\n }\n if (label === void 0) {\n label = name;\n }\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n innerHtml: get$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({\n disabled: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }\n })])\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: function () {\n return spec.disabled || providersBackstage.isReadOnly();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n receivingConfig(),\n config('url-input-events', [run(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n var renderAlertBanner = function (spec, providersBackstage) {\n return Container.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n 'tox-notification--' + spec.level\n ]\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon']\n },\n components: [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n innerHtml: get$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 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({\n disabled: function () {\n return spec.disabled || providerBackstage.isReadOnly();\n }\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n repBehaviour,\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var pLabel = FormField.parts().label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label'],\n innerHtml: providerBackstage.translate(spec.label)\n },\n behaviours: derive$1([Unselecting.config({})])\n });\n var makeIcon = function (className) {\n var iconName = className === 'checked' ? 'selected' : 'unselected';\n return {\n dom: {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ],\n innerHtml: get$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([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providerBackstage.isReadOnly();\n },\n disableClass: 'tox-checkbox--disabled',\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderHtmlPanel = function (spec) {\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html\n }\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n });\n }\n };\n\n var make$6 = function (render) {\n return function (parts, spec, backstage) {\n return get(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, lazyUseEditableAreaAnchor) {\n var bubble = nu$8(-12, 12, bubbleAlignments);\n var overrides = { maxHeightFunction: expandable() };\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: 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 function () {\n return lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n };\n var getBannerAnchor = function (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) {\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: 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 function () {\n return lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n };\n var getCursorAnchor = function (editor, bodyElement) {\n return function () {\n return {\n anchor: 'selection',\n root: bodyElement(),\n getSelection: function () {\n var rng = editor.selection.getRng();\n return 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, isToolbarTop) {\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 lazyUseEditableAreaAnchor = function () {\n return useFixedToolbarContainer || !isToolbarTop();\n };\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor(bodyElement)\n };\n };\n\n var colorPicker = function (editor) {\n return function (callback, value) {\n var dialog = colorPickerDialog(editor);\n dialog(callback, value);\n };\n };\n var hasCustomColors$1 = function (editor) {\n return function () {\n return hasCustomColors(editor);\n };\n };\n var getColors$2 = function (editor) {\n return function () {\n return getColors(editor);\n };\n };\n var getColorCols$2 = function (editor) {\n return function () {\n return getColorCols$1(editor);\n };\n };\n var ColorInputBackstage = function (editor) {\n return {\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors$1(editor),\n getColors: getColors$2(editor),\n getColorCols: getColorCols$2(editor)\n };\n };\n\n var isDraggableModal$1 = function (editor) {\n return function () {\n return isDraggableModal(editor);\n };\n };\n var DialogBackstage = function (editor) {\n return { isDraggableModal: isDraggableModal$1(editor) };\n };\n\n var HeaderBackstage = function (editor) {\n var mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n return {\n isPositionedAtTop: function () {\n return mode.get() === 'top';\n },\n getDockingMode: mode.get,\n setDockingMode: mode.set\n };\n };\n\n var defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Align',\n items: [\n {\n title: 'Left',\n format: 'alignleft'\n },\n {\n title: 'Center',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n format: 'alignright'\n },\n {\n title: 'Justify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n var isNestedFormat = function (format) {\n return has(format, 'items');\n };\n var isBlockFormat = function (format) {\n return has(format, 'block');\n };\n var isInlineFormat = function (format) {\n return has(format, 'inline');\n };\n var isSelectorFormat = function (format) {\n return has(format, 'selector');\n };\n var mapFormats = function (userFormats) {\n return foldl(userFormats, function (acc, fmt) {\n if (isNestedFormat(fmt)) {\n var result = mapFormats(fmt.items);\n return {\n customFormats: acc.customFormats.concat(result.customFormats),\n formats: acc.formats.concat([{\n title: fmt.title,\n items: result.formats\n }])\n };\n } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n var formatName = '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 = global$9.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n var history;\n try {\n history = JSON.parse(unparsedHistory);\n } catch (e) {\n if (e instanceof SyntaxError) {\n 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 global$9.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n var getHistory = function (fileType) {\n var history = getAllHistory();\n return Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];\n };\n var addToHistory = function (url, fileType) {\n if (!isHttpUrl(url)) {\n return;\n }\n var history = getAllHistory();\n var items = Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];\n var itemsWithoutUrl = filter(items, function (item) {\n return item !== url;\n });\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n var isTruthy = function (value) {\n return !!value;\n };\n var makeMap = function (value) {\n return map$2(global$e.makeMap(value, /[, ]/), isTruthy);\n };\n var getPicker = function (editor) {\n return Option.from(getFilePickerCallback(editor)).filter(isFunction);\n };\n var getPickerTypes = function (editor) {\n var optFileTypes = Option.some(getFilePickerTypes(editor)).filter(isTruthy);\n var optLegacyTypes = Option.some(getFileBrowserCallbackTypes(editor)).filter(isTruthy);\n var optTypes = optFileTypes.or(optLegacyTypes).map(makeMap);\n return getPicker(editor).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 (editor, filetype) {\n var pickerTypes = getPickerTypes(editor);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(editor) : Option.none();\n } else {\n return pickerTypes[filetype] ? getPicker(editor) : Option.none();\n }\n };\n var getUrlPicker = function (editor, filetype) {\n return getPickerSetting(editor, filetype).map(function (picker) {\n return function (entry) {\n return Future.nu(function (completer) {\n var handler = function (value, meta) {\n if (!isString(value)) {\n throw new Error('Expected value to be string');\n }\n if (meta !== undefined && !isObject(meta)) {\n throw new Error('Expected meta to be a object');\n }\n var r = {\n value: value,\n meta: meta\n };\n completer(r);\n };\n var meta = __assign({\n filetype: filetype,\n fieldname: entry.fieldname\n }, Option.from(entry.meta).getOr({}));\n picker.call(editor, handler, entry.value, meta);\n });\n };\n });\n };\n var getTextSetting = function (value) {\n return Option.from(value).filter(isString).getOrUndefined();\n };\n var getLinkInformation = function (editor) {\n if (noTypeaheadUrls(editor)) {\n return Option.none();\n }\n return Option.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(getAnchorTop(editor)),\n anchorBottom: getTextSetting(getAnchorBottom(editor))\n });\n };\n var getValidationHandler = function (editor) {\n return Option.from(getFilePickerValidatorHandler(editor));\n };\n var UrlInputBackstage = function (editor) {\n return {\n getHistory: getHistory,\n addToHistory: addToHistory,\n getLinkInformation: function () {\n return getLinkInformation(editor);\n },\n getValidationHandler: function () {\n return getValidationHandler(editor);\n },\n getUrlPicker: function (filetype) {\n return getUrlPicker(editor, filetype);\n }\n };\n };\n\n var init$8 = function (sink, editor, lazyAnchorbar) {\n var contextMenuState = Cell(false);\n var toolbar = HeaderBackstage(editor);\n var backstage = {\n shared: {\n providers: {\n icons: function () {\n return editor.ui.registry.getAll().icons;\n },\n menuItems: function () {\n return editor.ui.registry.getAll().menuItems;\n },\n translate: global$6.translate,\n isReadOnly: function () {\n return editor.mode.isReadOnly();\n }\n },\n interpreter: function (s) {\n return interpretWithoutForm(s, backstage);\n },\n anchors: getAnchors(editor, lazyAnchorbar, toolbar.isPositionedAtTop),\n header: toolbar,\n getSink: function () {\n return Result.value(sink);\n }\n },\n urlinput: UrlInputBackstage(editor),\n styleselect: init$7(editor),\n colorinput: ColorInputBackstage(editor),\n dialog: DialogBackstage(editor),\n isContextMenuOpen: function () {\n return contextMenuState.get();\n },\n setContextMenuState: function (state) {\n return contextMenuState.set(state);\n }\n };\n return backstage;\n };\n\n var expandable$1 = constant(function (element, available) {\n setMax$1(element, Math.floor(available));\n });\n\n var showContextToolbarEvent = 'contexttoolbar-show';\n var hideContextToolbarEvent = 'contexttoolbar-hide';\n\n var schema$k = constant([\n strict$1('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 = function (within, extra, withinWidth) {\n return {\n within: constant(within),\n extra: constant(extra),\n withinWidth: constant(withinWidth)\n };\n };\n var apportion = function (units, total, len) {\n var parray = generate$6(units, function (unit, current) {\n var width = len(unit);\n return 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, _slideState) {\n var expanded = slideConfig.expanded;\n return expanded ? nu$6({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$6({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n var events$d = function (slideConfig, slideState) {\n return derive([runOnSource(transitionend(), function (component, simulatedEvent) {\n var raw = simulatedEvent.event().raw();\n if (raw.propertyName === slideConfig.dimension.property) {\n disableTransitions(component, slideConfig);\n if (slideState.isExpanded()) {\n remove$6(component.element(), slideConfig.dimension.property);\n }\n var notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n };\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6,\n events: events$d\n });\n\n var SlidingSchema = [\n strict$1('closedClass'),\n strict$1('openClass'),\n strict$1('shrinkingClass'),\n strict$1('growingClass'),\n option('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted$1('expanded', false),\n strictOf('dimension', choose$1('property', {\n width: [\n output('property', 'width'),\n output('getDimension', function (elem) {\n return get$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 renderToolbarGroupCommon = function (toolbarGroup) {\n var attributes = toolbarGroup.title.fold(function () {\n return {};\n }, function (title) {\n return { attributes: { title: title } };\n });\n return {\n dom: __assign({\n tag: 'div',\n classes: ['tox-toolbar__group']\n }, attributes),\n components: [ToolbarGroup.parts().items({})],\n items: toolbarGroup.items,\n markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), ' + '.tox-split-button:not([disabled]), ' + '.tox-toolbar-nav-js:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n var renderToolbarGroup = function (toolbarGroup) {\n return ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n };\n var getToolbarbehaviours = function (toolbarSpec, modeName) {\n var onAttached = runOnAttached(function (component) {\n var groups = map(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n DisablingConfigs.toolbarButton(toolbarSpec.providers.isReadOnly),\n receivingConfig(),\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached])\n ]);\n };\n var renderMoreToolbarCommon = function (toolbarSpec) {\n var modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return {\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n parts: {\n 'overflow-group': renderToolbarGroupCommon({\n title: 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.providers)\n },\n splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n };\n };\n var renderFloatingMoreToolbar = function (toolbarSpec) {\n var baseSpec = renderMoreToolbarCommon(toolbarSpec);\n var overflowXOffset = 4;\n var primary = SplitFloatingToolbar.parts().primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch(__assign(__assign({}, baseSpec), {\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: function () {\n var headerElem = toolbarSpec.moreDrawerData.lazyHeader().element();\n var headerBounds = absolute$1(headerElem);\n var docElem = documentElement(headerElem);\n var docBounds = absolute$1(docElem);\n var height = Math.max(docElem.dom().scrollHeight, docBounds.height);\n return bounds$1(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n },\n parts: __assign(__assign({}, baseSpec.parts), {\n overflow: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: toolbarSpec.attributes\n }\n }\n }),\n components: [primary],\n markers: { overflowToggledClass: 'tox-tbtn--enabled' }\n }));\n };\n var renderSlidingMoreToolbar = function (toolbarSpec) {\n var primary = SplitSlidingToolbar.parts().primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n var overflow = SplitSlidingToolbar.parts().overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n var baseSpec = renderMoreToolbarCommon(toolbarSpec);\n return SplitSlidingToolbar.sketch(__assign(__assign({}, baseSpec), {\n components: [\n primary,\n overflow\n ],\n markers: {\n openClass: 'tox-toolbar__overflow--open',\n closedClass: 'tox-toolbar__overflow--closed',\n growingClass: 'tox-toolbar__overflow--growing',\n shrinkingClass: 'tox-toolbar__overflow--shrinking',\n overflowToggledClass: 'tox-tbtn--enabled'\n },\n onOpened: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n },\n onClosed: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n }\n }));\n };\n var renderToolbar = function (toolbarSpec) {\n var modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return Toolbar.sketch({\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts().groups({})],\n toolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n });\n };\n\n var 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 _d;\n var getIconName = function (iconName) {\n return global$6.isRtl() && contains(rtlIcon$1, iconName) ? iconName + '-rtl' : iconName;\n };\n var needsRtlClass = global$6.isRtl() && icon.exists(function (name) {\n return contains(rtlTransform$1, name);\n });\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []).concat(needsRtlClass ? ['tox-tbtn__icon-rtl'] : []),\n attributes: getTooltipAttributes(tooltip, providersBackstage)\n },\n components: componentRenderPipeline([\n icon.map(function (iconName) {\n return renderIconFromPack(getIconName(iconName), providersBackstage.icons);\n }),\n text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]),\n eventOrder: (_d = {}, _d[mousedown()] = [\n 'focusing',\n 'alloy.base.behaviour',\n 'common-button-display-events'\n ], _d),\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(providersBackstage.isReadOnly),\n receivingConfig(),\n config('common-button-display-events', [run(mousedown(), function (button, se) {\n se.event().prevent();\n emit(button, focusButtonEvent);\n })])\n ].concat(receiver.map(function (r) {\n return Reflecting.config({\n channel: r,\n initialData: {\n icon: icon,\n text: text\n },\n renderComponents: function (data, _state) {\n return componentRenderPipeline([\n data.icon.map(function (iconName) {\n return renderIconFromPack(getIconName(iconName), providersBackstage.icons);\n }),\n data.text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]);\n }\n });\n }).toArray()).concat(behaviours.getOr([])))\n };\n };\n var renderFloatingToolbarButton = function (spec, backstage, identifyButtons, attributes) {\n var sharedBackstage = backstage.shared;\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: function () {\n return Future.nu(function (resolve) {\n resolve(map(identifyButtons(spec.items), renderToolbarGroup));\n });\n },\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, 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(function () {\n return spec.disabled || providersBackstage.isReadOnly();\n }),\n receivingConfig()\n ].concat(specialisation.toolbarButtonBehaviours))\n });\n };\n var renderToolbarButton = function (spec, providersBackstage) {\n return renderToolbarButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarButtonWith = function (spec, providersBackstage, bonusEvents) {\n return renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [].concat(bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : []),\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage);\n };\n var renderToolbarToggleButton = function (spec, providersBackstage) {\n return renderToolbarToggleButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarToggleButtonWith = function (spec, providersBackstage, bonusEvents) {\n return deepMerge(renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [\n Replacing.config({}),\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })\n ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n getApi: getToggleApi,\n onSetup: spec.onSetup\n }, providersBackstage));\n };\n var fetchChoices = function (getApi, spec, providersBackstage) {\n return function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return 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 (_d) {\n var numRows = _d.numRows, numColumns = _d.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n })));\n });\n };\n };\n var renderSplitButton = function (spec, sharedBackstage) {\n var _d;\n var displayChannel = generate$1('channel-update-split-dropdown-display');\n var getApi = function (comp) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(comp);\n },\n setDisabled: function (state) {\n return Disabling.set(comp, state);\n },\n setIconFill: function (id, value) {\n descendant$1(comp.element(), 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'fill', value);\n });\n },\n setIconStroke: function (id, value) {\n descendant$1(comp.element(), 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'stroke', value);\n });\n },\n setActive: function (state) {\n set$1(comp.element(), 'aria-pressed', state);\n descendant$1(comp.element(), 'span').each(function (button) {\n comp.getSystem().getByDom(button).each(function (buttonComp) {\n return Toggling.set(buttonComp, state);\n });\n });\n },\n isActive: function () {\n return descendant$1(comp.element(), 'span').exists(function (button) {\n return comp.getSystem().getByDom(button).exists(Toggling.isOn);\n });\n }\n };\n };\n var editorOffCell = Cell(noop);\n var specialisation = {\n getApi: getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: __assign({ 'aria-pressed': false }, getTooltipAttributes(spec.tooltip, sharedBackstage.providers))\n },\n onExecute: function (button) {\n spec.onAction(getApi(button));\n },\n onItemExecute: function (_a, _b, _c) {\n },\n splitDropdownBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isReadOnly),\n receivingConfig(),\n config('split-dropdown-events', [\n run(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n Unselecting.config({})\n ]),\n eventOrder: (_d = {}, _d[attachedToDom()] = [\n 'alloy.base.behaviour',\n 'split-dropdown-events'\n ], _d),\n toggleClass: 'tox-tbtn--enabled',\n lazySink: sharedBackstage.getSink,\n fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n parts: { menu: part(false, spec.columns, spec.presets) },\n components: [\n SplitDropdown.parts().button(renderCommonStructure(spec.icon, spec.text, 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 buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isReadOnly),\n receivingConfig()\n ])\n }),\n SplitDropdown.parts()['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n var getFormApi = function (input) {\n return {\n hide: function () {\n return emit(input, sandboxClose());\n },\n getValue: function () {\n return Representing.getValue(input);\n }\n };\n };\n var runOnExecute$1 = function (memInput, original) {\n return run(internalToolbarButtonExecute, function (comp, se) {\n var input = memInput.get(comp);\n var formApi = getFormApi(input);\n original.onAction(formApi, se.event().buttonApi());\n });\n };\n var renderContextButton = function (memInput, button, extras) {\n var _a = button.original, primary = _a.primary, rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToolbarButton(__assign(__assign({}, rest), {\n type: 'button',\n onAction: 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 buildInitGroups = function (ctx, providers) {\n var inputAttributes = ctx.label.fold(function () {\n return {};\n }, function (label) {\n return { 'aria-label': label };\n });\n var memInput = record(Input.sketch({\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-js'\n ],\n data: ctx.initValue(),\n inputAttributes: inputAttributes,\n selectOnFocus: true,\n inputBehaviours: derive$1([Keying.config({\n mode: 'special',\n onEnter: function (input) {\n return commands.findPrimary(input).map(function (primary) {\n emitExecute(primary);\n return true;\n });\n },\n onLeft: function (comp, se) {\n se.cut();\n return 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, providers);\n return [\n {\n title: Option.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Option.none(),\n items: commands.asSpecs()\n }\n ];\n };\n var renderContextForm = function (toolbarType, ctx, providers) {\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: buildInitGroups(ctx, providers),\n onEscape: Option.none,\n cyclicKeying: true,\n providers: providers\n });\n };\n var ContextForm = {\n renderContextForm: renderContextForm,\n buildInitGroups: buildInitGroups\n };\n\n var getHorizontalBounds = function (contentAreaBox, viewportBounds) {\n var x = Math.max(viewportBounds.x, contentAreaBox.x);\n var contentBoxWidth = contentAreaBox.right - x;\n var maxViewportWidth = viewportBounds.width - (x - viewportBounds.x);\n var width = Math.min(contentBoxWidth, maxViewportWidth);\n return {\n x: x,\n width: width\n };\n };\n var getVerticalBounds = function (editor, contentAreaBox, viewportBounds, isToolbarLocationTop) {\n var container = 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 isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea;\n if (editor.inline && isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom, viewportBounds.y),\n bottom: viewportBounds.bottom\n };\n }\n if (editor.inline && !isToolbarAbove) {\n return {\n y: viewportBounds.y,\n bottom: Math.min(headerBox.y, viewportBounds.bottom)\n };\n }\n var containerBounds = box(container);\n if (isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom, viewportBounds.y),\n bottom: Math.min(containerBounds.bottom, viewportBounds.bottom)\n };\n }\n return {\n y: Math.max(containerBounds.y, viewportBounds.y),\n bottom: Math.min(headerBox.y, viewportBounds.bottom)\n };\n };\n var getContextToolbarBounds = function (editor, sharedBackstage) {\n var viewportBounds = getBounds(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 isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n var _b = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop), y = _b.y, bottom = _b.bottom;\n return bounds$1(x, y, width, bottom - y);\n }\n };\n\n var matchTargetWith = function (elem, candidates) {\n var ctxs = filter(candidates, function (toolbarApi) {\n return toolbarApi.predicate(elem.dom());\n });\n var _a = partition(ctxs, function (t) {\n return t.type === 'contexttoolbar';\n }), pass = _a.pass, fail = _a.fail;\n return {\n contextToolbars: pass,\n contextForms: fail\n };\n };\n var filterByPositionForStartNode = function (toolbars) {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n var doesPositionExist = function (value) {\n return exists(toolbars, function (t) {\n return t.position === value;\n });\n };\n var filterToolbarsByPosition = function (value) {\n return filter(toolbars, function (t) {\n return t.position === value;\n });\n };\n var hasSelectionToolbars = doesPositionExist('selection');\n var hasNodeToolbars = doesPositionExist('node');\n if (hasSelectionToolbars || hasNodeToolbars) {\n if (hasNodeToolbars && hasSelectionToolbars) {\n var nodeToolbars = filterToolbarsByPosition('node');\n var selectionToolbars = map(filterToolbarsByPosition('selection'), function (t) {\n return __assign(__assign({}, t), { position: 'node' });\n });\n return nodeToolbars.concat(selectionToolbars);\n } else {\n return hasSelectionToolbars ? filterToolbarsByPosition('selection') : filterToolbarsByPosition('node');\n }\n } else {\n return filterToolbarsByPosition('line');\n }\n }\n };\n var filterByPositionForAncestorNode = function (toolbars) {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n var findPosition_1 = function (value) {\n return find(toolbars, function (t) {\n return t.position === value;\n });\n };\n var basePosition = findPosition_1('selection').orThunk(function () {\n return findPosition_1('node');\n }).orThunk(function () {\n return findPosition_1('line');\n }).map(function (t) {\n return t.position;\n });\n return basePosition.fold(function () {\n return [];\n }, function (pos) {\n return filter(toolbars, function (t) {\n return t.position === pos;\n });\n });\n }\n };\n var matchStartNode = function (elem, nodeCandidates, editorCandidates) {\n var nodeMatches = matchTargetWith(elem, nodeCandidates);\n if (nodeMatches.contextForms.length > 0) {\n return Option.some({\n elem: elem,\n toolbars: [nodeMatches.contextForms[0]]\n });\n } else {\n var editorMatches = matchTargetWith(elem, editorCandidates);\n if (editorMatches.contextForms.length > 0) {\n return Option.some({\n elem: elem,\n toolbars: [editorMatches.contextForms[0]]\n });\n } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n var toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n return Option.some({\n elem: elem,\n toolbars: toolbars\n });\n } else {\n return Option.none();\n }\n }\n };\n var matchAncestor = function (isRoot, startNode, scopes) {\n if (isRoot(startNode)) {\n return Option.none();\n } else {\n return ancestor(startNode, function (ancestorElem) {\n var _a = matchTargetWith(ancestorElem, scopes.inNodeScope), contextToolbars = _a.contextToolbars, contextForms = _a.contextForms;\n var toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n return toolbars.length > 0 ? Option.some({\n elem: ancestorElem,\n toolbars: toolbars\n }) : Option.none();\n }, isRoot);\n }\n };\n var lookup$1 = function (scopes, editor) {\n var rootElem = Element.fromDom(editor.getBody());\n var isRoot = function (elem) {\n return eq$1(elem, rootElem);\n };\n var isOutsideRoot = function (startNode) {\n return !isRoot(startNode) && !contains$2(rootElem, startNode);\n };\n var startNode = Element.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Option.none();\n }\n return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(function () {\n return matchAncestor(isRoot, startNode, scopes);\n });\n };\n\n var categorise = function (contextToolbars, navigate) {\n var forms = {};\n var inNodeScope = [];\n var inEditorScope = [];\n var formNavigators = {};\n var lookupTable = {};\n var registerForm = function (key, 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\n var forwardSlideEvent = generate$1('forward-slide');\n var backSlideEvent = generate$1('backward-slide');\n var changeSlideEvent = generate$1('change-slide-event');\n var resizingClass = 'tox-pop--resizing';\n var renderContextToolbar = function (spec) {\n var stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: function (comp) {\n stack.set([]);\n InlineView.getContent(comp).each(function (c) {\n remove$6(c.element(), 'visibility');\n });\n remove$4(comp.element(), resizingClass);\n remove$6(comp.element(), 'width');\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), function (comp, _se) {\n remove$4(comp.element(), resizingClass);\n remove$6(comp.element(), 'width');\n }),\n run(changeSlideEvent, function (comp, se) {\n 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 icon: rawItem.icon,\n active: rawItem.isSelected(value),\n disabled: disabled,\n onAction: spec.onAction(rawItem)\n }, rawItem.getStylePreview().fold(function () {\n return {};\n }, function (preview) {\n return { meta: { style: preview } };\n })));\n }\n };\n var validate = function (item, response, value) {\n var invalid = item.type === 'formatter' && spec.isInvalid(item);\n if (response === 0) {\n return invalid ? [] : generateItem(item, response, false, value).toArray();\n } else {\n return generateItem(item, response, invalid, value).toArray();\n }\n };\n var validateItems = function (preItems) {\n var value = spec.getCurrentValue();\n var response = spec.shouldHide ? 0 : 1;\n return bind(preItems, function (item) {\n return validate(item, response, value);\n });\n };\n var getFetch = function (backstage, getStyleItems) {\n return function (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 = editor.getParam(settingName, defaults, 'string');\n var data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data: data\n };\n };\n\n var alignMenuItems = [\n {\n title: 'Left',\n icon: 'align-left',\n format: 'alignleft',\n command: 'JustifyLeft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter',\n command: 'JustifyCenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright',\n command: 'JustifyRight'\n },\n {\n title: 'Justify',\n icon: 'align-justify',\n format: 'alignjustify',\n command: 'JustifyFull'\n }\n ];\n var getSpec = function (editor) {\n var getMatchingValue = function () {\n return find(alignMenuItems, function (item) {\n return editor.formatter.match(item.format);\n });\n };\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (_format) {\n return function () {\n return 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] = extras.backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop, _a);\n switch (getToolbarMode(editor)) {\n case ToolbarMode.floating:\n return renderFloatingToolbarButton(s, extras.backstage, identify, attributes);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n }),\n styleSelectButton: function (editor, extras) {\n return createStyleSelect(editor, extras.backstage);\n },\n fontsizeSelectButton: function (editor, extras) {\n return createFontsizeSelect(editor, extras.backstage);\n },\n fontSelectButton: function (editor, extras) {\n return createFontSelect(editor, extras.backstage);\n },\n formatButton: function (editor, extras) {\n return createFormatSelect(editor, extras.backstage);\n },\n alignMenuButton: function (editor, extras) {\n return createAlignSelect(editor, extras.backstage);\n }\n };\n var extractFrom = function (spec, extras, editor) {\n return get(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, extras.backstage.shared);\n };\n var isRangeOverlapping = function (aTop, aBottom, bTop, bBottom) {\n return Math.max(aTop, bTop) <= Math.min(aBottom, bBottom);\n };\n var getLastElementVerticalBound = function () {\n var nodeBounds = lastElement.get().filter(function (ele) {\n return inBody(Element.fromDom(ele));\n }).map(function (ele) {\n return ele.getBoundingClientRect();\n }).getOrThunk(function () {\n return editor.selection.getRng().getBoundingClientRect();\n });\n var diffTop = editor.inline ? get$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 categorise(registryContextToolbars, function (toolbarApi) {\n var alloySpec = buildToolbar([toolbarApi]);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n });\n });\n var buildContextToolbarGroups = function (allButtons, ctx) {\n return identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras, Option.some(['form:']));\n };\n var buildContextMenuGroups = function (ctx, providers) {\n return ContextForm.buildInitGroups(ctx, providers);\n };\n var buildToolbar = function (toolbars) {\n var buttons = editor.ui.registry.getAll().buttons;\n var scopes = getScopes();\n var allButtons = __assign(__assign({}, buttons), scopes.formNavigators);\n var toolbarType = getToolbarMode(editor) === ToolbarMode.scrolling ? ToolbarMode.scrolling : ToolbarMode.default;\n var initGroups = flatten(map(toolbars, function (ctx) {\n return ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, ctx) : buildContextMenuGroups(ctx, extras.backstage.shared.providers);\n }));\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: initGroups,\n onEscape: Option.none,\n cyclicKeying: true,\n providers: extras.backstage.shared.providers\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[0].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 lookup$1(scopes, editor).fold(function () {\n lastAnchor.set(Option.none());\n InlineView.hide(contextbar);\n }, function (info) {\n launchContext(info.toolbars, 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\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\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 (_left) {\n return box$1.x - offsetBox_1.x;\n }), get(position.style, 'top').map(function (_top) {\n return box$1.y - offsetBox_1.y;\n }), get(position.style, 'right').map(function (_right) {\n return offsetBox_1.right - box$1.right;\n }), get(position.style, 'bottom').map(function (_bottom) {\n return offsetBox_1.bottom - box$1.bottom;\n }))));\n default:\n return Option.none();\n }\n });\n };\n var morphToOriginal = function (elem, viewport, state) {\n return getPrior(elem, state).filter(function (box) {\n return isVisibleForModes(state.getModes(), box, viewport);\n }).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n var morphToFixed = function (elem, viewport, state) {\n var box$1 = box(elem);\n if (!isVisibleForModes(state.getModes(), box$1, viewport)) {\n storePrior(elem, box$1, state);\n var winBox = win();\n var left = box$1.x - winBox.x;\n var top = 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, viewport, state) {\n var elem = component.element();\n var isDocked = getRaw(elem, 'position').is('fixed');\n return isDocked ? morphToOriginal(elem, viewport, state) : morphToFixed(elem, viewport, state);\n };\n var getMorphToOriginal = function (component, state) {\n var elem = component.element();\n return getPrior(elem, state).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n\n var morphToStatic = function (component, config) {\n each([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], function (prop) {\n return remove$6(component.element(), prop);\n });\n config.onUndocked(component);\n };\n var morphToCoord = function (component, config, position) {\n applyPositionCss(component.element(), position);\n var method = position.position() === 'fixed' ? config.onDocked : config.onUndocked;\n method(component);\n };\n var updateVisibility = function (component, config, state, viewport, morphToDocked) {\n if (morphToDocked === void 0) {\n morphToDocked = false;\n }\n config.contextual.each(function (contextInfo) {\n contextInfo.lazyContext(component).each(function (box) {\n var isVisible = isPartiallyVisible(box, viewport);\n if (isVisible !== state.isVisible()) {\n state.setVisible(isVisible);\n if (morphToDocked && !isVisible) {\n add$3(component.element(), [contextInfo.fadeOutClass]);\n contextInfo.onHide(component);\n } else {\n var method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n var refreshInternal = function (component, config, state) {\n var viewport = config.lazyViewport(component);\n var isDocked = state.isDocked();\n if (isDocked) {\n updateVisibility(component, config, state, viewport);\n }\n getMorph(component, viewport, state).each(function (morph) {\n state.setDocked(!isDocked);\n morph.fold(function () {\n return morphToStatic(component, config);\n }, function (position) {\n return morphToCoord(component, config, position);\n }, function (position) {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, position);\n });\n });\n };\n var resetInternal = function (component, config, state) {\n var elem = component.element();\n state.setDocked(false);\n getMorphToOriginal(component, state).each(function (morph) {\n morph.fold(function () {\n return morphToStatic(component, config);\n }, function (position) {\n return morphToCoord(component, config, position);\n }, noop);\n });\n state.setVisible(true);\n config.contextual.each(function (contextInfo) {\n remove$5(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n var refresh$4 = function (component, config, state) {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n var reset = function (component, config, state) {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n var isDocked = function (component, config, state) {\n return state.isDocked();\n };\n var setModes = function (component, config, state, modes) {\n return state.setModes(modes);\n };\n var getModes = function (component, config, state) {\n return state.getModes();\n };\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset,\n isDocked: isDocked,\n getModes: getModes,\n setModes: setModes\n });\n\n var events$f = function (dockInfo, dockState) {\n return derive([\n runOnSource(transitionend(), function (component, simulatedEvent) {\n dockInfo.contextual.each(function (contextInfo) {\n if (has$2(component.element(), contextInfo.transitionClass)) {\n remove$5(component.element(), [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n var notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run(windowScroll(), function (component, _) {\n refresh$4(component, dockInfo, dockState);\n }),\n run(windowResize(), function (component, _) {\n reset(component, dockInfo, dockState);\n })\n ]);\n };\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n var DockingSchema = [\n optionObjOf('contextual', [\n strictString('fadeInClass'),\n strictString('fadeOutClass'),\n strictString('transitionClass'),\n strictFunction('lazyContext'),\n onHandler('onShow'),\n onHandler('onShown'),\n onHandler('onHide'),\n onHandler('onHidden')\n ]),\n defaultedFunction('lazyViewport', win),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n var init$b = function (spec) {\n var docked = Cell(false);\n var visible = Cell(true);\n var initialBounds = Cell(Option.none());\n var modes = Cell(spec.modes);\n var readState = function () {\n return 'docked: ' + docked.get() + ', visible: ' + visible.get() + ', modes: ' + modes.get().join(',');\n };\n return nu$5({\n isDocked: docked.get,\n setDocked: docked.set,\n getInitialPosition: initialBounds.get,\n setInitialPosition: initialBounds.set,\n isVisible: visible.get,\n setVisible: visible.set,\n getModes: modes.get,\n setModes: modes.set,\n readState: readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$b\n });\n\n var Docking = create$1({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n var visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n var editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n var editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n var scrollFromBehindHeader = function (e, containerHeader) {\n var doc = owner(containerHeader);\n var viewHeight = doc.dom().defaultView.innerHeight;\n var scrollPos = get$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 isDockedMode = function (header, mode) {\n return contains(Docking.getModes(header), mode);\n };\n var updateIframeContentFlow = function (header) {\n var getOccupiedHeight = function (elm) {\n return getOuter$1(elm) + (parseInt(get$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-' + Docking.getModes(header)[0];\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$1(focusedElem, activeElm);\n }).filter(function (activeElm) {\n return eq$1(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, sharedBackstage, lazyHeader) {\n if (!editor.inline) {\n if (!sharedBackstage.header.isPositionedAtTop()) {\n editor.on('ResizeEditor', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', function () {\n lazyHeader().each(updateIframeContentFlow);\n });\n editor.on('SkinLoaded', function () {\n lazyHeader().each(function (comp) {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', function (e) {\n lazyHeader().each(function (header) {\n Docking.refresh(header);\n var headerElem = header.element();\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', function () {\n updateEditorClasses(editor, false);\n });\n };\n var isDocked$1 = function (lazyHeader) {\n return lazyHeader().map(Docking.isDocked).getOr(false);\n };\n var getIframeBehaviours = function () {\n var _a;\n return [Receiving.config({ channels: (_a = {}, _a[toolbarHeightChange()] = { onReceive: updateIframeContentFlow }, _a) })];\n };\n var getBehaviours$2 = function (editor, sharedBackstage) {\n var focusedElm = Cell(Option.none());\n var lazySink = sharedBackstage.getSink;\n var runOnSinkElement = function (f) {\n lazySink().each(function (sink) {\n return f(sink.element());\n });\n };\n var onDockingSwitch = function (comp) {\n if (!editor.inline) {\n updateIframeContentFlow(comp);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(function (sink) {\n return sink.getSystem().broadcastOn([repositionPopups()], {});\n });\n };\n var additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n return __spreadArrays([\n Focusing.config({}),\n Docking.config({\n contextual: __assign({\n lazyContext: function (comp) {\n var headerHeight = getOuter$1(comp.element());\n var container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n var box$1 = box(Element.fromDom(container));\n var boxHeight = box$1.height - headerHeight;\n var topBound = box$1.y + (isDockedMode(comp, 'top') ? 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: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n })\n ], additionalBehaviours);\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$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.sharedBackstage))\n };\n };\n\n var factory$g = function (detail, spec) {\n var setMenus = function (comp, menus) {\n var newMenus = map(menus, function (m) {\n var buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: function (callback) {\n callback(m.getItems());\n }\n };\n var internal = createMenuButton(buttonSpec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, 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$1(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(function (activeComp) {\n comp.getSystem().getByDom(hoveredButton).each(function (hoveredComp) {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run(focusShifted(), function (comp, se) {\n se.event().prevFocus().bind(function (prev) {\n return comp.getSystem().getByDom(prev).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 '<alloy.field.' + name + '>';\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$2({\n getSlotNames: function (apis, c) {\n return apis.getSlotNames(c);\n },\n getSlot: function (apis, c, key) {\n return apis.getSlot(c, key);\n },\n isShowing: function (apis, c, key) {\n return apis.isShowing(c, key);\n },\n hideSlot: function (apis, c, key) {\n return apis.hideSlot(c, key);\n },\n hideAllSlots: function (apis, c) {\n return apis.hideAllSlots(c);\n },\n showSlot: function (apis, c, key) {\n return apis.showSlot(c, key);\n }\n }, function (value) {\n return makeApi(value);\n });\n var SlotContainer = __assign(__assign({}, slotApis), { sketch: sketch$2 });\n\n var sidebarSchema = objOf([\n optionString('icon'),\n optionString('tooltip'),\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ]);\n var createSidebar = function (spec) {\n return asRaw('sidebar', sidebarSchema, spec);\n };\n\n var setup$6 = function (editor) {\n var sidebars = editor.ui.registry.getAll().sidebars;\n each(keys(sidebars), function (name) {\n var spec = sidebars[name];\n var isActive = function () {\n return 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('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>') }],\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 providers: spec.providers,\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 providers: spec.providers,\n moreDrawerData: {\n lazyToolbar: spec.lazyToolbar,\n lazyMoreButton: spec.lazyMoreButton,\n lazyHeader: spec.lazyHeader\n },\n attributes: spec.attributes\n };\n return renderer(toolbarSpec);\n }\n },\n name: 'toolbar',\n schema: [\n strict$1('dom'),\n strict$1('onEscape'),\n strict$1('getSink')\n ]\n });\n var partHeader = partType$1.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [strict$1('dom')]\n });\n var partSocket = partType$1.optional({\n name: 'socket',\n schema: [strict$1('dom')]\n });\n var partSidebar = partType$1.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [strict$1('dom')]\n });\n var partThrobber = partType$1.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [strict$1('dom')]\n });\n var OuterContainer = composite$1({\n name: 'OuterContainer',\n factory: factory$h,\n configFields: [\n strict$1('dom'),\n strict$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n partThrobber\n ],\n apis: {\n getSocket: function (apis, comp) {\n return apis.getSocket(comp);\n },\n setSidebar: function (apis, comp, panelConfigs) {\n apis.setSidebar(comp, panelConfigs);\n },\n toggleSidebar: function (apis, comp, name) {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: function (apis, comp) {\n return apis.whichSidebar(comp);\n },\n getHeader: function (apis, comp) {\n return apis.getHeader(comp);\n },\n getToolbar: function (apis, comp) {\n return apis.getToolbar(comp);\n },\n setToolbar: function (apis, comp, grps) {\n var groups = map(grps, function (grp) {\n return renderToolbarGroup(grp);\n });\n apis.setToolbar(comp, groups);\n },\n setToolbars: function (apis, comp, ts) {\n var renderedToolbars = map(ts, function (g) {\n return map(g, renderToolbarGroup);\n });\n apis.setToolbars(comp, renderedToolbars);\n },\n refreshToolbar: function (apis, comp) {\n return apis.refreshToolbar(comp);\n },\n 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 fireSkinLoaded(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var fireSkinLoadError$1 = function (editor, err) {\n return function () {\n return fireSkinLoadError(editor, { message: err });\n };\n };\n\n var 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 editor.ui.styleSheetLoader.load(skinUiCss, fireSkinLoaded$1(editor), fireSkinLoadError$1(editor, 'Skin could not be loaded'));\n } else {\n fireSkinLoaded$1(editor)();\n }\n };\n var iframe = curry(loadSkin, false);\n var inline = curry(loadSkin, true);\n\n var setToolbar = function (editor, uiComponents, rawUiConfig, backstage) {\n var comp = uiComponents.outerContainer;\n var toolbarConfig = rawUiConfig.toolbar;\n var toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n var toolbars = toolbarConfig.map(function (t) {\n var config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, { backstage: backstage }, 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$5.DOM;\n var detection = detect$3();\n var isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n var setupEvents = function (editor, uiComponents) {\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 resizeWindow = function () {\n var outer = lastWindowDimensions.get();\n if (outer.left() !== contentWindow.innerWidth || outer.top() !== contentWindow.innerHeight) {\n lastWindowDimensions.set(Position(contentWindow.innerWidth, contentWindow.innerHeight));\n fireResizeContent(editor);\n }\n };\n var resizeDocument = function () {\n var docEle = editor.getDoc().documentElement;\n var inner = lastDocumentDimensions.get();\n if (inner.left() !== docEle.offsetWidth || inner.top() !== docEle.offsetHeight) {\n lastDocumentDimensions.set(Position(docEle.offsetWidth, docEle.offsetHeight));\n fireResizeContent(editor);\n }\n };\n var scroll = function (e) {\n return fireScrollContent(editor, e);\n };\n DOM.bind(contentWindow, 'resize', resizeWindow);\n DOM.bind(contentWindow, 'scroll', scroll);\n var elementLoad = capture$1(Element.fromDom(editor.getBody()), 'load', resizeDocument);\n var mothership = uiComponents.uiMothership.element();\n editor.on('hide', function () {\n set$2(mothership, 'display', 'none');\n });\n editor.on('show', function () {\n remove$6(mothership, 'display');\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', function () {\n elementLoad.unbind();\n DOM.unbind(contentWindow, 'resize', resizeWindow);\n DOM.unbind(contentWindow, 'scroll', scroll);\n });\n };\n var render = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var lastToolbarWidth = Cell(0);\n iframe(editor);\n var eTargetNode = Element.fromDom(args.targetNode);\n var uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, uiComponents.mothership);\n attachSystem(uiRoot, uiComponents.uiMothership);\n editor.on('PostRender', function () {\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(uiComponents.outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setSidebar(uiComponents.outerContainer, rawUiConfig.sidebar);\n setupEvents(editor, uiComponents);\n });\n var socket = OuterContainer.getSocket(uiComponents.outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12) {\n setAll$1(socket.element(), {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n var limit = first(function () {\n editor.fire('ScrollContent');\n }, 20);\n 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\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render\n });\n\n var revocable = function (doRevoke) {\n var subject = Cell(Option.none());\n var revoke = function () {\n subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Option.none());\n };\n var set = function (s) {\n revoke();\n subject.set(Option.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n isSet: isSet,\n set: set\n };\n };\n var unbindable = function () {\n return revocable(function (s) {\n s.unbind();\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 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\n var getHeight$1 = function (editor) {\n var baseHeight = getHeightSetting(editor);\n var minHeight = getMinHeightSetting(editor);\n var maxHeight = getMaxHeightSetting(editor);\n return parseToInt(baseHeight).map(function (height) {\n return calcCappedSize(height, minHeight, maxHeight);\n });\n };\n var getHeightWithFallback = function (editor) {\n var height = getHeight$1(editor);\n return height.getOr(getHeightSetting(editor));\n };\n var getWidth$1 = function (editor) {\n var baseWidth = getWidthSetting(editor);\n var minWidth = getMinWidthSetting(editor);\n var maxWidth = getMaxWidthSetting(editor);\n return parseToInt(baseWidth).map(function (width) {\n return calcCappedSize(width, minWidth, maxWidth);\n });\n };\n var getWidthWithFallback = function (editor) {\n var width = getWidth$1(editor);\n return width.getOr(getWidthSetting(editor));\n };\n\n var InlineHeader = function (editor, targetElm, uiComponents, backstage, floatContainer) {\n var uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var DOM = global$5.DOM;\n var useFixedToolbarContainer = useFixedContainer(editor);\n var isSticky = isStickyToolbar(editor);\n var editorMaxWidthOpt = getMaxWidthSetting(editor).or(getWidth$1(editor));\n var headerBackstage = backstage.shared.header;\n var isPositionedAtTop = headerBackstage.isPositionedAtTop;\n var toolbarMode = getToolbarMode(editor);\n var isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n var visible = Cell(false);\n var isVisible = function () {\n return visible.get() && !editor.removed;\n };\n var calcToolbarOffset = function (toolbar) {\n return isSplitToolbar ? toolbar.fold(function () {\n return 0;\n }, function (tbar) {\n return tbar.components().length > 1 ? get$6(tbar.components()[1].element()) : 0;\n }) : 0;\n };\n var calcMode = function (container) {\n switch (getToolbarLocation(editor)) {\n case ToolbarLocation.auto:\n var toolbar_1 = OuterContainer.getToolbar(outerContainer);\n var offset = calcToolbarOffset(toolbar_1);\n var toolbarHeight = get$6(container.element()) - offset;\n var targetBounds = box(targetElm);\n var roomAtTop = targetBounds.y > toolbarHeight;\n if (roomAtTop) {\n return 'top';\n } else {\n var doc = documentElement(targetElm);\n var docHeight = Math.max(doc.dom().scrollHeight, get$6(doc));\n var roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n if (roomAtBottom) {\n return 'bottom';\n } else {\n var winBounds = win();\n var isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight;\n return isRoomAtBottomViewport ? 'bottom' : 'top';\n }\n }\n case ToolbarLocation.bottom:\n return 'bottom';\n case ToolbarLocation.top:\n default:\n return 'top';\n }\n };\n var setupMode = function (mode) {\n var container = floatContainer.get();\n Docking.setModes(container, [mode]);\n headerBackstage.setDockingMode(mode);\n var verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n set$1(container.element(), Attribute, verticalDir);\n };\n var updateChromeWidth = function () {\n var maxWidth = editorMaxWidthOpt.getOrThunk(function () {\n var bodyMargin = parseToInt(get$4(body(), 'margin-left')).getOr(0);\n return get$7(body()) - absolute(targetElm).left() + bodyMargin;\n });\n set$2(floatContainer.get().element(), 'max-width', maxWidth + 'px');\n };\n var updateChromePosition = function () {\n var toolbar = OuterContainer.getToolbar(outerContainer);\n var offset = calcToolbarOffset(toolbar);\n var targetBounds = box(targetElm);\n var top = isPositionedAtTop() ? Math.max(targetBounds.y - get$6(floatContainer.get().element()) + offset, 0) : targetBounds.bottom;\n setAll$1(outerContainer.element(), {\n position: 'absolute',\n top: Math.round(top) + 'px',\n left: Math.round(targetBounds.x) + 'px'\n });\n };\n var repositionPopups$1 = function () {\n uiMothership.broadcastOn([repositionPopups()], {});\n };\n var updateChromeUi = function (resetDocking) {\n if (resetDocking === void 0) {\n resetDocking = false;\n }\n if (!isVisible()) {\n return;\n }\n if (!useFixedToolbarContainer) {\n updateChromeWidth();\n }\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(outerContainer);\n }\n if (!useFixedToolbarContainer) {\n updateChromePosition();\n }\n if (isSticky) {\n var floatContainerComp = floatContainer.get();\n resetDocking ? Docking.reset(floatContainerComp) : Docking.refresh(floatContainerComp);\n }\n repositionPopups$1();\n };\n var updateMode = function (updateUi) {\n if (updateUi === void 0) {\n updateUi = true;\n }\n if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n return;\n }\n var currentMode = headerBackstage.getDockingMode();\n var newMode = calcMode(floatContainer.get());\n if (newMode !== currentMode) {\n setupMode(newMode);\n if (updateUi) {\n updateChromeUi(true);\n }\n }\n };\n var show = function () {\n visible.set(true);\n set$2(outerContainer.element(), 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n remove$6(uiMothership.element(), 'display');\n updateMode(false);\n updateChromeUi();\n };\n var hide = function () {\n visible.set(false);\n if (uiComponents.outerContainer) {\n set$2(outerContainer.element(), 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n set$2(uiMothership.element(), 'display', 'none');\n };\n return {\n isVisible: isVisible,\n isPositionedAtTop: isPositionedAtTop,\n show: show,\n hide: hide,\n update: updateChromeUi,\n updateMode: updateMode,\n repositionPopups: repositionPopups$1\n };\n };\n\n var getTargetPosAndBounds = function (targetElm, isToolbarTop) {\n var bounds = box(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds: bounds\n };\n };\n var setupEvents$1 = function (editor, targetElm, ui) {\n var prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n var resizeContent = function (e) {\n var _a = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()), pos = _a.pos, bounds = _a.bounds;\n var _b = prevPosAndBounds.get(), prevPos = _b.pos, prevBounds = _b.bounds;\n var hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos: pos,\n bounds: bounds\n });\n if (hasResized) {\n fireResizeContent(editor, e);\n }\n if (ui.isVisible()) {\n if (prevPos !== pos) {\n ui.update(true);\n } else if (hasResized) {\n ui.updateMode();\n ui.repositionPopups();\n }\n }\n };\n editor.on('activate', ui.show);\n editor.on('deactivate', ui.hide);\n editor.on('SkinLoaded ResizeWindow', function () {\n return ui.update(true);\n });\n editor.on('NodeChange keydown', function (e) {\n global$2.requestAnimationFrame(function () {\n return resizeContent(e);\n });\n });\n editor.on('ScrollWindow', function () {\n return ui.updateMode();\n });\n var elementLoad = unbindable();\n elementLoad.set(capture$1(Element.fromDom(editor.getBody()), 'load', resizeContent));\n editor.on('remove', function () {\n elementLoad.clear();\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 = Cell(null);\n var targetElm = Element.fromDom(args.targetNode);\n var ui = InlineHeader(editor, targetElm, uiComponents, backstage, floatContainer);\n inline(editor);\n var render = function () {\n if (floatContainer.get()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(outerContainer).getOrDie());\n var uiContainer = getUiContainer(editor);\n attachSystem(uiContainer, mothership);\n attachSystem(uiContainer, uiMothership);\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n ui.show();\n setupEvents$1(editor, targetElm, ui);\n editor.nodeChanged();\n };\n editor.on('focus show', render);\n editor.on('blur hide', ui.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\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n var register$5 = function (editor) {\n var alignToolbarButtons = [\n {\n name: 'alignleft',\n text: 'Align left',\n cmd: 'JustifyLeft',\n icon: 'align-left'\n },\n {\n name: 'aligncenter',\n text: 'Align center',\n cmd: 'JustifyCenter',\n icon: 'align-center'\n },\n {\n name: 'alignright',\n text: 'Align right',\n cmd: 'JustifyRight',\n icon: 'align-right'\n },\n {\n name: 'alignjustify',\n text: 'Justify',\n cmd: 'JustifyFull',\n icon: 'align-justify'\n }\n ];\n global$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\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\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\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\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\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\n var setup$8 = function (editor, backstage) {\n register$5(editor);\n register$6(editor);\n register$a(editor, backstage);\n register$7(editor);\n register$1(editor);\n register$8(editor);\n register$9(editor);\n };\n\n var nu$d = function (x, y) {\n return {\n anchor: 'makeshift',\n x: x,\n y: y\n };\n };\n var transpose$1 = function (pos, dx, dy) {\n return nu$d(pos.x + dx, pos.y + dy);\n };\n var isTouchEvent$1 = function (e) {\n return e.type === 'longpress' || e.type.indexOf('touch') === 0;\n };\n var fromPageXY = function (e) {\n if (isTouchEvent$1(e)) {\n var touch = e.touches[0];\n return nu$d(touch.pageX, touch.pageY);\n } else {\n return nu$d(e.pageX, e.pageY);\n }\n };\n var fromClientXY = function (e) {\n if (isTouchEvent$1(e)) {\n var touch = e.touches[0];\n return nu$d(touch.clientX, touch.clientY);\n } else {\n return nu$d(e.clientX, e.clientY);\n }\n };\n var transposeContentAreaContainer = function (element, pos) {\n var containerPos = global$5.DOM.getPos(element);\n return transpose$1(pos, containerPos.x, containerPos.y);\n };\n var getPointAnchor = function (editor, e) {\n if (e.type === 'contextmenu' || e.type === 'longpress') {\n if (editor.inline) {\n return fromPageXY(e);\n } else {\n return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n }\n } else {\n return getSelectionAnchor(editor);\n }\n };\n var getSelectionAnchor = function (editor) {\n return {\n anchor: 'selection',\n root: 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, backstage.shared));\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.getParam('contextmenu_never_use_native', false, 'boolean');\n };\n var getMenuItems = function (editor, name, defaultItems) {\n var contextMenus = editor.ui.registry.getAll().contextMenus;\n return Option.from(editor.getParam(name)).map(patchPipeConfig).getOrThunk(function () {\n return filter(patchPipeConfig(defaultItems), function (item) {\n return has(contextMenus, item);\n });\n });\n };\n var isContextMenuDisabled = function (editor) {\n return editor.getParam('contextmenu') === false;\n };\n var getContextMenu = function (editor) {\n return getMenuItems(editor, 'contextmenu', 'link linkchecker image imagetools table spellchecker configurepermanentpen');\n };\n\n var isSeparator$1 = function (item) {\n return isString(item) ? item === '|' : item.type === 'separator';\n };\n var separator$3 = { type: 'separator' };\n var makeContextItem = function (item) {\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator$3;\n case 'submenu':\n return {\n type: 'nestedmenuitem',\n text: item.text,\n icon: item.icon,\n getSubmenuItems: function () {\n var items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map(items, makeContextItem);\n }\n }\n };\n default:\n return {\n type: 'menuitem',\n text: item.text,\n icon: item.icon,\n onAction: noarg(item.onAction)\n };\n }\n }\n };\n var addContextMenuGroup = function (xs, groupItems) {\n if (groupItems.length === 0) {\n return xs;\n }\n var lastMenuItem = last(xs).filter(function (item) {\n return !isSeparator$1(item);\n });\n var before = lastMenuItem.fold(function () {\n return [];\n }, function (_) {\n return [separator$3];\n });\n return xs.concat(before).concat(groupItems).concat([separator$3]);\n };\n var generateContextMenu = function (contextMenus, menuConfig, selectedElement) {\n var sections = foldl(menuConfig, function (acc, name) {\n if (has(contextMenus, name)) {\n var items = contextMenus[name].update(selectedElement);\n if (isString(items)) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (items.length > 0) {\n var allItems = map(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n } else {\n return acc.concat([name]);\n }\n }, []);\n if (sections.length > 0 && isSeparator$1(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !shouldNeverUseNative(editor);\n };\n var isTriggeredByKeyboard = function (editor, e) {\n return e.type !== 'longpress' && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n };\n var setup$9 = function (editor, lazySink, backstage) {\n var detection = detect$3();\n var isTouch = detection.deviceType.isTouch;\n var contextmenu = build$1(InlineView.sketch({\n dom: { tag: 'div' },\n lazySink: lazySink,\n onEscape: function () {\n return editor.focus();\n },\n onShow: function () {\n return backstage.setContextMenuState(true);\n },\n onHide: function () {\n return backstage.setContextMenuState(false);\n },\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissContextMenu', [run(dismissRequested(), function (comp, _se) {\n Sandboxing.close(comp);\n editor.focus();\n })])])\n }));\n var hideContextMenu = function (_e) {\n return InlineView.hide(contextmenu);\n };\n var showContextMenu = function (e) {\n if (shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) {\n return;\n }\n var 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 = 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 parseAttrToInt = function (element, name) {\n var value = get$2(element, name);\n return isUndefined(value) ? NaN : parseInt(value, 10);\n };\n var get$e = function (component, snapsInfo) {\n var element = component.element();\n var x = parseAttrToInt(element, snapsInfo.leftAttr);\n var y = parseAttrToInt(element, snapsInfo.topAttr);\n return isNaN(x) || isNaN(y) ? 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: 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: 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 getOpt(root, initialAttribute).fold(function () {\n return remove$6(root, 'z-index');\n }, function (zIndex) {\n return set$2(root, 'z-index', zIndex);\n });\n remove$1(root, initialAttribute);\n });\n };\n var changeZIndex = function (blocker) {\n parent(blocker.element()).filter(isElement).each(function (root) {\n getRaw(root, 'z-index').each(function (zindex) {\n set$1(root, initialAttribute, zindex);\n });\n set$2(root, 'z-index', get$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: function (sConfig) {\n return {\n sensor: sConfig.sensor,\n range: sConfig.range,\n output: sConfig.output,\n extra: Option.from(sConfig.extra)\n };\n }\n },\n state: DragState,\n apis: DraggingApis\n });\n\n var snapWidth = 40;\n var snapOffset = snapWidth / 2;\n var calcSnap = function (selectorOpt, td, x, y, width, height) {\n return selectorOpt.fold(function () {\n return Dragging.snap({\n sensor: absolute$3(x - snapOffset, y - snapOffset),\n range: 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$1(currentTd, td);\n });\n };\n return {\n getSnapPoints: getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: function (component, extra) {\n var td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(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 (detect$3().deviceType.isTouch()) {\n editor.on('TableSelectionChange', function (e) {\n if (!isVisible.get()) {\n attach$1(sink, topLeft);\n attach$1(sink, bottomRight);\n isVisible.set(true);\n }\n startCell.set(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\n var ResizeTypes;\n (function (ResizeTypes) {\n ResizeTypes[ResizeTypes['None'] = 0] = 'None';\n ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';\n ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';\n }(ResizeTypes || (ResizeTypes = {})));\n var getDimensions = function (editor, deltas, resizeType, originalHeight, originalWidth) {\n var dimensions = {};\n dimensions.height = calcCappedSize(originalHeight + deltas.top(), getMinHeightSetting(editor), getMaxHeightSetting(editor));\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = calcCappedSize(originalWidth + deltas.left(), getMinWidthSetting(editor), getMaxWidthSetting(editor));\n }\n return dimensions;\n };\n var resize$3 = function (editor, deltas, resizeType) {\n var container = 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, numToPx(val));\n });\n fireResizeEditor(editor);\n };\n\n var isHidden$1 = function (elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n };\n var renderElementPath = function (editor, settings, providersBackstage) {\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n var getDataPath = function (data) {\n var parts = data || [];\n var newPathElements = map(parts, function (part, index) {\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: {\n 'role': 'button',\n 'data-index': index,\n 'tab-index': -1,\n 'aria-level': index + 1\n },\n innerHtml: part.name\n },\n action: function (_btn) {\n editor.focus();\n editor.selection.select(part.element);\n editor.nodeChanged();\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isReadOnly),\n receivingConfig()\n ])\n });\n });\n var divider = {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true },\n innerHtml: ' ' + settings.delimiter + ' '\n }\n };\n return foldl(newPathElements.slice(1), function (acc, element) {\n var newAcc = acc;\n newAcc.push(divider);\n newAcc.push(element);\n return newAcc;\n }, [newPathElements[0]]);\n };\n var updatePath = function (parents) {\n var newPath = [];\n var i = parents.length;\n while (i-- > 0) {\n var parent_1 = parents[i];\n if (parent_1.nodeType === 1 && !isHidden$1(parent_1)) {\n var args = editor.fire('ResolveName', {\n name: parent_1.nodeName.toLowerCase(),\n target: parent_1\n });\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent_1\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n return newPath;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path'],\n attributes: { role: 'navigation' }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: 'div[role=button]'\n }),\n Disabling.config({ disabled: providersBackstage.isReadOnly }),\n receivingConfig(),\n Tabstopping.config({}),\n Replacing.config({}),\n config('elementPathEvents', [runOnAttached(function (comp, _e) {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', function () {\n return Keying.focusIn(comp);\n });\n editor.on('NodeChange', function (e) {\n var newPath = updatePath(e.parents);\n if (newPath.length > 0) {\n Replacing.set(comp, getDataPath(newPath));\n } else {\n Replacing.set(comp, []);\n }\n });\n })])\n ]),\n components: []\n };\n };\n\n var renderWordCount = function (editor, providersBackstage) {\n var replaceCountText = function (comp, count, mode) {\n return Replacing.set(comp, [text(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\n };\n return Button.sketch({\n dom: {\n tag: 'button',\n classes: ['tox-statusbar__wordcount']\n },\n components: [],\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isReadOnly),\n receivingConfig(),\n Tabstopping.config({}),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: {\n mode: 'words',\n count: {\n words: 0,\n characters: 0\n }\n }\n }\n }),\n config('wordcount-events', [\n runOnExecute(function (comp) {\n var currentVal = Representing.getValue(comp);\n var newMode = currentVal.mode === 'words' ? 'characters' : 'words';\n Representing.setValue(comp, {\n mode: newMode,\n count: currentVal.count\n });\n replaceCountText(comp, currentVal.count, newMode);\n }),\n runOnAttached(function (comp) {\n editor.on('wordCountUpdate', function (e) {\n var mode = Representing.getValue(comp).mode;\n Representing.setValue(comp, {\n mode: mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ]),\n eventOrder: {\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'wordcount-events'\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$6.translate([\n 'Powered by {0}',\n 'Tiny'\n ]);\n var linkHtml = '<a href=\"https://www.tiny.cloud/?utm_campaign=editor_referral&amp;utm_medium=poweredby&amp;utm_source=tinymce&amp;utm_content=v5\" rel=\"noopener\" target=\"_blank\" tabindex=\"-1\" aria-label=\"' + label + '\">' + label + '</a>';\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.getParam('plugins', '', 'string'), 'autoresize');\n var resize = editor.getParam('resize', fallback);\n if (resize === false) {\n return ResizeTypes.None;\n } else if (resize === 'both') {\n return ResizeTypes.Both;\n } else {\n return ResizeTypes.Vertical;\n }\n };\n var getTextComponents = function () {\n var components = [];\n if (editor.getParam('elementpath', true, 'boolean')) {\n components.push(renderElementPath(editor, {}, providersBackstage));\n }\n if (contains$1(editor.getParam('plugins', '', 'string'), '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 isToolbarBottom = isToolbarLocationBottom(editor);\n var dirAttributes = global$6.isRtl() ? { attributes: { dir: 'rtl' } } : {};\n var verticalDirAttributes = { attributes: (_a = {}, _a[Attribute] = isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom, _a) };\n var lazyHeader = function () {\n return lazyOuterContainer.bind(OuterContainer.getHeader);\n };\n var isHeaderDocked = function () {\n return header.isDocked(lazyHeader);\n };\n var 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 providers: backstage.shared.providers,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode,\n lazyToolbar: lazyToolbar,\n lazyHeader: function () {\n return lazyHeader().getOrDie('Could not find header element');\n }\n }, verticalDirAttributes));\n var partMultipleToolbar = OuterContainer.parts()['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n providers: backstage.shared.providers,\n onEscape: function () {\n },\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 sharedBackstage: backstage.shared\n });\n var editorComponents = flatten([\n isToolbarBottom ? [] : [partHeader],\n isInline ? [] : [socketSidebarContainer],\n isToolbarBottom ? [partHeader] : []\n ]);\n var editorContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: editorComponents\n };\n var containerComponents = flatten([\n [editorContainer],\n isInline ? [] : statusbar.toArray(),\n [partThrobber]\n ]);\n var isHidden = isDistractionFree(editor);\n var attributes = __assign(__assign({ role: 'application' }, global$6.isRtl() ? { dir: 'rtl' } : {}), isHidden ? { 'aria-hidden': 'true' } : {});\n var outerContainer = build$1(OuterContainer.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-tinymce'\n ].concat(isInline ? ['tox-tinymce-inline'] : []).concat(isToolbarBottom ? ['tox-tinymce--toolbar-bottom'] : []).concat(deviceClasses).concat(platformClasses),\n styles: __assign({ visibility: 'hidden' }, isHidden ? {\n opacity: '0',\n border: '0'\n } : {}),\n attributes: attributes\n },\n components: containerComponents,\n behaviours: derive$1([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 setup$3(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 = numToPx(getHeightWithFallback(editor));\n var parsedWidth = numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue('div', 'width', parsedWidth)) {\n set$2(outerContainer.element(), 'width', parsedWidth);\n }\n if (isValidValue('div', 'height', parsedHeight)) {\n set$2(outerContainer.element(), 'height', parsedHeight);\n } else {\n set$2(outerContainer.element(), 'height', '200px');\n }\n }\n return parsedHeight;\n };\n var renderUI = function () {\n header.setup(editor, backstage.shared, lazyHeader);\n setup$8(editor, backstage);\n setup$9(editor, lazySink, backstage);\n setup$6(editor);\n setup$7(editor, lazyThrobber, backstage.shared);\n map$2(getToolbarGroups(editor), function (toolbarGroupButtonConfig, name) {\n editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n });\n var _a = editor.ui.registry.getAll(), buttons = _a.buttons, menuItems = _a.menuItems, contextToolbars = _a.contextToolbars, sidebars = _a.sidebars;\n var toolbarOpt = getMultipleToolbarsSetting(editor);\n var rawUiConfig = {\n menuItems: menuItems,\n menus: getMenus(editor),\n menubar: getMenubar(editor),\n toolbar: toolbarOpt.getOrThunk(function () {\n return getToolbar(editor);\n }),\n allowToolbarGroups: toolbarMode === ToolbarMode.floating,\n buttons: buttons,\n sidebar: sidebars\n };\n register$4(editor, contextToolbars, sink, { backstage: backstage });\n setup$a(editor, sink);\n var elm = editor.getElement();\n var height = setEditorSize();\n var uiComponents = {\n mothership: mothership,\n uiMothership: uiMothership,\n outerContainer: outerContainer\n };\n var args = {\n targetNode: elm,\n height: height\n };\n return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n };\n return {\n mothership: mothership,\n uiMothership: uiMothership,\n backstage: backstage,\n renderUI: renderUI,\n getUi: getUi\n };\n };\n\n var describedBy = function (describedElement, describeElement) {\n var describeId = 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 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 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 labelledBy(c.element(), getPartOrDie(c, detail, 'title').element());\n describedBy(c.element(), getPartOrDie(c, detail, 'body').element());\n })])\n ])\n };\n };\n var ModalDialog = composite$1({\n name: 'ModalDialog',\n configFields: schema$x(),\n partFields: parts$f(),\n factory: factory$i,\n apis: {\n show: function (apis, dialog) {\n apis.show(dialog);\n },\n hide: function (apis, dialog) {\n apis.hide(dialog);\n },\n getBody: function (apis, dialog) {\n return apis.getBody(dialog);\n },\n getFooter: function (apis, dialog) {\n return apis.getFooter(dialog);\n },\n setBusy: function (apis, dialog, getBusySpec) {\n apis.setBusy(dialog, getBusySpec);\n },\n setIdle: function (apis, dialog) {\n apis.setIdle(dialog);\n }\n }\n });\n\n var dialogToggleMenuItemSchema = objOf([\n strictString('type'),\n strictString('name')\n ].concat(commonMenuItemFields));\n var dialogToggleMenuItemDataProcessor = boolean;\n\n var 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 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 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 toValidValues = function (values) {\n var errors = [];\n var result = {};\n each$1(values, function (value, name) {\n value.fold(function () {\n errors.push(name);\n }, function (v) {\n result[name] = v;\n });\n });\n return errors.length > 0 ? Result.error(errors) : Result.value(result);\n };\n\n var renderBodyPanel = function (spec, backstage) {\n var memForm = record(Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form'].concat(spec.classes)\n },\n components: map(spec.items, function (item) {\n return interpretInForm(parts, item, backstage);\n })\n };\n }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [memForm.asSpec()]\n }],\n behaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n ComposingConfigs.memento(memForm),\n RepresentingConfigs.memento(memForm, {\n postprocess: function (formValue) {\n return toValidValues(formValue).fold(function (err) {\n 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(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: [craft({\n dom: {\n tag: 'iframe',\n attributes: { src: spec.url }\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n })]\n }],\n behaviours: derive$1([Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n })])\n };\n return ModalDialog.parts().body(bodySpec);\n };\n\n var isTouch = global$8.deviceType.isTouch();\n var hiddenHeader = function (title, close) {\n return {\n dom: {\n tag: 'div',\n styles: { display: 'none' },\n classes: ['tox-dialog__header']\n },\n components: [\n title,\n close\n ]\n };\n };\n var pClose = function (onClose, providersBackstage) {\n return ModalDialog.parts().close(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close')\n }\n },\n action: onClose,\n buttonBehaviours: derive$1([Tabstopping.config({})])\n }));\n };\n var pUntitled = function () {\n return ModalDialog.parts().title({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n innerHtml: '',\n styles: { display: 'none' }\n }\n });\n };\n var pBodyMessage = function (message, providersBackstage) {\n return ModalDialog.parts().body({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [{ dom: fromHtml$2('<p>' + providersBackstage.translate(message) + '</p>') }]\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 !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('<div class=\"' + blockerClass + '\"></div>'),\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: '<svg width=\"24\" height=\"24\" xmlns=\"http://www.w3.org/2000/svg\">' + '<path d=\"M17.953 7.453L13.422 12l4.531 4.547-1.406 1.406L12 ' + '13.422l-4.547 4.531-1.406-1.406L10.578 12 6.047 ' + '7.453l1.406-1.406L12 10.578l4.547-4.531z\" ' + 'fill-rule=\"evenodd\"></path></svg>'\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('<div class=\"tox-dialog__draghandle\"></div>') };\n };\n var renderInlineHeader = function (spec, titleId, providersBackstage) {\n return Container.sketch({\n dom: fromHtml$2('<div class=\"tox-dialog__header\"></div>'),\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('<div class=\"tox-dialog__header\"></div>'),\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('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>') }]\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(), onFocus$1),\n fireApiEvent(formCloseEvent, function (_api, spec) {\n extras.onClose();\n spec.onClose();\n }),\n fireApiEvent(formCancelEvent, function (api, spec, _event, self) {\n spec.onCancel(api);\n emit(self, formCloseEvent);\n }),\n run(formUnblockEvent, function (_c, _se) {\n return extras.onUnblock();\n }),\n run(formBlockEvent, function (_c, se) {\n return extras.onBlock(se.event());\n })\n ];\n };\n var initUrlDialog = function (getInstanceApi, extras) {\n var fireApiEvent = function (eventName, f) {\n return run(eventName, function (c, se) {\n withSpec(c, function (spec, _c) {\n f(getInstanceApi(), spec, se.event(), c);\n });\n });\n };\n var withSpec = function (c, f) {\n Reflecting.getState(c).get().each(function (currentDialog) {\n f(currentDialog, c);\n });\n };\n return __spreadArrays(initCommonEvents(fireApiEvent, extras), [fireApiEvent(formActionEvent, function (api, spec, event) {\n spec.onAction(api, { name: event.name() });\n })]);\n };\n var initDialog = function (getInstanceApi, extras, getSink) {\n var fireApiEvent = function (eventName, f) {\n return run(eventName, function (c, se) {\n withSpec(c, function (spec, _c) {\n f(getInstanceApi(), spec, se.event(), c);\n });\n });\n };\n var withSpec = function (c, f) {\n Reflecting.getState(c).get().each(function (currentDialogInit) {\n f(currentDialogInit.internalDialog, c);\n });\n };\n return __spreadArrays(initCommonEvents(fireApiEvent, extras), [\n fireApiEvent(formSubmitEvent, function (api, spec) {\n return spec.onSubmit(api);\n }),\n fireApiEvent(formChangeEvent, function (api, spec, event) {\n spec.onChange(api, { name: event.name() });\n }),\n fireApiEvent(formActionEvent, function (api, spec, event, component) {\n var focusIn = function () {\n return Keying.focusIn(component);\n };\n var isDisabled = function (focused) {\n return has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(function (val) {\n return val === 'true';\n });\n };\n var 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('<div class=\"tox-dialog__footer\"></div>'),\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$2(menuItemStates, function (cell) {\n return cell.get();\n });\n return __assign(__assign({}, representedValues), menuItemCurrentState);\n };\n var setData = function (newData) {\n withRoot(function (_) {\n var prevData = instanceApi.getData();\n var mergedData = __assign(__assign({}, prevData), newData);\n var newInternalData = validateData(access, mergedData);\n var form = access.getFormWrapper();\n Representing.setValue(form, newInternalData);\n each$1(menuItemStates, function (v, k) {\n if (has(mergedData, k)) {\n v.set(mergedData[k]);\n }\n });\n });\n };\n var disable = function (name) {\n getCompByName(access, name).each(Disabling.disable);\n };\n var enable = function (name) {\n getCompByName(access, name).each(Disabling.enable);\n };\n var focus = function (name) {\n getCompByName(access, name).each(Focusing.focus);\n };\n var block = function (message) {\n if (!isString(message)) {\n throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(function (root) {\n emitWith(root, formBlockEvent, { message: message });\n });\n };\n var unblock = function () {\n withRoot(function (root) {\n emit(root, formUnblockEvent);\n });\n };\n var showTab = function (name) {\n withRoot(function (_) {\n var body = access.getBody();\n var bodyState = Reflecting.getState(body);\n if (bodyState.get().exists(function (b) {\n return b.isTabPanel();\n })) {\n Composing.getCurrent(body).each(function (tabSection) {\n TabSection.showTab(tabSection, name);\n });\n }\n });\n };\n var redial = function (d) {\n withRoot(function (root) {\n var dialogInit = doRedial(d);\n root.getSystem().broadcastOn([dialogChannel], dialogInit);\n root.getSystem().broadcastOn([titleChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([bodyChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([footerChannel], dialogInit.internalDialog);\n instanceApi.setData(dialogInit.initialData);\n });\n };\n var close = function () {\n withRoot(function (root) {\n emit(root, formCloseEvent);\n });\n };\n var instanceApi = {\n getData: getData,\n setData: setData,\n disable: disable,\n enable: enable,\n focus: focus,\n block: block,\n unblock: unblock,\n showTab: showTab,\n redial: redial,\n close: close\n };\n return instanceApi;\n };\n\n var 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 !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 alertDialog = setup$c(extras);\n var confirmDialog = setup$d(extras);\n var open = function (config, params, closeWindow) {\n if (params !== undefined && params.inline === 'toolbar') {\n return openInlineDialog(config, backstage.shared.anchors.inlineDialog(), closeWindow, params.ariaAttrs);\n } else if (params !== undefined && params.inline === 'cursor') {\n return openInlineDialog(config, backstage.shared.anchors.cursor(), closeWindow, params.ariaAttrs);\n } else {\n return openModalDialog(config, closeWindow);\n }\n };\n var openUrl = function (config, closeWindow) {\n return openModalUrlDialog(config, closeWindow);\n };\n var openModalUrlDialog = function (config, closeWindow) {\n var factory = function (contents) {\n var dialog = renderUrlDialog(contents, {\n closeWindow: function () {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, editor, backstage);\n ModalDialog.show(dialog.dialog);\n return dialog.instanceApi;\n };\n return DialogManager.openUrl(factory, config);\n };\n var openModalDialog = function (config, closeWindow) {\n var factory = function (contents, internalInitialData, dataValidator) {\n var initialData = internalInitialData;\n var dialogInit = {\n dataValidator: dataValidator,\n initialData: initialData,\n internalDialog: contents\n };\n var dialog = renderDialog$1(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: function () {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, backstage);\n ModalDialog.show(dialog.dialog);\n dialog.instanceApi.setData(initialData);\n return dialog.instanceApi;\n };\n return DialogManager.open(factory, config);\n };\n var openInlineDialog = function (config$1, anchor, closeWindow, ariaAttrs) {\n var factory = function (contents, internalInitialData, dataValidator) {\n var initialData = validateData$1(internalInitialData, dataValidator);\n var inlineDialog = value$3();\n var isToolbarLocationTop = backstage.shared.header.isPositionedAtTop();\n var dialogInit = {\n dataValidator: dataValidator,\n initialData: initialData,\n internalDialog: contents\n };\n var refreshDocking = function () {\n return inlineDialog.on(function (dialog) {\n InlineView.reposition(dialog);\n Docking.refresh(dialog);\n });\n };\n var dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: function () {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, backstage, ariaAttrs);\n var inlineDialogComp = build$1(InlineView.sketch(__assign(__assign({\n lazySink: backstage.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: {}\n }, isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} }), {\n inlineBehaviours: derive$1(__spreadArrays([config('window-manager-inline-events', [run(dismissRequested(), function (_comp, _se) {\n emit(dialogUi.dialog, formCancelEvent);\n })])], inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop))),\n isExtraPart: function (_comp, target) {\n return isAlertOrConfirmDialog(target);\n }\n })));\n inlineDialog.set(inlineDialogComp);\n InlineView.showWithin(inlineDialogComp, anchor, premade$1(dialogUi.dialog), Option.some(body()));\n if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor', refreshDocking);\n }\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n var confirm = function (message, callback) {\n confirmDialog.open(message, function (state) {\n callback(state);\n });\n };\n var alert = function (message, callback) {\n alertDialog.open(message, function () {\n callback();\n });\n };\n var close = function (instanceApi) {\n instanceApi.close();\n };\n return {\n open: open,\n openUrl: openUrl,\n alert: alert,\n close: close,\n confirm: confirm\n };\n };\n\n function Theme () {\n global$1.add('silver', function (editor) {\n var _a = setup$b(editor), uiMothership = _a.uiMothership, backstage = _a.backstage, renderUI = _a.renderUI, getUi = _a.getUi;\n Autocompleter.register(editor, backstage.shared);\n var windowMgr = setup$e({\n editor: editor,\n backstage: backstage\n });\n return {\n renderUI: renderUI,\n getWindowManagerImpl: constant(windowMgr),\n getNotificationManagerImpl: function () {\n return NotificationManagerImpl(editor, { backstage: backstage }, uiMothership);\n },\n ui: getUi()\n };\n });\n }\n\n Theme();\n\n}(window));\n","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","// Exports the \"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.4.2 (2020-08-17)\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 (t) {\n return !f(t);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var groupBy = function (xs, f) {\n if (xs.length === 0) {\n return [];\n } else {\n var wasType = f(xs[0]);\n var r = [];\n var group = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Option.none();\n };\n var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var 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\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\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 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 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 unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var 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 = cached(function () {\n return PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\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 ELEMENT = 1;\n\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var contains$1 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n var is$1 = is;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var 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 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\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\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$4 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var matchNodeName = function (name) {\n return function (node) {\n return node && node.nodeName.toLowerCase() === name;\n };\n };\n var matchNodeNames = function (regex) {\n return function (node) {\n return node && regex.test(node.nodeName);\n };\n };\n var isTextNode = function (node) {\n return node && node.nodeType === 3;\n };\n var isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n var isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n var isOlNode = matchNodeName('ol');\n var isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n var isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n var isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n var isBr = matchNodeName('br');\n var isFirstChild = function (node) {\n return node.parentNode.firstChild === node;\n };\n var isTextBlock = function (editor, node) {\n return node && !!editor.schema.getTextBlockElements()[node.nodeName];\n };\n var isBlock = function (node, blockElements) {\n return node && node.nodeName in blockElements;\n };\n var isBogusBr = function (dom, node) {\n if (!isBr(node)) {\n return false;\n }\n 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\n var getParentList = function (editor, node) {\n var selectionStart = node || editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));\n };\n var isParentListSelected = function (parentList, selectedBlocks) {\n return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n };\n var findSubLists = function (parentList) {\n return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {\n return isListNode(elm);\n });\n };\n var getSelectedSubLists = function (editor) {\n var parentList = getParentList(editor);\n var selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return global$5.grep(selectedBlocks, function (elm) {\n return isListNode(elm) && parentList !== elm;\n });\n }\n };\n var findParentListItemsNodes = function (editor, elms) {\n var listItemsElms = global$5.map(elms, function (elm) {\n var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return global$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 isListItemNode(block);\n });\n };\n var getSelectedDlItems = function (editor) {\n return filter(getSelectedListItems(editor), isDlItemNode);\n };\n var getClosestListRootElm = function (editor, elm) {\n var parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n return root;\n };\n var findLastParentListNode = function (editor, elm) {\n var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));\n return last(parentLists);\n };\n var getSelectedLists = function (editor) {\n var firstList = findLastParentListNode(editor, editor.selection.getStart());\n var subsequentLists = filter(editor.selection.getSelectedBlocks(), isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n var getSelectedListRoots = function (editor) {\n var selectedLists = getSelectedLists(editor);\n return getUniqueListRoots(editor, selectedLists);\n };\n var getUniqueListRoots = function (editor, lists) {\n var listRoots = map(lists, function (list) {\n return findLastParentListNode(editor, list).getOr(list);\n });\n return global$4.unique(listRoots);\n };\n\n var shouldIndentOnTab = function (editor) {\n return editor.getParam('lists_indent_on_tab', true);\n };\n var getForcedRootBlock = function (editor) {\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n\n var createTextBlock = function (editor, contentNode) {\n var dom = editor.dom;\n var blockElements = editor.schema.getBlockElements();\n var fragment = dom.createFragment();\n var blockName = getForcedRootBlock(editor);\n var node, textBlock, hasContentNode;\n if (blockName) {\n textBlock = dom.create(blockName);\n if (textBlock.tagName === blockName.toUpperCase()) {\n dom.setAttribs(textBlock, getForcedRootBlockAttrs(editor));\n }\n if (!isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n }\n if (contentNode) {\n while (node = contentNode.firstChild) {\n var nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (blockName) {\n if (!textBlock) {\n textBlock = dom.create(blockName);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n } else {\n fragment.appendChild(node);\n }\n }\n }\n }\n if (!blockName) {\n fragment.appendChild(dom.create('br'));\n } else {\n if (!hasContentNode) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n return fragment;\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n\n var 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 supported = isFunction(domGlobals.Element.prototype.attachShadow) && isFunction(domGlobals.Node.prototype.getRootNode);\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 = function (el) {\n return is$1(el, 'OL,UL');\n };\n var hasFirstChildList = function (el) {\n return firstChild(el).map(isList).getOr(false);\n };\n var hasLastChildList = function (el) {\n return lastChild(el).map(isList).getOr(false);\n };\n\n var isIndented = function (entry) {\n return entry.depth > 0;\n };\n var isSelected = function (entry) {\n return entry.isSelected;\n };\n var cloneItemContent = function (li) {\n var children$1 = children(li);\n var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n var createEntry = function (li, depth, isSelected) {\n return parent(li).filter(isElement).map(function (list) {\n return {\n depth: depth,\n dirty: false,\n isSelected: isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone(li),\n listAttributes: clone(list),\n listType: name(list)\n };\n });\n };\n\n var indentEntry = function (indentation, entry) {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n entry.dirty = true;\n };\n\n var cloneListProperties = function (target, source) {\n target.listType = source.listType;\n target.listAttributes = __assign({}, source.listAttributes);\n };\n var cleanListProperties = function (entry) {\n entry.listAttributes = filter$1(entry.listAttributes, function (_value, key) {\n return key !== 'start';\n });\n };\n var closestSiblingEntry = function (entries, start) {\n var depth = entries[start].depth;\n var matches = function (entry) {\n return entry.depth === depth && !entry.dirty;\n };\n var until = function (entry) {\n return entry.depth < depth;\n };\n return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(function () {\n return findUntil(entries.slice(start + 1), matches, until);\n });\n };\n var normalizeEntries = function (entries) {\n each(entries, function (entry, i) {\n closestSiblingEntry(entries, i).fold(function () {\n if (entry.dirty) {\n cleanListProperties(entry);\n }\n }, function (matchingEntry) {\n return cloneListProperties(entry, matchingEntry);\n });\n });\n return entries;\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var parseItem = function (depth, itemSelection, selectionState, item) {\n return firstChild(item).filter(isList).fold(function () {\n itemSelection.each(function (selection) {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n var currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(function (selection) {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n var childListEntries = lastChild(item).filter(isList).map(function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n }).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n }, function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n });\n };\n var parseList = function (depth, itemSelection, selectionState, list) {\n return bind(children(list), function (element) {\n var parser = isList(element) ? parseList : parseItem;\n var newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n };\n var parseLists = function (lists, itemSelection) {\n var selectionState = Cell(false);\n var initialDepth = 0;\n return map(lists, function (list) {\n return {\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n };\n });\n };\n\n var outdentedComposer = function (editor, entries) {\n var normalizedEntries = normalizeEntries(entries);\n return map(normalizedEntries, function (entry) {\n var content = fromElements(entry.content);\n return Element.fromDom(createTextBlock(editor, content.dom()));\n });\n };\n var indentedComposer = function (editor, entries) {\n var normalizedEntries = normalizeEntries(entries);\n return composeList(editor.contentDocument, normalizedEntries).toArray();\n };\n var composeEntries = function (editor, entries) {\n return bind(groupBy(entries, isIndented), function (entries) {\n var groupIsIndented = head(entries).map(isIndented).getOr(false);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n };\n var indentSelectedEntries = function (entries, indentation) {\n each(filter(entries, isSelected), function (entry) {\n return indentEntry(indentation, entry);\n });\n };\n var getItemSelection = function (editor) {\n var selectedListItems = map(getSelectedListItems(editor), 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 removeAndKeepBookmarks = function (targetNode) {\n global$5.each(bookmarks, function (node) {\n targetNode.parentNode.insertBefore(node, li.parentNode);\n });\n DOM.remove(targetNode);\n };\n var bookmarks = DOM.select('span[data-mce-type=\"bookmark\"]', ul);\n var newBlock = createTextBlock(editor, li);\n var tmpRng = DOM.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(ul);\n var fragment = tmpRng.extractContents();\n for (var node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM.insertAfter(fragment, ul);\n }\n DOM.insertAfter(newBlock, ul);\n if (isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM.remove(li);\n if (isEmpty(editor.dom, ul)) {\n DOM.remove(ul);\n }\n };\n\n var outdentDlItem = function (editor, item) {\n if (is$1(item, 'dd')) {\n mutate(item, 'dt');\n } else if (is$1(item, 'dt')) {\n parent(item).each(function (dl) {\n return splitList(editor, dl.dom(), item.dom());\n });\n }\n };\n var indentDlItem = function (item) {\n if (is$1(item, 'dt')) {\n mutate(item, 'dd');\n }\n };\n var dlIndentation = function (editor, indentation, dlItems) {\n if (indentation === 'Indent') {\n each(dlItems, indentDlItem);\n } else {\n each(dlItems, function (item) {\n return outdentDlItem(editor, item);\n });\n }\n };\n\n var getNormalizedPoint = function (container, offset) {\n if (isTextNode(container)) {\n return {\n container: container,\n offset: offset\n };\n }\n var node = global$1.getNode(container, offset);\n if (isTextNode(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && isTextNode(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && isTextNode(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container: container,\n offset: offset\n };\n };\n var normalizeRange = function (rng) {\n var outRng = rng.cloneRange();\n var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n\n var selectionIndentation = function (editor, indentation) {\n var lists = map(getSelectedListRoots(editor), Element.fromDom);\n var dlItems = map(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(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 normalizeRange(rng);\n };\n\n var listToggleActionFromListName = function (listName) {\n switch (listName) {\n case 'UL':\n return 'ToggleUlList';\n case 'OL':\n return 'ToggleOlList';\n case 'DL':\n return 'ToggleDLList';\n }\n };\n\n var isCustomList = function (list) {\n return /\\btox\\-/.test(list.className);\n };\n var listState = function (editor, listName, activate) {\n var nodeChangeHandler = function (e) {\n var inList = findUntil(e.parents, isListNode, isTableCellNode).filter(function (list) {\n return list.nodeName === listName && !isCustomList(list);\n }).isSome();\n activate(inList);\n };\n var parents = editor.dom.getParents(editor.selection.getNode());\n nodeChangeHandler({ parents: parents });\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n\n var updateListStyle = function (dom, el, detail) {\n var type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n var setAttribs = function (elm, attrs) {\n global$5.each(attrs, function (value, key) {\n elm.setAttribute(key, value);\n });\n };\n var updateListAttrs = function (dom, el, detail) {\n setAttribs(el, detail['list-attributes']);\n global$5.each(dom.select('li', el), function (li) {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n var updateListWithDetails = function (dom, el, detail) {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n var removeStyles = function (dom, element, styles) {\n global$5.each(styles, function (style) {\n var _a;\n return dom.setStyle(element, (_a = {}, _a[style] = '', _a));\n });\n };\n var getEndPointNode = function (editor, rng, start, root) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n while (container.parentNode !== root) {\n if (isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {\n return container;\n }\n container = container.parentNode;\n }\n return container;\n };\n var getSelectedTextBlocks = function (editor, rng, root) {\n var textBlocks = [], dom = editor.dom;\n var startNode = getEndPointNode(editor, rng, true, root);\n var endNode = getEndPointNode(editor, rng, false, root);\n var block;\n var siblings = [];\n for (var node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$5.each(siblings, function (node) {\n if (isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || isBr(node)) {\n if (isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n var nextSibling = node.nextSibling;\n if (global$7.isBookmarkNode(node)) {\n if (isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n node.parentNode.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n var hasCompatibleStyle = function (dom, sib, detail) {\n var sibStyle = dom.getStyle(sib, 'list-style-type');\n var detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n var applyList = function (editor, listName, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var rng = editor.selection.getRng();\n var listItemName = 'LI';\n var root = getClosestListRootElm(editor, editor.selection.getStart(true));\n var dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n var bookmark = createBookmark(rng);\n global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {\n var listBlock;\n var sibling = block.previousSibling;\n if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n block.parentNode.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n };\n var isValidLists = function (list1, list2) {\n return list1 && list2 && isListNode(list1) && list1.nodeName === list2.nodeName;\n };\n var hasSameListStyle = function (dom, list1, list2) {\n var targetStyle = dom.getStyle(list1, 'list-style-type', true);\n var style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n var hasSameClasses = function (elm1, elm2) {\n return elm1.className === elm2.className;\n };\n var shouldMerge = function (dom, list1, list2) {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n var mergeWithAdjacentLists = function (dom, listBlock) {\n var sibling, node;\n sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(sibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(sibling);\n }\n };\n var updateList = function (editor, list, listName, detail) {\n if (list.nodeName !== listName) {\n var newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var 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(resolveBookmark(bookmark));\n }\n };\n var hasListStyleDetail = function (detail) {\n return 'list-style-type' in detail;\n };\n var toggleSingleList = function (editor, parentList, listName, detail) {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n var bookmark = createBookmark(editor.selection.getRng(true));\n updateListWithDetails(editor.dom, parentList, detail);\n var newList = editor.dom.rename(parentList, listName);\n mergeWithAdjacentLists(editor.dom, newList);\n editor.selection.setRng(resolveBookmark(bookmark));\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n }\n } else {\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n }\n };\n var toggleList = function (editor, listName, detail) {\n var parentList = getParentList(editor);\n var selectedSubLists = getSelectedSubLists(editor);\n detail = detail ? detail : {};\n if (parentList && selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n\n var DOM$2 = global$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 (isEmpty(dom, parentNode)) {\n DOM$2.remove(parentNode);\n }\n } else {\n DOM$2.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (isListNode(parentNode)) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n }\n }\n };\n var normalizeLists = function (dom, element) {\n global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {\n normalizeList(dom, ul);\n });\n };\n\n var findNextCaretContainer = function (editor, rng, isForward, root) {\n var node = rng.startContainer;\n var offset = rng.startOffset;\n if (isTextNode(node) && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n var nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (node.nodeType === 1) {\n node = global$1.getNode(node, offset);\n }\n var walker = new global$2(node, root);\n if (isForward) {\n if (isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n while (node = walker[isForward ? 'next' : 'prev2']()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (isTextNode(node) && node.data.length > 0) {\n return node;\n }\n }\n };\n var hasOnlyOneBlockChild = function (dom, elm) {\n var childNodes = elm.childNodes;\n return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n var unwrapSingleBlockChild = function (dom, elm) {\n if (hasOnlyOneBlockChild(dom, elm)) {\n dom.remove(elm.firstChild, true);\n }\n };\n var moveChildren = function (dom, fromElm, toElm) {\n var node;\n var targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!isEmpty(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n var mergeLiElements = function (dom, fromElm, toElm) {\n var listNode;\n var ul = fromElm.parentNode;\n if (!isChildOfBody(dom, fromElm) || !isChildOfBody(dom, toElm)) {\n return;\n }\n if (isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n var node = toElm.lastChild;\n if (node && isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (isEmpty(dom, toElm, true)) {\n dom.$(toElm).empty();\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));\n var nestedLists = contains ? dom.getParents(fromElm, isListNode, toElm) : [];\n dom.remove(fromElm);\n each(nestedLists, function (list) {\n if (isEmpty(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n editor.dom.$(toLi).empty();\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi);\n };\n var mergeForward = function (editor, rng, fromLi, toLi) {\n var dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n var bookmark = createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n var mergeBackward = function (editor, rng, fromLi, toLi) {\n var bookmark = createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n var resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n var backspaceDeleteFromListToListCaret = function (editor, isForward) {\n var dom = editor.dom, selection = editor.selection;\n var selectionStartElm = selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var li = dom.getParent(selection.getStart(), 'LI', root);\n if (li) {\n var ul = li.parentNode;\n if (ul === editor.getBody() && isEmpty(dom, ul)) {\n return true;\n }\n var rng_1 = normalizeRange(selection.getRng());\n var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng_1, isForward, root), 'LI', root);\n if (otherLi_1 && otherLi_1 !== li) {\n editor.undoManager.transact(function () {\n if (isForward) {\n mergeForward(editor, rng_1, otherLi_1, li);\n } else {\n if (isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng_1, li, otherLi_1);\n }\n }\n });\n return true;\n } else if (!otherLi_1) {\n if (!isForward && rng_1.startOffset === 0 && rng_1.endOffset === 0) {\n editor.undoManager.transact(function () {\n flattenListSelection(editor);\n });\n return true;\n }\n }\n }\n return false;\n };\n var removeBlock = function (dom, block, root) {\n var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n var backspaceDeleteIntoListCaret = function (editor, isForward) {\n var dom = editor.dom;\n var selectionStartElm = editor.selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n var rng = normalizeRange(editor.selection.getRng());\n var otherLi_2 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi_2) {\n editor.undoManager.transact(function () {\n removeBlock(dom, block, root);\n mergeWithAdjacentLists(dom, otherLi_2.parentNode);\n editor.selection.select(otherLi_2, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n var backspaceDeleteCaret = function (editor, isForward) {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n var backspaceDeleteRange = function (editor) {\n var selectionStartElm = editor.selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n if (startListParent || getSelectedListItems(editor).length > 0) {\n editor.undoManager.transact(function () {\n editor.execCommand('Delete');\n normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n var backspaceDelete = function (editor, isForward) {\n return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n };\n var setup = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$3.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$3.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n\n var get = function (editor) {\n return {\n backspaceDelete: function (isForward) {\n backspaceDelete(editor, isForward);\n }\n };\n };\n\n var open = function (editor) {\n var dom = editor.dom;\n var currentList = getParentList(editor);\n if (!isOlNode(currentList)) {\n return;\n }\n editor.windowManager.open({\n title: 'List Properties',\n body: {\n type: 'panel',\n items: [{\n type: 'input',\n name: 'start',\n label: 'Start list at number',\n inputMode: 'numeric'\n }]\n },\n initialData: { start: dom.getAttrib(currentList, 'start') || '1' },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: function (api) {\n var data = api.getData();\n editor.undoManager.transact(function () {\n dom.setAttrib(getParentList(editor), 'start', data.start === '1' ? '' : data.start);\n });\n api.close();\n }\n });\n };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');\n return parentList && parentList.nodeName === listName;\n };\n };\n var register = function (editor) {\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', function (ui, detail) {\n toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', function (ui, detail) {\n toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', function (ui, detail) {\n toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', function () {\n flattenListSelection(editor);\n });\n editor.addCommand('mceListProps', function () {\n open(editor);\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n\n var hasRtcPlugin = function (editor) {\n if (/(^|[ ,])rtc([, ]|$)/.test(editor.getParam('plugins', '', 'string')) && global.get('rtc')) {\n return true;\n } else {\n return false;\n }\n };\n\n var setupTabKey = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(function () {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n var setup$1 = function (editor) {\n if (shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n setup(editor);\n };\n\n var register$1 = function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.getParam('plugins', '', 'string');\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: function (api) {\n return listState(editor, 'OL', api.setActive);\n }\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: function (api) {\n return listState(editor, 'UL', api.setActive);\n }\n });\n }\n };\n\n var register$2 = function (editor) {\n var listProperties = {\n text: 'List properties...',\n icon: 'ordered-list',\n onAction: function () {\n return open(editor);\n },\n onSetup: function (api) {\n return listState(editor, 'OL', function (active) {\n return api.setDisabled(!active);\n });\n }\n };\n editor.ui.registry.addMenuItem('listprops', listProperties);\n editor.ui.registry.addContextMenu('lists', {\n update: function (node) {\n var parentList = getParentList(editor, node);\n return isOlNode(parentList) ? ['listprops'] : [];\n }\n });\n };\n\n function Plugin () {\n global.add('lists', function (editor) {\n if (hasRtcPlugin(editor) === false) {\n setup$1(editor);\n register(editor);\n }\n register$1(editor);\n register$2(editor);\n return get(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.4.2 (2020-08-17)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n\n var nativePush = Array.prototype.push;\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var 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\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');\n\n var getVideoScriptMatch = function (prefixes, src) {\n if (prefixes) {\n for (var i = 0; i < prefixes.length; i++) {\n if (src.indexOf(prefixes[i].filter) !== -1) {\n return prefixes[i];\n }\n }\n }\n };\n\n var DOM = global$2.DOM;\n var trimPx = function (value) {\n return value.replace(/px$/, '');\n };\n var getEphoxEmbedData = function (attrs) {\n var style = attrs.map.style;\n var styles = style ? DOM.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source: attrs.map['data-ephox-embed-iri'],\n altsource: '',\n poster: '',\n width: get(styles, 'max-width').map(trimPx).getOr(''),\n height: get(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n var htmlToData = function (prefixes, html) {\n var isEphoxEmbed = Cell(false);\n var data = {};\n global$3({\n validate: false,\n allow_conditional_comments: true,\n start: function (name, attrs) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n data = getEphoxEmbedData(attrs);\n } else {\n if (!data.source && name === 'param') {\n data.source = attrs.map.movie;\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$1.extend(attrs.map, data);\n }\n if (name === 'script') {\n var videoScript = getVideoScriptMatch(prefixes, attrs.map.src);\n if (!videoScript) {\n return;\n }\n data = {\n type: 'script',\n source: attrs.map.src,\n width: String(videoScript.width),\n height: String(videoScript.height)\n };\n }\n if (name === 'source') {\n if (!data.source) {\n data.source = attrs.map.src;\n } else if (!data.altsource) {\n data.altsource = attrs.map.src;\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = attrs.map.src;\n }\n }\n }\n }).parse(html);\n data.source = data.source || data.src || data.data;\n data.altsource = data.altsource || '';\n data.poster = data.poster || '';\n return data;\n };\n\n var guess = function (url) {\n var mimes = {\n mp3: 'audio/mpeg',\n m4a: 'audio/x-m4a',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n var fileEnd = url.toLowerCase().split('.').pop();\n var mime = mimes[fileEnd];\n return mime ? mime : '';\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.html.Writer');\n\n var DOM$1 = global$2.DOM;\n var addPx = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var setAttributes = function (attrs, updatedAttrs) {\n each$1(updatedAttrs, function (val, name) {\n var value = '' + val;\n if (attrs.map[name]) {\n var i = attrs.length;\n while (i--) {\n var attr = attrs[i];\n if (attr.name === name) {\n if (value) {\n attrs.map[name] = value;\n attr.value = value;\n } else {\n delete attrs.map[name];\n attrs.splice(i, 1);\n }\n }\n }\n } else if (value) {\n attrs.push({\n name: name,\n value: value\n });\n attrs.map[name] = value;\n }\n });\n };\n var updateEphoxEmbed = function (data, attrs) {\n var style = attrs.map.style;\n var styleMap = style ? DOM$1.parseStyle(style) : {};\n styleMap['max-width'] = addPx(data.width);\n styleMap['max-height'] = addPx(data.height);\n setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });\n };\n var sources = [\n 'source',\n 'altsource'\n ];\n var updateHtml = function (html, data, updateAll) {\n var writer = global$5();\n var isEphoxEmbed = Cell(false);\n var sourceCount = 0;\n var hasImage;\n global$3({\n validate: false,\n allow_conditional_comments: true,\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n updateEphoxEmbed(data, attrs);\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n setAttributes(attrs, {\n width: data.width,\n height: data.height\n });\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n setAttributes(attrs, {\n poster: data.poster,\n src: ''\n });\n if (data.altsource) {\n setAttributes(attrs, { src: '' });\n }\n break;\n case 'iframe':\n setAttributes(attrs, { src: data.source });\n break;\n case 'source':\n if (sourceCount < 2) {\n setAttributes(attrs, {\n src: data[sources[sourceCount]],\n type: data[sources[sourceCount] + 'mime']\n });\n if (!data[sources[sourceCount]]) {\n return;\n }\n }\n sourceCount++;\n break;\n case 'img':\n if (!data.poster) {\n return;\n }\n hasImage = true;\n break;\n }\n }\n }\n writer.start(name, attrs, empty);\n },\n end: function (name) {\n if (!isEphoxEmbed.get()) {\n if (name === 'video' && updateAll) {\n for (var index = 0; index < 2; index++) {\n if (data[sources[index]]) {\n var attrs = [];\n attrs.map = {};\n if (sourceCount < index) {\n setAttributes(attrs, {\n src: data[sources[index]],\n type: data[sources[index] + 'mime']\n });\n writer.start('source', attrs, true);\n }\n }\n }\n }\n if (data.poster && name === 'object' && updateAll && !hasImage) {\n var imgAttrs = [];\n imgAttrs.map = {};\n setAttributes(imgAttrs, {\n src: data.poster,\n width: data.width,\n height: data.height\n });\n writer.start('img', imgAttrs, true);\n }\n }\n writer.end(name);\n }\n }, global$4({})).parse(html);\n return writer.getContent();\n };\n\n var urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?title=0&amp;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 '<iframe src=\"' + data.source + '\" width=\"' + data.width + '\" height=\"' + data.height + '\"' + allowFullscreen + '></iframe>';\n };\n var getFlashHtml = function (data) {\n var html = '<object data=\"' + data.source + '\" width=\"' + data.width + '\" height=\"' + data.height + '\" type=\"application/x-shockwave-flash\">';\n if (data.poster) {\n html += '<img src=\"' + data.poster + '\" width=\"' + data.width + '\" height=\"' + data.height + '\" />';\n }\n html += '</object>';\n return html;\n };\n var getAudioHtml = function (data, audioTemplateCallback) {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '<audio controls=\"controls\" src=\"' + data.source + '\">' + (data.altsource ? '\\n<source src=\"' + data.altsource + '\"' + (data.altsourcemime ? ' type=\"' + data.altsourcemime + '\"' : '') + ' />\\n' : '') + '</audio>';\n }\n };\n var getVideoHtml = function (data, videoTemplateCallback) {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '<video width=\"' + data.width + '\" height=\"' + data.height + '\"' + (data.poster ? ' poster=\"' + data.poster + '\"' : '') + ' controls=\"controls\">\\n' + '<source src=\"' + data.source + '\"' + (data.sourcemime ? ' type=\"' + data.sourcemime + '\"' : '') + ' />\\n' + (data.altsource ? '<source src=\"' + data.altsource + '\"' + (data.altsourcemime ? ' type=\"' + data.altsourcemime + '\"' : '') + ' />\\n' : '') + '</video>';\n }\n };\n var getScriptHtml = function (data) {\n return '<script src=\"' + data.source + '\"></script>';\n };\n var dataToHtml = function (editor, dataIn) {\n var data = global$1.extend({}, dataIn);\n if (!data.source) {\n global$1.extend(data, htmlToData(getScripts(editor), data.embed));\n if (!data.source) {\n return '';\n }\n }\n if (!data.altsource) {\n data.altsource = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source = editor.convertURL(data.source, 'source');\n data.altsource = editor.convertURL(data.altsource, 'source');\n data.sourcemime = guess(data.source);\n data.altsourcemime = guess(data.altsource);\n data.poster = editor.convertURL(data.poster, 'poster');\n var pattern = matchPattern(data.source);\n if (pattern) {\n data.source = pattern.url;\n data.type = pattern.type;\n data.allowFullscreen = pattern.allowFullscreen;\n data.width = data.width || String(pattern.w);\n data.height = data.height || String(pattern.h);\n }\n if (data.embed) {\n return updateHtml(data.embed, data, true);\n } else {\n var videoScript = getVideoScriptMatch(getScripts(editor), data.source);\n if (videoScript) {\n data.type = 'script';\n data.width = String(videoScript.width);\n data.height = String(videoScript.height);\n }\n var audioTemplateCallback = getAudioTemplateCallback(editor);\n var videoTemplateCallback = getVideoTemplateCallback(editor);\n data.width = data.width || '300';\n data.height = data.height || '150';\n global$1.each(data, function (value, key) {\n data[key] = editor.dom.encode('' + value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data);\n } else if (data.sourcemime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.sourcemime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else if (data.type === 'script') {\n return getScriptHtml(data);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var cache = {};\n var embedPromise = function (data, dataToHtml, handler) {\n return new global$6(function (res, rej) {\n var wrappedResolve = function (response) {\n if (response.html) {\n cache[data.source] = response;\n }\n return res({\n url: data.source,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source]) {\n wrappedResolve(cache[data.source]);\n } else {\n handler({ url: data.source }, wrappedResolve, rej);\n }\n });\n };\n var defaultPromise = function (data, dataToHtml) {\n return new global$6(function (res) {\n res({\n html: dataToHtml(data),\n url: data.source\n });\n });\n };\n var loadedData = function (editor) {\n return function (data) {\n return dataToHtml(editor, data);\n };\n };\n var getEmbedHtml = function (editor, data) {\n var embedHandler = getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n var isCached = function (url) {\n return cache.hasOwnProperty(url);\n };\n\n var extractMeta = function (sourceInput, data) {\n return get(data, sourceInput).bind(function (mainData) {\n return get(mainData, 'meta');\n });\n };\n var getValue = function (data, metaData, sourceInput) {\n return function (prop) {\n var _a;\n var getFromData = function () {\n return get(data, prop);\n };\n var getFromMetaData = function () {\n return get(metaData, prop);\n };\n var getNonEmptyValue = function (c) {\n return get(c, 'value').bind(function (v) {\n return v.length > 0 ? 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(getScripts(editor), embedSnippet);\n };\n var isMediaElement = function (element) {\n return element.getAttribute('data-mce-object') || element.getAttribute('data-ephox-embed-iri');\n };\n var getEditorData = function (editor) {\n var element = editor.selection.getNode();\n var snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n return __assign({ embed: snippet }, htmlToData(getScripts(editor), snippet));\n };\n var addEmbedHtml = function (api, editor) {\n return function (response) {\n if (isString(response.url) && response.url.trim().length > 0) {\n var html = response.html;\n var snippetData = snippetToData(editor, html);\n var nuData = __assign(__assign({}, snippetData), {\n source: response.url,\n embed: html\n });\n api.setData(wrap(nuData));\n }\n };\n };\n var selectPlaceholder = function (editor, beforeObjects) {\n var afterObjects = editor.dom.select('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(newData.embed, newData);\n if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) {\n handleInsert(editor, newData.embed);\n } else {\n getEmbedHtml(editor, newData).then(function (response) {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n var showDialog = function (editor) {\n var editorData = getEditorData(editor);\n var currentData = Cell(editorData);\n var initialData = wrap(editorData);\n var handleSource = function (prevData, api) {\n var serviceData = unwrap(api.getData(), 'source');\n if (prevData.source !== serviceData.source) {\n addEmbedHtml(win, editor)({\n url: serviceData.source,\n html: ''\n });\n getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }\n };\n var handleEmbed = function (api) {\n var data = unwrap(api.getData());\n var dataFromEmbed = snippetToData(editor, data.embed);\n api.setData(wrap(dataFromEmbed));\n };\n var handleUpdate = function (api, sourceInput) {\n var data = unwrap(api.getData(), sourceInput);\n var embed = dataToHtml(editor, data);\n api.setData(wrap(__assign(__assign({}, data), { embed: embed })));\n };\n var mediaInput = [{\n name: 'source',\n type: 'urlinput',\n filetype: 'media',\n label: 'Source'\n }];\n var sizeInput = !hasDimensions(editor) ? [] : [{\n type: 'sizeinput',\n name: 'dimensions',\n label: 'Constrain proportions',\n constrain: true\n }];\n var generalTab = {\n title: 'General',\n name: 'general',\n items: flatten([\n mediaInput,\n sizeInput\n ])\n };\n var embedTextarea = {\n type: 'textarea',\n name: 'embed',\n label: 'Paste your embed code below:'\n };\n var embedTab = {\n title: 'Embed',\n items: [embedTextarea]\n };\n var advancedFormItems = [];\n if (hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'altsource',\n type: 'urlinput',\n filetype: 'media',\n label: 'Alternative source URL'\n });\n }\n if (hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'urlinput',\n filetype: 'image',\n label: 'Media poster (Image URL)'\n });\n }\n var advancedTab = {\n title: 'Advanced',\n name: 'advanced',\n items: advancedFormItems\n };\n var tabs = [\n generalTab,\n embedTab\n ];\n if (advancedFormItems.length > 0) {\n tabs.push(advancedTab);\n }\n var body = {\n type: 'tabpanel',\n tabs: tabs\n };\n var win = editor.windowManager.open({\n title: 'Insert/Edit Media',\n size: 'normal',\n body: body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: function (api) {\n var serviceData = unwrap(api.getData());\n submitForm(currentData.get(), serviceData, editor);\n api.close();\n },\n onChange: function (api, detail) {\n switch (detail.name) {\n case 'source':\n handleSource(currentData.get(), api);\n break;\n case 'embed':\n handleEmbed(api);\n break;\n case 'dimensions':\n case 'altsource':\n case 'poster':\n handleUpdate(api, detail.name);\n break;\n }\n currentData.set(unwrap(api.getData()));\n },\n initialData: initialData\n });\n };\n\n var get$1 = function (editor) {\n var showDialog$1 = function () {\n showDialog(editor);\n };\n return { showDialog: showDialog$1 };\n };\n\n var register = function (editor) {\n var showDialog$1 = function () {\n showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog$1);\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var sanitize = function (editor, html) {\n if (shouldFilterHtml(editor) === false) {\n return html;\n }\n var writer = global$5();\n var blocked;\n global$3({\n validate: false,\n allow_conditional_comments: false,\n comment: function (text) {\n 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\n var createPlaceholderNode = function (editor, node) {\n var name = node.name;\n var placeHolder = new global$7('img', 1);\n placeHolder.shortEnded = true;\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n 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 name = node.name;\n var 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 var 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 var shimNode = new global$7('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {\n var attrName;\n var attrValue;\n var ai;\n var 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 var innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(sanitize(editor, innerHtml)));\n targetNode.firstChild = null;\n }\n };\n var isPageEmbedWrapper = function (node) {\n var nodeClass = node.attr('class');\n return nodeClass && /\\btiny-pageembed\\b/.test(nodeClass);\n };\n var isWithinEmbedWrapper = function (node) {\n while (node = node.parent) {\n if (node.attr('data-ephox-embed-iri') || isPageEmbedWrapper(node)) {\n return true;\n }\n }\n return false;\n };\n var placeHolderConverter = function (editor) {\n return function (nodes) {\n var i = nodes.length;\n var node;\n var videoScript;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (node.name === 'script') {\n videoScript = getVideoScriptMatch(getScripts(editor), node.attr('src'));\n if (!videoScript) {\n continue;\n }\n }\n if (videoScript) {\n if (videoScript.width) {\n node.attr('width', videoScript.width.toString());\n }\n if (videoScript.height) {\n node.attr('height', videoScript.height.toString());\n }\n }\n if (node.name === 'iframe' && 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\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('</' + name + '[^>]*>', 'gi');\n });\n var boolAttrs = editor.schema.getBoolAttrs();\n global$1.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {\n boolAttrs[name] = {};\n });\n editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', placeHolderConverter(editor));\n editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {\n var i = nodes.length;\n var node;\n var realElm;\n var ai;\n var attribs;\n var innerHtml;\n var innerNode;\n var realElmName;\n var className;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n realElmName = node.attr(name);\n realElm = new global$7(realElmName, 1);\n if (realElmName !== 'audio' && realElmName !== 'script') {\n className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n attribs = node.attributes;\n ai = attribs.length;\n while (ai--) {\n var attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n if (realElmName === 'script') {\n realElm.attr('type', 'text/javascript');\n }\n innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n innerNode = new global$7('#text', 3);\n innerNode.raw = true;\n innerNode.value = sanitize(editor, unescape(innerHtml));\n realElm.append(innerNode);\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('SetContent', function () {\n editor.$('span.mce-preview-object').each(function (index, elm) {\n var $elm = editor.$(elm);\n if ($elm.find('span.mce-shim').length === 0) {\n $elm.append('<span class=\"mce-shim\"></span>');\n }\n });\n });\n };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n var name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n\n var setup$2 = function (editor) {\n editor.on('click keyup touchend', function () {\n var selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectSelected', function (e) {\n var objectType = e.target.getAttribute('data-mce-object');\n if (objectType === '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(html, {\n width: String(e.width),\n height: String(e.height)\n })));\n }\n }\n });\n };\n\n var stateSelectorAdapter = function (editor, selector) {\n return function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind(selector.join(','), buttonApi.setActive).unbind;\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('media', {\n tooltip: 'Insert/edit media',\n icon: 'embed',\n onAction: function () {\n editor.execCommand('mceMedia');\n },\n onSetup: stateSelectorAdapter(editor, [\n 'img[data-mce-object]',\n 'span[data-mce-object]',\n 'div[data-ephox-embed-iri]'\n ])\n });\n editor.ui.registry.addMenuItem('media', {\n icon: 'embed',\n text: 'Media...',\n onAction: function () {\n editor.execCommand('mceMedia');\n }\n });\n };\n\n function Plugin () {\n global.add('media', function (editor) {\n register(editor);\n register$1(editor);\n setup$1(editor);\n setup(editor);\n setup$2(editor);\n return get$1(editor);\n });\n }\n\n Plugin();\n\n}());\n","// 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 \"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');","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=style&index=0&lang=css&\"","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","// Exports the \"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.4.2 (2020-08-17)\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 compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isBoolean = isSimpleType('boolean');\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var range = function (num, f) {\n var r = [];\n for (var i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Option.none();\n };\n var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return 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 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 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 objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var 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 Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var COMMENT = 8;\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n var isDocument = isType$1(DOCUMENT);\n var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT);\n\n var 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 getOpt = function (element, key) {\n return Option.from(get$1(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 = 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 return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim = blank(/^\\s+|\\s+$/g);\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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 documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\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 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 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 unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var 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 = cached(function () {\n return PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? 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 documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var contains$2 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n var is$1 = is;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var defaultView = function (element) {\n return 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 offsetParent = function (element) {\n return Option.from(element.dom().offsetParent).map(Element.fromDom);\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\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos);\n };\n var supported = isFunction(domGlobals.Element.prototype.attachShadow) && isFunction(domGlobals.Node.prototype.getRootNode);\n var isSupported$1 = constant(supported);\n var getRootNode = supported ? function (e) {\n return Element.fromDom(e.dom().getRootNode());\n } : documentOrOwner;\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Option.some(r) : Option.none();\n };\n var getShadowHost = function (e) {\n return Element.fromDom(e.dom().host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported$1() && isNonNullable(event.target)) {\n var el = Element.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(Element.fromDom(event.target))) {\n var eventAny = event;\n if (eventAny.composed && eventAny.composedPath) {\n var composedPath = eventAny.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Option.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom().shadowRoot);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n return getShadowRoot(Element.fromDom(dom)).fold(function () {\n return dom.ownerDocument.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var body = 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 return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n 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 (getOpt(element, 'style').map(trim).is('')) {\n remove(element, 'style');\n }\n };\n var copy = function (source, target) {\n var sourceDom = source.dom();\n var targetDom = target.dom();\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var 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 grid = function (rows, columns) {\n return {\n rows: constant(rows),\n columns: constant(columns)\n };\n };\n var address = function (row, column) {\n return {\n row: constant(row),\n column: constant(column)\n };\n };\n var detail = function (element, rowspan, colspan) {\n return {\n element: constant(element),\n rowspan: constant(rowspan),\n colspan: constant(colspan)\n };\n };\n var detailnew = function (element, rowspan, colspan, isNew) {\n return {\n element: constant(element),\n rowspan: constant(rowspan),\n colspan: constant(colspan),\n isNew: constant(isNew)\n };\n };\n var extended = function (element, rowspan, colspan, row, column) {\n return {\n element: constant(element),\n rowspan: constant(rowspan),\n colspan: constant(colspan),\n row: constant(row),\n column: constant(column)\n };\n };\n var rowdata = function (element, cells, section) {\n return {\n element: constant(element),\n cells: constant(cells),\n section: constant(section)\n };\n };\n var elementnew = function (element, isNew) {\n return {\n element: constant(element),\n isNew: constant(isNew)\n };\n };\n var rowdatanew = function (element, cells, section, isNew) {\n return {\n element: constant(element),\n cells: constant(cells),\n section: constant(section),\n isNew: constant(isNew)\n };\n };\n var rowcells = function (cells, section) {\n return {\n cells: constant(cells),\n section: constant(section)\n };\n };\n var rowdetails = function (details, section) {\n return {\n details: constant(details),\n section: constant(section)\n };\n };\n var bounds = function (startRow, startCol, finishRow, finishCol) {\n return {\n startRow: constant(startRow),\n startCol: constant(startCol),\n finishRow: constant(finishRow),\n finishCol: constant(finishCol)\n };\n };\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var children$1 = function (scope, predicate) {\n return filter(children(scope), predicate);\n };\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var children$2 = function (scope, selector) {\n return children$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n 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 var is$1 = function (element, selector) {\n return is(element, selector);\n };\n return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);\n };\n\n var getAttrValue = function (cell, name, fallback) {\n if (fallback === void 0) {\n fallback = 0;\n }\n return getOpt(cell, name).map(function (value) {\n return parseInt(value, 10);\n }).getOr(fallback);\n };\n var getSpan = function (cell, type) {\n return getAttrValue(cell, type, 1);\n };\n var hasColspan = function (cell) {\n return getSpan(cell, 'colspan') > 1;\n };\n var hasRowspan = function (cell) {\n return getSpan(cell, 'rowspan') > 1;\n };\n var getCssValue = function (element, property) {\n return parseInt(get$2(element, property), 10);\n };\n var minWidth = constant(10);\n var minHeight = constant(10);\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, 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\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 firstLayer(ancestor, 'th,td');\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var rows = function (ancestor) {\n return firstLayer(ancestor, 'tr');\n };\n\n var fromTable = function (table) {\n var rows$1 = rows(table);\n return map(rows$1, 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$1 = map(cells(row), function (cell) {\n var rowspan = getAttrValue(cell, 'rowspan', 1);\n var colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdata(element, cells$1, parentSection);\n });\n };\n var fromPastedRows = function (rows, example) {\n return map(rows, function (row) {\n var cells$1 = map(cells(row), function (cell) {\n var rowspan = getAttrValue(cell, 'rowspan', 1);\n var colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells$1, example.section());\n });\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: grid$1,\n access: access,\n all: cells\n };\n };\n var fromTable$1 = function (table) {\n var list = fromTable(table);\n return generate(list);\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 fromTable: fromTable$1,\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells\n };\n\n var statsStruct = function (minRow, minCol, maxRow, maxCol) {\n return {\n minRow: minRow,\n minCol: minCol,\n maxRow: maxRow,\n maxCol: maxCol\n };\n };\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid.columns();\n var totalRows = house.grid.rows();\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n 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(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(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 = 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 = 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\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 return 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\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 var fromDom$1 = function (nodes) {\n return map(nodes, Element.fromDom);\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\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 isRectangular(warehouse, bounds);\n });\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 getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map(inside, function (detail) {\n return detail.element();\n });\n });\n };\n var parentCell = function (warehouse, innerCell) {\n var isContainedBy = function (c1, c2) {\n return contains$2(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element();\n });\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq(table, firstTable) ? Option.some(first) : parentCell(warehouse, first);\n var optLastCell = eq(table, lastTable) ? Option.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return getBox(warehouse, first, last);\n };\n var getWarehouse = Warehouse.fromTable;\n\n var 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 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 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\n var sharedOne = oneAll;\n var ancestors$3 = ancestors$2;\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return ancestors$3(universe, start, finish, isRoot);\n };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (element) {\n return isRoot !== undefined && isRoot(element) || eq(element, rootTable);\n };\n };\n if (eq(start, finish)) {\n return Option.some({\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({\n boxes: intercepts$1(startTable, start, finish),\n start: start,\n finish: finish\n });\n } else if (contains$2(startTable, finishTable)) {\n var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Option.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n });\n } else if (contains$2(finishTable, startTable)) {\n var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Option.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n });\n } else {\n return ancestors$4(start, finish).shared().bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\n var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Option.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n var retrieve = function (container, selector) {\n var sels = descendants$1(container, selector);\n return sels.length > 0 ? 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 sharedOne$1(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: boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\n return getLast(boxes, lastSelectedSelector).bind(function (last) {\n return moveBy$1(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n var retrieve$1 = function (container, selector) {\n return retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq(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) ? getBox$1(edges.table(), edges.first(), edges.last()) : Option.none();\n });\n });\n });\n };\n\n var strSelected = 'data-mce-selected';\n var strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n var strAttributeSelector = '[' + strSelected + ']';\n var strFirstSelected = 'data-mce-first-selected';\n var strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n var strLastSelected = 'data-mce-last-selected';\n var strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n var selected = strSelected;\n var selectedSelector = strSelectedSelector;\n var attributeSelector = strAttributeSelector;\n var firstSelected = strFirstSelected;\n var firstSelectedSelector = strFirstSelectedSelector;\n var lastSelected = strLastSelected;\n var lastSelectedSelector = strLastSelectedSelector;\n\n var Ephemera = /*#__PURE__*/Object.freeze({\n __proto__: null,\n selected: selected,\n selectedSelector: selectedSelector,\n attributeSelector: attributeSelector,\n firstSelected: firstSelected,\n firstSelectedSelector: firstSelectedSelector,\n lastSelected: lastSelected,\n lastSelectedSelector: 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 none$1 = type$1.none;\n var multiple = type$1.multiple;\n var single = type$1.single;\n\n var selection = function (cell, selections) {\n return 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 cata(selections.get(), Option.none, function (cells, _env) {\n if (cells.length === 0) {\n return Option.none();\n }\n return retrieveBox(table, firstSelectedSelector, 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\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(mergable(table, selections)),\n unmergable: constant(unmergable(cell, selections)),\n selection: constant(selection(cell, selections))\n };\n };\n var paste$1 = function (element, clipboard, generators) {\n return {\n element: constant(element),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n var pasteRows = function (selections, cell, clipboard, generators) {\n return {\n selection: constant(selection(cell, selections)),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n\n var extractSelected = function (cells) {\n return table(cells[0]).map(deep).map(function (replica) {\n return [extract(replica, 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 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 table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n var isTable = function (elm) {\n return name(elm) === 'table';\n };\n if (elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n var doc = Element.fromDom(editor.getDoc());\n var generators = paste(doc);\n var targets = paste$1(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\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 if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom()) {\n return 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 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 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 rowInfo = function (row, y) {\n return {\n row: row,\n y: y\n };\n };\n var colInfo = function (col, x) {\n return {\n col: col,\n x: x\n };\n };\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left() + getOuter$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\n var columns = function (warehouse) {\n var grid = warehouse.grid;\n var cols = range(grid.columns(), identity);\n var rowsArr = range(grid.rows(), identity);\n return map(cols, function (col) {\n var getBlock = function () {\n return bind(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column() === col;\n }).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(grid.rows(), identity);\n var cols = range(grid.columns(), identity);\n return map(rowsArr, function (row) {\n var getBlock = function () {\n return bind(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row() === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return 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 needManualCalc = function () {\n var browser = detect$3().browser;\n return browser.isIE() || browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$2(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var height = cell.dom().getBoundingClientRect().height;\n var boxSizing = get$2(cell, 'box-sizing');\n if (boxSizing === 'border-box') {\n return height;\n } else {\n var paddingTop = getProp(cell, 'padding-top', 0);\n var paddingBottom = getProp(cell, 'padding-bottom', 0);\n var borderTop = getProp(cell, 'border-top-width', 0);\n var borderBottom = getProp(cell, 'border-bottom-width', 0);\n var borders = borderTop + borderBottom;\n return height - paddingTop - paddingBottom - borders;\n }\n };\n var getCalculatedWidth = function (cell) {\n var width = cell.dom().getBoundingClientRect().width;\n var boxSizing = get$2(cell, 'box-sizing');\n if (boxSizing === 'border-box') {\n return width;\n } else {\n var paddingLeft = getProp(cell, 'padding-left', 0);\n var paddingRight = getProp(cell, 'padding-right', 0);\n var borderLeft = getProp(cell, 'border-left-width', 0);\n var borderRight = getProp(cell, 'border-right-width', 0);\n var borders = borderLeft + borderRight;\n return width - paddingLeft - paddingRight - borders;\n }\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$4(cell));\n };\n var getWidth = function (cell) {\n return needManualCalc() ? getCalculatedWidth(cell) : getProp(cell, 'width', get$5(cell));\n };\n\n var rGenericSizeRegex = /(\\d+(\\.\\d+)?)(\\w|%)*/;\n var rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var getPercentSize = function (elm, getter) {\n var relativeParent = offsetParent(elm).getOr(getBody(owner(elm)));\n return getter(elm) / getter(relativeParent) * 100;\n };\n var setPixelWidth = function (cell, amount) {\n set$1(cell, 'width', amount + 'px');\n };\n var setPercentageWidth = function (cell, amount) {\n set$1(cell, 'width', amount + '%');\n };\n var setHeight = function (cell, amount) {\n set$1(cell, 'height', amount + 'px');\n };\n var getHeightValue = function (cell) {\n return getRaw(cell, 'height').getOrThunk(function () {\n return getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = table(cell).map(function (table) {\n var total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n var normalizePixelSize = function (value, cell, getter, setter) {\n var number = parseInt(value, 10);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n var getTotalHeight = function (cell) {\n var value = getHeightValue(cell);\n if (!value) {\n return get$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 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 = rPercentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = getWidth(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n var intWidth = get$5(cell);\n return normalizePercentageWidth(intWidth, tableSize);\n }, function (w) {\n return choosePercentageSize(cell, w, tableSize);\n });\n };\n var normalizePixelWidth = function (cellWidth, tableSize) {\n return cellWidth / 100 * tableSize.pixelWidth();\n };\n var choosePixelSize = function (element, width, tableSize) {\n var pixelMatch = rPixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = rPercentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return getWidth(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return getWidth(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$6(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n var match = rGenericSizeRegex.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 getPixelTableWidth = function (table) {\n return get$5(table) + 'px';\n };\n var getPercentTableWidth = function (table) {\n return getPercentSize(table, get$5) + '%';\n };\n var isPercentSizing = function (table) {\n return getRawWidth(table).exists(function (size) {\n return rPercentageBasedSizeRegex.test(size);\n });\n };\n var isPixelSizing = function (table) {\n return getRawWidth(table).exists(function (size) {\n return rPixelBasedSizeRegex.test(size);\n });\n };\n var isNoneSizing = function (table) {\n return getRawWidth(table).isNone();\n };\n var percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n var pixelBasedSizeRegex = constant(rPixelBasedSizeRegex);\n\n var 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 getPixelWidth(e, tableSize);\n });\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', getHeight$1);\n };\n var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\n var columns$1 = columns(warehouse);\n var backups = map(columns$1, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(columns$1, function (cellOption, c) {\n var columnCell = cellOption.filter(not(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, 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, getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\n var rows = rows$1(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(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, getHeight$1, function (deduced) {\n return deduced.getOrThunk(minHeight);\n });\n };\n var getRawHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, getRawH, getDeduced);\n };\n\n var adt = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n var validateFor = function (suffix, type, value) {\n var rawAmount = value.substring(0, value.length - suffix.length);\n var amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt.invalid(value);\n };\n var from$1 = function (value) {\n if (endsWith(value, '%')) {\n return validateFor('%', adt.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt.pixels, value);\n }\n return adt.invalid(value);\n };\n var Size = __assign(__assign({}, adt), { from: from$1 });\n\n var redistributeToPercent = function (widths, totalWidth) {\n return map(widths, function (w) {\n var colType = Size.from(w);\n return colType.fold(function () {\n return w;\n }, function (px) {\n var ratio = px / totalWidth * 100;\n return ratio + '%';\n }, function (pc) {\n return pc + '%';\n });\n });\n };\n var redistributeToPx = function (widths, totalWidth, newTotalWidth) {\n var scale = newTotalWidth / totalWidth;\n return map(widths, function (w) {\n var colType = Size.from(w);\n return colType.fold(function () {\n return w;\n }, function (px) {\n return px * scale + 'px';\n }, function (pc) {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n var redistributeEmpty = function (newWidthType, columns) {\n var f = newWidthType.fold(function () {\n return constant('');\n }, function (px) {\n var num = px / columns;\n return constant(num + 'px');\n }, function (pc) {\n var num = pc / columns;\n return constant(num + 'px');\n });\n return range(columns, f);\n };\n var redistributeValues = function (newWidthType, widths, totalWidth) {\n return newWidthType.fold(function () {\n return widths;\n }, function (px) {\n return redistributeToPx(widths, totalWidth, px);\n }, function (_pc) {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n var redistribute = function (widths, totalWidth, newWidth) {\n var newType = Size.from(newWidth);\n var floats = forall(widths, function (s) {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n var sum = function (values, fallback) {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, function (rest, v) {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n var roundDown = function (num, unit) {\n var floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n var add = function (value, amount) {\n return Size.from(value).fold(constant(value), function (px) {\n return px + amount + 'px';\n }, function (pc) {\n return pc + amount + '%';\n });\n };\n var normalize = function (values) {\n if (values.length === 0) {\n return values;\n }\n var scan = foldr(values, function (rest, value) {\n var info = Size.from(value).fold(function () {\n return {\n value: value,\n remainder: 0\n };\n }, function (num) {\n return roundDown(num, 'px');\n }, function (num) {\n return {\n value: num + '%',\n remainder: 0\n };\n });\n return {\n output: [info.value].concat(rest.output),\n remainder: rest.remainder + info.remainder\n };\n }, {\n output: [],\n remainder: 0\n });\n var r = scan.output;\n return r.slice(0, r.length - 1).concat([add(r[r.length - 1], Math.round(scan.remainder))]);\n };\n var validate = Size.from;\n\n var redistributeToW = function (newWidths, cells, unit) {\n each(cells, function (cell) {\n var widths = newWidths.slice(cell.column(), cell.colspan() + cell.column());\n var w = sum(widths, minWidth());\n set$1(cell.element(), 'width', w + unit);\n });\n };\n var redistributeToH = function (newHeights, rows, cells, unit) {\n each(cells, function (cell) {\n var heights = newHeights.slice(cell.row(), cell.rowspan() + cell.row());\n var h = sum(heights, minHeight());\n set$1(cell.element(), 'height', h + unit);\n });\n each(rows, function (row, i) {\n set$1(row.element(), 'height', newHeights[i]);\n });\n };\n var getUnit = function (newSize) {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n var redistribute$1 = function (table, optWidth, optHeight, direction, tableSize) {\n var warehouse = Warehouse.fromTable(table);\n var rows = warehouse.all;\n var cells = Warehouse.justCells(warehouse);\n optWidth.each(function (newWidth) {\n var wUnit = getUnit(newWidth);\n var totalWidth = get$5(table);\n var oldWidths = getRawWidths(warehouse, direction, tableSize);\n var nuWidths = redistribute(oldWidths, totalWidth, newWidth);\n redistributeToW(nuWidths, cells, wUnit);\n set$1(table, 'width', newWidth);\n });\n optHeight.each(function (newHeight) {\n var hUnit = getUnit(newHeight);\n var totalHeight = get$4(table);\n var oldHeights = getRawHeights(warehouse, height);\n var nuHeights = redistribute(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells, hUnit);\n set$1(table, 'height', newHeight);\n });\n };\n var isPercentSizing$1 = isPercentSizing;\n var isPixelSizing$1 = isPixelSizing;\n var isNoneSizing$1 = isNoneSizing;\n var getPercentTableWidth$1 = getPercentTableWidth;\n\n var ResizeDirection = {\n ltr: ltr,\n rtl: rtl\n };\n\n var TableDirection = function (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 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 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 = function (typeDefs) {\n var registry = map$1(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map$1(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n\n var adt$1 = 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$1);\n\n var neighbours = function (input, index) {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n var determine = function (input, column, step, tableSize) {\n var result = input.slice(0);\n var context = neighbours(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\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: 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\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var adjustWidth = function (table, delta, index, direction, tableSize) {\n var step = tableSize.getCellDelta(delta);\n var warehouse = Warehouse.fromTable(table);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var deltas = determine(widths, index, step, tableSize);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n var newSizes = 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.adjustTableWidth(step);\n }\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = Warehouse.fromTable(table);\n var heights = getPixelHeights(warehouse, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, minHeight()) : dy;\n });\n var newCellSizes = recalculateHeight(warehouse, newHeights);\n var newRowSizes = matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n setHeight(row.element(), row.height());\n });\n each(newCellSizes, function (cell) {\n setHeight(cell.element(), cell.height());\n });\n var total = sumUp(newHeights);\n setHeight(table, total);\n };\n var adjustWidthTo = function (table, list, direction, tableSize) {\n var warehouse = Warehouse.generate(list);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var newSizes = recalculateWidth(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element, cell.width);\n });\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(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var filter$2 = constant(true);\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$2, handler);\n };\n var fromRawEvent$1 = fromRawEvent;\n\n var read = function (element, attr) {\n var value = get$1(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$1 = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$3 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$7 = function (element) {\n return read(element, 'class');\n };\n var add$2 = function (element, clazz) {\n return add$1(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$3(element, 'class', clazz);\n };\n\n var add$3 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$2(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$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 css = function (namespace) {\n var dashNamespace = namespace.replace(/\\./g, '-');\n var resolve = function (str) {\n return dashNamespace + '-' + str;\n };\n return { resolve: resolve };\n };\n\n var styles = css('ephox-dragster');\n var resolve = styles.resolve;\n\n var Blocker = function (options) {\n var settings = __assign({ layerClass: resolve('blocker') }, options);\n var div = 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$3(div, resolve('blocker'));\n add$3(div, settings.layerClass);\n var element = function () {\n return div;\n };\n var destroy = function () {\n remove$2(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var 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 base = function (handleUnsupported, required) {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n var baseWith = function (handleUnsupported, required, pred) {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter(required, function (key) {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n var handleExact = function (required, keys) {\n var unsupported = filter(keys, function (key) {\n return !contains(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var 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 = 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 = create({\n start: Event([]),\n stop: Event([])\n });\n var movement = Movement();\n var drop = function () {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n var throttledDrop = last$2(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info());\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n\n var transform = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n var isContentEditableTrue = function (elm) {\n return get$1(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var styles$1 = css('ephox-snooker');\n var resolve$1 = styles$1.resolve;\n\n var Mutation = function () {\n var events = create({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n var mutate = function (x, y) {\n events.trigger.drag(x, y);\n };\n return {\n mutate: mutate,\n events: events.registry\n };\n };\n\n var BarMutation = function () {\n var events = create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = 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 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 = 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\n var resizeBar = resolve$1('resizer-bar');\n var resizeRowBar = resolve$1('resizer-rows');\n var resizeColBar = resolve$1('resizer-cols');\n var BAR_THICKNESS = 7;\n var destroy = function (wire) {\n var previous = descendants$1(wire.parent(), '.' + resizeBar);\n each(previous, remove$2);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each(positions, function (cpOption) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$3(bar, resizeBar);\n append(wire.parent(), bar);\n });\n });\n };\n var refreshCol = function (wire, colPositions, position, tableHeight) {\n drawBar(wire, colPositions, function (origin, cp) {\n var colBar = col(cp.col, cp.x - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\n add$3(colBar, resizeColBar);\n return colBar;\n });\n };\n var refreshRow = function (wire, rowPositions, position, tableWidth) {\n drawBar(wire, rowPositions, function (origin, cp) {\n var rowBar = row(cp.row, position.left() - origin.left(), cp.y - origin.top(), tableWidth, BAR_THICKNESS);\n add$3(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (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 warehouse = Warehouse.fromTable(table);\n var rows = rows$1(warehouse);\n var cols = 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\n var resizeBarDragging = resolve$1('resizer-bar-dragging');\n var BarManager = function (wire, direction, hdirection) {\n var mutation = BarMutation();\n var resizing = 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 = getCssValue(event.target(), 'top');\n set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');\n });\n getResizer(event.target(), 'data-column').each(function (_dataCol) {\n var currentCol = getCssValue(event.target(), 'left');\n set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = getCssValue(target, dir);\n var oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(function () {\n mutation.get().each(function (target) {\n hoverTable.each(function (table) {\n getResizer(target, 'data-row').each(function (row) {\n var delta = getDelta(target, 'top');\n remove(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(function (column) {\n var delta = getDelta(target, 'left');\n remove(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table, 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, getCssValue(target, dir));\n add$3(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {\n if (isRowBar(event.target())) {\n handler(event.target(), 'top');\n }\n if (isColBar(event.target())) {\n handler(event.target(), 'left');\n }\n });\n var isRoot = function (e) {\n return eq(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(function (table) {\n return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\n });\n };\n var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target()).fold(function () {\n if (inBody(event.target())) {\n destroy(wire);\n }\n }, function (table) {\n hoverTable = Option.some(table);\n refresh(wire, table, hdirection, direction);\n });\n });\n var destroy$1 = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n var refresh$1 = function (tbl) {\n refresh(wire, tbl, hdirection, direction);\n };\n var events = create({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy$1,\n refresh: refresh$1,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(hide, wire),\n showBars: curry(show, wire),\n events: events.registry\n };\n };\n\n var create$1 = function (wire, vdirection, lazySizing) {\n var hdirection = height;\n var manager = BarManager(wire, vdirection, hdirection);\n var events = create({\n beforeResize: Event(['table']),\n afterResize: Event(['table']),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n var table = event.table();\n events.trigger.beforeResize(table);\n var delta = hdirection.delta(event.delta(), table);\n adjustHeight(table, delta, event.row(), hdirection);\n events.trigger.afterResize(table);\n });\n manager.events.startAdjust.bind(function (_event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n var table = event.table();\n events.trigger.beforeResize(table);\n var delta = vdirection.delta(event.delta(), table);\n var tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column(), vdirection, tableSize);\n events.trigger.afterResize(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$1 };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\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 defaultTableToolbar = 'tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol';\n var defaultStyles = {\n 'border-collapse': 'collapse',\n 'width': '100%'\n };\n var determineDefaultStyles = function (editor) {\n if (isPixelsForced(editor)) {\n var editorWidth = editor.getBody().offsetWidth;\n return __assign(__assign({}, defaultStyles), { width: editorWidth + 'px' });\n } else if (isResponsiveForced(editor)) {\n return filter$1(defaultStyles, function (_value, key) {\n return key !== 'width';\n });\n } else {\n return defaultStyles;\n }\n };\n var defaultAttributes = { border: '1' };\n var getTableSizingMode = function (editor) {\n return editor.getParam('table_sizing_mode', 'auto');\n };\n var getTableResponseWidth = function (editor) {\n return editor.getParam('table_responsive_width');\n };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', determineDefaultStyles(editor), 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var isPercentagesForced = function (editor) {\n return getTableSizingMode(editor) === 'relative' || getTableResponseWidth(editor) === true;\n };\n var isPixelsForced = function (editor) {\n return getTableSizingMode(editor) === 'fixed' || getTableResponseWidth(editor) === false;\n };\n var isResponsiveForced = function (editor) {\n return getTableSizingMode(editor) === 'responsive';\n };\n var getToolbar = function (editor) {\n return editor.getParam('table_toolbar', defaultTableToolbar);\n };\n var getTableHeaderType = function (editor) {\n var defaultValue = 'section';\n var value = editor.getParam('table_header_type', defaultValue, 'string');\n var validValues = [\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ];\n if (!contains(validValues, value)) {\n return defaultValue;\n } else {\n return value;\n }\n };\n var 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 getNodeName = function (elm) {\n return elm.nodeName.toLowerCase();\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 addPxSuffix = function (size) {\n return /^\\d+(\\.\\d+)?$/.test(size) ? size + 'px' : size;\n };\n var removeDataStyle = function (table) {\n remove(table, 'data-mce-style');\n each(cells(table), function (cell) {\n return remove(cell, 'data-mce-style');\n });\n };\n var getRawWidth$1 = function (editor, elm) {\n var raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Option.from(raw).filter(isNotEmpty);\n };\n var isPercentage = function (value) {\n return /^(\\d+(\\.\\d+)?)%$/.test(value);\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\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var noneSize = function (table) {\n var getWidth = function () {\n return get$5(table);\n };\n var zero = constant(0);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths: getPixelWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n label: 'none'\n };\n };\n var percentageSize = function (initialWidth, table) {\n var floatWidth = Cell(parseFloat(initialWidth));\n var pixelWidth = Cell(get$5(table));\n var getCellDelta = function (delta) {\n return delta / pixelWidth.get() * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return minWidth() / pixelWidth.get() * 100;\n };\n var adjustTableWidth = function (delta) {\n var currentWidth = floatWidth.get();\n var change = delta / 100 * currentWidth;\n var newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n floatWidth.set(newWidth);\n pixelWidth.set(get$5(table));\n };\n return {\n width: floatWidth.get,\n pixelWidth: pixelWidth.get,\n getWidths: getPercentageWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth: adjustTableWidth,\n label: 'percent'\n };\n };\n var pixelSize = function (initialWidth, table) {\n var width = Cell(initialWidth);\n var getWidth = width.get;\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n var adjustTableWidth = function (delta) {\n var newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n width.set(newWidth);\n };\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths: getPixelWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth: adjustTableWidth,\n label: 'pixel'\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth, element);\n }\n var fallbackWidth = get$5(element);\n return pixelSize(fallbackWidth, element);\n };\n var getTableSize = function (table) {\n var width = getRawWidth(table);\n return width.fold(function () {\n return noneSize(table);\n }, function (w) {\n return chooseSize(table, w);\n });\n };\n var TableSize = {\n getTableSize: getTableSize,\n pixelSize: pixelSize,\n percentageSize: percentageSize,\n noneSize: noneSize\n };\n\n var get$8 = function (editor, table) {\n if (isPercentagesForced(editor)) {\n var width = getRawWidth$1(editor, table.dom()).filter(isPercentage).getOrThunk(function () {\n return getPercentTableWidth$1(table);\n });\n return TableSize.percentageSize(width, table);\n } else if (isPixelsForced(editor)) {\n return TableSize.pixelSize(get$5(table), table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n var cleanupLegacyAttributes = function (element) {\n remove(element, 'width');\n };\n var convertToPercentSize = function (table, direction, tableSize) {\n var newWidth = getPercentTableWidth(table);\n redistribute$1(table, Option.some(newWidth), Option.none(), direction, tableSize);\n cleanupLegacyAttributes(table);\n };\n var convertToPixelSize = function (table, direction, tableSize) {\n var newWidth = getPixelTableWidth(table);\n redistribute$1(table, Option.some(newWidth), Option.none(), direction, tableSize);\n cleanupLegacyAttributes(table);\n };\n var convertToNoneSize = function (table) {\n remove$1(table, 'width');\n each(cells(table), function (cell) {\n remove$1(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n var enforcePercentage = function (editor, table) {\n var direction = TableDirection(directionAt);\n var tableSizing = get$8(editor, table);\n convertToPercentSize(table, direction, tableSizing);\n };\n var enforcePixels = function (editor, table) {\n var direction = TableDirection(directionAt);\n var tableSizing = get$8(editor, table);\n convertToPixelSize(table, direction, tableSizing);\n };\n var enforceNone = convertToNoneSize;\n var syncPixels = function (table) {\n each(cells(table), function (cell) {\n var computedWidth = get$2(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove(cell, 'width');\n });\n };\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\n var getResizeHandler = function (editor) {\n var selectionRng = Option.none();\n var resize = Option.none();\n var wire = Option.none();\n var startW;\n var startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n remove$6(editor, w);\n });\n };\n editor.on('init', function () {\n var direction = TableDirection(directionAt);\n var rawWire = get$9(editor);\n wire = Option.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var lazySizing = function (table) {\n return get$8(editor, table);\n };\n var sz = TableResize.create(rawWire, direction, lazySizing);\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 table = Element.fromDom(targetElm);\n if (!isPixelSizing$1(table) && isPixelsForced(editor)) {\n enforcePixels(editor, table);\n } else if (!isPercentSizing$1(table) && isPercentagesForced(editor)) {\n enforcePercentage(editor, table);\n }\n startW = e.width;\n startRawW = getRawWidth$1(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = Element.fromDom(targetElm);\n if (startRawW === '' || !isPercentage(startRawW) && isResponsiveForced(editor)) {\n enforcePercentage(editor, table);\n } else if (isPercentage(startRawW)) {\n var percentW = parseFloat(startRawW.replace('%', ''));\n var targetPercentW = e.width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n } else {\n syncPixels(table);\n }\n removeDataStyle(table);\n }\n });\n editor.on('SwitchMode', function () {\n lazyResize().each(function (resize) {\n if (editor.mode.isReadOnly()) {\n resize.hideBars();\n } else {\n resize.showBars();\n }\n });\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var point = function (element, offset) {\n return {\n element: constant(element),\n offset: constant(offset)\n };\n };\n\n var scan = function (universe, element, direction) {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(function (elem) {\n return scan(universe, elem, direction).orThunk(function () {\n return 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$1 = DomUniverse();\n var freefallRtl$2 = function (element) {\n return freefallRtl$1(universe$1, element);\n };\n\n var halve = function (main, other) {\n var width = getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.width() / 2;\n setGenericWidth(main, newWidth, w.unit());\n setGenericWidth(other, newWidth, w.unit());\n });\n };\n\n var getGridSize = function (table) {\n var warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\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 insertThead = last(children$2(table, 'caption,colgroup')).fold(function () {\n return curry(prepend, table);\n }, function (c) {\n return curry(after, c);\n });\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 sectionName === 'thead' ? insertThead(tb) : 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: newRows,\n newCells: newCells\n };\n };\n var copy$2 = function (grid) {\n return map(grid, function (row) {\n var tr = shallow(row.element());\n each(row.cells(), function (cell) {\n var clonedCell = deep(cell.element());\n setIfNot(clonedCell, 'colspan', cell.colspan(), 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);\n append(tr, clonedCell);\n });\n return tr;\n });\n };\n\n var 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\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return getCell(row, index);\n });\n };\n var getRow = function (grid, index) {\n return grid[index];\n };\n var findDiff = function (xs, comp) {\n if (xs.length === 0) {\n return 0;\n }\n var first = xs[0];\n var index = findIndex(xs, function (x) {\n return !comp(first.element(), x.element());\n });\n return index.fold(function () {\n return xs.length;\n }, function (ind) {\n return ind;\n });\n };\n var subgrid = function (grid, row, column, comparator) {\n var restOfRow = getRow(grid, row).cells().slice(column);\n var endColIndex = findDiff(restOfRow, comparator);\n var restOfColumn = getColumn(grid, column).slice(row);\n var endRowIndex = findDiff(restOfColumn, comparator);\n return {\n colspan: endColIndex,\n rowspan: endRowIndex\n };\n };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row) {\n return map(row.cells(), function () {\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 = 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\n var fromWarehouse = function (warehouse, generators) {\n return toGrid(warehouse, generators, false);\n };\n var deriveRows = function (rendered, generators) {\n var findRow = function (details) {\n var rowOfCells = findMap(details, function (detail) {\n return parent(detail.element()).map(function (row) {\n var isNew = parent(row).isNone();\n return elementnew(row, isNew);\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 = toDetails(grid, eq);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n return findMap(warehouse.all, function (r) {\n return find(r.cells(), function (e) {\n return eq(element, e.element());\n });\n });\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, direction, sizing) {\n var warehouse = Warehouse.fromTable(table);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq, 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 = render(table, out.grid());\n var tableSizing = Option.from(sizing).getOrThunk(function () {\n return TableSize.getTableSize(table);\n });\n adjustment(table, out.grid(), direction, tableSizing);\n postAction(table);\n refresh(wire, table, height, direction);\n return Option.some({\n cursor: out.cursor,\n newRows: constant(newElements.newRows),\n newCells: constant(newElements.newCells)\n });\n });\n };\n };\n var onCell = function (warehouse, target) {\n return cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteByEditor = function (warehouse, target) {\n var details = map(target.selection(), function (cell$1) {\n return cell(cell$1).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$1) {\n return cell(cell$1).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 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 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 < cellLength(grid[0]); j++) {\n var current = getCellElement(grid[i], j);\n var isToReplace = comparator(current, target);\n if (isToReplace === true && first === false) {\n 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 splitCols = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid[0].cells().length) {\n each(grid, function (row) {\n var prevCell = row.cells()[index - 1];\n var current = row.cells()[index];\n var isToReplace = comparator(current.element(), prevCell.element());\n if (isToReplace) {\n mutateCell(row, index, elementnew(substitution(), true));\n }\n });\n }\n return grid;\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 mutateCell(grid[i], j, elementnew(sub, true));\n });\n }\n };\n for (var j = 0; j < 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\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() > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());\n }\n var rowRemainder = gridA.slice(startAddress.row());\n var colRemainder = rowRemainder[0].cells().slice(startAddress.column());\n var colRequired = cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = cellLength(gridA[0]);\n var colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n var measureHeight = function (gridA, gridB) {\n var rowLengthA = gridA.length;\n var rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n var 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(range(amount, function () {\n return 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 setCells(row, row.cells().concat(fill(range(amount, identity), 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 return fillRows(modifiedCols, Math.abs(delta.rowDelta), generator);\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = getCell(grid[row], col);\n var matching = curry(comparator, candidate.element());\n var currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\n var startRow = startAddress.row();\n var startCol = startAddress.column();\n var mergeHeight = gridB.length;\n var mergeWidth = cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth;\n for (var r = startRow; r < endRow; r++) {\n for (var c = startCol; c < endCol; c++) {\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var newCell = getCellElement(gridB[r - startRow], c - startCol);\n var replacement = generator.replace(newCell);\n 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 = measure(startAddress, gridA, gridB);\n return result.map(function (delta) {\n var fittedGrid = tailor(gridA, delta, generator);\n return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\n });\n };\n var insertCols = function (index, gridA, gridB, generator, comparator) {\n splitCols(gridA, index, comparator, generator.cell);\n var delta = measureHeight(gridB, gridA);\n var fittedNewGrid = tailor(gridB, delta, generator);\n var secondDelta = measureHeight(gridA, fittedNewGrid);\n var fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map(fittedOldGrid, function (gridRow, i) {\n var newCells = gridRow.cells().slice(0, index).concat(fittedNewGrid[i].cells()).concat(gridRow.cells().slice(index, gridRow.cells().length));\n return setCells(gridRow, newCells);\n });\n };\n var insertRows = function (index, gridA, gridB, generator, comparator) {\n splitRows(gridA, index, comparator, generator.cell);\n var delta = measureWidth(gridB, gridA);\n var fittedNewGrid = tailor(gridB, delta, generator);\n var secondDelta = measureWidth(gridA, fittedNewGrid);\n var fittedOldGrid = tailor(gridA, secondDelta, generator);\n return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\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 = mapCells(grid[example], function (ex, c) {\n var withinSpan = index > 0 && index < grid.length && comparator(getCellElement(grid[index - 1], c), getCellElement(grid[index], c));\n var ret = withinSpan ? 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 < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n var sub = withinSpan ? getCell(row, index) : elementnew(substitution(getCellElement(row, example), comparator), true);\n return addCell(row, index, sub);\n });\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\n var replaceIn = function (grid, targets, comparator, substitution) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element(), target.element());\n });\n };\n return map(grid, function (row) {\n return mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var targets = bind(grid, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var 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\n var verifyGenerators = exactly([\n 'cell',\n 'row',\n 'replace',\n 'gap'\n ]);\n var elementToData = function (element) {\n var colspan = getAttrValue(element, 'colspan', 1);\n var rowspan = getAttrValue(element, 'rowspan', 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$1 = 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$1,\n merging: merging\n };\n\n var blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n var isList = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains(blockList, tagName);\n };\n var isEmptyTag = function (universe, item) {\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n var universe$2 = DomUniverse();\n var isBlock$1 = function (element) {\n return isBlock(universe$2, element);\n };\n var isList$1 = function (element) {\n return isList(universe$2, element);\n };\n var isEmptyTag$1 = function (element) {\n return isEmptyTag(universe$2, element);\n };\n\n var merge$2 = function (cells) {\n var isBr = function (el) {\n return name(el) === 'br';\n };\n var advancedBr = function (children) {\n return forall(children, function (c) {\n return isBr(c) || isText(c) && get$3(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, isList$1).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (isBlock$1(rightSibling)) {\n return true;\n }\n if (isEmptyTag$1(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n var markCell = function (cell) {\n return last$1(cell).bind(function (rightEdge) {\n var rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(function (parent) {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock$1(parent) && !eq(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\n var prune = function (table) {\n var cells$1 = cells(table);\n if (cells$1.length === 0) {\n remove$2(table);\n }\n };\n var outcome = function (grid, cursor) {\n return {\n grid: constant(grid),\n cursor: constant(cursor)\n };\n };\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 opInsertRowsBefore = 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 insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var opInsertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var 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 insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var opInsertColumnsBefore = 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 insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var opInsertColumnsAfter = 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 insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var opMakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var opMakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var opUnmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var opUnmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var opEraseColumns = function (grid, details, _comparator, _genWrappers) {\n var columns = uniqueColumns(details);\n var newGrid = 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 opEraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var opMergeCells = function (grid, mergable, comparator, _genWrappers) {\n var cells = mergable.cells();\n merge$2(cells);\n var newGrid = merge(grid, mergable.bounds(), comparator, constant(cells[0]));\n return outcome(newGrid, Option.from(cells[0]));\n };\n var opUnmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var newGrid = foldr(unmergable, function (b, cell) {\n return unmerge(b, cell, comparator, genWrappers.combine(cell));\n }, grid);\n return outcome(newGrid, Option.from(unmergable[0]));\n };\n var opPasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\n var startAddress = address(pasteDetails.row(), pasteDetails.column());\n var mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators(), comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, 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 = fromPastedRows(rows, example);\n var wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n var opPasteColsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[0].column();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var opPasteColsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].column() + pasteDetails.cells[pasteDetails.cells.length - 1].colspan();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var opPasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var 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 = insertRows(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var opPasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var 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 = insertRows(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var opGetColumnType = function (table, target) {\n var house = Warehouse.fromTable(table);\n var details = onCells(house, target);\n return details.bind(function (selectedCells) {\n var lastSelectedCell = selectedCells[selectedCells.length - 1];\n var minColRange = selectedCells[0].column();\n var maxColRange = lastSelectedCell.column() + lastSelectedCell.colspan();\n var selectedColumnCells = flatten(map(house.all, function (row) {\n return filter(row.cells(), function (cell) {\n return cell.column() >= minColRange && cell.column() < maxColRange;\n });\n }));\n return getCellsType(selectedColumnCells, function (cell) {\n return name(cell.element()) === 'th';\n });\n }).getOr('');\n };\n var getCellsType = function (cells, headerPred) {\n var headerCells = filter(cells, headerPred);\n if (headerCells.length === 0) {\n return Option.some('td');\n } else if (headerCells.length === cells.length) {\n return Option.some('th');\n } else {\n return Option.none();\n }\n };\n var resize = adjustWidthTo;\n var insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n var insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n var insertColumnsBefore = run(opInsertColumnsBefore, onCells, resize, noop, Generators.modification);\n var insertColumnsAfter = run(opInsertColumnsAfter, onCells, resize, noop, Generators.modification);\n var eraseColumns = run(opEraseColumns, onCells, resize, prune, Generators.modification);\n var eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n var makeColumnHeader = run(opMakeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th'));\n var unmakeColumnHeader = run(opUnmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td'));\n var makeRowHeader = run(opMakeRowHeader, onCell, noop, noop, Generators.transform('col', 'th'));\n var unmakeRowHeader = run(opUnmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td'));\n var mergeCells = run(opMergeCells, onMergable, noop, noop, Generators.merging);\n var unmergeCells = run(opUnmergeCells, onUnmergable, resize, noop, Generators.merging);\n var pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n var pasteColsBefore = run(opPasteColsBefore, onPasteByEditor, noop, noop, Generators.modification);\n var pasteColsAfter = run(opPasteColsAfter, onPasteByEditor, noop, noop, Generators.modification);\n var pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n var pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n var getColumnType = opGetColumnType;\n\n var getSection = function (elm) {\n return getNodeName(elm.parentNode);\n };\n var mapSectionNameToType = function (section) {\n if (section === 'thead') {\n return 'header';\n } else if (section === 'tfoot') {\n return 'footer';\n } else {\n return 'body';\n }\n };\n var detectHeaderRow = function (editor, elm) {\n var isThead = getSection(elm) === 'thead';\n var areAllCellsThs = !exists(elm.cells, function (c) {\n return getNodeName(c) !== 'th';\n });\n return isThead || areAllCellsThs ? Option.some({\n thead: isThead,\n ths: areAllCellsThs\n }) : Option.none();\n };\n var getRowType = function (editor, elm) {\n return mapSectionNameToType(detectHeaderRow(editor, elm).fold(function () {\n return getSection(elm);\n }, function (_rowConfig) {\n return 'thead';\n }));\n };\n var switchRowSection = function (dom, rowElm, newSectionName) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldSectionElm = rowElm.parentNode;\n var oldSectionName = getNodeName(oldSectionElm);\n if (newSectionName !== oldSectionName) {\n var sectionElm_1 = dom.select(newSectionName, tableElm)[0];\n if (!sectionElm_1) {\n sectionElm_1 = dom.create(newSectionName);\n var firstTableChild_1 = tableElm.firstChild;\n if (newSectionName === 'thead') {\n last(children$2(Element.fromDom(tableElm), 'caption,colgroup')).fold(function () {\n return tableElm.insertBefore(sectionElm_1, firstTableChild_1);\n }, function (c) {\n return dom.insertAfter(sectionElm_1, c.dom());\n });\n } else {\n tableElm.appendChild(sectionElm_1);\n }\n }\n if (newSectionName === 'tbody' && oldSectionName === 'thead' && sectionElm_1.firstChild) {\n sectionElm_1.insertBefore(rowElm, sectionElm_1.firstChild);\n } else {\n sectionElm_1.appendChild(rowElm);\n }\n if (!oldSectionElm.hasChildNodes()) {\n dom.remove(oldSectionElm);\n }\n }\n };\n var switchCellType = function (dom, cells, newCellType, scope) {\n return each(cells, function (c) {\n var newCell = getNodeName(c) !== newCellType ? dom.rename(c, newCellType) : c;\n dom.setAttrib(newCell, 'scope', scope);\n });\n };\n var switchSectionType = function (editor, rowElm, newType) {\n var determineHeaderRowType = function () {\n var allTableRows = table(Element.fromDom(rowElm.cells[0])).map(function (table) {\n return rows(table);\n }).getOr([]);\n return findMap(allTableRows, function (row) {\n return detectHeaderRow(editor, row.dom());\n }).map(function (detectedType) {\n if (detectedType.thead && detectedType.ths) {\n return 'sectionCells';\n } else {\n return detectedType.thead ? 'section' : 'cells';\n }\n }).getOr('section');\n };\n var dom = editor.dom;\n if (newType === 'header') {\n var headerRowTypeSetting = getTableHeaderType(editor);\n var headerRowType = headerRowTypeSetting === 'auto' ? determineHeaderRowType() : headerRowTypeSetting;\n switchCellType(dom, rowElm.cells, headerRowType === 'section' ? 'td' : 'th', 'col');\n switchRowSection(dom, rowElm, headerRowType === 'cells' ? 'tbody' : 'thead');\n } else {\n switchCellType(dom, rowElm.cells, 'td', null);\n switchRowSection(dom, rowElm, newType === 'footer' ? 'tfoot' : 'tbody');\n }\n };\n\n var Selections = function (editor) {\n var get = function () {\n var body = getBody$1(editor);\n return retrieve$1(body, selectedSelector).fold(function () {\n if (editor.selection.getStart() === undefined) {\n return none$1();\n } else {\n return single(editor.selection);\n }\n }, function (cells) {\n return multiple(cells);\n });\n };\n return { get: get };\n };\n\n var getSelectionStartFromSelector = function (selector) {\n return function (editor) {\n return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(function (n) {\n return Element.fromDom(n);\n });\n };\n };\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getSelectionStartCellOrCaption = getSelectionStartFromSelector('th,td,caption');\n var getCellsFromSelection = function (editor) {\n return getSelectionStartCell(editor).map(function (cell) {\n return selection(cell, Selections(editor));\n }).map(function (cells) {\n return map(cells, function (cell) {\n return cell.dom();\n });\n }).getOr([]);\n };\n var getRowsFromSelection = function (editor) {\n var cellOpt = getSelectionStartCell(editor);\n var rowsOpt = cellOpt.bind(function (cell) {\n return table(cell);\n }).map(function (table) {\n return rows(table);\n }).map(function (rows) {\n return map(rows, function (row) {\n return row.dom();\n });\n });\n return lift2(cellOpt, rowsOpt, function (cell, rows) {\n return filter(rows, function (row) {\n return exists(row.cells, function (rowCell) {\n return editor.dom.getAttrib(rowCell, selected) === '1' || rowCell === cell.dom();\n });\n });\n }).getOr([]);\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 return isTableBody(editor) === false || getGridSize(table).rows() > 1;\n };\n var lastColumnGuard = function (table) {\n return isTableBody(editor) === false || getGridSize(table).columns() > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var 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(directionAt);\n var generators = cellOperations(mutate, doc, cloneFormats);\n var sizing = get$8(editor, table);\n return guard(table) ? operation(wire, table, target, generators, direction, sizing).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(eraseRows, lastRowGuard, noop, lazyWire);\n var deleteColumn = execute(eraseColumns, lastColumnGuard, noop, lazyWire);\n var insertRowsBefore$1 = execute(insertRowsBefore, always, noop, lazyWire);\n var insertRowsAfter$1 = execute(insertRowsAfter, always, noop, lazyWire);\n var insertColumnsBefore$1 = execute(insertColumnsBefore, always, halve, lazyWire);\n var insertColumnsAfter$1 = execute(insertColumnsAfter, always, halve, lazyWire);\n var mergeCells$1 = execute(mergeCells, always, noop, lazyWire);\n var unmergeCells$1 = execute(unmergeCells, always, noop, lazyWire);\n var pasteColsBefore$1 = execute(pasteColsBefore, always, noop, lazyWire);\n var pasteColsAfter$1 = execute(pasteColsAfter, always, noop, lazyWire);\n var pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, lazyWire);\n var pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, lazyWire);\n var pasteCells$1 = execute(pasteCells, always, noop, lazyWire);\n var extractType = function (args, validTypes) {\n return get(args, 'type').filter(function (type) {\n return contains(validTypes, type);\n });\n };\n var setTableCellType = function (editor, args) {\n return extractType(args, [\n 'td',\n 'th'\n ]).each(function (type) {\n switchCellType(editor.dom, getCellsFromSelection(editor), type, null);\n });\n };\n var setTableRowType = function (editor, args) {\n return extractType(args, [\n 'header',\n 'body',\n 'footer'\n ]).each(function (type) {\n map(getRowsFromSelection(editor), function (row) {\n return switchSectionType(editor, row, type);\n });\n });\n };\n var makeColumnHeader$1 = execute(makeColumnHeader, always, noop, lazyWire);\n var unmakeColumnHeader$1 = execute(unmakeColumnHeader, always, noop, lazyWire);\n var getTableRowType = function (editor) {\n var rows = getRowsFromSelection(editor);\n if (rows.length > 0) {\n var rowTypes = map(rows, function (r) {\n return getRowType(editor, r);\n });\n var hasHeader = contains(rowTypes, 'header');\n var hasFooter = contains(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return 'body';\n } else {\n var hasBody = contains(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return 'header';\n } else if (!hasHeader && !hasBody && hasFooter) {\n return 'footer';\n } else {\n return '';\n }\n }\n }\n };\n var getTableCellType = function (editor) {\n return getCellsType(getCellsFromSelection(editor), function (cell) {\n return getNodeName(cell) === 'th';\n }).getOr('');\n };\n var getTableColType = getColumnType;\n return {\n deleteRow: deleteRow,\n deleteColumn: deleteColumn,\n insertRowsBefore: insertRowsBefore$1,\n insertRowsAfter: insertRowsAfter$1,\n insertColumnsBefore: insertColumnsBefore$1,\n insertColumnsAfter: insertColumnsAfter$1,\n mergeCells: mergeCells$1,\n unmergeCells: unmergeCells$1,\n pasteColsBefore: pasteColsBefore$1,\n pasteColsAfter: pasteColsAfter$1,\n pasteRowsBefore: pasteRowsBefore$1,\n pasteRowsAfter: pasteRowsAfter$1,\n pasteCells: pasteCells$1,\n setTableCellType: setTableCellType,\n setTableRowType: setTableRowType,\n makeColumnHeader: makeColumnHeader$1,\n unmakeColumnHeader: unmakeColumnHeader$1,\n getTableRowType: getTableRowType,\n getTableCellType: getTableCellType,\n getTableColType: getTableColType\n };\n };\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' }\n };\n var tableHeaderCell = function () {\n return Element.fromTag('th');\n };\n var tableCell = function () {\n return Element.fromTag('td');\n };\n var createRow = function (columns, rowHeaders, columnHeaders, rowIndex) {\n var tr = Element.fromTag('tr');\n for (var j = 0; j < columns; j++) {\n var td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, Element.fromTag('br'));\n append(tr, td);\n }\n return tr;\n };\n var createRows = function (rows, columns, rowHeaders, columnHeaders) {\n return range(rows, function (r) {\n return createRow(columns, rowHeaders, columnHeaders, r);\n });\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = Element.fromTag('table');\n var rowHeadersGoInThead = headerType !== 'cells';\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n var actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n var thead = Element.fromTag('thead');\n append(table, thead);\n var theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n var theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append$1(thead, theadRows);\n }\n var tbody = Element.fromTag('tbody');\n append(table, tbody);\n var numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n var numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n var tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append$1(tbody, tbodyRows);\n return table;\n };\n\n var get$a = 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$a(container);\n };\n\n var placeCaretInCell = function (editor, cell) {\n editor.selection.select(cell.dom(), true);\n editor.selection.collapse(true);\n };\n var selectFirstCellInTable = function (editor, tableElm) {\n descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each(descendants$1(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom());\n each(descendants$1(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n });\n };\n var isPercentage$1 = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert = function (editor, columns, rows, colHeaders, rowHeaders) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor)\n };\n var table = render$1(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n enforcePixels(editor, table);\n } else if (isResponsiveForced(editor)) {\n enforceNone(table);\n } else if (isPercentagesForced(editor) || isPercentage$1(defaultStyles.width)) {\n enforcePercentage(editor, table);\n }\n removeDataStyle(table);\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom();\n }).getOr(null);\n };\n var insertTableWithDataValidation = function (editor, rows, columns, options, errorMsg) {\n if (options === void 0) {\n options = {};\n }\n var checkInput = function (val) {\n return isNumber(val) && val > 0;\n };\n if (checkInput(rows) && checkInput(columns)) {\n var headerRows = options.headerRows || 0;\n var headerColumns = options.headerColumns || 0;\n return insert(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error(errorMsg);\n return null;\n }\n };\n\n var getClipboardElements = function (getClipboard) {\n return function () {\n return getClipboard().fold(function () {\n return [];\n }, function (elems) {\n return map(elems, function (e) {\n return e.dom();\n });\n });\n };\n };\n var setClipboardElements = function (setClipboard) {\n return function (elems) {\n var elmsOpt = elems.length > 0 ? Option.some(fromDom$1(elems)) : Option.none();\n setClipboard(elmsOpt);\n };\n };\n var getApi = function (editor, clipboard, resizeHandler, selectionTargets) {\n return {\n insertTable: function (columns, rows, options) {\n if (options === void 0) {\n options = {};\n }\n return insertTableWithDataValidation(editor, rows, columns, options, 'Invalid values for insertTable - rows and columns values are required to insert a table.');\n },\n setClipboardRows: setClipboardElements(clipboard.setRows),\n getClipboardRows: getClipboardElements(clipboard.getRows),\n setClipboardCols: setClipboardElements(clipboard.setColumns),\n getClipboardCols: getClipboardElements(clipboard.getColumns),\n resizeHandler: resizeHandler,\n selectionTargets: selectionTargets\n };\n };\n\n var constrainSpan = function (element, property, value) {\n var currentColspan = getSpan(element, property);\n if (value === 1 || currentColspan <= 1) {\n remove(element, property);\n } else {\n set(element, property, Math.min(value, currentColspan));\n }\n };\n var copyCols = function (table, target) {\n var house = Warehouse.fromTable(table);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var lastSelectedCell = selectedCells[selectedCells.length - 1];\n var minColRange = selectedCells[0].column();\n var maxColRange = lastSelectedCell.column() + lastSelectedCell.colspan();\n return map(house.all, function (row) {\n var cellsToCopy = filter(row.cells(), function (cell) {\n return cell.column() >= minColRange && cell.column() < maxColRange;\n });\n var copiedCells = map(cellsToCopy, function (cell) {\n var clonedCell = deep(cell.element());\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n var fakeTR = Element.fromTag('tr');\n append$1(fakeTR, copiedCells);\n return fakeTR;\n });\n });\n };\n\n var copyRows = function (table, target, generators) {\n var house = Warehouse.fromTable(table);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = 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 copy$2(slicedDetails);\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTDTHOverallStyle = function (dom, elm, name) {\n var cells = dom.select('td,th', elm);\n var firstChildStyle;\n var checkChildren = function (firstChildStyle, elms) {\n for (var i = 0; i < elms.length; i++) {\n var currentStyle = dom.getStyle(elms[i], name);\n if (typeof firstChildStyle === 'undefined') {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n return checkChildren(firstChildStyle, cells);\n };\n var applyAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n var applyVAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n var unApplyAlign = function (editor, elm) {\n global$1.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$1.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n\n var buildListItems = function (inputList, startItems) {\n var appendItems = function (values, acc) {\n return acc.concat(map(values, function (item) {\n return {\n text: item.text || item.title,\n value: item.value\n };\n }));\n };\n return appendItems(inputList, startItems || []);\n };\n var rgbToHex = function (dom) {\n return function (value) {\n return startsWith(value, 'rgb') ? dom.toHex(value) : value;\n };\n };\n var extractAdvancedStyles = function (dom, elm) {\n var element = Element.fromDom(elm);\n return {\n borderwidth: getRaw(element, 'border-width').getOr(''),\n borderstyle: getRaw(element, 'border-style').getOr(''),\n bordercolor: getRaw(element, 'border-color').map(rgbToHex(dom)).getOr(''),\n backgroundcolor: getRaw(element, 'background-color').map(rgbToHex(dom)).getOr('')\n };\n };\n var getSharedValues = function (data) {\n var baseData = data[0];\n var comparisonData = data.slice(1);\n each(comparisonData, function (items) {\n each(keys(baseData), function (key) {\n each$1(items, function (itemValue, itemKey) {\n var comparisonValue = baseData[key];\n if (comparisonValue !== '' && key === itemKey) {\n if (comparisonValue !== itemValue) {\n baseData[key] = '';\n }\n }\n });\n });\n });\n return baseData;\n };\n var getAdvancedTab = function (dialogName) {\n var advTabItems = [\n {\n name: 'borderstyle',\n type: '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 (formats, formatName, editor, elm) {\n return find(formats, function (name) {\n return editor.formatter.matchNode(elm, formatName + name);\n }).getOr('');\n };\n var getHAlignment = curry(getAlignment, [\n 'left',\n 'center',\n 'right'\n ], 'align');\n var getVAlignment = curry(getAlignment, [\n 'top',\n 'middle',\n 'bottom'\n ], 'valign');\n var extractDataFromSettings = function (editor, hasAdvTableTab) {\n var style = getDefaultStyles(editor);\n var attrs = getDefaultAttributes(editor);\n var extractAdvancedStyleData = function (dom) {\n return {\n borderstyle: get(style, 'border-style').getOr(''),\n bordercolor: rgbToHex(dom)(get(style, 'border-color').getOr('')),\n backgroundcolor: rgbToHex(dom)(get(style, 'background-color').getOr(''))\n };\n };\n var defaultData = {\n height: '',\n width: '100%',\n cellspacing: '',\n cellpadding: '',\n caption: false,\n class: '',\n align: '',\n border: ''\n };\n var getBorder = function () {\n var borderWidth = style['border-width'];\n if (shouldStyleWithCss(editor) && borderWidth) {\n return { border: borderWidth };\n }\n return get(attrs, 'border').fold(function () {\n return {};\n }, function (border) {\n return { border: border };\n });\n };\n var advStyle = hasAdvTableTab ? extractAdvancedStyleData(editor.dom) : {};\n var getCellPaddingCellSpacing = function () {\n var spacing = get(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') || getTDTHOverallStyle(editor.dom, elm, 'border-width') || getTDTHOverallStyle(editor.dom, elm, 'border');\n };\n var dom = editor.dom;\n return __assign({\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n cellspacing: dom.getStyle(elm, 'border-spacing') || dom.getAttrib(elm, 'cellspacing'),\n cellpadding: dom.getAttrib(elm, 'cellpadding') || getTDTHOverallStyle(editor.dom, elm, 'padding'),\n border: getBorder(dom, elm),\n caption: !!dom.select('caption', elm)[0],\n class: dom.getAttrib(elm, 'class', ''),\n align: getHAlignment(editor, elm)\n }, hasAdvTableTab ? extractAdvancedStyles(dom, elm) : {});\n };\n var extractDataFromRowElement = function (editor, elm, hasAdvancedRowTab) {\n var dom = editor.dom;\n return __assign({\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class', ''),\n type: getRowType(editor, elm),\n align: getHAlignment(editor, elm)\n }, hasAdvancedRowTab ? extractAdvancedStyles(dom, elm) : {});\n };\n var extractDataFromCellElement = function (editor, elm, hasAdvancedCellTab) {\n var dom = editor.dom;\n return __assign({\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n celltype: getNodeName(elm),\n class: dom.getAttrib(elm, 'class', ''),\n halign: getHAlignment(editor, elm),\n valign: getVAlignment(editor, elm)\n }, hasAdvancedCellTab ? extractAdvancedStyles(dom, elm) : {});\n };\n\n var getClassList = function (editor) {\n var classes = buildListItems(getCellClassList(editor));\n if (classes.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\n var modifiers = function (testTruthy) {\n return function (editor, node) {\n var dom = editor.dom;\n var setAttrib = function (attr, value) {\n if (!testTruthy || value) {\n dom.setAttrib(node, attr, value);\n }\n };\n var setStyle = function (prop, value) {\n if (!testTruthy || value) {\n dom.setStyle(node, prop, value);\n }\n };\n var setFormat = function (formatName, value) {\n if (!testTruthy || value) {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, node, true);\n } else {\n editor.formatter.apply(formatName, { value: value }, node);\n }\n }\n };\n return {\n setAttrib: setAttrib,\n setStyle: setStyle,\n setFormat: setFormat\n };\n };\n };\n var DomModifier = {\n normal: modifiers(false),\n ifTruthy: modifiers(true)\n };\n\n var updateSimpleProps = function (modifier, data) {\n modifier.setAttrib('scope', data.scope);\n modifier.setAttrib('class', data.class);\n modifier.setStyle('width', addPxSuffix(data.width));\n modifier.setStyle('height', addPxSuffix(data.height));\n };\n var updateAdvancedProps = function (modifier, data) {\n modifier.setFormat('tablecellbackgroundcolor', data.backgroundcolor);\n modifier.setFormat('tablecellbordercolor', data.bordercolor);\n modifier.setFormat('tablecellborderstyle', data.borderstyle);\n modifier.setFormat('tablecellborderwidth', addPxSuffix(data.borderwidth));\n };\n var applyCellData = function (editor, cells, data) {\n var dom = editor.dom;\n var isSingleCell = cells.length === 1;\n each(cells, function (cell) {\n var cellElm = data.celltype && getNodeName(cell) !== data.celltype ? dom.rename(cell, data.celltype) : cell;\n var modifier = isSingleCell ? DomModifier.normal(editor, cellElm) : DomModifier.ifTruthy(editor, cellElm);\n updateSimpleProps(modifier, data);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps(modifier, data);\n }\n if (isSingleCell) {\n unApplyAlign(editor, cellElm);\n unApplyVAlign(editor, cellElm);\n }\n if (data.halign) {\n applyAlign(editor, cellElm, data.halign);\n }\n if (data.valign) {\n applyVAlign(editor, cellElm, data.valign);\n }\n });\n };\n var onSubmitCellForm = function (editor, cells, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n applyCellData(editor, cells, data);\n editor.focus();\n });\n };\n var open = function (editor) {\n var cells = getCellsFromSelection(editor);\n if (cells.length === 0) {\n return;\n }\n var cellsData = map(cells, function (cellElm) {\n return extractDataFromCellElement(editor, cellElm, hasAdvancedCellTab(editor));\n });\n var data = getSharedValues(cellsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems(editor)\n },\n getAdvancedTab('cell')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: getItems(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Cell Properties',\n size: 'normal',\n body: hasAdvancedCellTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitCellForm, editor, cells)\n });\n };\n\n var getClassList$1 = function (editor) {\n var classes = buildListItems(getRowClassList(editor));\n if (classes.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: 'header'\n },\n {\n text: 'Body',\n value: 'body'\n },\n {\n text: 'Footer',\n value: 'footer'\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\n var updateSimpleProps$1 = function (modifier, data) {\n modifier.setAttrib('scope', data.scope);\n modifier.setAttrib('class', data.class);\n modifier.setStyle('height', addPxSuffix(data.height));\n };\n var updateAdvancedProps$1 = function (modifier, data) {\n modifier.setStyle('background-color', data.backgroundcolor);\n modifier.setStyle('border-color', data.bordercolor);\n modifier.setStyle('border-style', data.borderstyle);\n };\n var applyRowData = function (editor, rows, oldData, data) {\n var isSingleRow = rows.length === 1;\n each(rows, function (rowElm) {\n if (data.type !== getNodeName(rowElm.parentNode)) {\n switchSectionType(editor, rowElm, data.type);\n }\n var modifier = isSingleRow ? DomModifier.normal(editor, rowElm) : DomModifier.ifTruthy(editor, rowElm);\n updateSimpleProps$1(modifier, data);\n if (hasAdvancedRowTab(editor)) {\n updateAdvancedProps$1(modifier, data);\n }\n if (data.align !== oldData.align) {\n unApplyAlign(editor, rowElm);\n applyAlign(editor, rowElm, data.align);\n }\n });\n };\n var onSubmitRowForm = function (editor, rows, oldData, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n applyRowData(editor, rows, oldData, data);\n editor.focus();\n });\n };\n var open$1 = function (editor) {\n var rows = getRowsFromSelection(editor);\n if (rows.length === 0) {\n return;\n }\n var rowsData = map(rows, function (rowElm) {\n return extractDataFromRowElement(editor, rowElm, hasAdvancedRowTab(editor));\n });\n var data = getSharedValues(rowsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems$1(editor)\n },\n getAdvancedTab('row')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: getItems$1(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Row Properties',\n size: 'normal',\n body: hasAdvancedRowTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getItems$2 = function (editor, classes, insertNewTable) {\n var rowColCountItems = !insertNewTable ? [] : [\n {\n type: 'input',\n name: 'cols',\n label: 'Cols',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'rows',\n label: 'Rows',\n inputMode: 'numeric'\n }\n ];\n var alwaysItems = [\n {\n type: 'input',\n name: 'width',\n label: 'Width'\n },\n {\n type: 'input',\n name: 'height',\n label: 'Height'\n }\n ];\n var appearanceItems = hasAppearanceOptions(editor) ? [\n {\n type: 'input',\n name: 'cellspacing',\n label: 'Cell spacing',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'cellpadding',\n label: 'Cell padding',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'border',\n label: 'Border width'\n },\n {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n }\n ] : [];\n var alignmentItem = [{\n type: '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 = classes.length > 0 ? [{\n type: 'selectbox',\n name: 'class',\n label: 'Class',\n items: classes\n }] : [];\n return rowColCountItems.concat(alwaysItems).concat(appearanceItems).concat(alignmentItem).concat(classListItem);\n };\n\n var styleTDTH = function (dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n if (isString(name)) {\n dom.setStyle(elm, name, value);\n } else {\n dom.setStyle(elm, name);\n }\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addPxSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addPxSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addPxSuffix(data.border);\n styles['border-spacing'] = addPxSuffix(data.cellspacing);\n } else {\n attrs.border = data.border;\n attrs.cellpadding = data.cellpadding;\n attrs.cellspacing = data.cellspacing;\n }\n if (shouldStyleWithCss(editor) && tableElm.children) {\n for (var i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addPxSuffix(data.border),\n 'padding': addPxSuffix(data.cellpadding)\n });\n if (hasAdvancedTableTab(editor)) {\n styleTDTH(dom, tableElm.children[i], { 'border-color': data.bordercolor });\n }\n }\n }\n if (hasAdvancedTableTab(editor)) {\n styles['background-color'] = data.backgroundcolor;\n styles['border-color'] = data.bordercolor;\n styles['border-style'] = data.borderstyle;\n }\n attrs.style = dom.serializeStyle(__assign(__assign({}, getDefaultStyles(editor)), styles));\n dom.setAttribs(tableElm, __assign(__assign({}, getDefaultAttributes(editor)), attrs));\n };\n var onSubmitTableForm = function (editor, tableElm, 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 = insert(editor, cols, rows, 0, 0);\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 ? '<br data-mce-bogus=\"1\"/>' : nbsp;\n tableElm.insertBefore(captionElm, tableElm.firstChild);\n }\n if (data.align === '') {\n unApplyAlign(editor, tableElm);\n } else {\n applyAlign(editor, tableElm, data.align);\n }\n 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 = extractDataFromSettings(editor, hasAdvancedTableTab(editor));\n if (insertNewTable === false) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (tableElm) {\n data = extractDataFromTableElement(editor, tableElm, hasAdvancedTableTab(editor));\n } else {\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n } else {\n data.cols = '1';\n data.rows = '1';\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n var classes = buildListItems(getTableClassList(editor));\n if (classes.length > 0) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n }\n var generalPanel = {\n type: 'grid',\n columns: 2,\n items: getItems$2(editor, classes, insertNewTable)\n };\n var nonAdvancedForm = function () {\n return {\n type: 'panel',\n items: [generalPanel]\n };\n };\n var advancedForm = function () {\n return {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: [generalPanel]\n },\n getAdvancedTab('table')\n ]\n };\n };\n var dialogBody = hasAdvancedTableTab(editor) ? advancedForm() : nonAdvancedForm();\n editor.windowManager.open({\n title: 'Table Properties',\n size: 'normal',\n body: dialogBody,\n onSubmit: curry(onSubmitTableForm, editor, tableElm),\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data\n });\n };\n\n var registerCommands = function (editor, actions, cellSelection, selections, clipboard) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n return getSelectionStartCellOrCaption(editor).each(function (cellOrCaption) {\n table(cellOrCaption, isRoot).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 setSizingMode = function (sizing) {\n return getSelectionStartCellOrCaption(editor).each(function (cellOrCaption) {\n var isForcedSizing = isResponsiveForced(editor) || isPixelsForced(editor) || isPercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(function (table) {\n if (sizing === 'relative' && !isPercentSizing$1(table)) {\n enforcePercentage(editor, table);\n } else if (sizing === 'fixed' && !isPixelSizing$1(table)) {\n enforcePixels(editor, table);\n } else if (sizing === 'responsive' && !isNoneSizing$1(table)) {\n enforceNone(table);\n }\n removeDataStyle(table);\n });\n }\n });\n };\n var getTableFromCell = function (cell) {\n return table(cell, isRoot);\n };\n var actOnSelection = function (execute) {\n return getSelectionStartCell(editor).each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = forMenu(selections, table, cell);\n execute(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n });\n });\n });\n };\n var copyRowSelection = function () {\n return getSelectionStartCell(editor).map(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var targets = forMenu(selections, table, cell);\n var generators = cellOperations(noop, Element.fromDom(editor.getDoc()), Option.none());\n return copyRows(table, targets, generators);\n });\n });\n };\n var copyColSelection = function () {\n return getSelectionStartCell(editor).map(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var targets = forMenu(selections, table, cell);\n return copyCols(table, targets);\n });\n });\n };\n var pasteOnSelection = function (execute, getRows) {\n return getRows().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell(editor).each(function (cell) {\n return getTableFromCell(cell).each(function (table) {\n var generators = paste(Element.fromDom(editor.getDoc()));\n var targets = pasteRows(selections, 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$1({\n mceTableSplitCells: function () {\n return actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n return actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n return actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n return actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n return actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n return actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n return actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n return actOnSelection(actions.deleteRow);\n },\n mceTableCutCol: function (_grid) {\n return copyColSelection().each(function (selection) {\n clipboard.setColumns(selection);\n actOnSelection(actions.deleteColumn);\n });\n },\n mceTableCutRow: function (_grid) {\n return copyRowSelection().each(function (selection) {\n clipboard.setRows(selection);\n actOnSelection(actions.deleteRow);\n });\n },\n mceTableCopyCol: function (_grid) {\n return copyColSelection().each(function (selection) {\n return clipboard.setColumns(selection);\n });\n },\n mceTableCopyRow: function (_grid) {\n return copyRowSelection().each(function (selection) {\n return clipboard.setRows(selection);\n });\n },\n mceTablePasteColBefore: function (_grid) {\n return pasteOnSelection(actions.pasteColsBefore, clipboard.getColumns);\n },\n mceTablePasteColAfter: function (_grid) {\n return pasteOnSelection(actions.pasteColsAfter, clipboard.getColumns);\n },\n mceTablePasteRowBefore: function (_grid) {\n return pasteOnSelection(actions.pasteRowsBefore, clipboard.getRows);\n },\n mceTablePasteRowAfter: function (_grid) {\n return pasteOnSelection(actions.pasteRowsAfter, clipboard.getRows);\n },\n mceTableDelete: eraseTable,\n mceTableSizingMode: function (ui, sizing) {\n return setSizingMode(sizing);\n }\n }, function (func, name) {\n return editor.addCommand(name, func);\n });\n each$1({\n mceTableCellType: function (_ui, args) {\n return actions.setTableCellType(editor, args);\n },\n mceTableRowType: function (_ui, args) {\n return actions.setTableRowType(editor, args);\n }\n }, function (func, name) {\n return editor.addCommand(name, func);\n });\n editor.addCommand('mceTableColType', function (_ui, args) {\n return get(args, 'type').each(function (type) {\n return actOnSelection(type === 'th' ? actions.makeColumnHeader : actions.unmakeColumnHeader);\n });\n });\n each$1({\n mceTableProps: curry(open$2, editor, false),\n mceTableRowProps: curry(open$1, editor),\n mceTableCellProps: curry(open, editor)\n }, function (func, name) {\n return editor.addCommand(name, function () {\n return func();\n });\n });\n editor.addCommand('mceInsertTable', function (_ui, args) {\n if (isObject(args) && keys(args).length > 0) {\n insertTableWithDataValidation(editor, args.rows, args.columns, args.options, 'Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n } else {\n open$2(editor, true);\n }\n });\n editor.addCommand('mceTableApplyCellStyle', function (_ui, args) {\n if (!isObject(args)) {\n return;\n }\n var cells = getCellsFromSelection(editor);\n if (cells.length === 0) {\n return;\n }\n each$1(args, function (value, style) {\n var formatName = 'tablecell' + style.toLowerCase().replace('-', '');\n if (editor.formatter.has(formatName) && isString(value)) {\n each(cells, function (cell) {\n DomModifier.normal(editor, cell).setFormat(formatName, value);\n });\n }\n });\n });\n };\n\n var registerQueryCommands = function (editor, actions, selections) {\n var isRoot = getIsRoot(editor);\n var getTableFromCell = function (cell) {\n return table(cell, isRoot);\n };\n each$1({\n mceTableRowType: function () {\n return actions.getTableRowType(editor);\n },\n mceTableCellType: function () {\n return actions.getTableCellType(editor);\n },\n mceTableColType: function () {\n return getSelectionStartCell(editor).bind(function (cell) {\n return getTableFromCell(cell).map(function (table) {\n var targets = forMenu(selections, table, cell);\n return actions.getTableColType(table, targets);\n });\n }).getOr('');\n }\n }, function (func, name) {\n return editor.addQueryValueHandler(name, func);\n });\n };\n\n var Clipboard = function () {\n var rows = Cell(Option.none());\n var cols = Cell(Option.none());\n var clearClipboard = function (clipboard) {\n clipboard.set(Option.none());\n };\n return {\n getRows: rows.get,\n setRows: function (r) {\n rows.set(r);\n clearClipboard(cols);\n },\n clearRows: function () {\n return clearClipboard(rows);\n },\n getColumns: cols.get,\n setColumns: function (c) {\n cols.set(c);\n clearClipboard(rows);\n },\n clearColumns: function () {\n return clearClipboard(cols);\n }\n };\n };\n\n var adt$2 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$2 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$2.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$2), { none: none$2 });\n\n var detect$4 = function (current, isRoot) {\n return table(current, isRoot).bind(function (table) {\n var all = cells(table);\n var index = findIndex(all, function (x) {\n return eq(current, x);\n });\n return index.map(function (index) {\n return {\n index: index,\n all: all\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$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\n var create$2 = function (start, soffset, finish, foffset) {\n return {\n start: constant(start),\n soffset: constant(soffset),\n finish: constant(finish),\n foffset: constant(foffset)\n };\n };\n var SimRange = { create: create$2 };\n\n var adt$3 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$1 = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$3.before;\n var on = adt$3.on;\n var after$2 = adt$3.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$2,\n cata: cata$1,\n getStart: getStart\n };\n\n var adt$4 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$4.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return 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$4.domRange;\n var relative = adt$4.relative;\n var exact = adt$4.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n return rng.selectNodeContents(element.dom());\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom());\n }, function (e, o) {\n rng.setStart(e.dom(), o);\n }, function (e) {\n rng.setStartAfter(e.dom());\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom());\n }, function (e, o) {\n rng.setEnd(e.dom(), o);\n }, function (e) {\n rng.setEndAfter(e.dom());\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: 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$5 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(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$5.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$5.ltr, rng);\n });\n } else {\n return fromRange(win, adt$5.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom(), foffset);\n rng.setEnd(start.dom(), soffset);\n return rng;\n }\n });\n };\n var ltr$2 = adt$5.ltr;\n var rtl$2 = adt$5.rtl;\n\n var searchForPoint = function (rectForOffset, x, y, maxX, length) {\n if (length === 0) {\n return 0;\n } else if (x === maxX) {\n return length - 1;\n }\n var xDelta = maxX;\n for (var i = 1; i < length; i++) {\n var rect = rectForOffset(i);\n var curDeltaX = Math.abs(x - rect.left);\n if (y <= rect.bottom) {\n if (y < rect.top || curDeltaX > xDelta) {\n return i - 1;\n } else {\n xDelta = curDeltaX;\n }\n }\n }\n return 0;\n };\n var inRect = function (rect, x, y) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n };\n\n var locateOffset = function (doc, textnode, x, y, rect) {\n var rangeForOffset = function (o) {\n var r = doc.dom().createRange();\n r.setStart(textnode.dom(), o);\n r.collapse(true);\n return r;\n };\n var rectForOffset = function (o) {\n var r = rangeForOffset(o);\n return r.getBoundingClientRect();\n };\n var length = get$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$b = 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, next(cell), lazyWire);\n };\n var backward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, 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 table(current, isRoot).bind(function (table) {\n var targets = noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions, 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 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\n var create$3 = function (selection, kill) {\n return {\n selection: constant(selection),\n kill: constant(kill)\n };\n };\n var Response = { create: create$3 };\n\n var create$4 = 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$4 };\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\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 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(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 shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n var traverse = function (item, mode) {\n return {\n item: constant(item),\n mode: constant(mode)\n };\n };\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: 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$6 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq(afterCell, beforeCell)) {\n return sharedOne$1(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$6.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$6.none('in same cell');\n }\n });\n }).getOr(adt$6.none('default'));\n };\n var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$6), {\n verify: verify,\n cata: cata$2\n });\n\n var inParent = function (parent, children, element, index) {\n return {\n parent: constant(parent),\n children: constant(children),\n element: constant(element),\n index: constant(index)\n };\n };\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children$1 = children(parent);\n return indexOf(children$1, element).map(function (index) {\n return inParent(parent, children$1, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq, 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\n var moveDown = function (caret, amount) {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n var moveUp = function (caret, amount) {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n var translate = function (caret, xDelta, yDelta) {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n var getTop$1 = function (caret) {\n return caret.top;\n };\n var getBottom = function (caret) {\n return caret.bottom;\n };\n\n var getPartialBox = function (bridge, element, offset) {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Option.none();\n };\n var toCaret = function (rect) {\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n };\n };\n var getElemBox = function (bridge, element) {\n return 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\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$7 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n var isOutside = function (caret, box) {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n var inOutsideBlock = function (bridge, element, caret) {\n return closest(element, isBlock$1).fold(constant(false), function (cell) {\n return getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$7.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$7.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$7.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$7.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$7.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$7.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$7.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$7.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$7.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$7.none();\n }\n };\n var upMovement = {\n point: getTop$1,\n adjuster: adjustUp,\n move: moveUp,\n gather: before$4\n };\n var downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$5\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (bridge, movement, original, caret, numRetries) {\n if (numRetries === 0) {\n return 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 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 findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\n return 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 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, 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, moveDown, direction);\n } else {\n return scan$1(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n var browser = detect$3().browser;\n if (browser.isChrome() || browser.isSafari() || browser.isFirefox() || browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Option.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle$2 = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan$1(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq(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 handle$2(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 (detect$3().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(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(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(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 detect$5(container, isRoot, info.start(), info.finish(), selectRange);\n });\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 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\n var isKey = function (key) {\n return function (keycode) {\n return keycode === key;\n };\n };\n var isUp = isKey(38);\n var isDown = isKey(40);\n var isNavigation = function (keycode) {\n return keycode >= 37 && keycode <= 40;\n };\n var ltr$3 = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n var rtl$3 = {\n isBackward: isKey(39),\n isForward: isKey(37)\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 get$c = 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$b(win).map(function (exactAdt) {\n return convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = Selection.relative(situs.start(), situs.finish());\n return convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var collapseSelection = function (toStart) {\n if (toStart === void 0) {\n toStart = false;\n }\n get$b(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$c(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 = function (rows, cols) {\n return {\n rows: rows,\n cols: cols\n };\n };\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n 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 = retrieve(container, annotations.selectedSelector).fold(function () {\n if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Option.none;\n }\n }, function (selected) {\n var update$1 = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(function () {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(function (edges) {\n var relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));\n annotations.clear(container);\n return Response.create(Option.none(), true);\n });\n }, function (_) {\n return Option.some(Response.create(Option.none(), true));\n });\n };\n };\n if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Option.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return retrieve(container, annotations.selectedSelector).fold(function () {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\n return Option.none();\n }\n if (isNavigation(keycode)) {\n return 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 identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n var remove$7 = function (element, classes) {\n each(classes, function (x) {\n remove$5(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add$3(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove$7(element, classes);\n };\n };\n\n var byClass = function (ephemera) {\n var addSelectionClass = addClass(ephemera.selected);\n var removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector);\n each(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionClass);\n add$3(start, ephemera.firstSelected);\n add$3(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var byAttr = function (ephemera, onSelection, onClear) {\n var removeSelectionAttributes = function (element) {\n remove(element, ephemera.selected);\n remove(element, ephemera.firstSelected);\n remove(element, ephemera.lastSelected);\n };\n var addSelectionAttribute = function (element) {\n set(element, ephemera.selected, '1');\n };\n var clear = function (container) {\n clearBeforeUpdate(container);\n onClear();\n };\n var clearBeforeUpdate = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector);\n each(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionAttribute);\n set(start, ephemera.firstSelected, '1');\n set(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate: clearBeforeUpdate,\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var SelectionAnnotation = {\n byClass: byClass,\n byAttr: byAttr\n };\n\n var getUpOrLeftCells = function (grid, selectedCells, generators) {\n var upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row() + 1);\n var upDetails = toDetailList(upGrid, generators);\n return bind(upDetails, function (detail) {\n var slicedCells = detail.cells().slice(0, selectedCells[selectedCells.length - 1].column() + 1);\n return map(slicedCells, function (cell) {\n return cell.element();\n });\n });\n };\n var getDownOrRightCells = function (grid, selectedCells, generators) {\n var downGrid = grid.slice(selectedCells[0].row() + selectedCells[0].rowspan() - 1, grid.length);\n var downDetails = toDetailList(downGrid, generators);\n return bind(downDetails, function (detail) {\n var slicedCells = detail.cells().slice(selectedCells[0].column() + selectedCells[0].colspan() - 1, +detail.cells().length);\n return map(slicedCells, function (cell) {\n return cell.element();\n });\n });\n };\n var getOtherCells = function (table, target, generators) {\n var house = Warehouse.fromTable(table);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = 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\n var hasInternalTarget = function (e) {\n return has$2(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection (editor, lazyResize, selectionTargets) {\n var onSelection = function (cells, start, finish) {\n selectionTargets.targets().each(function (targets) {\n var tableOpt = table(start);\n tableOpt.each(function (table) {\n var cloneFormats = getCloneElements(editor);\n var generators = cellOperations(noop, Element.fromDom(editor.getDoc()), cloneFormats);\n var otherCells = getOtherCells(table, targets, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n });\n };\n var onClear = function () {\n return fireTableSelectionClear(editor);\n };\n var annotations = SelectionAnnotation.byAttr(Ephemera, onSelection, onClear);\n editor.on('init', function (_e) {\n var win = editor.getWin();\n var body = getBody$1(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = Element.fromDom(sel.getStart());\n var end = Element.fromDom(sel.getEnd());\n var shared = sharedOne$1(table, [\n start,\n end\n ]);\n shared.fold(function () {\n return annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = mouse(win, body, isRoot, annotations);\n var keyHandlers = keyboard(win, body, isRoot, annotations);\n var external$1 = external(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw().shiftKey === true;\n };\n editor.on('TableSelectorChange', function (e) {\n return external$1(e.start, e.finish);\n });\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill()) {\n event.kill();\n }\n response.selection().each(function (ns) {\n var relative = 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 && 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 return 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 = directionAt(startContainer).isRtl() ? rtl$3 : ltr$3;\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n return resize.showBars();\n });\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global$2.browser.isEdge() && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var 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$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd: touchEnd };\n };\n var doubleTap = getDoubleTap();\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n return { clear: annotations.clear };\n }\n\n var getSelectionTargets = function (editor, selections) {\n var targets = Cell(Option.none());\n var changeHandlers = Cell([]);\n var findTargets = function () {\n return getSelectionStartCellOrCaption(editor).bind(function (cellOrCaption) {\n var table$1 = table(cellOrCaption);\n var isCaption = function (elem) {\n return name(elem) === 'caption';\n };\n return table$1.map(function (table) {\n if (isCaption(cellOrCaption)) {\n return noMenu(cellOrCaption);\n } else {\n return forMenu(selections, table, cellOrCaption);\n }\n });\n });\n };\n var 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 onSetupPasteable = function (getClipboardData) {\n return function (api) {\n return onSetup(api, function (targets) {\n return name(targets.element()) === 'caption' || getClipboardData().isNone();\n });\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 ExecCommand TableSelectorChange', resetTargets);\n return {\n onSetupTable: onSetupTable,\n onSetupCellOrRow: onSetupCellOrRow,\n onSetupPasteable: onSetupPasteable,\n onSetupMergeable: onSetupMergeable,\n onSetupUnmergeable: onSetupUnmergeable,\n resetTargets: resetTargets,\n targets: function () {\n return targets.get();\n }\n };\n };\n\n var addButtons = function (editor, selectionTargets, clipboard) {\n editor.ui.registry.addMenuButton('table', {\n tooltip: 'Table',\n icon: 'table',\n fetch: function (callback) {\n return callback('inserttable | cell row column | advtablesort | tableprops deletetable');\n }\n });\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n editor.ui.registry.addButton('tableprops', {\n tooltip: 'Table properties',\n onAction: cmd('mceTableProps'),\n icon: 'table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tabledelete', {\n tooltip: 'Delete table',\n onAction: cmd('mceTableDelete'),\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tablecellprops', {\n tooltip: 'Cell properties',\n onAction: cmd('mceTableCellProps'),\n icon: 'table-cell-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablemergecells', {\n tooltip: 'Merge cells',\n onAction: cmd('mceTableMergeCells'),\n icon: 'table-merge-cells',\n onSetup: selectionTargets.onSetupMergeable\n });\n editor.ui.registry.addButton('tablesplitcells', {\n tooltip: 'Split cell',\n onAction: cmd('mceTableSplitCells'),\n icon: 'table-split-cells',\n onSetup: selectionTargets.onSetupUnmergeable\n });\n editor.ui.registry.addButton('tableinsertrowbefore', {\n tooltip: 'Insert row before',\n onAction: cmd('mceTableInsertRowBefore'),\n icon: 'table-insert-row-above',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertrowafter', {\n tooltip: 'Insert row after',\n onAction: cmd('mceTableInsertRowAfter'),\n icon: 'table-insert-row-after',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tabledeleterow', {\n tooltip: 'Delete row',\n onAction: cmd('mceTableDeleteRow'),\n icon: 'table-delete-row',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablerowprops', {\n tooltip: 'Row properties',\n onAction: cmd('mceTableRowProps'),\n icon: 'table-row-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertcolbefore', {\n tooltip: 'Insert column before',\n onAction: cmd('mceTableInsertColBefore'),\n icon: 'table-insert-column-before',\n onSetup: selectionTargets.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 icon: 'cut-row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecopyrow', {\n tooltip: 'Copy row',\n icon: 'duplicate-row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepasterowbefore', {\n tooltip: 'Paste row before',\n icon: 'paste-row-before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addButton('tablepasterowafter', {\n tooltip: 'Paste row after',\n icon: 'paste-row-after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addButton('tablecutcol', {\n tooltip: 'Cut column',\n icon: 'cut-column',\n onAction: cmd('mceTableCutCol'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecopycol', {\n tooltip: 'Copy column',\n icon: 'duplicate-column',\n onAction: cmd('mceTableCopyCol'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepastecolbefore', {\n tooltip: 'Paste column before',\n icon: 'paste-column-before',\n onAction: cmd('mceTablePasteColBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getColumns)\n });\n editor.ui.registry.addButton('tablepastecolafter', {\n tooltip: 'Paste column after',\n icon: 'paste-column-after',\n onAction: cmd('mceTablePasteColAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getColumns)\n });\n editor.ui.registry.addButton('tableinsertdialog', {\n tooltip: 'Insert table',\n onAction: cmd('mceInsertTable'),\n icon: 'table'\n });\n };\n var addToolbars = function (editor) {\n var isTable = function (table) {\n return editor.dom.is(table, 'table') && editor.getBody().contains(table);\n };\n var toolbar = getToolbar(editor);\n if (toolbar.length > 0) {\n editor.ui.registry.addContextToolbar('table', {\n predicate: isTable,\n items: toolbar,\n scope: 'node',\n position: 'node'\n });\n }\n };\n\n var addMenuItems = function (editor, selectionTargets, clipboard) {\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n var insertTableAction = function (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n editor.undoManager.transact(function () {\n insert(editor, numColumns, numRows, 0, 0);\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 editor.ui.registry.addMenuItem('tableinsertrowbefore', {\n text: 'Insert row before',\n icon: 'table-insert-row-above',\n onAction: cmd('mceTableInsertRowBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tableinsertrowafter', {\n text: 'Insert row after',\n icon: 'table-insert-row-after',\n onAction: cmd('mceTableInsertRowAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tabledeleterow', {\n text: 'Delete row',\n icon: 'table-delete-row',\n onAction: cmd('mceTableDeleteRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablerowprops', {\n text: 'Row properties',\n icon: 'table-row-properties',\n onAction: cmd('mceTableRowProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecutrow', {\n text: 'Cut row',\n icon: 'cut-row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecopyrow', {\n text: 'Copy row',\n icon: 'duplicate-row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablepasterowbefore', {\n text: 'Paste row before',\n icon: 'paste-row-before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addMenuItem('tablepasterowafter', {\n text: 'Paste row after',\n icon: 'paste-row-after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n var row = {\n type: 'nestedmenuitem',\n text: 'Row',\n getSubmenuItems: function () {\n return 'tableinsertrowbefore tableinsertrowafter tabledeleterow tablerowprops | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter';\n }\n };\n editor.ui.registry.addMenuItem('tableinsertcolumnbefore', {\n text: 'Insert column before',\n icon: 'table-insert-column-before',\n onAction: cmd('mceTableInsertColBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tableinsertcolumnafter', {\n text: 'Insert column after',\n icon: 'table-insert-column-after',\n onAction: cmd('mceTableInsertColAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tabledeletecolumn', {\n text: 'Delete column',\n icon: 'table-delete-column',\n onAction: cmd('mceTableDeleteCol'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecutcolumn', {\n text: 'Cut column',\n icon: 'cut-column',\n onAction: cmd('mceTableCutCol'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecopycolumn', {\n text: 'Copy column',\n icon: 'duplicate-column',\n onAction: cmd('mceTableCopyCol'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablepastecolumnbefore', {\n text: 'Paste column before',\n icon: 'paste-column-before',\n onAction: cmd('mceTablePasteColBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getColumns)\n });\n editor.ui.registry.addMenuItem('tablepastecolumnafter', {\n text: 'Paste column after',\n icon: 'paste-column-after',\n onAction: cmd('mceTablePasteColAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getColumns)\n });\n var column = {\n type: 'nestedmenuitem',\n text: 'Column',\n getSubmenuItems: function () {\n return 'tableinsertcolumnbefore tableinsertcolumnafter tabledeletecolumn';\n }\n };\n editor.ui.registry.addMenuItem('tablecellprops', {\n text: 'Cell properties',\n icon: 'table-cell-properties',\n onAction: cmd('mceTableCellProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablemergecells', {\n text: 'Merge cells',\n icon: 'table-merge-cells',\n onAction: cmd('mceTableMergeCells'),\n onSetup: selectionTargets.onSetupMergeable\n });\n editor.ui.registry.addMenuItem('tablesplitcells', {\n text: 'Split cell',\n icon: 'table-split-cells',\n onAction: cmd('mceTableSplitCells'),\n onSetup: selectionTargets.onSetupUnmergeable\n });\n var cell = {\n type: 'nestedmenuitem',\n text: 'Cell',\n getSubmenuItems: function () {\n return 'tablecellprops tablemergecells tablesplitcells';\n }\n };\n if (hasTableGrid(editor) === false) {\n editor.ui.registry.addMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n onAction: cmd('mceInsertTable')\n });\n } else {\n editor.ui.registry.addNestedMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'inserttable',\n onAction: insertTableAction\n }];\n }\n });\n }\n editor.ui.registry.addMenuItem('inserttabledialog', {\n text: 'Insert table',\n icon: 'table',\n onAction: cmd('mceInsertTable')\n });\n editor.ui.registry.addMenuItem('tableprops', tableProperties);\n editor.ui.registry.addMenuItem('deletetable', deleteTable);\n editor.ui.registry.addNestedMenuItem('row', row);\n editor.ui.registry.addNestedMenuItem('column', column);\n editor.ui.registry.addNestedMenuItem('cell', cell);\n editor.ui.registry.addContextMenu('table', {\n update: function () {\n selectionTargets.resetTargets();\n return selectionTargets.targets().fold(function () {\n return '';\n }, function (targets) {\n if (name(targets.element()) === 'caption') {\n return 'tableprops deletetable';\n } else {\n return 'cell row column | advtablesort | tableprops deletetable';\n }\n });\n }\n });\n };\n\n var cellFormats = {\n tablecellbackgroundcolor: {\n selector: 'td,th',\n styles: { backgroundColor: '%value' },\n remove_similar: true\n },\n tablecellbordercolor: {\n selector: 'td,th',\n styles: { borderColor: '%value' },\n remove_similar: true\n },\n tablecellborderstyle: {\n selector: 'td,th',\n styles: { borderStyle: '%value' },\n remove_similar: true\n },\n tablecellborderwidth: {\n selector: 'td,th',\n styles: { borderWidth: '%value' },\n remove_similar: true\n }\n };\n var registerFormats = function (editor) {\n editor.formatter.register(cellFormats);\n };\n\n function Plugin(editor) {\n var selections = Selections(editor);\n var selectionTargets = getSelectionTargets(editor, selections);\n var resizeHandler = getResizeHandler(editor);\n var cellSelection = CellSelection(editor, resizeHandler.lazyResize, selectionTargets);\n var actions = TableActions(editor, resizeHandler.lazyWire);\n var clipboard = Clipboard();\n registerCommands(editor, actions, cellSelection, selections, clipboard);\n registerQueryCommands(editor, actions, selections);\n registerEvents(editor, selections, actions, cellSelection);\n addMenuItems(editor, selectionTargets, clipboard);\n addButtons(editor, selectionTargets, clipboard);\n addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(firstSelected);\n editor.serializer.addTempAttr(lastSelected);\n registerFormats(editor);\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n handle$1(e, editor, actions, resizeHandler.lazyWire);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n });\n return getApi(editor, clipboard, resizeHandler, selectionTargets);\n }\n function Plugin$1 () {\n global.add('table', Plugin);\n }\n\n Plugin$1();\n\n}(window));\n","import axios from '@/plugins/axios'\r\n\r\nexport function getAnnouncements(params = {}) {\r\n return axios.get('announcements', {\r\n params,\r\n })\r\n}\r\n\r\nexport function editAnnouncement(id) {\r\n return axios.get(`announcements/${id}/edit`)\r\n}\r\n\r\nexport function storeAnnouncement(data) {\r\n return axios.post('announcements', data)\r\n}\r\n\r\nexport function updateAnnouncement(id, data) {\r\n return axios.put(`announcements/${id}`, data)\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-card',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('content-header')]},proxy:true}])},[_c('el-row',{attrs:{\"type\":\"flex\"}},[_c('lz-form',{ref:\"form\",attrs:{\"get-data\":_vm.getData,\"submit\":_vm.onSubmit,\"form\":_vm.form,\"errors\":_vm.errors,\"edit-mode\":_vm.editMode},on:{\"update:form\":function($event){_vm.form=$event},\"update:errors\":function($event){_vm.errors=$event}}},[_c('el-form-item',{attrs:{\"label\":\"公告标题\",\"required\":\"\",\"prop\":\"title\"}},[_c('el-input',{model:{value:(_vm.form.title),callback:function ($$v) {_vm.$set(_vm.form, \"title\", $$v)},expression:\"form.title\"}})],1),_c('el-form-item',{attrs:{\"label\":\"公告描述\",\"required\":\"\",\"prop\":\"description\"}},[_c('el-input',{model:{value:(_vm.form.description),callback:function ($$v) {_vm.$set(_vm.form, \"description\", $$v)},expression:\"form.description\"}})],1),_c('el-form-item',{attrs:{\"label\":\"投放区域\",\"required\":\"\",\"prop\":\"area_id\"}},[_c('el-select',{attrs:{\"clearable\":\"\",\"placeholder\":\"选择区域\"},model:{value:(_vm.form.area_id),callback:function ($$v) {_vm.$set(_vm.form, \"area_id\", $$v)},expression:\"form.area_id\"}},_vm._l((_vm.areas),function(i){return _c('el-option',{key:i.id,attrs:{\"label\":i.name,\"value\":i.id}})}),1)],1),_c('el-form-item',{attrs:{\"label\":\"公告详情\",\"required\":\"\",\"prop\":\"body\"}},[_c('tinymce-editor',{ref:\"editor\",attrs:{\"disabled\":_vm.disabled},on:{\"onClick\":_vm.onClick},model:{value:(_vm.form.body),callback:function ($$v) {_vm.$set(_vm.form, \"body\", $$v)},expression:\"form.body\"}})],1),_c('el-form-item',{attrs:{\"label\":\"投放状态\",\"required\":\"\",\"prop\":\"status\"}},[_c('el-radio',{attrs:{\"label\":\"0\"},model:{value:(_vm.form.status),callback:function ($$v) {_vm.$set(_vm.form, \"status\", $$v)},expression:\"form.status\"}},[_vm._v(\"无效\")]),_c('el-radio',{attrs:{\"label\":\"1\"},model:{value:(_vm.form.status),callback:function ($$v) {_vm.$set(_vm.form, \"status\", $$v)},expression:\"form.status\"}},[_vm._v(\"有效\")])],1),_c('el-form-item',{attrs:{\"label\":\"过期时间\",\"required\":\"\",\"prop\":\"expiration_time\"}},[_c('el-date-picker',{attrs:{\"type\":\"datetime\",\"placeholder\":\"选择日期时间\"},model:{value:(_vm.form.expiration_time),callback:function ($$v) {_vm.$set(_vm.form, \"expiration_time\", $$v)},expression:\"form.expiration_time\"}})],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tinymce-editor\"},[_c('editor',{attrs:{\"init\":_vm.init,\"disabled\":_vm.disabled},on:{\"onClick\":_vm.onClick},model:{value:(_vm.myValue),callback:function ($$v) {_vm.myValue=$$v},expression:\"myValue\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar validEvents = [\n 'onActivate',\n 'onAddUndo',\n 'onBeforeAddUndo',\n 'onBeforeExecCommand',\n 'onBeforeGetContent',\n 'onBeforeRenderUI',\n 'onBeforeSetContent',\n 'onBeforePaste',\n 'onBlur',\n 'onChange',\n 'onClearUndos',\n 'onClick',\n 'onContextMenu',\n 'onCopy',\n 'onCut',\n 'onDblclick',\n 'onDeactivate',\n 'onDirty',\n 'onDrag',\n 'onDragDrop',\n 'onDragEnd',\n 'onDragGesture',\n 'onDragOver',\n 'onDrop',\n 'onExecCommand',\n 'onFocus',\n 'onFocusIn',\n 'onFocusOut',\n 'onGetContent',\n 'onHide',\n 'onInit',\n 'onKeyDown',\n 'onKeyPress',\n 'onKeyUp',\n 'onLoadContent',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOut',\n 'onMouseOver',\n 'onMouseUp',\n 'onNodeChange',\n 'onObjectResizeStart',\n 'onObjectResized',\n 'onObjectSelected',\n 'onPaste',\n 'onPostProcess',\n 'onPostRender',\n 'onPreProcess',\n 'onProgressState',\n 'onRedo',\n 'onRemove',\n 'onReset',\n 'onSaveContent',\n 'onSelectionChange',\n 'onSetAttrib',\n 'onSetContent',\n 'onShow',\n 'onSubmit',\n 'onUndo',\n 'onVisualAid'\n];\nvar isValidKey = function (key) { return validEvents.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 input undo redo', function () {\n ctx.$emit('input', editor.getContent({ format: ctx.$props.outputFormat }));\n });\n};\nvar initEditor = function (initEvent, ctx, editor) {\n var value = ctx.$props.value ? ctx.$props.value : '';\n var initialValue = ctx.$props.initialValue ? ctx.$props.initialValue : '';\n editor.setContent(value || 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","<template>\r\n <div class=\"tinymce-editor\">\r\n <editor\r\n v-model=\"myValue\"\r\n :init=\"init\"\r\n :disabled=\"disabled\"\r\n @onClick=\"onClick\"\r\n />\r\n </div>\r\n</template>\r\n<script>\r\nimport tinymce from 'tinymce/tinymce'\r\nimport Editor from '@tinymce/tinymce-vue'\r\nimport 'tinymce/themes/silver'\r\n// 编辑器插件plugins\r\n// 更多插件参考:https://www.tiny.cloud/docs/plugins/\r\nimport 'tinymce/plugins/image'// 插入上传图片插件\r\nimport 'tinymce/plugins/media'// 插入视频插件\r\nimport 'tinymce/plugins/table'// 插入表格插件\r\nimport 'tinymce/plugins/lists'// 列表插件\r\nimport 'tinymce/plugins/wordcount'// 字数统计插件\r\nimport { getToken } from '@/libs/token'\r\n\r\nexport default {\r\n components: {\r\n Editor,\r\n },\r\n props: {\r\n value: {\r\n type: String,\r\n default: '',\r\n },\r\n // 基本路径,默认为空根目录,如果你的项目发布后的地址为目录形式,\r\n // 即abc.com/tinymce,baseUrl需要配置成tinymce,不然发布后资源会找不到\r\n baseUrl: {\r\n type: String,\r\n default: '',\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n plugins: {\r\n type: [String, Array],\r\n default: 'lists image media table wordcount',\r\n },\r\n toolbar: {\r\n type: [String, Array],\r\n default: 'undo redo | formatselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat',\r\n },\r\n },\r\n data() {\r\n return {\r\n init: {\r\n language: 'zh_CN',\r\n language_url: `${this.baseUrl}/tinymce/langs/zh_CN.js`,\r\n skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide`,\r\n content_css: `${this.baseUrl}/tinymce/skins/content/default/content.css`,\r\n // skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide-dark`, // 暗色系\r\n // content_css: `${this.baseUrl}/tinymce/skins/content/dark/content.css`, // 暗色系\r\n height: 300,\r\n plugins: this.plugins,\r\n toolbar: this.toolbar,\r\n branding: false,\r\n menubar: false,\r\n // 此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,\r\n // 如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler\r\n // images_upload_handler: (blobInfo, success, failure) => {\r\n // const img = 'data:image/jpeg;base64,' + blobInfo.base64()\r\n // success(img)\r\n // },\r\n images_upload_handler: function (blobInfo, success, failure) {\r\n var xhr, formData\r\n var token = getToken()\r\n xhr = new XMLHttpRequest()\r\n xhr.withCredentials = false\r\n xhr.open('POST', '/admin-api/announcements/uploadImg2')\r\n xhr.setRequestHeader('Authorization', token)\r\n\r\n xhr.onload = function () {\r\n var json\r\n\r\n if (xhr.status != 200) {\r\n failure('HTTP Error: ' + xhr.status)\r\n return\r\n }\r\n json = JSON.parse(xhr.responseText)\r\n\r\n if (!json || typeof json.location !== 'string') {\r\n failure('Invalid JSON: ' + xhr.responseText)\r\n return\r\n }\r\n\r\n success(json.location)\r\n }\r\n\r\n formData = new FormData()\r\n formData.append('img', blobInfo.blob(), blobInfo.filename())\r\n\r\n xhr.send(formData)\r\n },\r\n },\r\n myValue: this.value,\r\n }\r\n },\r\n mounted() {\r\n tinymce.init(this.init)\r\n },\r\n methods: {\r\n // 添加相关的事件,可用的事件参照文档=> https://github.com/tinymce/tinymce-vue => All available events\r\n // 需要什么事件可以自己增加\r\n onClick(e) {\r\n this.$emit('onClick', e, tinymce)\r\n },\r\n // 可以添加一些自己的自定义事件,如清空内容\r\n clear() {\r\n this.myValue = ''\r\n },\r\n },\r\n watch: {\r\n value(newValue) {\r\n this.myValue = newValue\r\n },\r\n myValue(newValue) {\r\n this.$emit('input', newValue)\r\n },\r\n },\r\n}\r\n</script>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TinymceEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TinymceEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TinymceEditor.vue?vue&type=template&id=2a57f782&\"\nimport script from \"./TinymceEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./TinymceEditor.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\r\n <el-card>\r\n <template #header>\r\n <content-header/>\r\n </template>\r\n <el-row type=\"flex\">\r\n <lz-form\r\n ref=\"form\"\r\n :get-data=\"getData\"\r\n :submit=\"onSubmit\"\r\n :form.sync=\"form\"\r\n :errors.sync=\"errors\"\r\n :edit-mode=\"editMode\"\r\n >\r\n <el-form-item label=\"公告标题\" required prop=\"title\">\r\n <el-input v-model=\"form.title\"/>\r\n </el-form-item>\r\n <el-form-item label=\"公告描述\" required prop=\"description\">\r\n <el-input v-model=\"form.description\"/>\r\n </el-form-item>\r\n <el-form-item label=\"投放区域\" required prop=\"area_id\">\r\n <el-select\r\n v-model=\"form.area_id\"\r\n clearable\r\n placeholder=\"选择区域\"\r\n >\r\n <el-option\r\n v-for=\"i in areas\"\r\n :key=\"i.id\"\r\n :label=\"i.name\"\r\n :value=\"i.id\"\r\n />\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"公告详情\" required prop=\"body\">\r\n <!-- <Editor :value=\"form.body\" @input=\"handelIncrease\"/> -->\r\n <tinymce-editor\r\n ref=\"editor\"\r\n v-model=\"form.body\"\r\n :disabled=\"disabled\"\r\n @onClick=\"onClick\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"投放状态\" required prop=\"status\">\r\n <el-radio v-model=\"form.status\" label=\"0\">无效</el-radio>\r\n <el-radio v-model=\"form.status\" label=\"1\">有效</el-radio>\r\n </el-form-item>\r\n <el-form-item label=\"过期时间\" required prop=\"expiration_time\">\r\n <el-date-picker\r\n v-model=\"form.expiration_time\"\r\n type=\"datetime\"\r\n placeholder=\"选择日期时间\"\r\n />\r\n </el-form-item>\r\n </lz-form>\r\n </el-row>\r\n </el-card>\r\n</template>\r\n\r\n<script>\r\nimport { editAnnouncement, storeAnnouncement, updateAnnouncement } from '@/api/announcements'\r\nimport { getAreas } from '@/api/area'\r\nimport LzForm from '@c/LzForm'\r\nimport FormHelper from '@c/LzForm/FormHelper'\r\nimport Editor from '@c/Editor'\r\nimport TinymceEditor from '@c/Tinymce/TinymceEditor'\r\n\r\nexport default {\r\n name: 'Form',\r\n components: {\r\n LzForm,\r\n Editor,\r\n TinymceEditor,\r\n },\r\n mixins: [\r\n FormHelper,\r\n ],\r\n data() {\r\n return {\r\n form: {\r\n title: '',\r\n description: '',\r\n area_id: '',\r\n body: '',\r\n status: '1',\r\n expiration_time: '',\r\n },\r\n msg: '',\r\n disabled: false,\r\n errors: {},\r\n areas: [],\r\n showDetail: false,\r\n }\r\n },\r\n created() {\r\n if (this.editMode == false) {\r\n this.showDetail = true\r\n }\r\n },\r\n methods: {\r\n async getData() {\r\n const [\r\n { data: areas },\r\n ] = await Promise.all([\r\n getAreas({ all: 1 }),\r\n ])\r\n\r\n this.areas = [{ id: 0, name: '全部' }]\r\n areas.map(i => {\r\n this.areas.push({ id: i.id, name: i.name })\r\n })\r\n\r\n // console.log(thisstatus.editMode)\r\n if (this.editMode) {\r\n const { data } = await editAnnouncement(this.resourceId)\r\n data.status = data.status ? '1' : '0'\r\n this.fillForm(data)\r\n // console.log(this.form.detail, 2222)\r\n }\r\n },\r\n async onSubmit() {\r\n if (this.editMode) {\r\n await updateAnnouncement(this.resourceId, this.form)\r\n } else {\r\n await storeAnnouncement(this.form)\r\n }\r\n },\r\n handelIncrease(step) {\r\n // console.log('step', step)\r\n if (this.form.body == '') {\r\n this.showDetail = true\r\n }\r\n this.form.body = step\r\n },\r\n onClick(e, editor) {\r\n // console.log('Element clicked')\r\n // console.log(e)\r\n // console.log(editor)\r\n },\r\n },\r\n}\r\n</script>\r\n<style>\r\n .avatar-uploader .el-upload {\r\n border: 1px dashed #d9d9d9;\r\n border-radius: 6px;\r\n cursor: pointer;\r\n position: relative;\r\n overflow: hidden;\r\n }\r\n .avatar-uploader .el-upload:hover {\r\n border-color: #409EFF;\r\n }\r\n .avatar-uploader-icon {\r\n font-size: 28px;\r\n color: #8c939d;\r\n width: 178px;\r\n height: 178px;\r\n line-height: 178px;\r\n text-align: center;\r\n }\r\n .avatara {\r\n /* width: 178px; */\r\n height: 178px;\r\n display: block;\r\n }\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Form.vue?vue&type=template&id=004d356c&\"\nimport script from \"./Form.vue?vue&type=script&lang=js&\"\nexport * from \"./Form.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Form.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar getGlobal = function () { return (typeof window !== 'undefined' ? window : global); };\nvar getTinymce = function () {\n var global = getGlobal();\n return global && global.tinymce ? global.tinymce : null;\n};\nexport { getTinymce };\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.4.2 (2020-08-17)\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 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 var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = eq(null);\n var isBoolean = isSimpleType('boolean');\n var isNumber = isSimpleType('number');\n\n var nativePush = Array.prototype.push;\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\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 __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 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 var remove = function (element, key) {\n element.dom().removeAttribute(key);\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$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var hasDimensions = function (editor) {\n return editor.getParam('image_dimensions', true, 'boolean');\n };\n var hasAdvTab = function (editor) {\n return editor.getParam('image_advtab', false, 'boolean');\n };\n var hasUploadTab = function (editor) {\n return editor.getParam('image_uploadtab', true, 'boolean');\n };\n var getPrependUrl = function (editor) {\n return editor.getParam('image_prepend_url', '', 'string');\n };\n var getClassList = function (editor) {\n return editor.getParam('image_class_list');\n };\n var hasDescription = function (editor) {\n return editor.getParam('image_description', true, 'boolean');\n };\n var hasImageTitle = function (editor) {\n return editor.getParam('image_title', false, 'boolean');\n };\n var hasImageCaption = function (editor) {\n return editor.getParam('image_caption', false, 'boolean');\n };\n var getImageList = function (editor) {\n return editor.getParam('image_list', false);\n };\n var hasUploadUrl = function (editor) {\n return !!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\n var parseIntAndGetMax = function (val1, val2) {\n return Math.max(parseInt(val1, 10), parseInt(val2, 10));\n };\n var getImageSize = function (url) {\n return new global$2(function (callback) {\n var img = 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(global$2.resolve(dimensions));\n };\n img.onerror = function () {\n done(global$2.reject('Failed to get image dimensions for: ' + url));\n };\n var style = img.style;\n style.visibility = 'hidden';\n style.position = 'fixed';\n style.bottom = style.left = '0px';\n style.width = style.height = 'auto';\n domGlobals.document.body.appendChild(img);\n img.src = url;\n });\n };\n var removePixelSuffix = function (value) {\n if (value) {\n value = value.replace(/px$/, '');\n }\n return value;\n };\n var addPixelSuffix = function (value) {\n if (value.length > 0 && /^[0-9]+$/.test(value)) {\n value += 'px';\n }\n return value;\n };\n var mergeMargins = function (css) {\n if (css.margin) {\n var splitMargin = String(css.margin).split(' ');\n switch (splitMargin.length) {\n case 1:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[0];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[0];\n break;\n case 2:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 3:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 4:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[3];\n }\n delete css.margin;\n }\n return css;\n };\n var createImageList = function (editor, callback) {\n var imageList = getImageList(editor);\n if (typeof imageList === 'string') {\n global$3.send({\n url: imageList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else if (typeof imageList === 'function') {\n imageList(callback);\n } else {\n callback(imageList);\n }\n };\n var waitLoadImage = function (editor, data, imgElm) {\n var selectImage = function () {\n imgElm.onload = imgElm.onerror = null;\n if (editor.selection) {\n editor.selection.select(imgElm);\n editor.nodeChanged();\n }\n };\n imgElm.onload = function () {\n if (!data.width && !data.height && hasDimensions(editor)) {\n editor.dom.setAttribs(imgElm, {\n width: String(imgElm.clientWidth),\n height: String(imgElm.clientHeight)\n });\n }\n selectImage();\n };\n imgElm.onerror = selectImage;\n };\n var blobToDataUri = function (blob) {\n return new global$2(function (resolve, reject) {\n var reader = new 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\n var DOM = global$1.DOM;\n var getHspace = function (image) {\n if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n return removePixelSuffix(image.style.marginLeft);\n } else {\n return '';\n }\n };\n var getVspace = function (image) {\n if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {\n return removePixelSuffix(image.style.marginTop);\n } else {\n return '';\n }\n };\n var getBorder = function (image) {\n if (image.style.borderWidth) {\n return removePixelSuffix(image.style.borderWidth);\n } else {\n return '';\n }\n };\n var getAttrib = function (image, name) {\n if (image.hasAttribute(name)) {\n return image.getAttribute(name);\n } else {\n return '';\n }\n };\n var getStyle = function (image, name) {\n return image.style[name] ? image.style[name] : '';\n };\n var hasCaption = function (image) {\n return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n };\n var updateAttrib = function (image, name, value) {\n if (value === '') {\n image.removeAttribute(name);\n } else {\n image.setAttribute(name, value);\n }\n };\n var wrapInFigure = function (image) {\n var figureElm = DOM.create('figure', { class: 'image' });\n DOM.insertAfter(figureElm, image);\n figureElm.appendChild(image);\n figureElm.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n figureElm.contentEditable = 'false';\n };\n var removeFigure = function (image) {\n var figureElm = image.parentNode;\n DOM.insertAfter(image, figureElm);\n DOM.remove(figureElm);\n };\n var toggleCaption = function (image) {\n if (hasCaption(image)) {\n removeFigure(image);\n } else {\n wrapInFigure(image);\n }\n };\n var normalizeStyle = function (image, normalizeCss) {\n var attrValue = image.getAttribute('style');\n var value = normalizeCss(attrValue !== null ? attrValue : '');\n if (value.length > 0) {\n image.setAttribute('style', value);\n image.setAttribute('data-mce-style', value);\n } else {\n image.removeAttribute('style');\n }\n };\n var setSize = function (name, normalizeCss) {\n return function (image, name, value) {\n if (image.style[name]) {\n image.style[name] = addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n updateAttrib(image, name, value);\n }\n };\n };\n var getSize = function (image, name) {\n if (image.style[name]) {\n return removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n var setHspace = function (image, value) {\n var pxValue = addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n var setVspace = function (image, value) {\n var pxValue = addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n var setBorder = function (image, value) {\n var pxValue = addPixelSuffix(value);\n image.style.borderWidth = pxValue;\n };\n var setBorderStyle = function (image, value) {\n image.style.borderStyle = value;\n };\n var getBorderStyle = function (image) {\n return getStyle(image, 'borderStyle');\n };\n var isFigure = function (elm) {\n return elm.nodeName === 'FIGURE';\n };\n var isImage = function (elm) {\n return elm.nodeName === 'IMG';\n };\n var getIsDecorative = function (image) {\n return DOM.getAttrib(image, 'alt').length === 0 && DOM.getAttrib(image, 'role') === 'presentation';\n };\n var getAlt = function (image) {\n if (getIsDecorative(image)) {\n return '';\n } else {\n return getAttrib(image, 'alt');\n }\n };\n var defaultData = function () {\n return {\n src: '',\n alt: '',\n title: '',\n width: '',\n height: '',\n class: '',\n style: '',\n caption: false,\n hspace: '',\n vspace: '',\n border: '',\n borderStyle: '',\n isDecorative: false\n };\n };\n var getStyleValue = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n updateAttrib(image, 'style', data.style);\n if (getHspace(image) || data.hspace !== '') {\n setHspace(image, data.hspace);\n }\n if (getVspace(image) || data.vspace !== '') {\n setVspace(image, data.vspace);\n }\n if (getBorder(image) || data.border !== '') {\n setBorder(image, data.border);\n }\n if (getBorderStyle(image) || data.borderStyle !== '') {\n setBorderStyle(image, data.borderStyle);\n }\n return normalizeCss(image.getAttribute('style'));\n };\n var create = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n write(normalizeCss, __assign(__assign({}, data), { caption: false }), image);\n setAlt(image, data.alt, data.isDecorative);\n if (data.caption) {\n var figure = DOM.create('figure', { class: 'image' });\n figure.appendChild(image);\n figure.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n figure.contentEditable = 'false';\n return figure;\n } else {\n return image;\n }\n };\n var read = function (normalizeCss, image) {\n return {\n src: getAttrib(image, 'src'),\n alt: getAlt(image),\n title: getAttrib(image, 'title'),\n width: getSize(image, 'width'),\n height: getSize(image, 'height'),\n class: getAttrib(image, 'class'),\n style: normalizeCss(getAttrib(image, 'style')),\n caption: hasCaption(image),\n hspace: getHspace(image),\n vspace: getVspace(image),\n border: getBorder(image),\n borderStyle: getStyle(image, 'borderStyle'),\n isDecorative: getIsDecorative(image)\n };\n };\n var updateProp = function (image, oldData, newData, name, set) {\n if (newData[name] !== oldData[name]) {\n set(image, name, newData[name]);\n }\n };\n var setAlt = function (image, alt, isDecorative) {\n if (isDecorative) {\n DOM.setAttrib(image, 'role', 'presentation');\n var sugarImage = Element.fromDom(image);\n set(sugarImage, 'alt', '');\n } else {\n if (isNull(alt)) {\n var sugarImage = Element.fromDom(image);\n remove(sugarImage, '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) {\n if (newData.alt !== oldData.alt || newData.isDecorative !== oldData.isDecorative) {\n setAlt(image, newData.alt, newData.isDecorative);\n }\n };\n var normalized = function (set, normalizeCss) {\n return function (image, name, value) {\n set(image, value);\n normalizeStyle(image, normalizeCss);\n };\n };\n var write = function (normalizeCss, newData, image) {\n var oldData = read(normalizeCss, image);\n updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {\n return toggleCaption(image);\n });\n updateProp(image, oldData, newData, 'src', updateAttrib);\n updateProp(image, oldData, newData, 'title', updateAttrib);\n updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n updateProp(image, oldData, newData, 'class', updateAttrib);\n updateProp(image, oldData, newData, 'style', normalized(function (image, value) {\n return updateAttrib(image, 'style', value);\n }, normalizeCss));\n updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));\n updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));\n updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));\n updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));\n updateAlt(image, oldData, newData);\n };\n\n var normalizeCss = function (editor, cssText) {\n var css = editor.dom.styles.parse(cssText);\n var mergedCss = mergeMargins(css);\n var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n return editor.dom.styles.serialize(compressed);\n };\n var getSelectedImage = function (editor) {\n var imgElm = editor.selection.getNode();\n var figureElm = editor.dom.getParent(imgElm, 'figure.image');\n if (figureElm) {\n return editor.dom.select('img', figureElm)[0];\n }\n if (imgElm && (imgElm.nodeName !== 'IMG' || isPlaceholderImage(imgElm))) {\n return null;\n }\n return imgElm;\n };\n var splitTextBlock = function (editor, figure) {\n var dom = editor.dom;\n var 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) {\n var elm = create(function (css) {\n return normalizeCss(editor, css);\n }, data);\n editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n editor.focus();\n editor.selection.setContent(elm.outerHTML);\n var insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n if (isFigure(insertedElm)) {\n var figure = splitTextBlock(editor, insertedElm);\n editor.selection.select(figure);\n } else {\n editor.selection.select(insertedElm);\n }\n };\n var syncSrcAttr = function (editor, image) {\n editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n };\n var deleteImage = function (editor, image) {\n if (image) {\n var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;\n editor.dom.remove(elm);\n editor.focus();\n editor.nodeChanged();\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n }\n }\n };\n var writeImageDataToSelection = function (editor, data) {\n var image = getSelectedImage(editor);\n write(function (css) {\n return normalizeCss(editor, css);\n }, data, image);\n syncSrcAttr(editor, image);\n if (isFigure(image.parentNode)) {\n var figure = image.parentNode;\n splitTextBlock(editor, figure);\n editor.selection.select(image.parentNode);\n } else {\n editor.selection.select(image);\n waitLoadImage(editor, data, image);\n }\n };\n var insertOrUpdateImage = function (editor, partialData) {\n var image = getSelectedImage(editor);\n if (image) {\n var selectedImageData = read(function (css) {\n return normalizeCss(editor, css);\n }, image);\n var data = __assign(__assign({}, selectedImageData), partialData);\n if (data.src) {\n writeImageDataToSelection(editor, data);\n } else {\n deleteImage(editor, image);\n }\n } else if (partialData.src) {\n insertImageAtCaret(editor, __assign(__assign({}, defaultData()), partialData));\n }\n };\n\n var global$4 = 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$4.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 = 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 if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n var json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n var formData = new 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$2(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$2.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);\n };\n settings = global$4.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 = new global$2(function (completer) {\n createImageList(editor, function (imageList) {\n completer(urlListSanitizer(imageList).map(function (items) {\n return flatten([\n [{\n text: 'None',\n value: ''\n }],\n items\n ]);\n }));\n });\n });\n var classList = ListUtils.sanitize(getClassList(editor));\n var hasAdvTab$1 = hasAdvTab(editor);\n var hasUploadTab$1 = hasUploadTab(editor);\n var hasUploadUrl$1 = hasUploadUrl(editor);\n var hasUploadHandler$1 = hasUploadHandler(editor);\n var image = readImageDataFromSelection(editor);\n var hasDescription$1 = hasDescription(editor);\n var hasImageTitle$1 = hasImageTitle(editor);\n var hasDimensions$1 = hasDimensions(editor);\n var hasImageCaption$1 = hasImageCaption(editor);\n var hasAccessibilityOptions = showAccessibilityOptions(editor);\n var url = getUploadUrl(editor);\n var basePath = getUploadBasePath(editor);\n var credentials = getUploadCredentials(editor);\n var handler = getUploadHandler(editor);\n var automaticUploads = isAutomaticUploadsEnabled(editor);\n var prependURL = Option.some(getPrependUrl(editor)).filter(function (preUrl) {\n return isString(preUrl) && preUrl.length > 0;\n });\n return futureImageList.then(function (imageList) {\n return {\n image: image,\n imageList: imageList,\n classList: classList,\n hasAdvTab: hasAdvTab$1,\n hasUploadTab: hasUploadTab$1,\n hasUploadUrl: hasUploadUrl$1,\n hasUploadHandler: hasUploadHandler$1,\n hasDescription: hasDescription$1,\n hasImageTitle: hasImageTitle$1,\n hasDimensions: hasDimensions$1,\n hasImageCaption: hasImageCaption$1,\n 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, removeEmptyAlt) {\n return {\n src: data.src.value,\n alt: data.alt.length === 0 && removeEmptyAlt ? null : data.alt,\n title: data.title,\n width: data.dimensions.width,\n height: data.dimensions.height,\n class: data.classes,\n style: data.style,\n caption: data.caption,\n hspace: data.hspace,\n vspace: data.vspace,\n border: data.border,\n borderStyle: data.borderstyle,\n isDecorative: data.isDecorative\n };\n };\n var addPrependUrl2 = function (info, srcURL) {\n if (!/^(?:[a-zA-Z]+:)?\\/\\//.test(srcURL)) {\n return info.prependURL.bind(function (prependUrl) {\n if (srcURL.substring(0, prependUrl.length) !== prependUrl) {\n return 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).then(function (size) {\n if (state.open) {\n api.setData({ dimensions: size });\n }\n });\n }\n };\n var updateImagesDropdown = function (info, state, api) {\n var data = api.getData();\n var image = ListUtils.findEntry(info.imageList, data.src.value);\n state.prevImage = image;\n api.setData({\n images: image.map(function (entry) {\n return entry.value;\n }).getOr('')\n });\n };\n var changeSrc = function (helpers, info, state, api) {\n addPrependUrl(info, api);\n formFillFromMeta(info, api);\n calculateImageSize(helpers, info, state, api);\n updateImagesDropdown(info, state, api);\n };\n var changeImages = function (helpers, info, state, api) {\n var data = api.getData();\n var image = ListUtils.findEntry(info.imageList, data.images);\n image.each(function (img) {\n var updateAlt = data.alt === '' || state.prevImage.map(function (image) {\n return image.text === data.alt;\n }).getOr(false);\n if (updateAlt) {\n if (img.value === '') {\n api.setData({\n src: img,\n alt: state.prevAlt\n });\n } else {\n api.setData({\n src: img,\n alt: img.text\n });\n }\n } else {\n api.setData({ src: img });\n }\n });\n state.prevImage = image;\n changeSrc(helpers, info, state, api);\n };\n var calcVSpace = function (css) {\n var matchingTopBottom = css['margin-top'] && css['margin-bottom'] && css['margin-top'] === css['margin-bottom'];\n return matchingTopBottom ? removePixelSuffix(String(css['margin-top'])) : '';\n };\n var calcHSpace = function (css) {\n var matchingLeftRight = css['margin-right'] && css['margin-left'] && css['margin-right'] === css['margin-left'];\n return matchingLeftRight ? removePixelSuffix(String(css['margin-right'])) : '';\n };\n var calcBorderWidth = function (css) {\n return css['border-width'] ? removePixelSuffix(String(css['border-width'])) : '';\n };\n var calcBorderStyle = function (css) {\n return css['border-style'] ? String(css['border-style']) : '';\n };\n var calcStyle = function (parseStyle, serializeStyle, css) {\n return serializeStyle(parseStyle(serializeStyle(css)));\n };\n var changeStyle2 = function (parseStyle, serializeStyle, data) {\n var css = mergeMargins(parseStyle(data.style));\n var dataCopy = deepMerge({}, data);\n dataCopy.vspace = calcVSpace(css);\n dataCopy.hspace = calcHSpace(css);\n dataCopy.border = calcBorderWidth(css);\n dataCopy.borderstyle = calcBorderStyle(css);\n dataCopy.style = calcStyle(parseStyle, serializeStyle, css);\n return dataCopy;\n };\n var changeStyle = function (helpers, api) {\n var data = api.getData();\n var newData = changeStyle2(helpers.parseStyle, helpers.serializeStyle, data);\n api.setData(newData);\n };\n var changeAStyle = function (helpers, info, api) {\n var data = deepMerge(fromImageData(info.image), api.getData());\n var style = getStyleValue(helpers.normalizeCss, toImageData(data, false));\n api.setData({ style: style });\n };\n var changeFileInput = function (helpers, info, state, api) {\n var data = api.getData();\n api.block('Uploading image');\n head(data.fileinput).fold(function () {\n api.unblock();\n }, function (file) {\n var blobUri = 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 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(err);\n });\n } else {\n helpers.addToBlobCache(blobInfo);\n updateSrcAndSwitchTab(blobInfo.blobUri());\n api.unblock();\n }\n });\n });\n };\n var changeHandler = function (helpers, info, state) {\n return function (api, evt) {\n if (evt.name === 'src') {\n changeSrc(helpers, info, state, api);\n } else if (evt.name === 'images') {\n changeImages(helpers, info, state, api);\n } else if (evt.name === 'alt') {\n state.prevAlt = api.getData().alt;\n } else if (evt.name === 'style') {\n changeStyle(helpers, api);\n } else if (evt.name === 'vspace' || evt.name === 'hspace' || evt.name === 'border' || evt.name === 'borderstyle') {\n changeAStyle(helpers, info, api);\n } else if (evt.name === 'fileinput') {\n changeFileInput(helpers, info, state, api);\n } else if (evt.name === 'isDecorative') {\n if (api.getData().isDecorative) {\n api.disable('alt');\n } else {\n api.enable('alt');\n }\n }\n };\n };\n var closeHandler = function (state) {\n return function () {\n state.open = false;\n };\n };\n var makeDialogBody = function (info) {\n if (info.hasAdvTab || info.hasUploadUrl || info.hasUploadHandler) {\n var tabPanel = {\n type: 'tabpanel',\n tabs: flatten([\n [MainTab.makeTab(info)],\n info.hasAdvTab ? [AdvTab.makeTab(info)] : [],\n info.hasUploadTab && (info.hasUploadUrl || info.hasUploadHandler) ? [UploadTab.makeTab(info)] : []\n ])\n };\n return tabPanel;\n } else {\n var panel = {\n type: 'panel',\n items: MainTab.makeItems(info)\n };\n return panel;\n }\n };\n var makeDialog = function (helpers) {\n return function (info) {\n var state = createState(info);\n return {\n title: 'Insert/Edit Image',\n size: 'normal',\n body: makeDialogBody(info),\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: fromImageData(info.image),\n onSubmit: helpers.onSubmit(info),\n onChange: changeHandler(helpers, info, state),\n onClose: closeHandler(state)\n };\n };\n };\n var submitHandler = function (editor) {\n return function (info) {\n return function (api) {\n var data = deepMerge(fromImageData(info.image), api.getData());\n editor.execCommand('mceUpdateImage', false, toImageData(data, info.hasAccessibilityOptions));\n editor.editorUpload.uploadImagesAuto();\n api.close();\n };\n };\n };\n var imageSize = function (editor) {\n return function (url) {\n return getImageSize(editor.documentBaseURI.toAbsolute(url)).then(function (dimensions) {\n return {\n width: String(dimensions.width),\n height: String(dimensions.height)\n };\n });\n };\n };\n var createBlobCache = function (editor) {\n return function (file, blobUri, dataUrl) {\n return editor.editorUpload.blobCache.create({\n blob: file,\n blobUri: blobUri,\n name: file.name ? file.name.replace(/\\.[^\\.]+$/, '') : null,\n base64: dataUrl.split(',')[1]\n });\n };\n };\n var addToBlobCache = function (editor) {\n return function (blobInfo) {\n editor.editorUpload.blobCache.add(blobInfo);\n };\n };\n var alertErr = function (editor) {\n return function (message) {\n editor.windowManager.alert(message);\n };\n };\n var normalizeCss$1 = function (editor) {\n return function (cssText) {\n return normalizeCss(editor, cssText);\n };\n };\n var parseStyle = function (editor) {\n return function (cssText) {\n return editor.dom.parseStyle(cssText);\n };\n };\n var serializeStyle = function (editor) {\n return function (stylesArg, name) {\n return editor.dom.serializeStyle(stylesArg, name);\n };\n };\n var 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).then(makeDialog(helpers)).then(function (spec) {\n return editor.windowManager.open(spec);\n });\n };\n var openLater = function () {\n open();\n };\n return {\n open: open,\n openLater: openLater\n };\n };\n\n var register = function (editor) {\n editor.addCommand('mceImage', Dialog(editor).openLater);\n editor.addCommand('mceUpdateImage', function (_ui, data) {\n editor.undoManager.transact(function () {\n return insertOrUpdateImage(editor, data);\n });\n });\n };\n\n var hasImageClass = function (node) {\n var className = node.attr('class');\n return className && /\\bimage\\b/.test(className);\n };\n var toggleContentEditableState = function (state) {\n return function (nodes) {\n var i = nodes.length;\n var toggleContentEditable = function (node) {\n node.attr('contenteditable', state ? 'true' : null);\n };\n while (i--) {\n var node = nodes[i];\n if (hasImageClass(node)) {\n node.attr('contenteditable', state ? 'false' : null);\n global$4.each(node.getAll('figcaption'), toggleContentEditable);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('image', {\n icon: 'image',\n tooltip: 'Insert/edit image',\n onAction: Dialog(editor).openLater,\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).openLater\n });\n editor.ui.registry.addContextMenu('image', {\n update: function (element) {\n return isFigure(element) || isImage(element) && !isPlaceholderImage(element) ? ['image'] : [];\n }\n });\n };\n\n function Plugin () {\n global.add('image', function (editor) {\n setup(editor);\n register$1(editor);\n register(editor);\n });\n }\n\n Plugin();\n\n}(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.4.2 (2020-08-17)\n */\n(function (domGlobals) {\n 'use strict';\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n if (x === undefined) {\n return 'undefined';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isEquatableType = function (x) {\n return [\n 'undefined',\n 'boolean',\n 'number',\n 'string',\n 'function',\n 'xml',\n 'null'\n ].indexOf(x) !== -1;\n };\n\n var sort = function (xs, compareFn) {\n var clone = Array.prototype.slice.call(xs);\n return clone.sort(compareFn);\n };\n\n var contramap = function (eqa, f) {\n return eq(function (x, y) {\n return eqa.eq(f(x), f(y));\n });\n };\n var eq = function (f) {\n return { eq: f };\n };\n var tripleEq = eq(function (x, y) {\n return x === y;\n });\n var eqString = tripleEq;\n var eqArray = function (eqa) {\n return eq(function (x, y) {\n if (x.length !== y.length) {\n return false;\n }\n var len = x.length;\n for (var i = 0; i < len; i++) {\n if (!eqa.eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqSortedArray = function (eqa, compareFn) {\n return contramap(eqArray(eqa), function (xs) {\n return sort(xs, compareFn);\n });\n };\n var eqRecord = function (eqa) {\n return eq(function (x, y) {\n var kx = Object.keys(x);\n var ky = Object.keys(y);\n if (!eqSortedArray(eqString).eq(kx, ky)) {\n return false;\n }\n var len = kx.length;\n for (var i = 0; i < len; i++) {\n var q = kx[i];\n if (!eqa.eq(x[q], y[q])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqAny = eq(function (x, y) {\n if (x === y) {\n return true;\n }\n var tx = typeOf(x);\n var ty = typeOf(y);\n if (tx !== ty) {\n return false;\n }\n if (isEquatableType(tx)) {\n return x === y;\n } else if (tx === 'array') {\n return eqArray(eqAny).eq(x, y);\n } else if (tx === 'object') {\n return eqRecord(eqAny).eq(x, y);\n }\n return false;\n });\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, _s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf$1 = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf$1(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq$1 = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = eq$1(null);\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq$1(undefined);\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? 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 findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Option.none();\n };\n var find = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return 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$1 = 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 mapToArray = function (obj, f) {\n var r = [];\n each$1(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var values = function (obj) {\n return mapToArray(obj, function (v) {\n return v;\n });\n };\n var get = 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 equal = function (a1, a2, eq) {\n if (eq === void 0) {\n eq = eqAny;\n }\n return eqRecord(eq).eq(a1, a2);\n };\n\n var isArray$1 = Array.isArray;\n var toArray = function (obj) {\n 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 last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var 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 unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var 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 return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim = blank(/^\\s+|\\s+$/g);\n var lTrim = blank(/^\\s+/g);\n var rTrim = blank(/\\s+$/g);\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var 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 = cached(function () {\n return PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var userAgent = domGlobals.navigator.userAgent;\n var platform$1 = detect$3();\n var browser = platform$1.browser;\n var os = platform$1.os;\n var deviceType = platform$1.deviceType;\n var webkit = /WebKit/.test(userAgent) && !browser.isEdge();\n var fileApi = 'FormData' in 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.isOpera(),\n webkit: webkit,\n ie: browser.isIE() || browser.isEdge() ? browser.version.major : false,\n gecko: browser.isFirefox(),\n mac: os.isOSX() || os.isiOS(),\n iOS: deviceType.isiPad() || deviceType.isiPhone(),\n android: os.isAndroid(),\n contentEditable: true,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: true,\n range: domGlobals.window.getSelection && 'Range' in domGlobals.window,\n documentMode: browser.isIE() ? domGlobals.document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: true,\n cacheSuffix: null,\n container: null,\n experimentalShadowDom: false,\n canHaveCSP: !browser.isIE(),\n desktop: deviceType.isDesktop(),\n windowsPhone: windowsPhone,\n browser: {\n current: browser.current,\n version: browser.version,\n isChrome: browser.isChrome,\n isEdge: browser.isEdge,\n isFirefox: browser.isFirefox,\n isIE: browser.isIE,\n isOpera: browser.isOpera,\n isSafari: browser.isSafari\n },\n os: {\n current: os.current,\n version: os.version,\n isAndroid: os.isAndroid,\n isChromeOS: os.isChromeOS,\n isFreeBSD: os.isFreeBSD,\n isiOS: os.isiOS,\n isLinux: os.isLinux,\n isOSX: os.isOSX,\n isSolaris: os.isSolaris,\n isWindows: os.isWindows\n },\n deviceType: {\n isDesktop: deviceType.isDesktop,\n isiPad: deviceType.isiPad,\n isiPhone: deviceType.isiPhone,\n isPhone: deviceType.isPhone,\n isTablet: deviceType.isTablet,\n isTouch: deviceType.isTouch,\n isWebView: deviceType.isWebView\n }\n };\n\n var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var is = function (obj, type) {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && isArray$1(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n var makeMap = function (items, delim, map) {\n var i;\n items = items || [];\n delim = delim || ',';\n if (typeof items === 'string') {\n items = items.split(delim);\n }\n map = map || {};\n i = items.length;\n while (i--) {\n map[items[i]] = {};\n }\n return map;\n };\n var hasOwnProperty$1 = function (obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n var create = function (s, p, root) {\n var self = this;\n var sp, scn, c, de = 0;\n s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n var cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n var ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n if (ns[cn]) {\n return;\n }\n if (s[2] === 'static') {\n ns[cn] = p;\n if (this.onCreate) {\n this.onCreate(s[2], s[3], ns[cn]);\n }\n return;\n }\n if (!p[cn]) {\n p[cn] = function () {\n };\n de = 1;\n }\n ns[cn] = p[cn];\n self.extend(ns[cn].prototype, p);\n if (s[5]) {\n sp = self.resolve(s[5]).prototype;\n scn = s[5].match(/\\.(\\w+)$/i)[1];\n c = ns[cn];\n if (de) {\n ns[cn] = function () {\n return sp[scn].apply(this, arguments);\n };\n } else {\n ns[cn] = function () {\n this.parent = sp[scn];\n return c.apply(this, arguments);\n };\n }\n ns[cn].prototype[cn] = ns[cn];\n self.each(sp, function (f, n) {\n ns[cn].prototype[n] = sp[n];\n });\n self.each(p, function (f, n) {\n if (sp[n]) {\n ns[cn].prototype[n] = function () {\n this.parent = sp[n];\n return f.apply(this, arguments);\n };\n } else {\n if (n !== cn) {\n ns[cn].prototype[n] = f;\n }\n }\n });\n }\n self.each(p.static, function (f, n) {\n ns[cn][n] = f;\n });\n };\n var extend = function (obj) {\n var exts = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n exts[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < exts.length; i++) {\n var ext = exts[i];\n for (var name_1 in ext) {\n if (ext.hasOwnProperty(name_1)) {\n var value = ext[name_1];\n if (value !== undefined) {\n obj[name_1] = value;\n }\n }\n }\n }\n return obj;\n };\n var walk = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$2(o, function (o, i) {\n if (f.call(s, o, i, n) === false) {\n return false;\n }\n walk(o, f, n, s);\n });\n }\n };\n var createNS = function (n, o) {\n var i, v;\n o = o || 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(s, 'array')) {\n return s;\n }\n return map$2(s.split(d || ','), trim$1);\n };\n var _addCacheSuffix = function (url) {\n var cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n var Tools = {\n trim: trim$1,\n isArray: isArray$1,\n is: is,\n toArray: toArray,\n makeMap: makeMap,\n each: each$2,\n map: map$2,\n grep: filter$2,\n inArray: indexOf$1,\n hasOwn: hasOwnProperty$1,\n extend: extend,\n create: create,\n walk: walk,\n createNS: createNS,\n resolve: resolve,\n explode: explode,\n _addCacheSuffix: _addCacheSuffix\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || 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 = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var COMMENT = 8;\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n var isDocument = isType$1(DOCUMENT);\n var isDocumentFragment = isType$1(DOCUMENT_FRAGMENT);\n\n var getHead = function (doc) {\n var b = doc.dom().head;\n if (b === null || b === undefined) {\n throw new Error('Head is not available yet');\n }\n return Element.fromDom(b);\n };\n\n var toArray$1 = function (target, f) {\n var r = [];\n var recurse = function (e) {\n r.push(e);\n return f(e);\n };\n var cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var is$1 = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? 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$2 = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var contains$2 = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var documentElement = function (element) {\n return 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 siblings = function (element) {\n var filterSelf = function (elements) {\n return filter(elements, function (x) {\n return !eq$2(element, x);\n });\n };\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n var prevSibling = function (element) {\n return 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(toArray$1(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return toArray$1(element, nextSibling);\n };\n var children = function (element) {\n return map(element.dom().childNodes, 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\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos);\n };\n var supported = isFunction(domGlobals.Element.prototype.attachShadow) && isFunction(domGlobals.Node.prototype.getRootNode);\n var getRootNode = supported ? function (e) {\n return Element.fromDom(e.dom().getRootNode());\n } : documentOrOwner;\n var getStyleContainer = function (dos) {\n return isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Option.some(r) : Option.none();\n };\n var getShadowHost = function (e) {\n return Element.fromDom(e.dom().host);\n };\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove(rogue);\n });\n };\n var remove = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove(wrapper);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n return getShadowRoot(Element.fromDom(dom)).fold(function () {\n return dom.ownerDocument.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: 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 if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom()) {\n return 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 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 var isSafari = detect$3().browser.isSafari();\n if (isSafari && isFunction(element.dom().scrollIntoViewIfNeeded)) {\n element.dom().scrollIntoViewIfNeeded(false);\n } else {\n element.dom().scrollIntoView(alignToTop);\n }\n };\n\n var get$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: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? 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 hasAttribute = function (attrName) {\n return function (node) {\n return isElement$1(node) && node.hasAttribute(attrName);\n };\n };\n var hasAttributeValue = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n var isBogus = function (node) {\n return isElement$1(node) && node.hasAttribute('data-mce-bogus');\n };\n var isBogusAll = function (node) {\n return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all';\n };\n var isTable = function (node) {\n return isElement$1(node) && node.tagName === 'TABLE';\n };\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$1(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\n ]);\n var isText$1 = isNodeType(3);\n var isComment$1 = isNodeType(8);\n var isDocument$1 = isNodeType(9);\n var isDocumentFragment$1 = isNodeType(11);\n var isBr = matchNodeNames(['br']);\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\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 var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n 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 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$4 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n 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\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 whiteSpaceRegExp$1 = /^[ \\t\\r\\n]*$/;\n var isWhitespaceText = function (text) {\n return whiteSpaceRegExp$1.test(text);\n };\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 (isElement$1(node) && isBookmarkNode(node)) {\n return;\n }\n for (i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i]);\n }\n if (isDocument$1(node) === false) {\n if (isText$1(node) && node.nodeValue.length > 0) {\n var isEmpty = isWhitespaceText(node.nodeValue);\n if (dom.isBlock(node.parentNode) || !isEmpty) {\n return;\n }\n if (surroundedBySpans(node)) {\n return;\n }\n } else if (isElement$1(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\n var makeMap$1 = Tools.makeMap;\n var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var rawCharsRegExp = /[<>&\\\"\\']/g;\n var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n var asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n var baseEntities = {\n '\"': '&quot;',\n '\\'': '&#39;',\n '<': '&lt;',\n '>': '&gt;',\n '&': '&amp;',\n '`': '&#96;'\n };\n var reverseEntities = {\n '&lt;': '<',\n '&gt;': '>',\n '&amp;': '&',\n '&quot;': '\"',\n '&apos;': '\\''\n };\n var nativeDecode = function (text) {\n var 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 var namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n var encodeRaw = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeAllRaw = function (text) {\n return ('' + text).replace(rawCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeNamed = function (text, attr, entities) {\n entities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || entities[chr] || chr;\n });\n };\n var getEncodeFunc = function (name, entities) {\n var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n var encodeNamedAndNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeCustomNamed = function (text, attr) {\n return encodeNamed(text, attr, entitiesMap);\n };\n var nameMap = makeMap$1(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n var decode = function (text) {\n return text.replace(entityRegExp, function (all, numeric) {\n if (numeric) {\n if (numeric.charAt(0).toLowerCase() === 'x') {\n numeric = parseInt(numeric.substr(1), 16);\n } else {\n numeric = parseInt(numeric, 10);\n }\n if (numeric > 65535) {\n numeric -= 65536;\n return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n }\n return asciiMap[numeric] || String.fromCharCode(numeric);\n }\n return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n });\n };\n var Entities = {\n encodeRaw: encodeRaw,\n encodeAllRaw: encodeAllRaw,\n encodeNumeric: encodeNumeric,\n encodeNamed: encodeNamed,\n getEncodeFunc: getEncodeFunc,\n decode: decode\n };\n\n var mapCache = {}, dummyObj = {};\n var makeMap$2 = Tools.makeMap, each$3 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray = Tools.inArray;\n var split = function (items, delim) {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n var compileSchema = function (type) {\n var schema = {};\n var globalAttributes, blockContent;\n var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n var add = function (name, attributes, children) {\n var ni, attributesOrder, element;\n var arrayToMap = function (array, obj) {\n var map = {};\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n map[array[i]] = obj || {};\n }\n return map;\n };\n children = children || [];\n attributes = attributes || '';\n if (typeof children === 'string') {\n children = split(children);\n }\n 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 customElementsMap = {}, specialElements = {};\n var createLookupTable = function (option, defaultValue, extendWith) {\n var value = settings[option];\n if (!value) {\n value = mapCache[option];\n if (!value) {\n value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n value = extend$1(value, extendWith);\n mapCache[option] = value;\n }\n } else {\n value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n return value;\n };\n settings = settings || {};\n var schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n var validStyles = compileElementMap(settings.valid_styles);\n var invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n var validClasses = compileElementMap(settings.valid_classes, 'map');\n var whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n var selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n var shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n var boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n var nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);\n var moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);\n var textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n var blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n var textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\n each$3((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');\n });\n var patternToRegExp = function (str) {\n return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n };\n var addValidElements = function (validElements) {\n var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)\\])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n 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 each$1(globalAttributes, function (value, key) {\n attributes[key] = value;\n });\n attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n }\n if (attrData) {\n attrData = split(attrData, '|');\n for (ai = 0, al = attrData.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrData[ai]);\n if (matches) {\n attr = {};\n attrType = matches[1];\n attrName = matches[2].replace(/[\\\\:]:/g, ':');\n prefix = matches[3];\n value = matches[4];\n if (attrType === '!') {\n element.attributesRequired = element.attributesRequired || [];\n element.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(inArray(attributesOrder, attrName), 1);\n continue;\n }\n if (prefix) {\n if (prefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value: value\n });\n attr.defaultValue = value;\n }\n if (prefix === ':') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value: value\n });\n attr.forcedValue = value;\n }\n if (prefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n element.attributePatterns = element.attributePatterns || [];\n attr.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attr);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n }\n }\n if (!globalAttributes && elementName === '@') {\n globalAttributes = attributes;\n globalAttributesOrder = attributesOrder;\n }\n if (outputName) {\n element.outputName = elementName;\n elements[outputName] = element;\n }\n if (hasPatternsRegExp.test(elementName)) {\n element.pattern = patternToRegExp(elementName);\n patternElements.push(element);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n var setValidElements = function (validElements) {\n elements = {};\n patternElements = [];\n addValidElements(validElements);\n each$3(schemaItems, function (element, name) {\n children[name] = element.children;\n });\n };\n var addCustomElements = function (customElements) {\n var customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n mapCache.text_block_elements = mapCache.block_elements = null;\n each$3(split(customElements, ','), function (rule) {\n var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n var customRule = elements[cloneName];\n customRule = extend$1({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$3(children, function (element, elmName) {\n if (element[cloneName]) {\n children[elmName] = element = extend$1({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n });\n }\n };\n var addValidChildren = function (validChildren) {\n var childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-\\.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)\\]$/;\n mapCache[settings.schema] = null;\n if (validChildren) {\n each$3(split(validChildren, ','), function (rule) {\n var matches = childRuleRegExp.exec(rule);\n var parent, prefix;\n if (matches) {\n prefix = matches[1];\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$3(split(matches[3], '|'), function (child) {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n var getElementRule = function (name) {\n var element = elements[name], i;\n if (element) {\n return element;\n }\n i = patternElements.length;\n while (i--) {\n element = patternElements[i];\n if (element.pattern.test(name)) {\n return element;\n }\n }\n };\n if (!settings.valid_elements) {\n each$3(schemaItems, function (element, name) {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n if (settings.schema !== 'html5') {\n each$3(split('strong/b em/i'), function (item) {\n 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 var isZwsp = function (char) {\n return char === zeroWidth;\n };\n var removeZwsp = function (s) {\n return s.replace(/\\uFEFF/g, '');\n };\n\n var toHex = function (match, r, g, b) {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var Styles = function (settings, schema) {\n var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n var trimRightRegExp = /\\s+$/;\n var i;\n var encodingLookup = {};\n var validStyles;\n var invalidStyles;\n var invisibleChar = zeroWidth;\n settings = settings || {};\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n var encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n for (i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n return {\n toHex: function (color) {\n return color.replace(rgbRegExp, toHex);\n },\n parse: function (css) {\n var styles = {};\n var matches, name, value, isEncoded;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope || this;\n var compress = function (prefix, suffix, noJoin) {\n var top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n var right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n var bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n var left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n var box = [\n top,\n right,\n bottom,\n left\n ];\n i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n var canCompress = function (key) {\n var value = styles[key], i;\n if (!value) {\n return;\n }\n value = value.split(' ');\n i = value.length;\n while (i--) {\n if (value[i] !== value[0]) {\n return false;\n }\n }\n styles[key] = value[0];\n return true;\n };\n var compress2 = function (target, a, b, c) {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n var encode = function (str) {\n isEncoded = true;\n return encodingLookup[str];\n };\n var decode = function (str, keepSlashes) {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n var decodeSingleHexSequence = function (escSeq) {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n var decodeHexSequences = function (value) {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n var processUrl = function (match, url, url2, url3, str, str2) {\n str = str || str2;\n if (str) {\n str = decode(str);\n return '\\'' + str.replace(/\\'/g, '\\\\\\'') + '\\'';\n }\n url = decode(url || url2 || url3);\n if (!settings.allow_script_urls) {\n var scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return 'url(\\'' + url.replace(/\\'/g, '\\\\\\'') + '\\')';\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, function (str) {\n return str.replace(/[;:]/g, encode);\n });\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n value = value.replace(rgbRegExp, toHex);\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: function (styles, elementName) {\n var css = '';\n var serializeStyles = function (name) {\n var value;\n var styleList = validStyles[name];\n if (styleList) {\n for (var i_1 = 0, l = styleList.length; i_1 < l; i_1++) {\n name = styleList[i_1];\n value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n var isValid = function (name, elementName) {\n var styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n each$1(styles, function (value, name) {\n if (value && (!invalidStyles || isValid(name, elementName))) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n });\n }\n return css;\n }\n };\n };\n\n var eventExpandoPrefix = 'mce-data-';\n var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n var deprecated = {\n keyLocation: 1,\n layerX: 1,\n layerY: 1,\n returnValue: 1,\n webkitMovementX: 1,\n webkitMovementY: 1,\n keyIdentifier: 1,\n mozPressure: 1\n };\n var hasIsDefaultPrevented = function (event) {\n return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse;\n };\n var returnFalse = 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 = evt.currentTarget;\n var related = evt.relatedTarget;\n if (related && current.contains) {\n related = current.contains(related);\n } else {\n while (related && related !== current) {\n related = related.parentNode;\n }\n }\n if (!related) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n evt.target = current;\n self.executeHandlers(evt, id);\n }\n };\n }\n }\n if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = function (evt) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(evt, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n scope: scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback(fix({ type: name }));\n } else {\n callbackList.push({\n func: callback,\n scope: scope\n });\n }\n }\n }\n target = callbackList = 0;\n return callback;\n };\n EventUtils.prototype.unbind = function (target, names, callback) {\n var callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var id = target[this.expando];\n if (id) {\n eventMap = this.events[id];\n if (names) {\n var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[i];\n callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n var nativeHandler = callbackList.nativeHandler;\n var fakeName = callbackList.fakeName, capture = callbackList.capture;\n callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n callbackList.nativeHandler = nativeHandler;\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n eventMap[name] = callbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n each$1(eventMap, function (callbackList, name) {\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n });\n eventMap = {};\n }\n for (name in eventMap) {\n if (has(eventMap, name)) {\n return this;\n }\n }\n delete this.events[id];\n try {\n delete target[this.expando];\n } catch (ex) {\n target[this.expando] = null;\n }\n }\n return this;\n };\n EventUtils.prototype.fire = function (target, name, args) {\n var id;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var event = fix(null, args);\n event.type = name;\n event.target = target;\n do {\n id = target[this.expando];\n if (id) {\n this.executeHandlers(event, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !event.isPropagationStopped());\n return this;\n };\n EventUtils.prototype.clean = function (target) {\n var i, children;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n if (target[this.expando]) {\n this.unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n this.unbind(target);\n children = target.getElementsByTagName('*');\n i = children.length;\n while (i--) {\n target = children[i];\n if (target[this.expando]) {\n this.unbind(target);\n }\n }\n }\n return this;\n };\n EventUtils.prototype.destroy = function () {\n this.events = {};\n };\n EventUtils.prototype.cancel = function (e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n };\n EventUtils.prototype.executeHandlers = function (evt, id) {\n var container = this.events[id];\n var callbackList = container && container[evt.type];\n if (callbackList) {\n for (var i = 0, l = callbackList.length; i < l; i++) {\n var callback = callbackList[i];\n if (callback && callback.func.call(callback.scope, evt) === false) {\n evt.preventDefault();\n }\n if (evt.isImmediatePropagationStopped()) {\n return;\n }\n }\n }\n };\n EventUtils.Event = new EventUtils();\n return EventUtils;\n }();\n\n var support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, 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 each([\n 'radio',\n 'checkbox',\n 'file',\n 'password',\n 'image'\n ], function (i) {\n Expr.pseudos[i] = createInputPseudo(i);\n });\n each([\n 'submit',\n 'reset'\n ], function (i) {\n Expr.pseudos[i] = createButtonPseudo(i);\n });\n function setFilters() {\n }\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n while (soFar) {\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n soFar = soFar.slice(match[0].length) || soFar;\n }\n groups.push(tokens = []);\n }\n matched = false;\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: match[0].replace(rtrim, ' ')\n });\n soFar = soFar.slice(matched.length);\n }\n for (type in Expr.filter) {\n if (!Expr.filter.hasOwnProperty(type)) {\n continue;\n }\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n if (!matched) {\n break;\n }\n }\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n };\n function toSelector(tokens) {\n var i = 0, len = tokens.length, selector = '';\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n return selector;\n }\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n return combinator.first ? function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n } : function (elem, context, xml) {\n var oldCache, outerCache, newCache = [\n dirruns,\n doneName\n ];\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {});\n if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n return newCache[2] = oldCache[2];\n } else {\n outerCache[dir] = newCache;\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n };\n }\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n return true;\n } : matchers[0];\n }\n function multipleContexts(selector, contexts, results) {\n var i = 0, len = contexts.length;\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n return results;\n }\n function condense(unmatched, map, filter, context, xml) {\n var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n return newUnmatched;\n }\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n return markFunction(function (seed, results, context, xml) {\n var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n }\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml);\n i = temp.length;\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n temp = [];\n i = matcherOut.length;\n while (i--) {\n if (elem = matcherOut[i]) {\n temp.push(matcherIn[i] = elem);\n }\n }\n postFinder(null, matcherOut = [], temp, xml);\n }\n i = matcherOut.length;\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$2.call(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n function matcherFromTokens(tokens) {\n var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n return indexOf$2.call(checkContext, elem) > -1;\n }, implicitRelative, true), matchers = [function (elem, context, xml) {\n 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 fragDoc = fragDoc || doc;\n var container = fragDoc.createElement('div');\n var frag = fragDoc.createDocumentFragment();\n container.innerHTML = html;\n var node;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n var i;\n if (isString$1(sourceItem)) {\n sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));\n } else if (sourceItem.length && !sourceItem.nodeType) {\n sourceItem = DomQuery.makeArray(sourceItem);\n if (reverse) {\n for (i = sourceItem.length - 1; i >= 0; i--) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n } else {\n for (i = 0; i < sourceItem.length; i++) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n }\n return targetNodes;\n }\n if (sourceItem.nodeType) {\n i = targetNodes.length;\n while (i--) {\n callback.call(targetNodes[i], sourceItem);\n }\n }\n return targetNodes;\n };\n var hasClass = function (node, className) {\n return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n };\n var wrap$1 = function (elements, wrapper, all) {\n var lastParent, newWrapper;\n wrapper = DomQuery(wrapper)[0];\n elements.each(function () {\n var self = this;\n if (!all || lastParent !== self.parentNode) {\n lastParent = self.parentNode;\n newWrapper = wrapper.cloneNode(false);\n self.parentNode.insertBefore(newWrapper, self);\n newWrapper.appendChild(self);\n } else {\n newWrapper.appendChild(self);\n }\n });\n return elements;\n };\n var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n var propFix = {\n for: 'htmlFor',\n class: 'className',\n readonly: 'readOnly'\n };\n var cssFix = { float: 'cssFloat' };\n var attrHooks = {}, cssHooks = {};\n var DomQueryConstructor = function (selector, context) {\n return new DomQuery.fn.init(selector, context);\n };\n var inArray$1 = function (item, array) {\n var i;\n if (array.indexOf) {\n return array.indexOf(item);\n }\n i = array.length;\n while (i--) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n };\n var whiteSpaceRegExp$2 = /^\\s*|\\s*$/g;\n var trim$2 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$2, '');\n };\n var each$4 = function (obj, callback) {\n var length, key, i, value;\n if (obj) {\n length = obj.length;\n if (length === undefined) {\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n value = obj[key];\n if (callback.call(value, key, value) === false) {\n break;\n }\n }\n }\n } else {\n for (i = 0; i < length; i++) {\n value = obj[i];\n if (callback.call(value, i, value) === false) {\n break;\n }\n }\n }\n }\n return obj;\n };\n var grep = function (array, callback) {\n var out = [];\n each$4(array, function (i, item) {\n if (callback(item, i)) {\n out.push(item);\n }\n });\n return out;\n };\n var getElementDocument = function (element) {\n if (!element) {\n return doc;\n }\n if (element.nodeType === 9) {\n return element;\n }\n return element.ownerDocument;\n };\n DomQueryConstructor.fn = DomQueryConstructor.prototype = {\n constructor: DomQueryConstructor,\n selector: '',\n context: null,\n length: 0,\n init: function (selector, context) {\n var self = this;\n var match, node;\n if (!selector) {\n return self;\n }\n if (selector.nodeType) {\n self.context = self[0] = selector;\n self.length = 1;\n return self;\n }\n if (context && context.nodeType) {\n self.context = context;\n } else {\n if (context) {\n return DomQuery(selector).attr(context);\n }\n self.context = context = 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 classState = hasClass(node, className);\n if (classState !== state) {\n var 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 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 if (!isReady()) {\n data = Option.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n 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 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 comparison = Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n var unite = function (result) {\n return result.fold(identity, identity);\n };\n\n 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;\n var 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 = 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 function StyleSheetLoader(documentOrShadowRoot, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var edos = Element.fromDom(documentOrShadowRoot);\n var doc = documentOrOwner(edos);\n var maxLoadTime = settings.maxLoadTime || 5000;\n var _setReferrerPolicy = function (referrerPolicy) {\n settings.referrerPolicy = referrerPolicy;\n };\n var addStyle = function (element) {\n append(getStyleContainer(edos), element);\n };\n var load = function (url, loadedCallback, errorCallback) {\n var link, style, 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 = documentOrShadowRoot.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 = doc.dom().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 var 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 = doc.dom().createElement('style');\n style.textContent = '@import \"' + url + '\"';\n waitForGeckoLinkLoaded();\n addStyle(Element.fromDom(style));\n return;\n }\n waitForWebKitLinkLoaded();\n }\n addStyle(Element.fromDom(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 loadAll = function (urls, success, failure) {\n par$1(map(urls, loadF)).get(function (result) {\n var parts = partition(result, function (r) {\n return r.isValue();\n });\n if (parts.fail.length > 0) {\n failure(parts.fail.map(unite));\n } else {\n success(parts.pass.map(unite));\n }\n });\n };\n return {\n load: load,\n loadAll: loadAll,\n _setReferrerPolicy: _setReferrerPolicy\n };\n }\n\n var create$1 = function () {\n var map = new WeakMap();\n var forElement = function (referenceElement, settings) {\n var root = getRootNode(referenceElement);\n var rootDom = root.dom();\n return Option.from(map.get(rootDom)).getOrThunk(function () {\n var sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement: forElement };\n };\n var instance = create$1();\n\n var each$5 = Tools.each;\n var grep$1 = Tools.grep;\n var isIE = Env.ie;\n var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n var setupAttrHooks = function (styles, settings, getContext) {\n var keepValues = settings.keep_values;\n var keepUrlHook = {\n set: function ($elm, value, name) {\n if (settings.url_converter) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n }\n $elm.attr('data-mce-' + name, value).attr(name, value);\n },\n get: function ($elm, name) {\n return $elm.attr('data-mce-' + name) || $elm.attr(name);\n }\n };\n var attrHooks = {\n style: {\n set: function ($elm, value) {\n if (value !== null && typeof value === 'object') {\n $elm.css(value);\n return;\n }\n if (keepValues) {\n $elm.attr('data-mce-style', value);\n }\n if (value !== null && typeof value === 'string') {\n $elm.removeAttr('style');\n $elm.css(styles.parse(value));\n } else {\n $elm.attr('style', value);\n }\n },\n get: function ($elm) {\n var value = $elm.attr('data-mce-style') || $elm.attr('style');\n value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n return value;\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n var updateInternalStyleAttr = function (styles, $elm) {\n var rawValue = $elm.attr('style');\n var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n if (!value) {\n value = null;\n }\n $elm.attr('data-mce-style', value);\n };\n var findNodeIndex = function (node, normalized) {\n var idx = 0, lastNodeType, nodeType;\n if (node) {\n for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n nodeType = node.nodeType;\n if (normalized && nodeType === 3) {\n if (nodeType === lastNodeType || !node.nodeValue.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n function DOMUtils(doc, settings) {\n var _this = this;\n if (settings === void 0) {\n settings = {};\n }\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 = instance.forElement(Element.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n var boundEvents = [];\n var schema = settings.schema ? settings.schema : Schema({});\n var styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n var events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n var blockElementsMap = schema.getBlockElements();\n var $ = DomQuery.overrideDefaults(function () {\n return {\n context: doc,\n element: self.getRoot()\n };\n });\n var isBlock = function (node) {\n if (typeof node === 'string') {\n return !!blockElementsMap[node];\n } else if (node) {\n var type = node.nodeType;\n if (type) {\n return !!(type === 1 && blockElementsMap[node.nodeName]);\n }\n }\n return false;\n };\n var get = function (elm) {\n return elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n };\n var $$ = function (elm) {\n return $(typeof elm === 'string' ? get(elm) : elm);\n };\n var getAttrib = function (elm, name, defaultVal) {\n var hook, value;\n var $elm = $$(elm);\n if ($elm.length) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm, name);\n } else {\n value = $elm.attr(name);\n }\n }\n if (typeof value === 'undefined') {\n value = defaultVal || '';\n }\n return value;\n };\n var getAttribs = function (elm) {\n var node = get(elm);\n if (!node) {\n return [];\n }\n return node.attributes;\n };\n var setAttrib = function (elm, name, value) {\n if (value === '') {\n value = null;\n }\n var $elm = $$(elm);\n var originalValue = $elm.attr(name);\n if (!$elm.length) {\n return;\n }\n var hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm, value, name);\n } else {\n $elm.attr(name, value);\n }\n if (originalValue !== value && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm,\n attrName: name,\n attrValue: value\n });\n }\n };\n var clone = function (node, deep) {\n if (!isIE || node.nodeType !== 1 || deep) {\n return node.cloneNode(deep);\n } else {\n var clone_1 = doc.createElement(node.nodeName);\n each$5(getAttribs(node), function (attr) {\n setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n });\n return clone_1;\n }\n };\n var getRoot = function () {\n return settings.root_element || doc.body;\n };\n var getViewPort = function (argWin) {\n var vp = getBounds(argWin);\n return {\n x: vp.x,\n y: vp.y,\n w: vp.width,\n h: vp.height\n };\n };\n var getPos$1 = function (elm, rootElm) {\n return getPos(doc.body, get(elm), rootElm);\n };\n var setStyle = function (elm, name, value) {\n var $elm = isString(name) ? $$(elm).css(name, value) : $$(elm).css(name);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var setStyles = function (elm, stylesArg) {\n var $elm = $$(elm).css(stylesArg);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var getStyle = function (elm, name, computed) {\n var $elm = $$(elm);\n if (computed) {\n return $elm.css(name);\n }\n name = name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n if (name === 'float') {\n name = Env.browser.isIE() ? 'styleFloat' : 'cssFloat';\n }\n return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n };\n var getSize = function (elm) {\n var w, h;\n elm = get(elm);\n w = getStyle(elm, 'width');\n h = getStyle(elm, 'height');\n if (w.indexOf('px') === -1) {\n w = 0;\n }\n if (h.indexOf('px') === -1) {\n h = 0;\n }\n return {\n w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\n h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\n };\n };\n var getRect = function (elm) {\n elm = get(elm);\n var pos = getPos$1(elm);\n var size = getSize(elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n var is = function (elm, selector) {\n var i;\n if (!elm) {\n return false;\n }\n if (!Array.isArray(elm)) {\n if (selector === '*') {\n return elm.nodeType === 1;\n }\n if (simpleSelectorRe.test(selector)) {\n var selectors = selector.toLowerCase().split(/,/);\n var elmName = elm.nodeName.toLowerCase();\n for (i = selectors.length - 1; i >= 0; i--) {\n if (selectors[i] === elmName) {\n return true;\n }\n }\n return false;\n }\n if (elm.nodeType && elm.nodeType !== 1) {\n return false;\n }\n }\n var elms = !Array.isArray(elm) ? [elm] : elm;\n return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n };\n var getParents = function (elm, selector, root, collect) {\n var result = [];\n var selectorVal;\n var node = get(elm);\n collect = collect === undefined;\n root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (Tools.is(selector, 'string')) {\n selectorVal = selector;\n if (selector === '*') {\n selector = function (node) {\n return node.nodeType === 1;\n };\n } else {\n selector = function (node) {\n return is(node, selectorVal);\n };\n }\n }\n while (node) {\n if (node === root || !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 = '<br>' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('<div></div>').html('<br>' + 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 + '</' + name + '>';\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 if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n DOMUtils.DOM.loadCSS(url);\n return;\n }\n if (!url) {\n url = '';\n }\n var head = doc.getElementsByTagName('head')[0];\n each$5(url.split(','), function (url) {\n url = Tools._addCacheSuffix(url);\n if (files[url]) {\n return;\n }\n files[url] = true;\n var 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 isElement$1(node) ? node.outerHTML : DomQuery('<div></div>').append(DomQuery(node).clone()).html();\n };\n var setOuterHTML = function (elm, html) {\n $$(elm).each(function () {\n try {\n if ('outerHTML' in this) {\n this.outerHTML = html;\n return;\n }\n } catch (ex) {\n }\n remove(DomQuery(this).html(html), true);\n });\n };\n var insertAfter = function (node, reference) {\n var referenceNode = get(reference);\n return run(node, function (node) {\n var parent = referenceNode.parentNode;\n var nextSibling = referenceNode.nextSibling;\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n return node;\n });\n };\n var replace = function (newElm, oldElm, keepChildren) {\n return run(oldElm, function (oldElm) {\n if (Tools.is(oldElm, 'array')) {\n newElm = newElm.cloneNode(true);\n }\n if (keepChildren) {\n each$5(grep$1(oldElm.childNodes), function (node) {\n newElm.appendChild(node);\n });\n }\n return oldElm.parentNode.replaceChild(newElm, oldElm);\n });\n };\n var rename = function (elm, name) {\n var newElm;\n if (elm.nodeName !== name.toUpperCase()) {\n newElm = create(name);\n each$5(getAttribs(elm), function (attrNode) {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n }\n return newElm || elm;\n };\n var findCommonAncestor = function (a, b) {\n var ps = a, pe;\n while (ps) {\n pe = b;\n while (pe && ps !== pe) {\n pe = pe.parentNode;\n }\n if (ps === pe) {\n break;\n }\n ps = ps.parentNode;\n }\n if (!ps && a.ownerDocument) {\n return a.ownerDocument.documentElement;\n }\n return ps;\n };\n var toHex = function (rgbVal) {\n return styles.toHex(Tools.trim(rgbVal));\n };\n var isNonEmptyElement = function (node) {\n if (isElement$1(node)) {\n var isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n return true;\n }\n }\n return false;\n };\n var isEmpty = function (node, elements) {\n var type, name, brCount = 0;\n if (isNonEmptyElement(node)) {\n return false;\n }\n node = node.firstChild;\n if (node) {\n var walker = new 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 (isElement$1(node)) {\n var bogusVal = node.getAttribute('data-mce-bogus');\n if (bogusVal) {\n node = walker.next(bogusVal === 'all');\n continue;\n }\n name = node.nodeName.toLowerCase();\n if (elements && elements[name]) {\n if (name === 'br') {\n brCount++;\n node = walker.next();\n continue;\n }\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (type === 8) {\n return false;\n }\n if (type === 3 && !isWhitespaceText(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && isWhitespaceText(node.nodeValue)) {\n return false;\n }\n node = walker.next();\n } while (node);\n }\n return brCount <= 1;\n };\n var createRng = function () {\n return doc.createRange();\n };\n var split = function (parentElm, splitElm, replacementElm) {\n var range = createRng();\n var beforeFragment;\n var afterFragment;\n var parentNode;\n if (parentElm && splitElm) {\n range.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n beforeFragment = range.extractContents();\n range = createRng();\n range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n range.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\n parentNode = parentElm.parentNode;\n parentNode.insertBefore(trimNode(self, beforeFragment), parentElm);\n if (replacementElm) {\n parentNode.insertBefore(replacementElm, parentElm);\n } else {\n parentNode.insertBefore(splitElm, parentElm);\n }\n parentNode.insertBefore(trimNode(self, afterFragment), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n }\n };\n var bind = function (target, name, func, scope) {\n if (Tools.isArray(target)) {\n var i = target.length;\n var rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n }\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n 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.length > 0 && (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 && isElement$1(node)) {\n var contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n var getContentEditableParent = function (node) {\n var root = getRoot();\n var state = null;\n for (; node && node !== root; node = node.parentNode) {\n state = getContentEditable(node);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n var destroy = function () {\n if (boundEvents.length > 0) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n events.unbind(item[0], item[1], item[2]);\n }\n }\n if (Sizzle.setDocument) {\n Sizzle.setDocument();\n }\n };\n var isChildOf = function (node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var dumpRng = function (r) {\n return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n };\n var self = {\n doc: doc,\n settings: settings,\n win: win,\n files: files,\n stdMode: stdMode,\n boxModel: boxModel,\n styleSheetLoader: styleSheetLoader,\n boundEvents: boundEvents,\n styles: styles,\n schema: schema,\n events: events,\n isBlock: isBlock,\n $: $,\n $$: $$,\n root: null,\n clone: clone,\n getRoot: getRoot,\n getViewPort: getViewPort,\n getRect: getRect,\n getSize: getSize,\n getParent: getParent,\n getParents: getParents,\n get: get,\n getNext: getNext,\n getPrev: getPrev,\n select: select,\n is: is,\n add: add,\n create: create,\n createHTML: createHTML,\n createFragment: createFragment,\n remove: remove,\n setStyle: setStyle,\n getStyle: getStyle,\n setStyles: setStyles,\n removeAllAttribs: removeAllAttribs,\n setAttrib: setAttrib,\n setAttribs: setAttribs,\n getAttrib: getAttrib,\n getPos: getPos$1,\n parseStyle: parseStyle,\n serializeStyle: serializeStyle,\n addStyle: addStyle,\n loadCSS: loadCSS,\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n show: show,\n hide: hide,\n isHidden: isHidden,\n uniqueId: uniqueId,\n setHTML: setHTML,\n getOuterHTML: getOuterHTML,\n setOuterHTML: setOuterHTML,\n decode: decode,\n encode: encode,\n insertAfter: insertAfter,\n replace: replace,\n rename: rename,\n findCommonAncestor: findCommonAncestor,\n toHex: toHex,\n run: run,\n getAttribs: getAttribs,\n isEmpty: isEmpty,\n createRng: createRng,\n nodeIndex: findNodeIndex,\n split: split,\n bind: bind,\n unbind: unbind,\n fire: fire,\n getContentEditable: getContentEditable,\n getContentEditableParent: getContentEditableParent,\n destroy: destroy,\n isChildOf: isChildOf,\n dumpRng: dumpRng\n };\n var attrHooks = setupAttrHooks(styles, settings, function () {\n return self;\n });\n return self;\n }\n (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;\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 var 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 failures = [];\n var execCallbacks = function (name, url) {\n each$6(self.scriptLoadedCallbacks[url], function (callback) {\n if (isFunction(callback[name])) {\n callback[name].call(callback.scope);\n }\n });\n self.scriptLoadedCallbacks[url] = undefined;\n };\n self.queueLoadedCallbacks.push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n var loadScripts = function () {\n var loadingScripts = grep$2(scripts);\n scripts.length = 0;\n each$6(loadingScripts, function (url) {\n if (self.states[url] === LOADED) {\n execCallbacks('success', url);\n return;\n }\n if (self.states[url] === FAILED) {\n execCallbacks('failure', url);\n return;\n }\n if (self.states[url] !== LOADING) {\n self.states[url] = LOADING;\n self.loading++;\n self.loadScript(url, function () {\n self.states[url] = LOADED;\n self.loading--;\n execCallbacks('success', url);\n loadScripts();\n }, function () {\n self.states[url] = FAILED;\n self.loading--;\n failures.push(url);\n execCallbacks('failure', url);\n loadScripts();\n });\n }\n });\n if (!self.loading) {\n var notifyCallbacks = self.queueLoadedCallbacks.slice(0);\n self.queueLoadedCallbacks.length = 0;\n each$6(notifyCallbacks, function (callback) {\n if (failures.length === 0) {\n if (isFunction(callback.success)) {\n callback.success.call(callback.scope);\n }\n } else {\n if (isFunction(callback.failure)) {\n callback.failure.call(callback.scope, failures);\n }\n }\n });\n }\n };\n loadScripts();\n };\n ScriptLoader.ScriptLoader = new ScriptLoader();\n return ScriptLoader;\n }();\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var isRaw = function (str) {\n return isObject(str) && has(str, 'raw');\n };\n var isTokenised = function (str) {\n return isArray(str) && str.length > 1;\n };\n var data = {};\n var currentCode = Cell('en');\n var getLanguageData = function () {\n return get(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$1(e, selector);\n }, isRoot);\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n var is = function (element, selector) {\n return is$1(element, selector);\n };\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var 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$2(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$1(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$2 = function () {\n var annotations = {};\n var register = function (name, settings) {\n annotations[name] = {\n name: name,\n settings: settings\n };\n };\n var lookup = function (name) {\n return annotations.hasOwnProperty(name) ? 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$1 = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var add$4 = function (element, classes) {\n each(classes, function (x) {\n add$3(element, x);\n });\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || 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$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\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 && !isText$1(next) && !isBoundary(next));\n return Option.from(next).filter(isText$1);\n };\n return {\n current: function () {\n return Option.from(walker.current()).filter(isText$1);\n },\n next: function () {\n return walk('next');\n },\n prev: function () {\n return walk('prev');\n },\n prev2: function () {\n return walk('prev2');\n }\n };\n };\n\n var TextSeeker = function (dom, isBoundary) {\n var isBlockBoundary = isBoundary ? isBoundary : function (node) {\n return dom.isBlock(node) || isBr(node) || isContentEditableFalse(node);\n };\n var walk = function (node, offset, walker, process) {\n if (isText$1(node)) {\n var newOffset = process(node, offset, node.data);\n if (newOffset !== -1) {\n return 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 ZWSP = zeroWidth;\n var isZwsp$1 = isZwsp;\n var trim$3 = removeZwsp;\n\n var isElement$2 = isElement$1;\n var isText$2 = isText$1;\n var isCaretContainerBlock = function (node) {\n if (isText$2(node)) {\n node = node.parentNode;\n }\n return isElement$2(node) && node.hasAttribute('data-mce-caret');\n };\n var isCaretContainerInline = function (node) {\n return isText$2(node) && isZwsp$1(node.data);\n };\n var isCaretContainer = function (node) {\n return isCaretContainerBlock(node) || isCaretContainerInline(node);\n };\n var hasContent = function (node) {\n return node.firstChild !== node.lastChild || !isBr(node.firstChild);\n };\n var insertInline = function (node, before) {\n var sibling;\n var doc = node.ownerDocument;\n var textNode = doc.createTextNode(ZWSP);\n var parentNode = node.parentNode;\n if (!before) {\n sibling = node.nextSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode.appendChild(textNode);\n }\n } else {\n sibling = node.previousSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n var isBeforeInline = function (pos) {\n var container = pos.container();\n if (!pos || !isText$1(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!pos || !isText$1(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = 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 = node.ownerDocument;\n var blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createBogusBr());\n var parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode.appendChild(blockNode);\n }\n } else {\n parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n var startsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[0] === ZWSP;\n };\n var endsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[node.data.length - 1] === ZWSP;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (isBogus(lastBr)) {\n lastBr.parentNode.removeChild(lastBr);\n }\n };\n var showCaretContainerBlock = function (caretContainer) {\n if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n trimBogusBr(caretContainer);\n caretContainer.removeAttribute('data-mce-caret');\n caretContainer.removeAttribute('data-mce-bogus');\n caretContainer.removeAttribute('style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n var isRangeInCaretContainerBlock = function (range) {\n return isCaretContainerBlock(range.startContainer);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? 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 round = Math.round;\n var clone$2 = function (rect) {\n if (!rect) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n return {\n left: round(rect.left),\n top: round(rect.top),\n bottom: round(rect.bottom),\n right: round(rect.right),\n width: round(rect.width),\n height: round(rect.height)\n };\n };\n var collapse = function (rect, toStart) {\n rect = clone$2(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n var isEqual = function (rect1, rect2) {\n return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n };\n var isValidOverflow = function (overflowY, rect1, rect2) {\n return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n };\n var isAbove = function (rect1, rect2) {\n 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 or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n var and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n var isContentEditableTrue$1 = isContentEditableTrue;\n var isContentEditableFalse$1 = isContentEditableFalse;\n var isBr$2 = isBr;\n var isText$3 = isText$1;\n var isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n var isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object'\n ]);\n var isTable$2 = matchNodeNames(['table']);\n var isCaretContainer$1 = isCaretContainer;\n var isCaretCandidate = function (node) {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$3(node)) {\n 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 isElement$1(node) && node.getAttribute('unselectable') === 'true';\n };\n var isNonUiContentEditableFalse = function (node) {\n return isUnselectable(node) === false && isContentEditableFalse$1(node);\n };\n var isInEditable = function (node, root) {\n for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n if (isNonUiContentEditableFalse(node)) {\n return false;\n }\n if (isContentEditableTrue$1(node)) {\n return true;\n }\n }\n return true;\n };\n var isAtomicContentEditableFalse = function (node) {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) {\n return result || isContentEditableTrue$1(elm);\n }, false) !== true;\n };\n var isAtomic = function (node) {\n return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n };\n var isEditableCaretCandidate = function (node, root) {\n return isCaretCandidate(node) && isInEditable(node, root);\n };\n\n var isElement$3 = isElement$1;\n var isCaretCandidate$1 = isCaretCandidate;\n var isBlock$1 = matchStyleValues('display', 'block table');\n var isFloated = matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = and(isElement$3, isCaretCandidate$1, not(isFloated));\n var isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = isText$1;\n var isBr$3 = isBr;\n var nodeIndex = DOMUtils$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) && isText$1(container)) {\n text = container.data;\n if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n var getBrClientRect = function (brNode) {\n var doc = brNode.ownerDocument;\n var rng = createRange(doc);\n var nbsp$1 = doc.createTextNode(nbsp);\n var parentNode = brNode.parentNode;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n var clientRect = clone$2(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\n return clientRect;\n };\n var getBoundingClientRectWebKitText = function (rng) {\n var sc = rng.startContainer;\n var ec = rng.endContainer;\n var so = rng.startOffset;\n var eo = rng.endOffset;\n if (sc === ec && isText$1(ec) && so === 0 && eo === 1) {\n var newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect(newRng);\n } else {\n return null;\n }\n };\n var isZeroRect = function (r) {\n return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n };\n var getBoundingClientRect = function (item) {\n var clientRect;\n var clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$2(clientRects[0]);\n } else {\n clientRect = clone$2(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return getBoundingClientRectWebKitText(item);\n }\n return clientRect;\n };\n var collapseAndInflateWidth = function (clientRect, toStart) {\n var newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n var getCaretPositionClientRects = function (caretPosition) {\n var clientRects = [];\n var beforeNode, node;\n var addUniqueAndValidRect = function (clientRect) {\n if (clientRect.height === 0) {\n return;\n }\n if (clientRects.length > 0) {\n if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n return;\n }\n }\n clientRects.push(clientRect);\n };\n var addCharacterOffset = function (container, offset) {\n var range = createRange(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return clientRects;\n }\n if (isExtendingChar(container.data[offset - 1])) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n return clientRects;\n }\n }\n }\n if (offset > 0) {\n range.setStart(container, offset - 1);\n range.setEnd(container, offset);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true));\n }\n }\n };\n if (isText$4(caretPosition.container())) {\n addCharacterOffset(caretPosition.container(), caretPosition.offset());\n return clientRects;\n }\n if (isElement$3(caretPosition.container())) {\n if (caretPosition.isAtEnd()) {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n }\n } else {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n return clientRects;\n }\n beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));\n }\n }\n }\n return clientRects;\n };\n 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 = 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 ? isText$1(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 trimEmptyTextNode = function (dom, node) {\n if (isText$1(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var insertNode = function (dom, rng, node) {\n rng.insertNode(node);\n trimEmptyTextNode(dom, node.previousSibling);\n trimEmptyTextNode(dom, node.nextSibling);\n };\n var insertFragment = function (dom, rng, frag) {\n var firstChild = 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 (isDocumentFragment$1(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isText$5 = isText$1;\n var isBogus$1 = 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 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$1 = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal$1(node), node);\n nodes = nodes.slice(0, index + 1);\n var numTextFragments = reduce(nodes, function (result, node, i) {\n if (isText$5(node) && isText$5(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = filter$2(nodes, matchNodeNames([node.nodeName]));\n index = findIndex$1(nodes, equal$1(node), node);\n return index - numTextFragments;\n };\n var createPathItem = function (node) {\n var name;\n if (isText$5(node)) {\n name = 'text()';\n } else {\n name = node.nodeName.toLowerCase();\n }\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n var parentsUntil = function (root, node, predicate) {\n var parents = [];\n for (node = node.parentNode; node !== root; node = node.parentNode) {\n if (predicate && predicate(node)) {\n break;\n }\n parents.push(node);\n }\n return parents;\n };\n var create$3 = function (root, caretPosition) {\n var container, offset, path = [], outputOffset, childNodes, parents;\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (isText$5(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length) {\n outputOffset = 'after';\n offset = childNodes.length - 1;\n } else {\n outputOffset = 'before';\n }\n container = childNodes[offset];\n }\n path.push(createPathItem(container));\n parents = parentsUntil(root, container);\n parents = filter$2(parents, not(isBogus));\n path = path.concat(map$2(parents, function (node) {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n var resolvePathItem = function (node, name, index) {\n var nodes = getChildNodes(node);\n nodes = filter$2(nodes, function (node, index) {\n return !isText$5(node) || !isText$5(nodes[index - 1]);\n });\n nodes = filter$2(nodes, matchNodeNames([name]));\n return nodes[index];\n };\n var findTextPosition = function (container, offset) {\n var node = container, targetOffset = 0, dataLen;\n while (isText$5(node)) {\n dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$5(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$5(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition$1(container, offset);\n };\n var resolve$1 = function (root, path) {\n var offset;\n if (!path) {\n return null;\n }\n var parts = path.split(',');\n var paths = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n var container = reduce(paths, function (result, value) {\n 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 isContentEditableFalse$2 = isContentEditableFalse;\n var getNormalizedTextOffset = function (trim, container, offset) {\n var node, trimmedOffset;\n trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (node = container.previousSibling; node && isText$1(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n var getPoint = function (dom, trim, normalized, rng, start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n var point = [];\n var childNodes, after = 0;\n var root = dom.getRoot();\n if (isText$1(container)) {\n point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length && childNodes.length) {\n after = 1;\n offset = Math.max(0, childNodes.length - 1);\n }\n point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n }\n for (; container && container !== root; container = container.parentNode) {\n point.push(dom.nodeIndex(container, normalized));\n }\n return point;\n };\n var getLocation = function (trim, selection, normalized, rng) {\n var dom = selection.dom, bookmark = {};\n bookmark.start = getPoint(dom, trim, normalized, rng, true);\n if (!selection.isCollapsed()) {\n bookmark.end = getPoint(dom, trim, normalized, rng, false);\n }\n return bookmark;\n };\n var findIndex$2 = function (dom, name, element) {\n var count = 0;\n Tools.each(dom.select(name), function (node) {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n }\n if (node === element) {\n return false;\n }\n count++;\n });\n return count;\n };\n var moveEndPoint = function (rng, start) {\n var container, offset, childNodes;\n var prefix = start ? 'start' : 'end';\n container = rng[prefix + 'Container'];\n offset = rng[prefix + 'Offset'];\n if (isElement$1(container) && container.nodeName === 'TR') {\n childNodes = container.childNodes;\n container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n if (container) {\n offset = start ? 0 : container.childNodes.length;\n rng['set' + (start ? 'Start' : 'End')](container, offset);\n }\n }\n };\n var normalizeTableCellSelection = function (rng) {\n moveEndPoint(rng, true);\n moveEndPoint(rng, false);\n return rng;\n };\n var findSibling = function (node, offset) {\n var sibling;\n if (isElement$1(node)) {\n node = getNode(node, offset);\n if (isContentEditableFalse$2(node)) {\n return node;\n }\n }\n if (isCaretContainer(node)) {\n if (isText$1(node) && isCaretContainerBlock(node)) {\n node = node.parentNode;\n }\n sibling = node.previousSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n }\n };\n var findAdjacentContentEditableFalseElm = function (rng) {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n var getOffsetBookmark = function (trim, normalized, selection) {\n var element = selection.getNode();\n var name = element ? element.nodeName : null;\n var rng = selection.getRng();\n if (isContentEditableFalse$2(element) || name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(selection.dom, name, element)\n };\n }\n var sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n name = sibling.tagName;\n return {\n name: name,\n index: findIndex$2(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n var getCaretBookmark = function (selection) {\n var rng = selection.getRng();\n return {\n start: create$3(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),\n end: create$3(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, '&#xFEFF;') : dom.create('span', args);\n };\n var getPersistentBookmark = function (selection, filled) {\n var dom = selection.dom;\n var rng = selection.getRng();\n var id = dom.uniqueId();\n var collapsed = selection.isCollapsed();\n var element = selection.getNode();\n var name = element.nodeName;\n if (name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(dom, name, element)\n };\n }\n var rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id: id,\n keep: true\n });\n return { id: id };\n };\n var getBookmark = function (selection, type, normalized) {\n if (type === 2) {\n return getOffsetBookmark(trim$3, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n var getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n var DOM$1 = DOMUtils$1.DOM;\n var defaultPreviewStyles = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow';\n var getBodySetting = function (editor, name, defaultValue) {\n var value = editor.getParam(name, defaultValue);\n if (value.indexOf('=') !== -1) {\n var bodyObj = editor.getParam(name, '', 'hash');\n return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;\n } else {\n return value;\n }\n };\n var getIframeAttrs = function (editor) {\n return editor.getParam('iframe_attrs', {});\n };\n var getDocType = function (editor) {\n return editor.getParam('doctype', '<!DOCTYPE html>');\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.getParam('content_css');\n if (isString(contentCss)) {\n return map(contentCss.split(','), trim);\n } else if (isArray(contentCss)) {\n return contentCss;\n } else if (contentCss === false || editor.inline) {\n return [];\n } else {\n return ['default'];\n }\n };\n var 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 getEventRoot = function (editor) {\n return editor.getParam('event_root');\n };\n var getServiceMessage = function (editor) {\n return editor.getParam('service_message');\n };\n var getTheme = function (editor) {\n return editor.getParam('theme');\n };\n var shouldValidate = function (editor) {\n return editor.getParam('validate');\n };\n var isInlineBoundariesEnabled = function (editor) {\n return editor.getParam('inline_boundaries') !== false;\n };\n var getFormats = function (editor) {\n return editor.getParam('formats');\n };\n var getPreviewStyles = function (editor) {\n var style = editor.getParam('preview_styles', defaultPreviewStyles);\n if (isString(style)) {\n return style;\n } else {\n return '';\n }\n };\n var getCustomUiSelector = function (editor) {\n return editor.getParam('custom_ui_selector', '', 'string');\n };\n var getThemeUrl = function (editor) {\n return editor.getParam('theme_url');\n };\n var isInline$1 = function (editor) {\n return editor.getParam('inline');\n };\n var hasHiddenInput = function (editor) {\n return editor.getParam('hidden_input');\n };\n var shouldPatchSubmit = function (editor) {\n return editor.getParam('submit_patch');\n };\n var isEncodingXml = function (editor) {\n return editor.getParam('encoding') === 'xml';\n };\n var shouldAddFormSubmitTrigger = function (editor) {\n return editor.getParam('add_form_submit_trigger');\n };\n var shouldAddUnloadTrigger = function (editor) {\n return editor.getParam('add_unload_trigger');\n };\n var hasForcedRootBlock = function (editor) {\n return getForcedRootBlock(editor) !== '';\n };\n var getCustomUndoRedoLevels = function (editor) {\n return editor.getParam('custom_undo_redo_levels', 0, 'number');\n };\n var shouldDisableNodeChange = function (editor) {\n return editor.getParam('disable_nodechange');\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly');\n };\n var hasContentCssCors = function (editor) {\n return editor.getParam('content_css_cors');\n };\n var getPlugins = function (editor) {\n return editor.getParam('plugins');\n };\n var getExternalPlugins = function (editor) {\n return editor.getParam('external_plugins');\n };\n var shouldBlockUnsupportedDrop = function (editor) {\n return editor.getParam('block_unsupported_drop', true, 'boolean');\n };\n\n var isElement$4 = isElement$1;\n var isText$6 = isText$1;\n var removeNode = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var 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 = trim$3(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 = trim$3(getNodeValue(caretContainerNode));\n setNodeValue(caretContainerNode, text);\n }\n };\n\n var browser$2 = detect$3().browser;\n var isContentEditableFalse$3 = isContentEditableFalse;\n var isTableCell$1 = function (node) {\n return isElement$1(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 node, sibling, i, data;\n var contentEditableFalseNodes = descendants$1(Element.fromDom(root), '*[contentEditable=false]');\n for (i = 0; i < contentEditableFalseNodes.length; i++) {\n node = contentEditableFalseNodes[i].dom();\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 = 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('<div class=\"mce-visual-caret\" data-mce-bogus=\"all\"></div>').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 remove$5(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.get().each(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.set(Option.none());\n });\n if (cursorInterval) {\n Delay.clearInterval(cursorInterval);\n cursorInterval = null;\n }\n };\n var startBlink = function () {\n cursorInterval = Delay.setInterval(function () {\n if (hasFocus()) {\n DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n } else {\n DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n }\n }, 500);\n };\n var reposition = function () {\n lastVisualCaret.get().each(function (caretState) {\n var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n DomQuery(caretState.caret).css(__assign({}, clientRect));\n });\n };\n var destroy = function () {\n return Delay.clearInterval(cursorInterval);\n };\n var getCss = function () {\n return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n };\n return {\n show: show,\n hide: hide,\n getCss: getCss,\n reposition: reposition,\n destroy: destroy\n };\n };\n var isFakeCaretTableBrowser = function () {\n return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n };\n var isFakeCaretTarget = function (node) {\n return isContentEditableFalse$3(node) || isTable(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$4 = isContentEditableFalse;\n var isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer$2 = isCaretContainer;\n var isCaretContainerBlock$1 = isCaretContainerBlock;\n var isElement$5 = isElement$1;\n var isCaretCandidate$2 = isCaretCandidate;\n var isForwards = function (direction) {\n return direction > 0;\n };\n var isBackwards = function (direction) {\n return direction < 0;\n };\n var skipCaretContainers = function (walk, shallow) {\n var node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock$1(node)) {\n return node;\n }\n }\n return null;\n };\n var findNode = function (node, direction, predicateFn, rootNode, shallow) {\n var walker = new 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 if (!caretPosition) {\n return null;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (!isElement$5(container)) {\n return null;\n }\n return container.childNodes[offset + relativeOffset];\n };\n var beforeAfter = function (before, node) {\n var range = node.ownerDocument.createRange();\n if (before) {\n range.setStartBefore(node);\n range.setEndBefore(node);\n } else {\n range.setStartAfter(node);\n range.setEndAfter(node);\n }\n return range;\n };\n var isNodesInSameBlock = function (root, node1, node2) {\n return getParentBlock(node1, root) === getParentBlock(node2, root);\n };\n var lean = function (left, root, node) {\n var sibling, siblingName;\n if (left) {\n siblingName = 'previousSibling';\n } else {\n siblingName = 'nextSibling';\n }\n while (node && node !== root) {\n sibling = node[siblingName];\n if (isCaretContainer$2(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$4(sibling)) {\n if (isNodesInSameBlock(root, sibling, node)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$2(sibling)) {\n break;\n }\n node = node.parentNode;\n }\n return null;\n };\n var before$2 = curry(beforeAfter, true);\n var after$1 = curry(beforeAfter, false);\n var normalizeRange = function (direction, root, range) {\n var node, container, location;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n container = range.startContainer;\n var offset = range.startOffset;\n if (isCaretContainerBlock(container)) {\n if (!isElement$5(container)) {\n container = container.parentNode;\n }\n location = container.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = container.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = container.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$1(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$1(container)) {\n if (isCaretContainer$2(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n return range;\n }\n }\n return range;\n };\n var getRelativeCefElm = function (forward, caretPosition) {\n return 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 && isBr(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\n var isContentEditableFalse$5 = isContentEditableFalse;\n var isText$7 = isText$1;\n var isElement$6 = isElement$1;\n var isBr$4 = isBr;\n var isCaretCandidate$3 = isCaretCandidate;\n var isAtomic$1 = isAtomic;\n var isEditableCaretCandidate$1 = isEditableCaretCandidate;\n var getParents = function (node, root) {\n var parents = [];\n while (node && node !== root) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n };\n var nodeAtIndex = function (container, offset) {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n var getCaretCandidatePosition = function (direction, node) {\n if (isForwards(direction)) {\n if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {\n return CaretPosition$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 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 var rootContentEditableFalseElm = last$1(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 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) && 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 (isText$1(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 firstPositionIn = curry(positionIn, true);\n var lastPositionIn = curry(positionIn, false);\n\n var CARET_ID = '_mce_caret';\n var isCaretNode = function (node) {\n return isElement$1(node) && node.id === CARET_ID;\n };\n var getParentCaretContainer = function (body, node) {\n while (node && node !== body) {\n if (node.id === CARET_ID) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isStringPathBookmark = function (bookmark) {\n return 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 (isElement$1(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '<br data-mce-bogus=\"1\" />';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var pos;\n var rng = dom.createRng();\n pos = resolve$1(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$1(dom.getRoot(), bookmark.end);\n rng.setEnd(pos.container(), pos.offset());\n return rng;\n };\n var insertZwsp = function (node, rng) {\n var textNode = node.ownerDocument.createTextNode(ZWSP);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return 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 isText$1(node) && node.data.length > 0;\n };\n var restoreEndPoint = function (dom, suffix, bookmark) {\n var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n var keep = bookmark.keep;\n var container, offset;\n if (marker) {\n node = marker.parentNode;\n if (suffix === 'start') {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n node = marker.nextSibling;\n idx = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker) + 1;\n }\n }\n container = node;\n offset = idx;\n } else {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker);\n }\n }\n container = node;\n offset = idx;\n }\n if (!keep) {\n prev = marker.previousSibling;\n next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), function (node) {\n if (isText$1(node)) {\n node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n }\n });\n while (marker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(marker, true);\n }\n if (prev && next && prev.nodeType === next.nodeType && isText$1(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\n dom.remove(next);\n 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\n var getBookmark$1 = function (selection, type, normalized) {\n return getBookmark(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n resolve$2(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return isElement$1(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n var is$2 = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is$2(nbsp);\n var isWhiteSpace$1 = function (chr) {\n return chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n var isContent = 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 && isText$1(node) && /^([\\t \\r\\n]+|)$/.test(node.nodeValue);\n };\n var isEmptyTextNode = function (node) {\n return node && isText$1(node) && node.length === 0;\n };\n var replaceVars = function (value, vars) {\n if (typeof value !== 'string') {\n value = value(vars);\n } else if (vars) {\n value = value.replace(/%(\\w+)/g, function (str, name) {\n return vars[name] || str;\n });\n }\n return value;\n };\n var isEq = function (str1, str2) {\n str1 = str1 || '';\n str2 = str2 || '';\n str1 = '' + (str1.nodeName || str1);\n str2 = '' + (str2.nodeName || str2);\n return str1.toLowerCase() === str2.toLowerCase();\n };\n var normalizeStyleValue = function (dom, value, name) {\n if (name === 'color' || name === 'backgroundColor') {\n value = dom.toHex(value);\n }\n if (name === 'fontWeight' && value === 700) {\n value = 'bold';\n }\n if (name === 'fontFamily') {\n value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return '' + value;\n };\n var getStyle = function (dom, node, name) {\n return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n };\n var getTextDecoration = function (dom, node) {\n var decoration;\n dom.getParent(node, function (n) {\n decoration = dom.getStyle(n, 'text-decoration');\n return decoration && decoration !== 'none';\n });\n return decoration;\n };\n var getParents$1 = function (dom, node, selector) {\n return dom.getParents(node, selector, dom.getRoot());\n };\n var isVariableFormatName = function (editor, formatName) {\n var hasVariableValues = function (format) {\n var isVariableValue = function (val) {\n return val.length > 1 && val.charAt(0) === '%';\n };\n return exists([\n 'styles',\n 'attributes'\n ], function (key) {\n return get(format, key).exists(function (field) {\n var fieldValues = isArray(field) ? field : values(field);\n return exists(fieldValues, isVariableValue);\n });\n });\n };\n return exists(editor.formatter.get(formatName), hasVariableValues);\n };\n var areSimilarFormats = function (editor, formatName, otherFormatName) {\n var validKeys = [\n 'inline',\n 'block',\n 'selector',\n 'attributes',\n 'styles',\n 'classes'\n ];\n var filterObj = function (format) {\n return filter$1(format, function (_, key) {\n return exists(validKeys, function (validKey) {\n return validKey === key;\n });\n });\n };\n return exists(editor.formatter.get(formatName), function (fmt1) {\n var filteredFmt1 = filterObj(fmt1);\n return exists(editor.formatter.get(otherFormatName), function (fmt2) {\n var filteredFmt2 = filterObj(fmt2);\n return equal(filteredFmt1, filteredFmt2);\n });\n });\n };\n\n var isBookmarkNode$2 = isBookmarkNode$1;\n var getParents$2 = getParents$1;\n var isWhiteSpaceNode$1 = isWhiteSpaceNode;\n var isTextBlock$2 = isTextBlock$1;\n var isBogusBr = function (node) {\n return 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 (isElement$1(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n var walkText = function (start, node, offset, predicate) {\n var str = node.data;\n for (var i = offset; start ? i >= 0 : i < str.length; start ? i-- : i++) {\n if (predicate(str.charAt(i))) {\n return start ? i + 1 : i;\n }\n }\n return -1;\n };\n var findSpace = function (start, node, offset) {\n return walkText(start, node, offset, function (c) {\n return isNbsp(c) || isWhiteSpace$1(c);\n });\n };\n var findContent = function (start, node, offset) {\n return walkText(start, node, offset, isContent);\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 (isText$1(container) && container.nodeValue.length === 0 && container[siblingName]) {\n container = container[siblingName];\n }\n var parents = getParents$2(dom, container);\n for (var i = 0; i < parents.length; i++) {\n for (var y = 0; y < format.length; y++) {\n var curFormat = format[y];\n if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n var findBlockEndPoint = function (editor, format, container, siblingName) {\n var node;\n var dom = editor.dom;\n var root = dom.getRoot();\n if (!format[0].wrapper) {\n node = dom.getParent(container, format[0].block, root);\n }\n if (!node) {\n var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n node = dom.getParent(isText$1(container) ? container.parentNode : container, function (node) {\n return node !== root && isTextBlock$2(editor, node);\n }, scopeRoot);\n }\n if (node && format[0].wrapper) {\n node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (isEq(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {\n var container, parent, sibling;\n container = parent = start ? startContainer : endContainer;\n var siblingName = start ? 'previousSibling' : 'nextSibling';\n var root = dom.getRoot();\n if (isText$1(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 (isElement$1(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode(startContainer, startOffset);\n if (isText$1(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$1(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$1(endContainer)) {\n endOffset = endContainer.nodeValue.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (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 (isText$1(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 (isText$1(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n var startPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n startContainer = container;\n startOffset = offset;\n });\n var endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n endContainer = container;\n endOffset = offset;\n });\n }\n if (format[0].inline || format[0].block_expand) {\n if (!format[0].inline || (!isText$1(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!format[0].inline || (!isText$1(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 (isElement$1(startContainer)) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$1(endContainer)) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n\n var clampToExistingChildren = function (container, index) {\n var childNodes = container.childNodes;\n if (index >= childNodes.length) {\n index = childNodes.length - 1;\n } else if (index < 0) {\n index = 0;\n }\n return childNodes[index] || container;\n };\n var getEndChild = function (container, index) {\n return clampToExistingChildren(container, index - 1);\n };\n var walk$1 = function (dom, rng, callback) {\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var exclude = function (nodes) {\n var node;\n node = nodes[0];\n if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {\n nodes.splice(0, 1);\n }\n node = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n var collectSiblings = function (node, name, endNode) {\n var siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n var findEndPoint = function (node, root) {\n do {\n if (node.parentNode === root) {\n return node;\n }\n node = node.parentNode;\n } while (node);\n };\n var walkBoundary = function (startNode, endNode, next) {\n var siblingName = next ? 'nextSibling' : 'previousSibling';\n for (var node = startNode, parent_1 = node.parentNode; node && node !== endNode; node = parent_1) {\n parent_1 = node.parentNode;\n var siblings_1 = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings_1.length) {\n if (!next) {\n siblings_1.reverse();\n }\n callback(exclude(siblings_1));\n }\n }\n };\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = clampToExistingChildren(startContainer, startOffset);\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getEndChild(endContainer, endOffset);\n }\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n var ancestor = dom.findCommonAncestor(startContainer, endContainer);\n for (var node = startContainer; node; node = node.parentNode) {\n if (node === endContainer) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (node === ancestor) {\n break;\n }\n }\n for (var node = endContainer; node; node = node.parentNode) {\n if (node === startContainer) {\n return walkBoundary(endContainer, ancestor);\n }\n if (node === ancestor) {\n break;\n }\n }\n var startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n var endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n var siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n\n var getRanges = function (selection) {\n var ranges = [];\n if (selection) {\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n var getSelectedNodes = function (ranges) {\n return bind(ranges, function (range) {\n var node = getSelectedNode(range);\n return node ? [Element.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter(getSelectedNodes(ranges), isTableCell);\n };\n var getCellsFromElement = function (elm) {\n return descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\n };\n var getCellsFromElementOrRanges = function (ranges, element) {\n var selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody()));\n };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (isText$1(sc)) {\n return so === 0 ? 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 (isText$1(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$2, startNode));\n var end = find(getLastChildren(elm), curry(eq$2, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n var moveEndPoint$1 = function (dom, rng, node, start) {\n var root = node, walker = new 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 var runOnRanges = function (editor, executor) {\n var fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each(fakeSelectionNodes, function (elem) {\n var node = elem.dom();\n var fakeNodeRng = editor.dom.createRng();\n fakeNodeRng.setStartBefore(node);\n fakeNodeRng.setEndAfter(node);\n executor(fakeNodeRng, true);\n });\n } else {\n executor(editor.selection.getRng(), false);\n }\n };\n var preserve = function (selection, fillBookmark, executor) {\n var bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n 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$1('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 walk$1(editor.dom, rng, function (nodes) {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n var annotateWithBookmark = function (editor, name, settings, data) {\n editor.undoManager.transact(function () {\n var selection = editor.selection;\n var initialRng = selection.getRng();\n var hasFakeSelection = getCellsFromEditor(editor).length > 0;\n if (initialRng.collapsed && !hasFakeSelection) {\n applyWordGrab(editor, initialRng);\n }\n if (selection.getRng().collapsed && !hasFakeSelection) {\n var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n set$1(wrapper, nbsp);\n selection.getRng().insertNode(wrapper.dom());\n selection.select(wrapper.dom());\n } else {\n preserve(selection, false, function () {\n runOnRanges(editor, function (selectionRng) {\n annotate(editor, selectionRng, name, settings.decorate, data);\n });\n });\n }\n });\n };\n\n var Annotator = function (editor) {\n var registry = create$2();\n setup$1(editor, registry);\n var changes = setup(editor);\n return {\n register: function (name, settings) {\n registry.register(name, settings);\n },\n annotate: function (name, data) {\n registry.lookup(name).each(function (settings) {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: function (name, callback) {\n changes.addListener(name, callback);\n },\n remove: function (name) {\n identify(editor, 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 typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n var walk$2 = function (node, root, prev) {\n var startName = prev ? 'lastChild' : 'firstChild';\n var siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n var sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (var parent_1 = node.parent; parent_1 && parent_1 !== root; parent_1 = parent_1.parent) {\n sibling = parent_1[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n };\n var isEmptyTextNode$1 = function (node) {\n if (!isWhitespaceText(node.value)) {\n return false;\n }\n var parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(node.value)) {\n return false;\n }\n return true;\n };\n var isNonEmptyElement = function (node) {\n var isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n };\n var Node = 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 each$1(attrs, function (value, attrName) {\n node.attr(attrName, value);\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 if (name !== undefined && name !== null) {\n each$1(name, function (value, key) {\n self.attr(key, value);\n });\n }\n return self;\n }\n if (attrs = self.attributes) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n var i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n var i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name: name,\n value: value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n };\n 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] && isWhitespaceText(node.value)) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n };\n Node.prototype.walk = function (prev) {\n return walk$2(this, null, prev);\n };\n return Node;\n }();\n\n var makeMap$3 = Tools.makeMap;\n var Writer = function (settings) {\n var html = [];\n settings = settings || {};\n var indent = settings.indent;\n var indentBefore = makeMap$3(settings.indent_before || '');\n var indentAfter = makeMap$3(settings.indent_after || '');\n var encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n var htmlOutput = settings.element_format === 'html';\n return {\n start: function (name, attrs, empty) {\n var i, l, attr, value;\n if (indent && indentBefore[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (i = 0, l = attrs.length; i < l; i++) {\n attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: function (name) {\n var value;\n html.push('</', name, '>');\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('<![CDATA[', text, ']]>');\n },\n comment: function (text) {\n html.push('<!--', text, '-->');\n },\n pi: function (name, text) {\n if (text) {\n html.push('<?', name, ' ', encode(text), '?>');\n } else {\n html.push('<?', name, '?>');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: function (text) {\n html.push('<!DOCTYPE', text, '>', 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 validate = settings.validate;\n var handlers = {\n 3: function (node) {\n writer.text(node.value, node.raw);\n },\n 8: function (node) {\n writer.comment(node.value);\n },\n 7: function (node) {\n writer.pi(node.name, node.value);\n },\n 10: function (node) {\n writer.doctype(node.value);\n },\n 4: function (node) {\n writer.cdata(node.value);\n },\n 11: function (node) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n };\n writer.reset();\n var walk = function (node) {\n var handler = handlers[node.type];\n var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\n if (!handler) {\n name = node.name;\n isEmpty = node.shortEnded;\n attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n sortedAttrs = [];\n sortedAttrs.map = {};\n elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (i = 0, l = attrs.length; i < l; i++) {\n attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n attrs = sortedAttrs;\n }\n }\n writer.start(node.name, attrs, isEmpty);\n if (!isEmpty) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n writer.end(name);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize: serialize };\n };\n\n var extractBase64DataUris = function (html) {\n var dataImageUri = /data:[^;]+;base64,([a-z0-9\\+\\/=]+)/gi;\n var chunks = [];\n var uris = {};\n var prefix = generate$1('img');\n var matches;\n var index = 0;\n var count = 0;\n while (matches = dataImageUri.exec(html)) {\n var uri = matches[0];\n var imageId = prefix + '_' + count++;\n uris[imageId] = uri;\n if (index < matches.index) {\n chunks.push(html.substr(index, matches.index - index));\n }\n chunks.push(imageId);\n index = matches.index + uri.length;\n }\n if (index === 0) {\n return {\n prefix: prefix,\n uris: uris,\n html: html\n };\n } else {\n if (index < html.length) {\n chunks.push(html.substr(index));\n }\n return {\n prefix: prefix,\n uris: uris,\n html: chunks.join('')\n };\n }\n };\n var restoreDataUris = function (html, result) {\n return html.replace(new RegExp(result.prefix + '_[0-9]+', 'g'), function (imageId) {\n return get(result.uris, imageId).getOr(imageId);\n });\n };\n var parseDataUri = function (uri) {\n var matches = /data:([^;]+);base64,([a-z0-9\\+\\/=]+)/i.exec(uri);\n if (matches) {\n return Option.some({\n type: matches[1],\n data: decodeURIComponent(matches[2])\n });\n } else {\n return Option.none();\n }\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;\n var shortEndedElements = schema.getShortEndedElements();\n var tokenRegExp = /<([!?\\/])?([A-Za-z0-9\\-_\\:\\.]+)((?:\\s+[^\"\\'>]+(?:(?:\"[^\"]*\")|(?:\\'[^\\']*\\')|[^>]*))*|\\/|\\s+)>/g;\n tokenRegExp.lastIndex = index = startIndex;\n while (matches = tokenRegExp.exec(html)) {\n index = tokenRegExp.lastIndex;\n if (matches[1] === '/') {\n count--;\n } else if (!matches[1]) {\n if (matches[2] in shortEndedElements) {\n continue;\n }\n count++;\n }\n if (count === 0) {\n break;\n }\n }\n return index;\n };\n var isConditionalComment = function (html, startIndex) {\n return /^\\s*\\[if [\\w\\W]+\\]>.*<!\\[endif\\](--!?)?>/.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 parseInternal = function (base64Extract, format) {\n if (format === void 0) {\n format = 'html';\n }\n var html = base64Extract.html;\n var matches, index = 0, value, endRegExp;\n var stack = [];\n var attrList, i, textData, name;\n var isInternalElement, isShortEnded;\n var elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\n var attributesRequired, attributesDefault, attributesForced;\n var anyAttributesRequired, attrValue, idCount = 0;\n var decode = Entities.decode;\n var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href');\n var scriptUriRegExp = /((java|vb)script|mhtml):/i;\n var parsingMode = format === 'html' ? 0 : 1;\n var processEndTag = function (name) {\n var pos, i;\n pos = stack.length;\n while (pos--) {\n if (stack[pos].name === name) {\n break;\n }\n }\n if (pos >= 0) {\n for (i = stack.length - 1; i >= pos; i--) {\n name = stack[i];\n if (name.valid) {\n end(name.name);\n }\n }\n stack.length = pos;\n }\n };\n var processText = function (value, raw) {\n return text(restoreDataUris(value, base64Extract), raw);\n };\n var processComment = function (value) {\n if (value === '') {\n return;\n }\n if (value.charAt(0) === '>') {\n value = ' ' + value;\n }\n if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {\n value = ' ' + value;\n }\n comment(restoreDataUris(value, base64Extract));\n };\n var processAttr = function (value) {\n return get(base64Extract.uris, value).getOr(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 = processAttr(name in fillAttrsMap ? name : decode(value || val2 || val3 || ''));\n if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) {\n attrRule = validAttributesMap[name];\n if (!attrRule && validAttributePatterns) {\n i = validAttributePatterns.length;\n while (i--) {\n attrRule = validAttributePatterns[i];\n if (attrRule.pattern.test(name)) {\n break;\n }\n }\n if (i === -1) {\n attrRule = null;\n }\n }\n if (!attrRule) {\n return;\n }\n if (attrRule.validValues && !(value in attrRule.validValues)) {\n return;\n }\n }\n if (filteredUrlAttrs[name] && !settings.allow_script_urls) {\n var uri = value.replace(trimRegExp, '');\n try {\n uri = decodeURIComponent(uri);\n } catch (ex) {\n uri = unescape(uri);\n }\n if (scriptUriRegExp.test(uri)) {\n return;\n }\n if (isInvalidUri(settings, uri)) {\n return;\n }\n }\n if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {\n return;\n }\n attrList.map[name] = value;\n attrList.push({\n name: name,\n value: value\n });\n };\n var tokenRegExp = new RegExp('<(?:' + '(?:!--([\\\\w\\\\W]*?)--!?>)|' + '(?:!\\\\[CDATA\\\\[([\\\\w\\\\W]*?)\\\\]\\\\]>)|' + '(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\\\w\\\\W]*?)>)|' + '(?:!(--)?)|' + '(?:\\\\?([^\\\\s\\\\/<>]+) ?([\\\\w\\\\W]*?)[?/]>)|' + '(?:\\\\/([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)((?:\\\\s+[^\"\\'>]+(?:(?:\"[^\"]*\")|(?:\\'[^\\']*\\')|[^>]*))*|\\\\/|\\\\s+)>)' + ')', 'g');\n var attrRegExp = /([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g;\n var shortEndedElements = schema.getShortEndedElements();\n var selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\n var fillAttrsMap = schema.getBoolAttrs();\n var validate = settings.validate;\n var removeInternalElements = settings.remove_internals;\n var fixSelfClosing = settings.fix_self_closing;\n var specialElements = schema.getSpecialElements();\n var processHtml = html + '>';\n while (matches = tokenRegExp.exec(processHtml)) {\n var matchText = matches[0];\n if (index < matches.index) {\n processText(decode(html.substr(index, matches.index - index)));\n }\n if (value = matches[7]) {\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n processEndTag(value);\n } else if (value = matches[8]) {\n if (matches.index + matchText.length > html.length) {\n processText(decode(html.substr(matches.index)));\n index = matches.index + matchText.length;\n continue;\n }\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n isShortEnded = value in shortEndedElements;\n if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) {\n processEndTag(value);\n }\n var bogusValue = checkBogusAttribute(attrRegExp, matches[9]);\n if (bogusValue !== null) {\n if (bogusValue === 'all') {\n index = findEndTagIndex(schema, html, tokenRegExp.lastIndex);\n tokenRegExp.lastIndex = index;\n continue;\n }\n isValidElement = false;\n }\n if (!validate || (elementRule = schema.getElementRule(value))) {\n isValidElement = true;\n if (validate) {\n validAttributesMap = elementRule.attributes;\n validAttributePatterns = elementRule.attributePatterns;\n }\n if (attribsValue = matches[9]) {\n isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;\n if (isInternalElement && removeInternalElements) {\n isValidElement = false;\n }\n attrList = [];\n attrList.map = {};\n attribsValue.replace(attrRegExp, 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 processText(textData, true);\n }\n end(value);\n }\n tokenRegExp.lastIndex = index;\n continue;\n }\n if (!isShortEnded) {\n if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {\n stack.push({\n name: value,\n valid: isValidElement\n });\n } else if (isValidElement) {\n end(value);\n }\n }\n } else if (value = matches[1]) {\n processComment(value);\n } else if (value = matches[2]) {\n var isValidCdataSection = parsingMode === 1 || settings.preserve_cdata || stack.length > 0 && schema.isValidChild(stack[stack.length - 1].name, '#cdata');\n if (isValidCdataSection) {\n cdata(value);\n } else {\n index = processMalformedComment('', matches.index + 2);\n tokenRegExp.lastIndex = index;\n continue;\n }\n } else if (value = matches[3]) {\n doctype(value);\n } else if ((value = matches[4]) || matchText === '<!') {\n index = processMalformedComment(value, matches.index + matchText.length);\n tokenRegExp.lastIndex = index;\n continue;\n } else if (value = matches[5]) {\n if (parsingMode === 1) {\n pi(value, matches[6]);\n } else {\n index = processMalformedComment('?', matches.index + 2);\n tokenRegExp.lastIndex = index;\n continue;\n }\n }\n index = matches.index + matchText.length;\n }\n if (index < html.length) {\n processText(decode(html.substr(index)));\n }\n for (i = stack.length - 1; i >= 0; i--) {\n value = stack[i];\n if (value.valid) {\n end(value.name);\n }\n }\n };\n var parse = function (html, format) {\n if (format === void 0) {\n format = 'html';\n }\n parseInternal(extractBase64DataUris(html), format);\n };\n return { parse: parse };\n }\n (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;\n var schema = serializer.schema;\n content = trimHtml(serializer.getTempAttrs(), content);\n var shortEndedElements = schema.getShortEndedElements();\n while (matches = bogusAllRegExp.exec(content)) {\n index = bogusAllRegExp.lastIndex;\n matchLength = matches[0].length;\n if (shortEndedElements[matches[1]]) {\n endTagIndex = index;\n } else {\n endTagIndex = SaxParser$1.findEndTag(schema, content, index);\n }\n content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n bogusAllRegExp.lastIndex = index - matchLength;\n }\n return trim$3(content);\n };\n var trimExternal = trimInternal;\n\n var trimEmptyContents = function (editor, html) {\n var blockName = getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>(&nbsp;|&#160;|\\\\s|\\xA0|<br \\\\/>|)<\\\\/' + blockName + '>[\\r\\n]*|<br \\\\/>[\\r\\n]*)$');\n return html.replace(emptyRegExp, '');\n };\n var getContentFromBody = function (editor, args, format, body) {\n var content;\n args.format = format;\n args.get = true;\n args.getInner = true;\n if (!args.no_events) {\n editor.fire('BeforeGetContent', args);\n }\n if (args.format === 'raw') {\n content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = trim$3(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 getContentInternal = function (editor, args, format) {\n return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, format, body);\n });\n };\n\n var each$7 = Tools.each;\n var ElementUtils = function (dom) {\n 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$7(dom.getAttribs(node), function (attr) {\n var name = attr.nodeName.toLowerCase();\n if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n var compareObjects = function (obj1, obj2) {\n var value, name;\n for (name in obj1) {\n if (obj1.hasOwnProperty(name)) {\n value = obj2[name];\n if (typeof value === 'undefined') {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (name in obj2) {\n if (obj2.hasOwnProperty(name)) {\n return false;\n }\n }\n return true;\n };\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n };\n\n var isChar = function (forward, predicate, pos) {\n return Option.from(pos.container()).filter(isText$1).exists(function (text) {\n var delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n };\n var isBeforeSpace = curry(isChar, true, isWhiteSpace$1);\n var isAfterSpace = curry(isChar, false, isWhiteSpace$1);\n var isEmptyText = function (pos) {\n var container = pos.container();\n return isText$1(container) && container.data.length === 0;\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 isContentEditableFalse(node) && !isBogusAll(node);\n };\n var isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n var isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n var isBeforeTable = matchesElementPosition(true, isTable);\n var isAfterTable = matchesElementPosition(false, isTable);\n var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n var 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$2, rootElement));\n };\n var isWhitespace = function (rootNode, node) {\n return isText$1(node) && isWhitespaceText(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;\n };\n var isNamedAnchor = function (node) {\n return isElement$1(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 = hasAttribute('data-mce-bookmark');\n var isBogus$2 = hasAttribute('data-mce-bogus');\n var isBogusAll$1 = hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode, skipBogus) {\n var node, brCount = 0;\n if (isContent$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 (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$1 = function (elm, skipBogus) {\n if (skipBogus === void 0) {\n skipBogus = true;\n }\n return isEmptyNode(elm.dom(), skipBogus);\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('<br data-mce-bogus=\"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\n var dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil$1 = function (start, root, predicate) {\n if (contains$2(root, start)) {\n return dropLast(parents(start, function (elm) {\n return predicate(elm) || eq$2(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents$1 = function (start, root) {\n return parentsUntil$1(start, root, constant(false));\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents$1(start, root));\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 = 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(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(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 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 isText$1(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);\n };\n var afterOrEndOf = function (node) {\n return isText$1(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 ? 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 ? 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 prevPosition(rootElement, startPosition).fold(function () {\n return nextPosition(rootElement, CaretPosition$1.after(elm));\n }, Option.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {\n return 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 (isEmpty$1(elm)) {\n var br = Element.fromHtml('<br data-mce-bogus=\"1\">');\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\n var tableCellRng = function (start, end) {\n return {\n start: start,\n end: end\n };\n };\n var tableSelection = function (rng, table, cells) {\n return {\n rng: rng,\n table: table,\n cells: cells\n };\n };\n var deleteAction = Adt.generate([\n { removeTable: ['element'] },\n { emptyCells: ['cells'] },\n {\n deleteCellSelection: [\n 'rng',\n 'cell'\n ]\n }\n ]);\n var isRootFromElement = function (root) {\n return function (cur) {\n return eq$2(root, cur);\n };\n };\n var getClosestCell = function (container, isRoot) {\n return closest$1(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$2(cellRng.start, cellRng.end);\n };\n var getTableFromCellRng = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start, isRoot).bind(function (startParentTable) {\n return getClosestTable(cellRng.end, isRoot).bind(function (endParentTable) {\n return someIf(eq$2(startParentTable, endParentTable), startParentTable);\n });\n });\n };\n var isSingleCellTable = function (cellRng, isRoot) {\n return !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(function (table) {\n var rows = table.dom().rows;\n return rows.length === 1 && rows[0].cells.length === 1;\n });\n };\n var getTableCells = function (table) {\n return descendants$1(table, 'td,th');\n };\n var getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n var getCellRangeFromStartTable = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start, isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(cellRng.start, endCell);\n });\n });\n };\n var partialSelection = function (isRoot, rng) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return rng.collapsed ? 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 getTableSelectionFromCellRng = function (cellRng, isRoot) {\n return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n return tableSelection(cellRng, table, getTableCells(table));\n });\n };\n var getTableSelection = function (optCellRng, rng, isRoot) {\n return optCellRng.filter(function (cellRng) {\n return isExpandedCellRng(cellRng) && isWithinSameTable(isRoot, cellRng);\n }).orThunk(function () {\n return partialSelection(isRoot, rng);\n }).bind(function (cRng) {\n return getTableSelectionFromCellRng(cRng, isRoot);\n });\n };\n var getCellIndex = function (cells, cell) {\n return findIndex(cells, function (x) {\n return eq$2(x, cell);\n });\n };\n var getSelectedCells = function (tableSelection) {\n return lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), function (startIndex, endIndex) {\n return tableSelection.cells.slice(startIndex, endIndex + 1);\n });\n };\n var isSingleCellTableContentSelected = function (optCellRng, rng, isRoot) {\n return optCellRng.filter(function (cellRng) {\n return isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng);\n }).map(function (cellRng) {\n return cellRng.start;\n });\n };\n var getAction = function (tableSelection) {\n return getSelectedCells(tableSelection).map(function (selected) {\n var cells = tableSelection.cells;\n return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table) : deleteAction.emptyCells(selected);\n });\n };\n var getActionFromRange = function (root, rng) {\n var isRoot = isRootFromElement(root);\n var optCellRng = getCellRng(rng, isRoot);\n return isSingleCellTableContentSelected(optCellRng, rng, isRoot).map(function (cell) {\n return deleteAction.deleteCellSelection(rng, cell);\n }).orThunk(function () {\n return getTableSelection(optCellRng, rng, isRoot).bind(getAction);\n });\n };\n\n var freefallRtl = function (root) {\n var child = isComment(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(function () {\n return Option.some(root);\n });\n };\n var emptyCells = function (editor, cells) {\n each(cells, fillWithPaddingBr);\n editor.selection.setCursorLocation(cells[0].dom(), 0);\n return true;\n };\n var deleteCellContents = function (editor, rng, cell) {\n rng.deleteContents();\n var lastNode = freefallRtl(cell).getOr(cell);\n var lastBlock = Element.fromDom(editor.dom.getParent(lastNode.dom(), editor.dom.isBlock));\n if (isEmpty$1(lastBlock)) {\n fillWithPaddingBr(lastBlock);\n editor.selection.setCursorLocation(lastBlock.dom(), 0);\n }\n if (!eq$2(cell, lastBlock)) {\n var additionalCleanupNodes = parent(lastBlock).is(cell) ? [] : siblings(lastBlock);\n each(additionalCleanupNodes.concat(children(cell)), function (node) {\n if (!eq$2(node, lastBlock) && !contains$2(node, lastBlock)) {\n remove(node);\n }\n });\n }\n return true;\n };\n var deleteTableElement = function (editor, table) {\n deleteElement(editor, false, table);\n return true;\n };\n var deleteCellRange = function (editor, rootElm, rng) {\n return getActionFromRange(rootElm, rng).map(function (action) {\n return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor), curry(deleteCellContents, editor));\n });\n };\n var deleteCaptionRange = function (editor, caption) {\n return emptyElement(editor, caption);\n };\n var deleteTableRange = function (editor, rootElm, rng, startElm) {\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCellRange(editor, rootElm, rng);\n }, function (caption) {\n return deleteCaptionRange(editor, caption);\n }).getOr(false);\n };\n var deleteRange = function (editor, startElm) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n var selectedCells = getCellsFromEditor(editor);\n return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n var getParentCell = function (rootElm, elm) {\n return find(parentsAndSelf(elm, rootElm), isTableCell);\n };\n var getParentCaption = function (rootElm, elm) {\n return find(parentsAndSelf(elm, rootElm), function (elm) {\n return name(elm) === 'caption';\n });\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) {\n return eq$2(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom(), 0);\n return Option.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return firstPositionIn(fromCaption.dom()).bind(function (first) {\n return lastPositionIn(fromCaption.dom()).map(function (last) {\n return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n });\n }).getOr(true);\n };\n var emptyCaretCaption = function (editor, elm) {\n return emptyElement(editor, elm);\n };\n var validateCaretCaption = function (rootElm, fromCaption, to) {\n return getParentCaption(rootElm, Element.fromDom(to.getNode())).map(function (toCaption) {\n return eq$2(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(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 isEmpty$1(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 isEmpty$1(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) || fromPosition(forward, editor.getBody(), fromPos).map(function (pos) {\n return isNearTable(forward, pos);\n }).getOr(false);\n };\n var deleteCaret = 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 = function (editor, forward) {\n var startElm = Element.fromDom(editor.selection.getStart(true));\n var cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange(editor, startElm);\n };\n\n var createRange$1 = function (sc, so, ec, eo) {\n var rng = 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 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$1 = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n\n var hasOnlyOneChild = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === nbsp;\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild);\n };\n var isEmptyFragmentElement = function (schema, node) {\n var nonEmptyElements = schema.getNonEmptyElements();\n return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n var isListFragment = function (schema, fragment) {\n var firstChild = fragment.firstChild;\n var lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n var cleanupDomFragment = function (domFragment) {\n var firstChild = domFragment.firstChild;\n var lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n firstChild.parentNode.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n lastChild.parentNode.removeChild(lastChild);\n }\n return domFragment;\n };\n var toDomFragment = function (dom, serializer, fragment) {\n var html = serializer.serialize(fragment);\n var domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n var listItems$1 = function (elm) {\n return Tools.grep(elm.childNodes, function (child) {\n return child.nodeName === 'LI';\n });\n };\n var isPadding = function (node) {\n return node.data === nbsp || isBr(node);\n };\n var isListItemPadded = function (node) {\n return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n var isEmptyOrPadded = function (elm) {\n return !elm.firstChild || isListItemPadded(elm);\n };\n var trimListItems = function (elms) {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n var getParentLi = function (dom, node) {\n var parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n var isParentBlockLi = function (dom, node) {\n return !!getParentLi(dom, node);\n };\n var getSplit = function (parentNode, rng) {\n var beforeRng = rng.cloneRange();\n var afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n var findFirstIn = function (node, rootNode) {\n var caretPos = CaretPosition$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 = function (target, elms, rootNode) {\n var parentElm = target.parentNode;\n Tools.each(elms, function (elm) {\n parentElm.insertBefore(elm, target);\n });\n return findFirstIn(target, rootNode);\n };\n var insertAfter = function (target, elms, rootNode, dom) {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n var insertAtCaret = function (serializer, dom, rng, fragment) {\n var domFragment = toDomFragment(dom, serializer, fragment);\n var liTarget = getParentLi(dom, rng.startContainer);\n var liElms = trimListItems(listItems$1(domFragment.firstChild));\n var BEGINNING = 1, END = 2;\n var rootNode = dom.getRoot();\n var isAt = function (location) {\n var caretPos = CaretPosition$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(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n\n var isAfterNbsp = function (container, offset) {\n return isText$1(container) && container.nodeValue[offset - 1] === nbsp;\n };\n var trimOrPadLeftRight = function (rng, html) {\n var container = rng.startContainer;\n var offset = rng.startOffset;\n var hasSiblingText = function (siblingName) {\n return container[siblingName] && container[siblingName].nodeType === 3;\n };\n if (isText$1(container)) {\n if (offset > 0) {\n html = html.replace(/^&nbsp;/, ' ');\n } else if (!hasSiblingText('previousSibling')) {\n html = html.replace(/^ /, '&nbsp;');\n }\n if (offset < container.length) {\n html = html.replace(/&nbsp;(<br>|)$/, ' ');\n } else if (!hasSiblingText('nextSibling')) {\n html = html.replace(/(&nbsp;| )(<br>|)$/, '&nbsp;');\n }\n }\n return html;\n };\n var trimNbspAfterDeleteAndPadValue = function (rng, value) {\n var container = rng.startContainer;\n var offset = rng.startOffset;\n if (isText$1(container) && 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$2 = matchNodeNames([\n 'td',\n 'th'\n ]);\n var isTableCellContentSelected = function (dom, rng, cell) {\n if (cell !== null) {\n var endCell = dom.getParent(rng.endContainer, isTableCell$2);\n return cell === endCell && hasAllContentsSelected(Element.fromDom(cell), rng);\n } else {\n return false;\n }\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) && isText$1(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(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 unmarkFragmentElements = function (elm) {\n Tools.each(elm.getElementsByTagName('*'), function (elm) {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n var isPartOfFragment = function (node) {\n return !!node.getAttribute('data-mce-fragment');\n };\n var canHaveChildren = function (editor, node) {\n return node && !editor.schema.getShortEndedElements()[node.nodeName];\n };\n var moveSelectionToMarker = function (editor, marker) {\n var nextRng;\n var dom = editor.dom, selection = editor.selection;\n var node2;\n var getContentEditableFalseParent = function (node) {\n var root = editor.getBody();\n for (; node && node !== root; node = node.parentNode) {\n if (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 var parentEditableFalseElm = getContentEditableFalseParent(marker);\n if (parentEditableFalseElm) {\n dom.remove(marker);\n selection.select(parentEditableFalseElm);\n return;\n }\n var rng = dom.createRng();\n var node = marker.previousSibling;\n if (node && node.nodeType === 3) {\n rng.setStart(node, node.nodeValue.length);\n if (!Env.ie) {\n node2 = marker.nextSibling;\n if (node2 && node2.nodeType === 3) {\n node.appendData(node2.data);\n node2.parentNode.removeChild(node2);\n }\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n var findNextCaretRng = function (rng) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n var parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n editor.$(parentBlock).empty();\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n var deleteSelectedContent = function (editor) {\n var dom = editor.dom;\n var rng = normalize$1(editor.selection.getRng());\n editor.selection.setRng(rng);\n var startCell = dom.getParent(rng.startContainer, isTableCell$2);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, Element.fromDom(startCell));\n } else {\n editor.getDoc().execCommand('Delete', false, null);\n }\n };\n var insertHtmlAtCaret = function (editor, value, details) {\n var parentNode, rootNode, args;\n var marker, rng, node;\n var selection = editor.selection, dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(selection.getRng(), value);\n }\n var parser = editor.parser;\n var merge = details.merge;\n var serializer = Serializer({ validate: shouldValidate(editor) }, editor.schema);\n var bookmarkHtml = '<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;&#x200B;</span>';\n args = {\n content: value,\n format: 'html',\n selection: true,\n paste: details.paste\n };\n args = editor.fire('BeforeSetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', {\n content: args.content,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n return;\n }\n value = args.content;\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n rng = selection.getRng();\n var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n var body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n deleteSelectedContent(editor);\n 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 var fragment = parser.parse(value, parserArgs);\n if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n rng = 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(/<span (id=\"mce_marker\"|id=mce_marker).+?<\\/span>/i, function () {\n return serializer.serialize(fragment);\n })));\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n unmarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(editor.dom, editor.selection.getStart());\n editor.fire('SetContent', args);\n editor.addVisual();\n };\n\n var getDocument = function () {\n return Element.fromDom(domGlobals.document);\n };\n\n var focus = function (element) {\n return element.dom().focus();\n };\n var hasFocus = function (element) {\n var root = getRootNode(element).dom();\n return element.dom() === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Option.from(root.dom().activeElement).map(Element.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom().contains(e.dom());\n });\n };\n\n var create$4 = function (start, soffset, finish, foffset) {\n return {\n start: constant(start),\n soffset: constant(soffset),\n finish: constant(finish),\n foffset: constant(foffset)\n };\n };\n var SimRange = { create: create$4 };\n\n var adt = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$3 = adt.before;\n var on = adt.on;\n var after$2 = adt.after;\n var Situ = {\n before: before$3,\n on: on,\n after: after$2,\n cata: cata,\n getStart: getStart\n };\n\n var adt$1 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return 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$3 = 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 !isRestrictedNode(elm.dom()) && (contains$2(root, elm) || eq$2(root, elm));\n };\n var isRngInRoot = function (root) {\n return function (rng) {\n return isOrContains(root, rng.start()) && isOrContains(root, rng.finish());\n };\n };\n var shouldStore = function (editor) {\n return editor.inline === true || browser$3.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return 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\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 store(editor);\n });\n };\n var registerMouseUp = function (editor, throttledStore) {\n editor.on('mouseup touchend', function (_e) {\n throttledStore.throttle();\n });\n };\n var registerEditorEvents = function (editor, throttledStore) {\n var browser = detect$3().browser;\n if (browser.isIE()) {\n registerFocusOut(editor);\n } else {\n registerMouseUp(editor, throttledStore);\n }\n editor.on('keyup NodeChange', function (e) {\n if (!isManualNodeChange(e)) {\n store(editor);\n }\n });\n };\n var register = function (editor) {\n var throttledStore = first(function () {\n store(editor);\n }, 0);\n editor.on('init', function () {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', function () {\n throttledStore.cancel();\n });\n };\n\n var documentFocusInHandler;\n var DOM$2 = DOMUtils$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 = getCustomUiSelector(editor);\n var parent = DOM$2.getParent(elm, function (elm) {\n return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n var getActiveElement = function () {\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 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 = 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\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 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 !isEditorContentAreaElement(elem.dom()) && isUIElement(editor, elem.dom());\n }).isSome();\n };\n var hasFocus$1 = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var hasEditorOrUiFocus = function (editor) {\n return hasFocus$1(editor) || hasUiFocus(editor);\n };\n var focusEditor = function (editor) {\n var selection = editor.selection;\n var body = editor.getBody();\n var rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n getRng(editor).each(function (bookmarkRng) {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (editor.$.contains(body, contentEditableHost)) {\n focusBody(contentEditableHost);\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (!editor.inline) {\n if (!Env.opera) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.gecko || editor.inline) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n var activateEditor = function (editor) {\n return editor.editorManager.setActive(editor);\n };\n var focus$1 = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n skipFocus ? activateEditor(editor) : focusEditor(editor);\n };\n\n var traverse = function (node, fn) {\n fn(node);\n if (node.firstChild) {\n traverse(node.firstChild, fn);\n }\n if (node.next) {\n traverse(node.next, fn);\n }\n };\n var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n var nodeMatches = {};\n var attrMatches = {};\n var matches = [];\n if (node.firstChild) {\n traverse(node.firstChild, function (node) {\n each(nodeFilters, function (filter) {\n if (filter.name === node.name) {\n if (nodeMatches[filter.name]) {\n nodeMatches[filter.name].nodes.push(node);\n } else {\n nodeMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n each(attributeFilters, function (filter) {\n if (typeof node.attr(filter.name) === 'string') {\n if (attrMatches[filter.name]) {\n attrMatches[filter.name].nodes.push(node);\n } else {\n attrMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n });\n }\n for (var name_1 in nodeMatches) {\n if (nodeMatches.hasOwnProperty(name_1)) {\n matches.push(nodeMatches[name_1]);\n }\n }\n for (var name_2 in attrMatches) {\n if (attrMatches.hasOwnProperty(name_2)) {\n matches.push(attrMatches[name_2]);\n }\n }\n return matches;\n };\n var filter$3 = function (nodeFilters, attributeFilters, node) {\n var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n each(matches, function (match) {\n each(match.filter.callbacks, function (callback) {\n callback(match.nodes, match.filter.name, {});\n });\n });\n };\n\n var defaultFormat = 'html';\n var isTreeNode = function (content) {\n return content instanceof Node;\n };\n var moveSelection = function (editor) {\n if (hasFocus$1(editor)) {\n firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n var setEditorHtml = function (editor, html) {\n editor.dom.setHTML(editor.getBody(), html);\n moveSelection(editor);\n };\n var setContentString = function (editor, body, content, args) {\n var forcedRootBlockName, padd;\n if (content.length === 0 || /^\\s+$/.test(content)) {\n padd = '<br data-mce-bogus=\"1\">';\n if (body.nodeName === 'TABLE') {\n content = '<tr><td>' + padd + '</td></tr>';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '<li>' + padd + '</li>';\n }\n forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n } else if (!content) {\n content = '<br data-mce-bogus=\"1\">';\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 setContentInternal = function (editor, content, args) {\n args.format = args.format ? args.format : defaultFormat;\n args.set = true;\n args.content = isTreeNode(content) ? '' : content;\n if (!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 splitText = function (node, offset) {\n return node.splitText(offset);\n };\n var split$1 = function (rng) {\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$1(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (isText$1(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$1(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n }\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n\n var isEq$1 = 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$1(node, format.inline)) {\n return true;\n }\n if (isEq$1(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$1(value, normalizeStyleValue(dom, replaceVars(items[key], vars), key))) {\n return;\n }\n }\n }\n } else {\n for (i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return format;\n }\n }\n }\n }\n return format;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var format, i, x, classes;\n var dom = ed.dom;\n if (formatList && node) {\n for (i = 0; i < formatList.length; i++) {\n format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n if (classes = format.classes) {\n for (x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, classes[x])) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n };\n var match = function (editor, name, vars, node) {\n if (node) {\n return matchParents(editor, node, name, vars);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars)) {\n return true;\n }\n var startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars)) {\n return true;\n }\n }\n return false;\n };\n var matchAll = function (editor, names, vars) {\n var matchedFormatNames = [];\n var checkedMap = {};\n var startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n for (var i = 0; i < names.length; i++) {\n var name_1 = names[i];\n if (!checkedMap[name_1] && matchNode(editor, node, name_1, vars)) {\n checkedMap[name_1] = true;\n matchedFormatNames.push(name_1);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n var canApply = function (editor, name) {\n var formatList = editor.formatter.get(name);\n var startNode, parents, i, x, selector;\n var dom = editor.dom;\n if (formatList) {\n startNode = editor.selection.getStart();\n parents = getParents$1(dom, startNode);\n for (x = formatList.length - 1; x >= 0; x--) {\n selector = formatList[x].selector;\n if (!selector || formatList[x].defaultBlock) {\n return true;\n }\n for (i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n var matchAllOnNode = function (editor, node, formatNames) {\n return foldl(formatNames, function (acc, name) {\n var matchSimilar = isVariableFormatName(editor, name);\n if (editor.formatter.matchNode(node, name, {}, matchSimilar)) {\n return acc.concat([name]);\n } else {\n return acc;\n }\n }, []);\n };\n\n var ZWSP$1 = ZWSP, CARET_ID$1 = '_mce_caret';\n var importNode = function (ownerDocument, node) {\n return ownerDocument.importNode(node, true);\n };\n var getEmptyCaretContainers = function (node) {\n var nodes = [];\n while (node) {\n if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) {\n return [];\n }\n if (node.nodeType === 1) {\n nodes.push(node);\n }\n node = node.firstChild;\n }\n return nodes;\n };\n var isCaretContainerEmpty = function (node) {\n return getEmptyCaretContainers(node).length > 0;\n };\n var findFirstTextNode = function (node) {\n if (node) {\n var walker = new TreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (isText$1(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var caretContainer = 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(editor, false, Element.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var textNode = trimZwspFromCaretContainer(node);\n dom.remove(node, true);\n if (startContainer === textNode && startOffset > 0) {\n rng.setStart(textNode, startOffset - 1);\n }\n if (endContainer === textNode && endOffset > 0) {\n rng.setEnd(textNode, endOffset - 1);\n }\n if (block && dom.isEmpty(block)) {\n fillWithPaddingBr(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 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 cleanFormatNode = function (editor, caretContainer, formatNode, name, vars, similar) {\n var formatter = editor.formatter;\n var dom = editor.dom;\n var validFormats = filter(keys(formatter.get()), function (formatName) {\n return formatName !== name && !contains$1(formatName, 'removeformat');\n });\n var matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n var uniqueFormats = filter(matchedFormats, function (fmtName) {\n return !areSimilarFormats(editor, fmtName, name);\n });\n if (uniqueFormats.length > 0) {\n var clonedFormatNode = formatNode.cloneNode(false);\n dom.add(caretContainer, clonedFormatNode);\n formatter.remove(name, vars, clonedFormatNode, similar);\n dom.remove(clonedFormatNode);\n return Option.some(clonedFormatNode);\n } else {\n return Option.none();\n }\n };\n var applyCaretFormat = function (editor, name, vars) {\n var caretContainer, textNode;\n var selection = editor.selection;\n var selectionRng = selection.getRng();\n var offset = selectionRng.startOffset;\n var container = selectionRng.startContainer;\n var text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (caretContainer) {\n textNode = findFirstTextNode(caretContainer);\n }\n var wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n var bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n var rng = expandRng(editor, selectionRng, editor.formatter.get(name));\n rng = split$1(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n if (!caretContainer || textNode.nodeValue !== ZWSP$1) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());\n textNode = caretContainer.firstChild;\n selectionRng.insertNode(caretContainer);\n offset = 1;\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n var removeCaretFormat = function (editor, name, vars, similar) {\n var dom = editor.dom;\n var selection = editor.selection;\n var hasContentAfter, node, formatNode;\n var parents = [];\n var rng = selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n node = container;\n if (container.nodeType === 3) {\n if (offset !== container.nodeValue.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n while (node) {\n if (matchNode(editor, node, name, vars, similar)) {\n formatNode = node;\n break;\n }\n if (node.nextSibling) {\n hasContentAfter = true;\n }\n parents.push(node);\n node = node.parentNode;\n }\n if (!formatNode) {\n return;\n }\n if (hasContentAfter) {\n var bookmark = selection.getBookmark();\n rng.collapse(true);\n var expandedRng = expandRng(editor, rng, editor.formatter.get(name), true);\n expandedRng = split$1(expandedRng);\n editor.formatter.remove(name, vars, expandedRng, similar);\n selection.moveToBookmark(bookmark);\n } else {\n var caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n var newCaretContainer = createCaretContainer(false).dom();\n insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null ? caretContainer : formatNode);\n var cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n var caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer);\n removeCaretContainerNode(editor, caretContainer, false);\n selection.setCursorLocation(caretTextNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n var disableCaretContainer = function (editor, keyCode) {\n var selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, false);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n };\n var setup$3 = function (editor) {\n editor.on('mouseup keydown', function (e) {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n var replaceWithCaretFormat = function (targetNode, formatNodes) {\n var caretContainer = createCaretContainer(false);\n var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());\n before(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()) && !isBogus(element.dom());\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());\n };\n\n var postProcessHooks = {}, filter$4 = filter$2, each$8 = each$2;\n var addPostProcessHook = function (name, hook) {\n var hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = [];\n }\n postProcessHooks[name].push(hook);\n };\n var postProcess = function (name, editor) {\n each$8(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && indexOf$1(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('<br><br>').append(pre2.childNodes);\n };\n var isPre = matchNodeNames(['pre']);\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$8(filter$4(filter$4(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n var each$9 = Tools.each;\n var isElementNode = function (node) {\n return isElement$1(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus(node);\n };\n var findElementSibling = function (node, siblingName) {\n var sibling;\n for (sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$1(sibling) && sibling.nodeValue.length !== 0) {\n return node;\n }\n if (isElement$1(sibling) && !isBookmarkNode$1(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n var mergeSiblingsNodes = function (dom, prev, next) {\n var sibling, tmpSibling;\n var elementUtils = 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 mergeSiblings = function (dom, format, vars, node) {\n if (node && format.merge_siblings !== false) {\n var newNode = mergeSiblingsNodes(dom, getNonWhiteSpaceSibling(node), node);\n mergeSiblingsNodes(dom, newNode, getNonWhiteSpaceSibling(newNode, true));\n }\n };\n var clearChildStyles = function (dom, format, node) {\n if (format.clear_child_styles) {\n var selector = format.links ? '*:not(a)' : '*';\n each$9(dom.select(selector, node), function (node) {\n if (isElementNode(node)) {\n each$9(format.styles, function (value, name) {\n dom.setStyle(node, name, '');\n });\n }\n });\n }\n };\n var processChildElements = function (node, filter, process) {\n each$9(node.childNodes, function (node) {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n var unwrapEmptySpan = function (dom, node) {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n var hasStyle = function (dom, name) {\n return function (node) {\n return !!(node && getStyle(dom, node, name));\n };\n };\n var applyStyle = function (dom, name, value) {\n return function (node) {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n };\n };\n\n var removeResult = Adt.generate([\n { keep: [] },\n { rename: ['name'] },\n { removed: [] }\n ]);\n var MCE_ATTR_RE = /^(src|href|style)$/;\n var each$a = Tools.each;\n var isEq$2 = isEq;\n var isTableCellOrRow = function (node) {\n return /^(TR|TH|TD)$/.test(node.nodeName);\n };\n var isChildOfInlineParent = function (dom, node, parent) {\n return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n };\n var getContainer = function (ed, rng, start) {\n var container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement$1(container)) {\n var lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (isText$1(container) && start && offset >= container.nodeValue.length) {\n container = new TreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$1(container) && !start && offset === 0) {\n container = new TreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n var normalizeTableSelection = function (node, start) {\n var prop = start ? 'firstChild' : 'lastChild';\n if (isTableCellOrRow(node) && node[prop]) {\n var childNode = node[prop];\n if (node.nodeName === 'TR') {\n return childNode[prop] || childNode;\n } else {\n return childNode;\n }\n }\n return node;\n };\n var wrap$2 = function (dom, node, name, attrs) {\n var wrapper = dom.create(name, attrs);\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n var wrapWithSiblings = function (dom, node, next, name, attrs) {\n var start = 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$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 isElement$1(node) && dom.is(node, format.selector);\n }\n };\n var isColorFormatAndAnchor = function (node, format) {\n return format.links && node.nodeName === 'A';\n };\n var find$2 = function (dom, node, next, inc) {\n node = getNonWhiteSpaceSibling(node, next, inc);\n return !node || (node.nodeName === 'BR' || dom.isBlock(node));\n };\n var removeNode$1 = function (ed, node, format) {\n var parentNode = node.parentNode;\n var rootBlockElm;\n var dom = ed.dom, forcedRootBlock = getForcedRootBlock(ed);\n if (format.block) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find$2(dom, node, false) && !find$2(dom, node.firstChild, true, true)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find$2(dom, node, true) && !find$2(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$2(node, format.list_block)) {\n each(from$1(node.childNodes), function (node) {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$2(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = 0;\n }\n });\n }\n }\n }\n }\n if (format.selector && format.inline && !isEq$2(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n var removeFormatInternal = function (ed, format, vars, node, compareNode) {\n var stylesModified;\n var dom = ed.dom;\n if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return removeResult.keep();\n }\n var elm = node;\n if (format.inline && format.remove === 'all' && isArray(format.preserve_attributes)) {\n var attrsToPreserve = filter(dom.getAttribs(elm), function (attr) {\n return contains(format.preserve_attributes, attr.name.toLowerCase());\n });\n dom.removeAllAttribs(elm);\n each(attrsToPreserve, function (attr) {\n return dom.setAttrib(elm, attr.name, attr.value);\n });\n if (attrsToPreserve.length > 0) {\n return removeResult.rename('span');\n }\n }\n if (format.remove !== 'all') {\n each$a(format.styles, function (value, name) {\n value = normalizeStyleValue(dom, replaceVars(value, vars), name);\n if (typeof name === 'number') {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$2(getStyle(dom, compareNode, name), value))) {\n dom.setStyle(elm, name, '');\n }\n stylesModified = true;\n });\n if (stylesModified && dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n each$a(format.attributes, function (value, name) {\n var valueOut;\n value = replaceVars(value, vars);\n if (typeof name === 'number') {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$2(dom.getAttrib(compareNode, name), value))) {\n if (name === 'class') {\n value = dom.getAttrib(elm, name);\n if (value) {\n valueOut = '';\n each(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, name, valueOut);\n return;\n }\n }\n }\n if (name === 'class') {\n elm.removeAttribute('className');\n }\n if (MCE_ATTR_RE.test(name)) {\n elm.removeAttribute('data-mce-' + name);\n }\n elm.removeAttribute(name);\n }\n });\n each$a(format.classes, function (value) {\n value = replaceVars(value, vars);\n if (!compareNode || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n var attrs = dom.getAttribs(elm);\n for (var i = 0; i < attrs.length; i++) {\n var attrName = attrs[i].nodeName;\n if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\n return removeResult.keep();\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode$1(ed, elm, format);\n return removeResult.removed();\n }\n return removeResult.keep();\n };\n var removeFormat = function (ed, format, vars, node, compareNode) {\n return removeFormatInternal(ed, format, vars, node, compareNode).fold(never, function (newName) {\n ed.dom.rename(node, newName);\n return true;\n }, always);\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each(getParents$1(editor.dom, container.parentNode).reverse(), function (parent) {\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n var format = matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n return formatRoot;\n };\n var removeFormatFromClone = function (editor, format, vars, clone) {\n return removeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), function (newName) {\n var fragment = editor.dom.createFragment();\n fragment.appendChild(clone);\n return editor.dom.rename(clone, newName);\n }, constant(null));\n };\n var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n var clone, lastClone, firstClone;\n var dom = editor.dom;\n if (formatRoot) {\n var formatRootParent = formatRoot.parentNode;\n for (var parent_1 = container.parentNode; parent_1 && parent_1 !== formatRootParent; parent_1 = parent_1.parentNode) {\n clone = dom.clone(parent_1, false);\n for (var i = 0; i < formatList.length; i++) {\n clone = removeFormatFromClone(editor, formatList[i], vars, clone);\n if (clone === null) {\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = dom.split(formatRoot, container);\n }\n if (lastClone) {\n target.parentNode.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n if (format.inline) {\n mergeSiblings(dom, format, vars, lastClone);\n }\n }\n }\n return container;\n };\n var remove$6 = function (ed, name, vars, node, similar) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var contentEditable = true;\n var dom = ed.dom;\n var selection = ed.selection;\n var splitToFormatRoot = function (container) {\n var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n var isRemoveBookmarkNode = function (node) {\n return isBookmarkNode$1(node) && isElement$1(node) && (node.id === '_start' || node.id === '_end');\n };\n var process = function (node) {\n var lastContentEditable, hasContentEditableState;\n if (isElement$1(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n var children = from$1(node.childNodes);\n if (contentEditable && !hasContentEditableState) {\n for (var i = 0; i < formatList.length; i++) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n if (format.deep) {\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n process(children[i]);\n }\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n }\n }\n };\n var unwrap = function (start) {\n var node = dom.get(start ? '_start' : '_end');\n var out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (isText$1(out) && out.data.length === 0) {\n out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n }\n dom.remove(node, true);\n return out;\n };\n var removeRngStyle = function (rng) {\n var startContainer, endContainer;\n var expandedRng = expandRng(ed, rng, formatList, 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 startContainer = normalizeTableSelection(startContainer, true);\n endContainer = normalizeTableSelection(endContainer, false);\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$2(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$2(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n var newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n walk$1(dom, newRng, function (nodes) {\n each(nodes, function (n) {\n if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) {\n splitToFormatRoot(n);\n }\n });\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n expandedRng.startOffset = dom.nodeIndex(startContainer);\n expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n walk$1(dom, expandedRng, function (nodes) {\n each(nodes, function (node) {\n process(node);\n var textDecorations = [\n 'underline',\n 'line-through',\n 'overline'\n ];\n each(textDecorations, function (decoration) {\n if (isElement$1(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n removeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: decoration }\n }, null, node);\n }\n });\n });\n });\n };\n if (node) {\n if (isNode(node)) {\n var rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n return;\n }\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].ceFalseOverride) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n return;\n }\n if (!selection.isCollapsed() || !format.inline || getCellsFromEditor(ed).length) {\n preserve(selection, true, function () {\n runOnRanges(ed, removeRngStyle);\n });\n if (format.inline && match(ed, name, vars, selection.getStart())) {\n moveStart(dom, selection, selection.getRng());\n }\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n };\n\n var each$b = Tools.each;\n var mergeTextDecorationsAndColor = function (dom, format, vars, node) {\n var processTextDecorationsAndColor = function (n) {\n if (n.nodeType === 1 && n.parentNode && n.parentNode.nodeType === 1) {\n var textDecoration = getTextDecoration(dom, n.parentNode);\n if (dom.getStyle(n, 'color') && textDecoration) {\n dom.setStyle(n, 'text-decoration', textDecoration);\n } else if (dom.getStyle(n, 'text-decoration') === textDecoration) {\n dom.setStyle(n, 'text-decoration', null);\n }\n }\n };\n if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n Tools.walk(node, processTextDecorationsAndColor, 'childNodes');\n processTextDecorationsAndColor(node);\n }\n };\n var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n if (format.styles && format.styles.backgroundColor) {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n var mergeSubSup = function (dom, format, vars, node) {\n if (format.inline === 'sub' || format.inline === 'sup') {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n }\n };\n var mergeWithChildren = function (editor, formatList, vars, node) {\n each$b(formatList, function (format) {\n each$b(editor.dom.select(format.inline, node), function (child) {\n if (!isElementNode(child)) {\n return;\n }\n removeFormat(editor, format, vars, child, format.exact ? child : null);\n });\n clearChildStyles(editor.dom, format, node);\n });\n };\n var mergeWithParents = function (editor, format, name, vars, node) {\n if (matchNode(editor, node.parentNode, name, vars)) {\n if (removeFormat(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents) {\n editor.dom.getParent(node.parentNode, function (parent) {\n if (matchNode(editor, parent, name, vars)) {\n removeFormat(editor, format, vars, node);\n return true;\n }\n });\n }\n };\n\n var each$c = Tools.each;\n var isElementNode$1 = function (node) {\n return node && node.nodeType === 1 && !isBookmarkNode$1(node) && !isCaretNode(node) && !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 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$c(fmt.styles, function (value, name) {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (fmt.styles) {\n var styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n each$c(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$c(fmt.classes, function (value) {\n value = replaceVars(value, vars);\n if (!dom.hasClass(elm, value)) {\n dom.addClass(elm, value);\n }\n });\n }\n };\n var applyNodeStyle = function (formatList, node) {\n var found = false;\n if (!format.selector) {\n return false;\n }\n each$c(formatList, function (format) {\n if ('collapsed' in format && format.collapsed !== isCollapsed) {\n return;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n });\n return found;\n };\n var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {\n var newWrappers = [];\n var contentEditable = true;\n var wrapName = format.inline || format.block;\n var wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n walk$1(dom, rng, function (nodes) {\n var currentWrapElm;\n var process = function (node) {\n var hasContentEditableState = false;\n var lastContentEditable = contentEditable;\n var nodeName = node.nodeName.toLowerCase();\n var parentName = node.parentNode.nodeName.toLowerCase();\n if (isElement$1(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (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$c(Tools.grep(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = 0;\n }\n };\n each$c(nodes, process);\n });\n if (format.links === true) {\n each$c(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$c(Tools.grep(node.childNodes), process);\n };\n process(node);\n });\n }\n each$c(newWrappers, function (node) {\n var getChildCount = function (node) {\n var count = 0;\n each$c(node.childNodes, function (node) {\n if (!isEmptyTextNode(node) && !isBookmarkNode$1(node)) {\n count++;\n }\n });\n return count;\n };\n var getChildElementNode = function (root) {\n var child = false;\n each$c(root.childNodes, function (node) {\n if (isElementNode$1(node)) {\n child = node;\n return false;\n }\n });\n return child;\n };\n var mergeStyles = function (node) {\n var clone;\n var child = getChildElementNode(node);\n if (child && !isBookmarkNode$1(child) && matchName(dom, child, format)) {\n clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, true);\n }\n return clone || node;\n };\n var childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, true);\n return;\n }\n if (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 || getCellsFromEditor(ed).length) {\n var curSelNode = 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 selection.setRng(normalize$1(selection.getRng()));\n preserve(selection, true, function (bookmark) {\n runOnRanges(ed, function (selectionRng, fake) {\n var expandedRng = fake ? selectionRng : expandRng(ed, selectionRng, formatList);\n applyRngStyle(dom, expandedRng);\n });\n });\n moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n postProcess(name, ed);\n }\n };\n\n var toggle = function (editor, name, vars, node) {\n var fmt = editor.formatter.get(name);\n if (match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n remove$6(editor, name, vars, node);\n } else {\n applyFormat(editor, name, vars, node);\n }\n };\n\n var processRanges = function (editor, ranges) {\n return map(ranges, function (range) {\n var evt = editor.fire('GetSelectionRange', { range: range });\n return evt.range !== range ? evt.range : range;\n });\n };\n\n var 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 tableModel = function (element, width, rows) {\n return {\n element: constant(element),\n width: constant(width),\n rows: constant(rows)\n };\n };\n var tableRow = function (element, cells) {\n return {\n element: constant(element),\n cells: constant(cells)\n };\n };\n var cellPosition = function (x, y) {\n return {\n x: constant(x),\n y: constant(y)\n };\n };\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$2(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\n var findParentListContainer = function (parents) {\n return find(parents, function (elm) {\n return name(elm) === 'ul' || name(elm) === 'ol';\n });\n };\n var getFullySelectedListWrappers = function (parents, rng) {\n return find(parents, function (elm) {\n return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n }).fold(constant([]), function (_li) {\n return findParentListContainer(parents).map(function (listCont) {\n var listElm = Element.fromTag(name(listCont));\n var listStyles = filter$1(getAllRaw(listCont), function (_style, name) {\n return startsWith(name, 'list-style');\n });\n setAll$1(listElm, listStyles);\n return [\n Element.fromTag('li'),\n listElm\n ];\n }).getOr([]);\n });\n };\n var wrap$3 = function (innerElm, elms) {\n var wrapped = foldl(elms, function (acc, elm) {\n append(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n var directListWrappers = function (commonAnchorContainer) {\n if (isListItem(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n return [\n commonAnchorContainer,\n listElm\n ];\n });\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n var getWrapElements = function (rootNode, rng) {\n var commonAnchorContainer = Element.fromDom(rng.commonAncestorContainer);\n var parents = parentsAndSelf(commonAnchorContainer, rootNode);\n var wrapElements = filter(parents, function (elm) {\n return isInline(elm) || isHeading(elm);\n });\n var listWrappers = getFullySelectedListWrappers(parents, rng);\n var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map(allWrappers, shallow);\n };\n var emptyFragment = function () {\n return fromElements([]);\n };\n var getFragmentFromRange = function (rootNode, rng) {\n return wrap$3(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n };\n var getParentTable = function (rootElm, cell) {\n return ancestor$1(cell, 'table', curry(eq$2, rootElm));\n };\n var getTableFragment = function (rootNode, selectedTableCells) {\n return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n var firstCell = selectedTableCells[0];\n var lastCell = selectedTableCells[selectedTableCells.length - 1];\n var fullTableModel = fromDom$1(tableElm);\n return subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n return fromElements([toDom(sectionedTableModel)]);\n });\n }).getOrThunk(emptyFragment);\n };\n var getSelectionFragment = function (rootNode, ranges) {\n return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n };\n var read$1 = function (rootNode, ranges) {\n var selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n\n var trimLeadingCollapsibleText = function (text) {\n return text.replace(/^[ \\f\\n\\r\\t\\v]+/, '');\n };\n var isCollapsibleWhitespace = function (text, index) {\n return index >= 0 && index < text.length && isWhiteSpace$1(text.charAt(index));\n };\n var getInnerText = function (bin) {\n var text = trim$3(bin.innerText);\n return Env.browser.isIE() ? trimLeadingCollapsibleText(text) : text;\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 = getInnerText(bin);\n var nonRenderedText = trim$3(bin.textContent);\n editor.dom.remove(bin);\n if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n var parentBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n var parentBlockText = getInnerText(parentBlock);\n var textIndex = parentBlockText.indexOf(text);\n if (textIndex !== -1) {\n var hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n var hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n } else {\n return text;\n }\n } else {\n return text;\n }\n }).getOr('');\n };\n var getSerializedContent = function (editor, args) {\n var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n var sel = editor.selection.getSel();\n var ranges = processRanges(editor, getRanges(sel));\n var fragment = args.contextual ? read$1(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 getSelectedContentInternal = function (editor, format, args) {\n if (args === void 0) {\n args = {};\n }\n args.get = true;\n args.format = format;\n args.selection = true;\n args = editor.fire('BeforeGetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('GetContent', args);\n return args.content;\n }\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n args.getInner = true;\n var content = getSerializedContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n args.content = editor.selection.isCollapsed() ? '' : content;\n editor.fire('GetContent', args);\n return args.content;\n }\n }\n };\n\n var KEEP = 0, INSERT = 1, DELETE = 2;\n var diff = function (left, right) {\n var size = left.length + right.length + 2;\n var vDown = new Array(size);\n var vUp = new Array(size);\n var snake = function (start, end, diag) {\n return {\n start: start,\n end: end,\n diag: diag\n };\n };\n var buildScript = function (start1, end1, start2, end2, script) {\n var middle = getMiddleSnake(start1, end1, start2, end2);\n if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n var i = start1;\n var j = start2;\n while (i < end1 || j < end2) {\n if (i < end1 && j < end2 && left[i] === right[j]) {\n script.push([\n KEEP,\n left[i]\n ]);\n ++i;\n ++j;\n } else {\n if (end1 - start1 > end2 - start2) {\n script.push([\n DELETE,\n left[i]\n ]);\n ++i;\n } else {\n script.push([\n INSERT,\n right[j]\n ]);\n ++j;\n }\n }\n }\n } else {\n buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n for (var i2 = middle.start; i2 < middle.end; ++i2) {\n script.push([\n KEEP,\n left[i2]\n ]);\n }\n buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n }\n };\n var buildSnake = function (start, diag, end1, end2) {\n var end = start;\n while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n ++end;\n }\n return snake(start, end, diag);\n };\n var getMiddleSnake = function (start1, end1, start2, end2) {\n var m = end1 - start1;\n var n = end2 - start2;\n if (m === 0 || n === 0) {\n return null;\n }\n var delta = m - n;\n var sum = n + m;\n var offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n vDown[1 + offset] = start1;\n vUp[1 + offset] = end1 + 1;\n var d, k, i, x, y;\n for (d = 0; d <= offset; ++d) {\n for (k = -d; k <= d; k += 2) {\n i = k + offset;\n if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n vDown[i] = vDown[i + 1];\n } else {\n vDown[i] = vDown[i - 1] + 1;\n }\n x = vDown[i];\n y = x - start1 + start2 - k;\n while (x < end1 && y < end2 && left[x] === right[y]) {\n vDown[i] = ++x;\n ++y;\n }\n if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n if (vUp[i - delta] <= vDown[i]) {\n return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n }\n }\n }\n for (k = delta - d; k <= delta + d; k += 2) {\n i = k + offset - delta;\n if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n vUp[i] = vUp[i + 1] - 1;\n } else {\n vUp[i] = vUp[i - 1];\n }\n x = vUp[i] - 1;\n y = x - start1 + start2 - k;\n while (x >= start1 && y >= start2 && left[x] === right[y]) {\n vUp[i] = x--;\n y--;\n }\n if (delta % 2 === 0 && -d <= k && k <= d) {\n if (vUp[i] <= vDown[i + delta]) {\n return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n }\n }\n }\n }\n };\n var script = [];\n buildScript(0, left.length, 0, right.length, script);\n return script;\n };\n\n var getOuterHtml = function (elm) {\n if (isElement$1(elm)) {\n return elm.outerHTML;\n } else if (isText$1(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (isComment$1(elm)) {\n return '<!--' + elm.data + '-->';\n }\n return '';\n };\n var createFragment$1 = function (html) {\n var node;\n var container = domGlobals.document.createElement('div');\n var 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] === KEEP) {\n index++;\n } else if (action[0] === INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === DELETE) {\n removeAt(elm, index);\n }\n });\n };\n var read$2 = function (elm) {\n return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) {\n return item.length > 0;\n });\n };\n var write = function (fragments, elm) {\n var currentFragments = map(from$1(elm.childNodes), getOuterHtml);\n applyDiff(diff(currentFragments, fragments), elm);\n return elm;\n };\n\n var undoLevelDocument = Cell(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('</iframe>') !== -1;\n };\n var createFragmentedLevel = function (fragments) {\n return {\n type: 'fragmented',\n fragments: fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createCompleteLevel = function (content) {\n return {\n type: 'complete',\n fragments: null,\n content: content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createFromEditor = function (editor) {\n var fragments = read$2(editor.getBody());\n var trimmedFragments = bind(fragments, function (html) {\n var trimmed = trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n var content = trimmedFragments.join('');\n return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n };\n var applyToEditor = function (editor, level, before) {\n if (level.type === 'fragmented') {\n write(level.fragments, editor.getBody());\n } else {\n editor.setContent(level.content, { format: 'raw' });\n }\n editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark);\n };\n var getLevelContent = function (level) {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n var getCleanLevelContent = function (level) {\n var elm = 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$3 = function (level1, level2) {\n if (!level1 || !level2) {\n return false;\n } else if (hasEqualContent(level1, level2)) {\n return true;\n } else {\n return hasEqualCleanedContent(level1, level2);\n }\n };\n\n var isUnlocked = function (locks) {\n return locks.get() === 0;\n };\n\n var setTyping = function (undoManager, typing, locks) {\n if (isUnlocked(locks)) {\n undoManager.typing = typing;\n }\n };\n var endTyping = function (undoManager, locks) {\n if (undoManager.typing) {\n setTyping(undoManager, false, locks);\n undoManager.add();\n }\n };\n var endTypingLevelIgnoreLocks = function (undoManager) {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n\n var beforeChange = function (editor, locks, beforeBookmark) {\n if (isUnlocked(locks)) {\n beforeBookmark.set(Option.some(getUndoBookmark(editor.selection)));\n }\n };\n var addUndoLevel = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n var currentLevel = createFromEditor(editor);\n level = level || {};\n level = Tools.extend(level, currentLevel);\n if (isUnlocked(locks) === false || editor.removed) {\n return null;\n }\n var lastLevel = undoManager.data[index.get()];\n if (editor.fire('BeforeAddUndo', {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && isEq$3(lastLevel, level)) {\n return null;\n }\n if (undoManager.data[index.get()]) {\n beforeBookmark.get().each(function (bm) {\n undoManager.data[index.get()].beforeBookmark = bm;\n });\n }\n var customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n if (customUndoRedoLevels) {\n if (undoManager.data.length > customUndoRedoLevels) {\n for (var i = 0; i < undoManager.data.length - 1; i++) {\n undoManager.data[i] = undoManager.data[i + 1];\n }\n undoManager.data.length--;\n index.set(undoManager.data.length);\n }\n }\n level.bookmark = getUndoBookmark(editor.selection);\n if (index.get() < undoManager.data.length - 1) {\n undoManager.data.length = index.get() + 1;\n }\n undoManager.data.push(level);\n index.set(undoManager.data.length - 1);\n var args = {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n };\n 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 applyToEditor(editor, lastLevel, true);\n if (undoManager.transact(callback2)) {\n undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n }\n }\n };\n var redo = function (editor, index, data) {\n var level;\n if (index.get() < data.length - 1) {\n index.set(index.get() + 1);\n level = data[index.get()];\n applyToEditor(editor, level, false);\n editor.setDirty(true);\n editor.fire('Redo', { level: level });\n }\n return level;\n };\n var undo = function (editor, undoManager, locks, index) {\n var level;\n if (undoManager.typing) {\n undoManager.add();\n undoManager.typing = false;\n setTyping(undoManager, false, locks);\n }\n if (index.get() > 0) {\n index.set(index.get() - 1);\n level = undoManager.data[index.get()];\n applyToEditor(editor, level, true);\n editor.setDirty(true);\n editor.fire('Undo', { level: level });\n }\n return level;\n };\n var reset = function (undoManager) {\n undoManager.clear();\n undoManager.add();\n };\n var hasUndo = function (editor, undoManager, index) {\n return index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$3(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 isTreeNode$1 = function (content) {\n return content instanceof Node;\n };\n var runSerializerFiltersOnFragment = function (editor, fragment) {\n filter$3(editor.serializer.getNodeFilters(), editor.serializer.getAttributeFilters(), fragment);\n };\n var createDummyUndoLevel = function () {\n return {\n type: 'complete',\n fragments: [],\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n var makePlainAdaptor = function (editor) {\n return {\n undoManager: {\n beforeChange: function (locks, beforeBookmark) {\n return beforeChange(editor, locks, beforeBookmark);\n },\n addUndoLevel: function (undoManager, index, locks, beforeBookmark, level, event) {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function (undoManager, locks, index) {\n return undo(editor, undoManager, locks, index);\n },\n redo: function (index, data) {\n return redo(editor, index, data);\n },\n clear: function (undoManager, index) {\n return clear(editor, undoManager, index);\n },\n reset: function (undoManager) {\n return reset(undoManager);\n },\n hasUndo: function (undoManager, index) {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: function (undoManager, index) {\n return hasRedo(undoManager, index);\n },\n transact: function (undoManager, locks, callback) {\n return transact(undoManager, locks, callback);\n },\n ignore: function (locks, callback) {\n return ignore(locks, callback);\n },\n extra: function (undoManager, index, callback1, callback2) {\n return extra(editor, undoManager, index, callback1, callback2);\n }\n },\n formatter: {\n apply: function (name, vars, node) {\n return applyFormat(editor, name, vars, node);\n },\n remove: function (name, vars, node, similar) {\n return remove$6(editor, name, vars, node, similar);\n },\n toggle: function (name, vars, node) {\n return toggle(editor, name, vars, node);\n }\n },\n editor: {\n getContent: function (args, format) {\n return getContentInternal(editor, args, format);\n },\n setContent: function (content, args) {\n return setContentInternal(editor, content, args);\n },\n insertContent: function (value, details) {\n return insertHtmlAtCaret(editor, value, details);\n }\n },\n selection: {\n getContent: function (format, args) {\n return getSelectedContentInternal(editor, format, args);\n }\n },\n raw: {\n getModel: function () {\n return Option.none();\n }\n }\n };\n };\n var makeRtcAdaptor = function (tinymceEditor, rtcEditor) {\n var defaultVars = function (vars) {\n return isObject(vars) ? vars : {};\n };\n var unsupported = die('Unimplemented feature for rtc');\n var ignore = noop;\n return {\n undoManager: {\n beforeChange: ignore,\n addUndoLevel: unsupported,\n undo: function () {\n rtcEditor.undo();\n return createDummyUndoLevel();\n },\n redo: function () {\n rtcEditor.redo();\n return createDummyUndoLevel();\n },\n clear: unsupported,\n reset: unsupported,\n hasUndo: function () {\n return rtcEditor.hasUndo();\n },\n hasRedo: function () {\n return rtcEditor.hasRedo();\n },\n transact: function (_undoManager, _locks, fn) {\n rtcEditor.transact(fn);\n return createDummyUndoLevel();\n },\n ignore: unsupported,\n extra: unsupported\n },\n formatter: {\n apply: function (name, vars, _node) {\n return rtcEditor.applyFormat(name, defaultVars(vars));\n },\n remove: function (name, vars, _node, _similar) {\n return rtcEditor.removeFormat(name, defaultVars(vars));\n },\n toggle: function (name, vars, _node) {\n return rtcEditor.toggleFormat(name, defaultVars(vars));\n }\n },\n editor: {\n getContent: function (args, format) {\n if (format === 'html' || format === 'tree') {\n var fragment = rtcEditor.getContent();\n var serializer = Serializer({ inner: true });\n runSerializerFiltersOnFragment(tinymceEditor, fragment);\n return format === 'tree' ? fragment : serializer.serialize(fragment);\n } else {\n return makePlainAdaptor(tinymceEditor).editor.getContent(args, format);\n }\n },\n setContent: function (content, _args) {\n var fragment = isTreeNode$1(content) ? content : tinymceEditor.parser.parse(content, {\n isRootContent: true,\n insert: true\n });\n rtcEditor.setContent(fragment);\n return content;\n },\n insertContent: function (value, _details) {\n var fragment = isTreeNode$1(value) ? value : tinymceEditor.parser.parse(value, { insert: true });\n rtcEditor.insertContent(fragment);\n }\n },\n selection: {\n getContent: function (format, args) {\n if (format === 'html' || format === 'tree') {\n var fragment = rtcEditor.getSelectedContent();\n var serializer = Serializer({});\n runSerializerFiltersOnFragment(tinymceEditor, fragment);\n return format === 'tree' ? fragment : serializer.serialize(fragment);\n } else {\n return makePlainAdaptor(tinymceEditor).selection.getContent(format, args);\n }\n }\n },\n raw: {\n getModel: function () {\n return Option.some(rtcEditor.getRawModel());\n }\n }\n };\n };\n var isRtc = function (editor) {\n return has(editor.plugins, 'rtc');\n };\n var setup$4 = function (editor) {\n var editorCast = editor;\n return get(editor.plugins, 'rtc').fold(function () {\n editorCast.rtcInstance = makePlainAdaptor(editor);\n return Option.none();\n }, function (rtc) {\n return Option.some(rtc.setup().then(function (rtcEditor) {\n editorCast.rtcInstance = makeRtcAdaptor(editor, rtcEditor);\n return rtcEditor.isRemote;\n }));\n });\n };\n var getRtcInstanceWithFallback = function (editor) {\n return editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n };\n var getRtcInstanceWithError = function (editor) {\n var rtcInstance = editor.rtcInstance;\n if (!rtcInstance) {\n throw new Error('Failed to get RTC instance not yet initialized.');\n } else {\n return rtcInstance;\n }\n };\n var beforeChange$1 = function (editor, locks, beforeBookmark) {\n getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n };\n var addUndoLevel$1 = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n return getRtcInstanceWithError(editor).undoManager.addUndoLevel(undoManager, index, locks, beforeBookmark, level, event);\n };\n var undo$1 = function (editor, undoManager, locks, index) {\n return getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n };\n var redo$1 = function (editor, index, data) {\n return getRtcInstanceWithError(editor).undoManager.redo(index, data);\n };\n var clear$1 = function (editor, undoManager, index) {\n getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n };\n var reset$1 = function (editor, undoManager) {\n getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n };\n var hasUndo$1 = function (editor, undoManager, index) {\n return getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n };\n var hasRedo$1 = function (editor, undoManager, index) {\n return getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n };\n var transact$1 = function (editor, undoManager, locks, callback) {\n return getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n };\n var ignore$1 = function (editor, locks, callback) {\n getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n };\n var extra$1 = function (editor, undoManager, index, callback1, callback2) {\n getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n };\n var applyFormat$1 = function (editor, name, vars, node) {\n getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n };\n var removeFormat$1 = function (editor, name, vars, node, similar) {\n getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n };\n var toggleFormat = function (editor, name, vars, node) {\n getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n };\n var getContent = function (editor, args, format) {\n return getRtcInstanceWithFallback(editor).editor.getContent(args, format);\n };\n var setContent = function (editor, content, args) {\n return getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n };\n var insertContent = function (editor, value, details) {\n return getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n };\n var getSelectedContent = function (editor, format, args) {\n return getRtcInstanceWithError(editor).selection.getContent(format, args);\n };\n\n var defaultFormat$1 = 'html';\n var getContent$1 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n var format = args.format ? args.format : defaultFormat$1;\n return getContent(editor, args, format);\n };\n\n var setContent$1 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n return setContent(editor, content, args);\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$7 = function (editor) {\n if (!editor.removed) {\n var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n var body = editor.getBody();\n var element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && element) {\n DOM$3.remove(element.nextSibling);\n }\n fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n fireDetach(editor);\n DOM$3.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n var destroy = function (editor, automatic) {\n var selection = editor.selection, dom = editor.dom;\n if (editor.destroyed) {\n return;\n }\n if (!automatic && !editor.removed) {\n editor.remove();\n return;\n }\n if (!automatic) {\n editor.editorManager.off('beforeunload', editor._beforeUnload);\n if (editor.theme && editor.theme.destroy) {\n editor.theme.destroy();\n }\n safeDestroy(selection);\n safeDestroy(dom);\n }\n restoreForm(editor);\n clearDomReferences(editor);\n editor.destroyed = true;\n };\n\n var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var deep$1 = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = 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 = function (sections, settings) {\n return {\n sections: constant(sections),\n settings: constant(settings)\n };\n };\n var deviceDetection = detect$3().deviceType;\n var isTouch = deviceDetection.isTouch();\n var isPhone = deviceDetection.isPhone();\n var isTablet = deviceDetection.isTablet();\n var legacyMobilePlugins = [\n 'lists',\n 'autolink',\n 'autosave'\n ];\n var defaultTouchSettings = {\n table_grid: false,\n object_resizing: false,\n resize: false\n };\n var normalizePlugins = function (plugins) {\n var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\n var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim);\n return filter(trimmedPlugins, function (item) {\n return item.length > 0;\n });\n };\n var filterLegacyMobilePlugins = function (plugins) {\n return filter(plugins, curry(contains, legacyMobilePlugins));\n };\n var extractSections = function (keys, settings) {\n var result = bifilter(settings, function (value, key) {\n return contains(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n var getSection = function (sectionResult, name, defaults) {\n if (defaults === void 0) {\n defaults = {};\n }\n var sections = sectionResult.sections();\n var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};\n return Tools.extend({}, defaults, sectionSettings);\n };\n var hasSection = function (sectionResult, name) {\n return sectionResult.sections().hasOwnProperty(name);\n };\n var isSectionTheme = function (sectionResult, name, theme) {\n var section = sectionResult.sections();\n return hasSection(sectionResult, name) && section[name].theme === theme;\n };\n var getSectionConfig = function (sectionResult, name) {\n return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n };\n var getToolbarMode = function (settings, defaultVal) {\n return get(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: '<!DOCTYPE html>',\n visual: true,\n font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n forced_root_block: 'p',\n hidden_input: true,\n inline_styles: true,\n convert_fonts_to_spans: true,\n indent: true,\n indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n entity_encoding: 'named',\n url_converter: editor.convertURL,\n url_converter_scope: editor\n };\n return __assign(__assign({}, baseDefaults), isTouch ? defaultTouchSettings : {});\n };\n var getDefaultMobileSettings = function (mobileSettings, isPhone) {\n var defaultMobileSettings = {\n resize: false,\n toolbar_mode: getToolbarMode(mobileSettings, 'scrolling'),\n toolbar_sticky: false\n };\n var defaultPhoneSettings = { menubar: false };\n return __assign(__assign(__assign({}, defaultTouchSettings), defaultMobileSettings), isPhone ? defaultPhoneSettings : {});\n };\n var getExternalPlugins$1 = function (overrideSettings, settings) {\n var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n if (overrideSettings && overrideSettings.external_plugins) {\n return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n var combinePlugins = function (forcedPlugins, plugins) {\n return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n };\n var 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.mobile || {}, isPhone) } : {};\n var sectionResult = extractSections(['mobile'], deepMerge(defaultDeviceSettings, settings));\n var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, {\n validate: true,\n external_plugins: getExternalPlugins$1(defaultOverrideSettings, sectionResult.settings())\n });\n return processPlugins(isMobileDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n };\n var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n var defaultSettings = getDefaultSettings(settings, id, documentBaseUrl, isTouch, editor);\n return combineSettings(isPhone || isTablet, isPhone, defaultSettings, defaultOverrideSettings, settings);\n };\n var getFiltered = function (predicate, editor, name) {\n return 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\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 || !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 getTopNotification().fold(function () {\n return editor.focus();\n }, function (top) {\n return focus(Element.fromDom(top.getEl()));\n });\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 = getServiceMessage(editor);\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 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, __spreadArrays([message], x));\n } else {\n console.log.apply(console, __spreadArrays([message], x));\n }\n }\n };\n\n var isContentCssSkinName = function (url) {\n return /^[a-z0-9\\-]+$/i.test(url);\n };\n var getContentCssUrls = function (editor) {\n var contentCss = 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 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('<span data-mce-bogus=\"all\">' + ZWSP + '</span>');\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 scrollElementIntoView = function (editor, element, alignToTop) {\n var scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n var scrollRangeIntoView = function (editor, rng, alignToTop) {\n var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n var hasCeProperty = function (node) {\n return isContentEditableTrue(node) || isContentEditableFalse(node);\n };\n var findParent = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var findClosestIeRange = function (clientX, clientY, doc) {\n var rects;\n var element = doc.elementFromPoint(clientX, clientY);\n var rng = doc.body.createTextRange();\n if (!element || element.tagName === 'HTML') {\n element = doc.body;\n }\n rng.moveToElementText(element);\n rects = Tools.toArray(rng.getClientRects());\n rects = rects.sort(function (a, b) {\n a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n return a - b;\n });\n if (rects.length > 0) {\n clientY = (rects[0].bottom + rects[0].top) / 2;\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n return rng;\n } catch (ex) {\n }\n }\n return null;\n };\n var moveOutOfContentEditableFalse = function (rng, rootNode) {\n var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n return isContentEditableFalse(findParent(parentElement, rootNode, hasCeProperty)) ? null : rng;\n };\n var fromPoint$1 = function (clientX, clientY, doc) {\n var rng, point;\n var pointDoc = doc;\n if (pointDoc.caretPositionFromPoint) {\n point = pointDoc.caretPositionFromPoint(clientX, clientY);\n if (point) {\n rng = doc.createRange();\n rng.setStart(point.offsetNode, point.offset);\n rng.collapse(true);\n }\n } else if (doc.caretRangeFromPoint) {\n rng = doc.caretRangeFromPoint(clientX, clientY);\n } else if (pointDoc.body.createTextRange) {\n rng = pointDoc.body.createTextRange();\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n } catch (ex) {\n rng = findClosestIeRange(clientX, clientY, doc);\n }\n return moveOutOfContentEditableFalse(rng, doc.body);\n }\n return rng;\n };\n\n var 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).filter(isElement);\n }).map(function (elm) {\n return elm.dom();\n }).getOr(root);\n };\n var getStart$2 = function (root, rng, real) {\n return getEndpointElement(root, rng, true, real, function (elm, offset) {\n return Math.min(childNodesCount(elm), offset);\n });\n };\n var getEnd = function (root, rng, real) {\n return getEndpointElement(root, rng, false, real, function (elm, offset) {\n return offset > 0 ? offset - 1 : offset;\n });\n };\n var skipEmptyTextNodes = function (node, forwards) {\n var orig = node;\n while (node && isText$1(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n var getNode$1 = function (root, rng) {\n var elm, startContainer, endContainer;\n if (!rng) {\n return root;\n }\n startContainer = rng.startContainer;\n endContainer = rng.endContainer;\n var startOffset = rng.startOffset;\n var endOffset = rng.endOffset;\n elm = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n elm = startContainer.childNodes[startOffset];\n }\n }\n }\n if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\n if (startContainer.length === startOffset) {\n startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n } else {\n startContainer = startContainer.parentNode;\n }\n if (endOffset === 0) {\n endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n } else {\n endContainer = endContainer.parentNode;\n }\n if (startContainer && startContainer === endContainer) {\n return startContainer;\n }\n }\n }\n if (elm && elm.nodeType === 3) {\n return elm.parentNode;\n }\n return elm;\n };\n var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n var node;\n var selectedBlocks = [];\n var root = dom.getRoot();\n startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);\n endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (startElm && startElm !== root) {\n selectedBlocks.push(startElm);\n }\n if (startElm && endElm && startElm !== endElm) {\n node = startElm;\n var walker = new 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 getContent$2 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n var format = args.format ? args.format : 'html';\n return getSelectedContent(editor, format, args);\n };\n\n var isEq$4 = function (rng1, rng2) {\n return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n\n var findParent$1 = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var hasParent = function (node, rootNode, predicate) {\n return findParent$1(node, rootNode, predicate) !== null;\n };\n var hasParentWithName = function (node, rootNode, name) {\n return hasParent(node, rootNode, function (node) {\n return node.nodeName === name;\n });\n };\n var isTable$3 = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$3 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var isCeFalseCaretContainer = function (node, rootNode) {\n return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false;\n };\n var hasBrBeforeAfter = function (dom, node, left) {\n var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (isBr(node)) {\n return true;\n }\n }\n };\n var isPrevNode = function (node, name) {\n return node.previousSibling && node.previousSibling.nodeName === name;\n };\n var hasContentEditableFalseParent = function (body, node) {\n while (node && node !== body) {\n if (isContentEditableFalse(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n var lastInlineElement;\n var body = dom.getRoot();\n var node;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n var parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n if (left && isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return 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 (isText$1(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;\n var directionLeft, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n var isAfterNode = isElement$1(container) && offset === container.childNodes.length;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer(container)) {\n return Option.none();\n }\n if (isElement$1(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (isDocument$1(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer(node)) {\n return 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 = isText$1(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 (isContentEditableFalse(node) || isCaretContainer(node)) {\n normalized = false;\n break;\n }\n if (isText$1(node) && node.nodeValue.length > 0) {\n offset = directionLeft ? 0 : node.nodeValue.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (isText$1(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (isElement$1(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && isText$1(container) && offset === container.nodeValue.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();\n };\n var normalize$2 = function (dom, rng) {\n var collapsed = rng.collapsed, normRng = rng.cloneRange();\n var startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) {\n if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n normRng.setStart(pos.container(), pos.offset());\n }\n });\n if (!collapsed) {\n normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return isEq$4(rng, normRng) ? Option.none() : Option.some(normRng);\n };\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 return __assign(__assign({ format: 'html' }, args), {\n set: true,\n selection: true,\n content: content\n });\n };\n var cleanContent = function (editor, args) {\n if (args.format !== 'raw') {\n var node = editor.parser.parse(args.content, __assign({\n isRootContent: true,\n forced_root_block: false\n }, args));\n return Serializer({ validate: editor.validate }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n var setContent$2 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n var contentArgs = setupArgs(args, content);\n if (!contentArgs.no_events) {\n contentArgs = editor.fire('BeforeSetContent', contentArgs);\n if (contentArgs.isDefaultPrevented()) {\n editor.fire('SetContent', contentArgs);\n return;\n }\n }\n args.content = cleanContent(editor, contentArgs);\n var rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(args.content));\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n if (!contentArgs.no_events) {\n editor.fire('SetContent', contentArgs);\n }\n };\n\n function BookmarkManager(selection) {\n return {\n getBookmark: curry(getBookmark$1, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n }\n (function (BookmarkManager) {\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\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 (isElement$1(elm)) {\n return exists(elm.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n }\n }\n return exists(range.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n };\n\n var 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 = isContentEditableFalse;\n var isContentEditableTrue$2 = 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, 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 var resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n var isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n if (evt.type === 'longpress' || evt.type.indexOf('touch') === 0) {\n var touch = evt.touches[0];\n return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n }\n };\n var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTarget = function (elm) {\n return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;\n };\n var isResizable = function (elm) {\n var selector = 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$1(Element.fromDom(elm), selector);\n };\n var setGhostElmSize = function (ghostElm, width, height) {\n dom.setStyles(getResizeTarget(ghostElm), {\n width: width,\n height: height\n });\n };\n var resizeGhostElement = function (e) {\n var deltaX, deltaY, proportional;\n var resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if (isImage(selectedElm) && getResizeImgProportional(editor) !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e);\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round(width * ratio);\n width = round(height / ratio);\n } else {\n width = round(height / ratio);\n height = round(width * ratio);\n }\n }\n setGhostElmSize(selectedElmGhost, width, height);\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' &times; ' + 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 var wasResizeStarted = resizeStarted;\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 if (wasResizeStarted) {\n setSizeProp('width', width);\n setSizeProp('height', height);\n }\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n showResizeRect(selectedElm);\n if (wasResizeStarted) {\n fireObjectResized(editor, selectedElm, width, height);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n }\n editor.nodeChanged();\n };\n var showResizeRect = function (targetElm) {\n hideResizeRect();\n unbindResizeHandleEvents();\n var position = dom.getPos(targetElm, rootElement);\n var selectedElmX = position.x;\n var selectedElmY = position.y;\n var rect = targetElm.getBoundingClientRect();\n var targetWidth = rect.width || rect.right - rect.left;\n var targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n selectedElm = targetElm;\n width = height = 0;\n }\n var 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 setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\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 + ' &times; ' + 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 unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute('data-mce-selected');\n }\n each$1(resizeHandles, function (value, name) {\n var handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute('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 each$1(resizeHandles, function (handle) {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n var disableGeckoResize = function () {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, false);\n } catch (ex) {\n }\n };\n editor.on('init', function () {\n disableGeckoResize();\n if (Env.browser.isIE() || Env.browser.isEdge()) {\n editor.on('mousedown click', function (e) {\n var target = e.target, nodeName = target.nodeName;\n if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n if (e.button !== 2) {\n editor.selection.select(target, nodeName === 'TABLE');\n }\n if (e.type === 'mousedown') {\n editor.nodeChanged();\n }\n }\n });\n var handleMSControlSelect_1 = function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n return editor.selection.select(node);\n });\n };\n if (isWithinContentEditableFalse(e.target)) {\n e.preventDefault();\n delayedSelect(e.target);\n return;\n }\n if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n e.preventDefault();\n if (e.target.tagName === 'IMG') {\n delayedSelect(e.target);\n }\n }\n };\n dom.bind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n editor.on('remove', function () {\n return dom.unbind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n });\n }\n var throttledUpdateResizeRect = Delay.throttle(function (e) {\n if (!editor.composing) {\n updateResizeRect(e);\n }\n });\n editor.on('nodechange ResizeEditor ResizeWindow ResizeContent drop FullscreenStateChanged', throttledUpdateResizeRect);\n editor.on('keyup compositionend', function (e) {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n throttledUpdateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n var destroy = function () {\n selectedElm = selectedElmGhost = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\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 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 getContent$2(editor, args);\n };\n var setContent = function (content, args) {\n return setContent$2(editor, content, args);\n };\n var getStart = function (real) {\n return getStart$2(editor.getBody(), getRng$1(), real);\n };\n var getEnd$1 = function (real) {\n return getEnd(editor.getBody(), getRng$1(), real);\n };\n var getBookmark = function (type, normalized) {\n return bookmarkManager.getBookmark(type, normalized);\n };\n var moveToBookmark = function (bookmark) {\n return bookmarkManager.moveToBookmark(bookmark);\n };\n var select = function (node, content) {\n select$1(dom, node, content).each(setRng);\n return node;\n };\n var isCollapsed = function () {\n var rng = getRng$1(), sel = getSel();\n if (!rng || rng.item) {\n return false;\n }\n if (rng.compareEndPoints) {\n return rng.compareEndPoints('StartToEnd', rng) === 0;\n }\n return !sel || rng.collapsed;\n };\n var collapse = function (toStart) {\n var rng = getRng$1();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n var getSel = function () {\n return win.getSelection ? win.getSelection() : win.document.selection;\n };\n var getRng$1 = function () {\n var selection, rng, elm;\n var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n if (!win) {\n return null;\n }\n var doc = win.document;\n if (typeof doc === 'undefined' || doc === null) {\n return null;\n }\n if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n var bookmark = getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(function (r) {\n return processRanges(editor, [r])[0];\n }).getOr(doc.createRange());\n }\n }\n try {\n if ((selection = getSel()) && !isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = selection.createRange ? selection.createRange() : doc.createRange();\n }\n }\n } catch (ex) {\n }\n rng = 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 node;\n if (!isValidRange(rng)) {\n return;\n }\n var ieRange = isNativeIeSelection(rng) ? rng : null;\n if (ieRange) {\n explicitRange = null;\n try {\n ieRange.select();\n } catch (ex) {\n }\n return;\n }\n var sel = getSel();\n var evt = editor.fire('SetSelectionRange', {\n range: rng,\n forward: forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.tagName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.fire('AfterSetSelectionRange', {\n range: rng,\n forward: forward\n });\n };\n var setNode = function (elm) {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n var getNode = function () {\n return getNode$1(editor.getBody(), getRng$1());\n };\n var getSelectedBlocks$1 = function (startElm, endElm) {\n return getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n };\n var isForward = function () {\n var sel = getSel();\n if (!sel || !sel.anchorNode || !sel.focusNode) {\n return true;\n }\n var anchorRange = dom.createRng();\n anchorRange.setStart(sel.anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n var 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$1();\n var sel = getSel();\n if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n var normRng = normalize$2(dom, rng);\n normRng.each(function (normRng) {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n var selectorChanged = function (selector, callback) {\n selectorChangedWithUnbind(selector, callback);\n return exports;\n };\n var getScrollContainer = function () {\n var scrollContainer;\n var node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n var scrollIntoView = function (elm, alignToTop) {\n return scrollElementIntoView(editor, elm, alignToTop);\n };\n var placeCaretAt = function (clientX, clientY) {\n return setRng(fromPoint$1(clientX, clientY, editor.getDoc()));\n };\n var getBoundingClientRect = function () {\n var rng = getRng$1();\n return rng.collapsed ? CaretPosition$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$1,\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 var bookmarkManager = BookmarkManager$1(exports);\n var controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n var removeAttrs = function (node, names) {\n each(names, function (name) {\n node.attr(name, null);\n });\n };\n var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n domParser.addNodeFilter('font', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n var color = node.attr('color');\n var face = node.attr('face');\n var size = node.attr('size');\n if (color) {\n props.color = color;\n }\n if (face) {\n props['font-family'] = face;\n }\n if (size) {\n props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\n }\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n removeAttrs(node, [\n 'color',\n 'face',\n 'size'\n ]);\n });\n });\n };\n var addStrikeToSpanFilter = function (domParser, styles) {\n domParser.addNodeFilter('strike', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n props['text-decoration'] = 'line-through';\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n });\n });\n };\n var addFilters = function (domParser, settings) {\n var styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n }\n addStrikeToSpanFilter(domParser, styles);\n };\n var register$1 = function (domParser, settings) {\n if (settings.inline_styles) {\n addFilters(domParser, settings);\n }\n };\n\n var blobUriToBlob = function (url) {\n return new promiseObj(function (resolve, reject) {\n var rejectWithError = function () {\n reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n };\n try {\n var xhr = 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$1 = function (uri) {\n var type;\n var uriParts = decodeURIComponent(uri).split(',');\n var matches = /data:([^;]+)/.exec(uriParts[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriParts[1]\n };\n };\n var buildBlob = function (type, data) {\n var str;\n try {\n str = domGlobals.atob(data);\n } catch (e) {\n return Option.none();\n }\n var arr = new Uint8Array(str.length);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return Option.some(new domGlobals.Blob([arr], { type: type }));\n };\n var dataUriToBlob = function (uri) {\n return new promiseObj(function (resolve) {\n var _a = parseDataUri$1(uri), type = _a.type, data = _a.data;\n buildBlob(type, data).fold(function () {\n return resolve(new domGlobals.Blob([]));\n }, resolve);\n });\n };\n var uriToBlob = function (url) {\n if (url.indexOf('blob:') === 0) {\n return blobUriToBlob(url);\n }\n if (url.indexOf('data:') === 0) {\n return dataUriToBlob(url);\n }\n return null;\n };\n var blobToDataUri = function (blob) {\n return new promiseObj(function (resolve) {\n var reader = new domGlobals.FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n\n var count = 0;\n var uniqueId = function (prefix) {\n return (prefix || 'blobid') + count++;\n };\n var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n var base64, blobInfo;\n if (img.src.indexOf('blob:') === 0) {\n blobInfo = blobCache.getByUri(img.src);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n uriToBlob(img.src).then(function (blob) {\n blobToDataUri(blob).then(function (dataUri) {\n base64 = parseDataUri$1(dataUri).data;\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n });\n }, function (err) {\n reject(err);\n });\n }\n return;\n }\n var _a = parseDataUri$1(img.src), data = _a.data, type = _a.type;\n base64 = data;\n blobInfo = blobCache.getByData(base64, type);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n uriToBlob(img.src).then(function (blob) {\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n }, function (err) {\n reject(err);\n });\n }\n };\n var getAllImages = function (elm) {\n return elm ? from$1(elm.getElementsByTagName('img')) : [];\n };\n function ImageScanner(uploadStatus, blobCache) {\n var cachedPromises = {};\n var findAll = function (elm, predicate) {\n if (!predicate) {\n predicate = constant(true);\n }\n var images = filter(getAllImages(elm), function (img) {\n var src = img.src;\n if (!Env.fileApi) {\n return false;\n }\n if (img.hasAttribute('data-mce-bogus')) {\n return false;\n }\n if (img.hasAttribute('data-mce-placeholder')) {\n return false;\n }\n if (!src || src === Env.transparentSrc) {\n return false;\n }\n if (src.indexOf('blob:') === 0) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (src.indexOf('data:') === 0) {\n return predicate(img);\n }\n return false;\n });\n var promises = map(images, function (img) {\n if (cachedPromises[img.src] !== undefined) {\n return new promiseObj(function (resolve) {\n cachedPromises[img.src].then(function (imageInfo) {\n if (typeof imageInfo === 'string') {\n return imageInfo;\n }\n resolve({\n image: img,\n blobInfo: imageInfo.blobInfo\n });\n });\n });\n }\n var newPromise = new promiseObj(function (resolve, reject) {\n imageToBlobInfo(blobCache, img, resolve, reject);\n }).then(function (result) {\n delete cachedPromises[result.image.src];\n return result;\n }).catch(function (error) {\n delete cachedPromises[img.src];\n return error;\n });\n cachedPromises[img.src] = newPromise;\n return newPromise;\n });\n return promiseObj.all(promises);\n };\n return { findAll: findAll };\n }\n\n var paddEmptyNode = function (settings, args, blockElements, node) {\n var brPreferred = settings.padd_empty_with_br || args.insert;\n if (brPreferred && blockElements[node.name]) {\n node.empty().append(new Node('br', 1)).shortEnded = true;\n } else {\n node.empty().append(new Node('#text', 3)).value = nbsp;\n }\n };\n var isPaddedWithNbsp = function (node) {\n return hasOnlyChild(node, '#text') && node.firstChild.value === nbsp;\n };\n var hasOnlyChild = function (node, name) {\n return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n };\n var isPadded = function (schema, node) {\n var rule = schema.getElementRule(node.name);\n return rule && rule.paddEmpty;\n };\n var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) {\n return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n return isPadded(schema, node);\n });\n };\n var isLineBreakNode = function (node, blockElements) {\n return node && (blockElements[node.name] || node.name === 'br');\n };\n\n var isBogusImage = function (img) {\n return img.attr('data-mce-bogus');\n };\n var isInternalImageSource = function (img) {\n return img.attr('src') === Env.transparentSrc || img.attr('data-mce-placeholder');\n };\n var isValidDataImg = function (img, settings) {\n if (settings.images_dataimg_filter) {\n var imgElem_1 = new domGlobals.Image();\n imgElem_1.src = img.attr('src');\n each$1(img.attributes.map, function (value, key) {\n imgElem_1.setAttribute(key, value);\n });\n return settings.images_dataimg_filter(imgElem_1);\n } else {\n return true;\n }\n };\n var registerBase64ImageFilter = function (parser, settings) {\n var blobCache = settings.blob_cache;\n var processImage = function (img) {\n var inputSrc = img.attr('src');\n if (isInternalImageSource(img) || isBogusImage(img)) {\n return;\n }\n parseDataUri(inputSrc).filter(function () {\n return isValidDataImg(img, settings);\n }).bind(function (_a) {\n var type = _a.type, data = _a.data;\n return Option.from(blobCache.getByData(data, type)).orThunk(function () {\n return buildBlob(type, data).map(function (blob) {\n var blobInfo = blobCache.create(uniqueId(), blob, data);\n blobCache.add(blobInfo);\n return blobInfo;\n });\n });\n }).each(function (blobInfo) {\n img.attr('src', blobInfo.blobUri());\n });\n };\n if (blobCache) {\n parser.addAttributeFilter('src', function (nodes) {\n return each(nodes, processImage);\n });\n }\n };\n var register$2 = function (parser, settings) {\n var schema = parser.schema;\n if (settings.remove_trailing_brs) {\n parser.addNodeFilter('br', function (nodes, _, args) {\n var i;\n var l = nodes.length;\n var node;\n var blockElements = Tools.extend({}, schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var parent, lastParent, prev, prevName;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var elementRule, textNode;\n blockElements.body = 1;\n for (i = 0; i < l; i++) {\n node = nodes[i];\n parent = node.parent;\n if (blockElements[node.parent.name] && node === parent.lastChild) {\n prev = node.prev;\n while (prev) {\n prevName = prev.name;\n if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n if (prevName !== 'br') {\n 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$2(schema, nonEmptyElements, whiteSpaceElements, parent)) {\n elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, blockElements, parent);\n }\n }\n }\n }\n } else {\n lastParent = node;\n while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n lastParent = parent;\n if (blockElements[parent.name]) {\n break;\n }\n parent = parent.parent;\n }\n if (lastParent === parent && settings.padd_empty_with_br !== true) {\n textNode = new Node('#text', 3);\n textNode.value = nbsp;\n node.replace(textNode);\n }\n }\n }\n });\n }\n parser.addAttributeFilter('href', function (nodes) {\n var i = nodes.length;\n var appendRel = function (rel) {\n var parts = rel.split(' ').filter(function (p) {\n return p.length > 0;\n });\n return parts.concat(['noopener']).sort().join(' ');\n };\n var addNoOpener = function (rel) {\n var newRel = rel ? Tools.trim(rel) : '';\n if (!/\\b(noopener)\\b/g.test(newRel)) {\n return appendRel(newRel);\n } else {\n return newRel;\n }\n };\n if (!settings.allow_unsafe_link_target) {\n while (i--) {\n var node = nodes[i];\n if (node.name === 'a' && node.attr('target') === '_blank') {\n node.attr('rel', addNoOpener(node.attr('rel')));\n }\n }\n }\n });\n if (!settings.allow_html_in_named_anchor) {\n parser.addAttributeFilter('id,name', function (nodes) {\n var i = nodes.length, sibling, prevSibling, parent, node;\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n parent = node.parent;\n sibling = node.lastChild;\n do {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n } while (sibling);\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', function (nodes) {\n var i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n var li = new Node('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n if (settings.validate && schema.getValidClasses()) {\n parser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, classList, ci, className, classValue;\n var validClasses = schema.getValidClasses();\n var validClassesMap, valid;\n while (i--) {\n node = nodes[i];\n classList = node.attr('class').split(' ');\n classValue = '';\n for (ci = 0; ci < classList.length; ci++) {\n className = classList[ci];\n valid = false;\n validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n registerBase64ImageFilter(parser, settings);\n };\n\n var makeMap$4 = Tools.makeMap, each$d = Tools.each, explode$2 = Tools.explode, extend$2 = Tools.extend;\n var DomParser = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var nodeFilters = {};\n var attributeFilters = [];\n var matchedNodes = {};\n var matchedAttributes = {};\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n settings.root_name = settings.root_name || 'body';\n var fixInvalidChildren = function (nodes) {\n var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;\n var sibling, nextNode;\n var nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\n var nonEmptyElements = schema.getNonEmptyElements();\n var whitespaceElements = schema.getWhiteSpaceElements();\n var textBlockElements = schema.getTextBlockElements();\n var specialElements = schema.getSpecialElements();\n for (ni = 0; ni < nodes.length; ni++) {\n node = nodes[ni];\n if (!node.parent || node.fixed) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n sibling.fixed = true;\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap(node);\n continue;\n }\n parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n parents.reverse();\n newParent = currentNode = filterNode(parents[0].clone());\n for (i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = filterNode(parents[i].clone());\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n sibling = node.prev;\n if (sibling && (sibling.name === 'ul' || sibling.name === '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('ul', 1)));\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n node.wrap(filterNode(new Node('div', 1)));\n } else {\n if (specialElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n }\n }\n }\n };\n var filterNode = function (node) {\n var i, name, list;\n name = node.name;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n i = attributeFilters.length;\n while (i--) {\n name = attributeFilters[i].name;\n if (name in node.attributes.map) {\n list = matchedAttributes[name];\n if (list) {\n list.push(node);\n } else {\n matchedAttributes[name] = [node];\n }\n }\n }\n return node;\n };\n var addNodeFilter = function (name, callback) {\n each$d(explode$2(name), function (name) {\n var list = nodeFilters[name];\n if (!list) {\n nodeFilters[name] = list = [];\n }\n list.push(callback);\n });\n };\n var getNodeFilters = function () {\n var out = [];\n for (var name_1 in nodeFilters) {\n if (nodeFilters.hasOwnProperty(name_1)) {\n out.push({\n name: name_1,\n callbacks: nodeFilters[name_1]\n });\n }\n }\n return out;\n };\n var addAttributeFilter = function (name, callback) {\n each$d(explode$2(name), function (name) {\n var i;\n for (i = 0; i < attributeFilters.length; i++) {\n if (attributeFilters[i].name === name) {\n attributeFilters[i].callbacks.push(callback);\n return;\n }\n }\n attributeFilters.push({\n name: name,\n callbacks: [callback]\n });\n });\n };\n var getAttributeFilters = function () {\n return [].concat(attributeFilters);\n };\n var parse = function (html, args) {\n var nodes, i, l, fi, fl, list, name;\n var invalidChildren = [];\n var isInWhiteSpacePreservedElement;\n var node;\n var getRootBlockName = function (name) {\n if (name === false) {\n return '';\n } else if (name === true) {\n return 'p';\n } else {\n return name;\n }\n };\n args = args || {};\n matchedNodes = {};\n matchedAttributes = {};\n var blockElements = extend$2(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var children = schema.children;\n var validate = settings.validate;\n var forcedRootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n var rootBlockName = getRootBlockName(forcedRootBlockName);\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name);\n var addRootBlocks = function () {\n var node = rootNode.firstChild, next, rootBlockNode;\n var trim = function (rootBlockNode) {\n if (rootBlockNode) {\n node = rootBlockNode.firstChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlockNode.lastChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n next = node.next;\n if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n if (!rootBlockNode) {\n rootBlockNode = createNode(rootBlockName, 1);\n rootBlockNode.attr(settings.forced_root_block_attrs);\n rootNode.insert(rootBlockNode, node);\n rootBlockNode.append(node);\n } else {\n rootBlockNode.append(node);\n }\n } else {\n trim(rootBlockNode);\n rootBlockNode = null;\n }\n node = next;\n }\n trim(rootBlockNode);\n };\n var createNode = function (name, type) {\n var node = new Node(name, type);\n var list;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n return node;\n };\n var removeWhitespaceBefore = function (node) {\n var textNode, textNodeNext, textVal, sibling;\n var blockElements = schema.getBlockElements();\n for (textNode = node.prev; textNode && textNode.type === 3;) {\n textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (textVal.length > 0) {\n textNode.value = textVal;\n return;\n }\n textNodeNext = textNode.next;\n if (textNodeNext) {\n if (textNodeNext.type === 3 && textNodeNext.value.length) {\n textNode = textNode.prev;\n continue;\n }\n if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n textNode = textNode.prev;\n continue;\n }\n }\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n }\n };\n var cloneAndExcludeBlocks = function (input) {\n var name;\n var output = {};\n for (name in input) {\n if (name !== 'li' && name !== 'p') {\n output[name] = input[name];\n }\n }\n return output;\n };\n var parser = SaxParser$1({\n validate: validate,\n allow_html_data_urls: settings.allow_html_data_urls,\n allow_script_urls: settings.allow_script_urls,\n allow_conditional_comments: settings.allow_conditional_comments,\n preserve_cdata: settings.preserve_cdata,\n self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n cdata: function (text) {\n node.append(createNode('#cdata', 4)).value = text;\n },\n text: function (text, raw) {\n var textNode;\n if (!isInWhiteSpacePreservedElement) {\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.lastChild, blockElements)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n }\n if (text.length !== 0) {\n textNode = createNode('#text', 3);\n textNode.raw = !!raw;\n node.append(textNode).value = text;\n }\n },\n comment: function (text) {\n node.append(createNode('#comment', 8)).value = text;\n },\n pi: function (name, text) {\n node.append(createNode(name, 7)).value = text;\n removeWhitespaceBefore(node);\n },\n doctype: function (text) {\n var newNode = node.append(createNode('#doctype', 10));\n newNode.value = text;\n removeWhitespaceBefore(node);\n },\n start: function (name, attrs, empty) {\n var newNode, attrFiltersLen, attrName, parent;\n var elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n newNode = createNode(elementRule.outputName || name, 1);\n newNode.attributes = attrs;\n newNode.shortEnded = empty;\n node.append(newNode);\n parent = children[node.name];\n if (parent && children[newNode.name] && !parent[newNode.name]) {\n invalidChildren.push(newNode);\n }\n attrFiltersLen = attributeFilters.length;\n while (attrFiltersLen--) {\n attrName = attributeFilters[attrFiltersLen].name;\n if (attrName in attrs.map) {\n list = matchedAttributes[attrName];\n if (list) {\n list.push(newNode);\n } else {\n matchedAttributes[attrName] = [newNode];\n }\n }\n }\n if (blockElements[name]) {\n removeWhitespaceBefore(newNode);\n }\n if (!empty) {\n node = newNode;\n }\n if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = true;\n }\n }\n },\n end: function (name) {\n var textNode, text, sibling, tempNode;\n var elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n if (blockElements[name]) {\n if (!isInWhiteSpacePreservedElement) {\n textNode = node.firstChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(startWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.next;\n } else {\n sibling = textNode.next;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.next;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n textNode = node.lastChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.prev;\n } else {\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.prev;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n }\n }\n if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = false;\n }\n if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {\n tempNode = node.parent;\n if (blockElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n node = tempNode;\n return;\n }\n if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {\n paddEmptyNode(settings, args, blockElements, node);\n }\n node = node.parent;\n }\n }\n }, schema);\n var rootNode = node = new Node(args.context || settings.root_name, 11);\n parser.parse(html, args.format);\n if (validate && invalidChildren.length) {\n if (!args.context) {\n fixInvalidChildren(invalidChildren);\n } else {\n args.invalid = true;\n }\n }\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks();\n }\n if (!args.invalid) {\n for (name in matchedNodes) {\n if (!matchedNodes.hasOwnProperty(name)) {\n continue;\n }\n list = nodeFilters[name];\n nodes = matchedNodes[name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (i = 0, l = list.length; i < l; i++) {\n list[i](nodes, name, args);\n }\n }\n for (i = 0, l = attributeFilters.length; i < l; i++) {\n list = attributeFilters[i];\n if (list.name in matchedAttributes) {\n nodes = matchedAttributes[list.name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n list.callbacks[fi](nodes, list.name, args);\n }\n }\n }\n }\n return rootNode;\n };\n var exports = {\n schema: schema,\n addAttributeFilter: addAttributeFilter,\n getAttributeFilters: getAttributeFilters,\n addNodeFilter: addNodeFilter,\n getNodeFilters: getNodeFilters,\n filterNode: filterNode,\n parse: parse\n };\n register$2(exports, settings);\n register$1(exports, settings);\n return exports;\n };\n\n var register$3 = function (htmlParser, settings, dom) {\n htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('tabindex', node.attr('data-mce-tabindex'));\n node.attr(name, null);\n }\n });\n htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\n var i = nodes.length, node, value;\n var internalName = 'data-mce-' + name;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope;\n while (i--) {\n node = nodes[i];\n value = node.attr(internalName);\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attr(name);\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n } else if (urlConverter) {\n value = urlConverter.call(urlConverterScope, value, name, node.name);\n }\n node.attr(name, value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, value;\n while (i--) {\n node = nodes[i];\n value = node.attr('class');\n if (value) {\n value = node.attr('class').replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n node.attr('class', value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n var hasChildren = Option.from(node.firstChild).exists(function (firstChild) {\n return !isZwsp$1(firstChild.value);\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('noscript', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i].firstChild;\n if (node) {\n node.value = Entities.decode(node.value);\n }\n }\n });\n htmlParser.addNodeFilter('script,style', function (nodes, name) {\n var i = nodes.length, node, value, type;\n var trim = function (value) {\n return value.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi, '').replace(/\\s*(\\/\\*\\s*\\]\\]>\\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 = '// <![CDATA[\\n' + trim(value) + '\\n// ]]>';\n }\n } else {\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '<!--\\n' + trim(value) + '\\n-->';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (settings.preserve_cdata && node.value.indexOf('[CDATA[') === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = dom.decode(node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n } else if (node.value.indexOf('mce:protected ') === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(node.value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.type === 7) {\n node.remove();\n } else if (node.type === 1) {\n if (name === 'input' && !node.attr('type')) {\n node.attr('type', 'text');\n }\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\n each(nodes, function (node) {\n if (node.attr('data-mce-type') === 'format-caret') {\n if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n node.remove();\n } else {\n node.unwrap();\n }\n }\n });\n });\n htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n };\n var trimTrailingBr = function (rootNode) {\n var isBr = function (node) {\n return node && node.name === 'br';\n };\n var brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n var brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n\n var preProcess = function (editor, node, args) {\n var doc, oldDoc;\n var dom = editor.dom;\n node = node.cloneNode(true);\n var impl = 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\n var addTempAttr = function (htmlParser, tempAttrs, name) {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n var postProcess$1 = function (editor, args, content) {\n if (!args.no_events && editor) {\n var outArgs = firePostProcess(editor, __assign(__assign({}, args), { content: content }));\n return outArgs.content;\n } else {\n return content;\n }\n };\n var getHtmlFromNode = function (dom, node, args) {\n var html = trim$3(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 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$1(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 register$3(htmlParser, settings, dom);\n var serialize = function (node, parserArgs) {\n if (parserArgs === void 0) {\n parserArgs = {};\n }\n var args = __assign({ format: 'html' }, parserArgs);\n var targetNode = process(editor, node, args);\n var html = getHtmlFromNode(dom, targetNode, args);\n var rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n };\n return {\n schema: schema,\n addNodeFilter: htmlParser.addNodeFilter,\n addAttributeFilter: htmlParser.addAttributeFilter,\n serialize: serialize,\n addRules: function (rules) {\n schema.addValidElements(rules);\n },\n setRules: function (rules) {\n schema.setValidElements(rules);\n },\n addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n getTempAttrs: 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 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 = 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 if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n var json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n var formData = new 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\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 if (!o.blob || !o.base64) {\n throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n }\n var id = o.id || uuid('blobid');\n var name = o.name || id;\n 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 findFirst = function (predicate) {\n return find(cache, predicate).getOrUndefined();\n };\n var get = function (id) {\n return findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.id() === id;\n });\n };\n var getByUri = function (blobUri) {\n return findFirst(function (blobInfo) {\n return blobInfo.blobUri() === blobUri;\n });\n };\n var getByData = function (base64, type) {\n return findFirst(function (blobInfo) {\n return blobInfo.base64() === base64 && blobInfo.blob().type === type;\n });\n };\n var removeByUri = function (blobUri) {\n cache = filter(cache, function (blobInfo) {\n if (blobInfo.blobUri() === blobUri) {\n 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 getByData: getByData,\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 replaceImageUriInView = function (image, resultUri) {\n var src = editor.convertURL(resultUri, 'src');\n replaceUrlInUndoStack(image.src, resultUri);\n editor.$(image).attr({\n 'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n 'data-mce-src': src\n });\n };\n var uploadImages = function (callback) {\n if (!uploader) {\n uploader = Uploader(uploadStatus, {\n url: getImageUploadUrl(editor),\n basePath: getImageUploadBasePath(editor),\n credentials: getImagesUploadCredentials(editor),\n handler: 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 blobInfo = imageInfos[index].blobInfo;\n var image = imageInfos[index].image;\n if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n blobCache.removeByUri(image.src);\n replaceImageUriInView(image, uploadInfo.url);\n } else if (uploadInfo.error) {\n uploadError(editor, uploadInfo.error);\n }\n return {\n element: image,\n status: uploadInfo.status,\n uploadUri: uploadInfo.url,\n blobInfo: blobInfo\n };\n });\n if (callback) {\n callback(filteredResult);\n }\n return filteredResult;\n }));\n }));\n };\n var uploadImagesAuto = function (callback) {\n if (isAutomaticUploadsEnabled(editor)) {\n return uploadImages(callback);\n }\n };\n var isValidDataUriImage = function (imgElm) {\n if (forall(urlFilters, function (filter) {\n return filter(imgElm);\n }) === false) {\n return false;\n }\n if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n var dataImgFilter = getImagesDataImgFilter(editor);\n return dataImgFilter(imgElm);\n }\n return true;\n };\n var addFilter = function (filter) {\n urlFilters.push(filter);\n };\n var scanForImages = function () {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n result = filter(result, function (resultItem) {\n if (typeof resultItem === 'string') {\n displayError(editor, resultItem);\n return false;\n }\n return true;\n });\n each(result, function (resultItem) {\n replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n resultItem.image.src = resultItem.blobInfo.blobUri();\n resultItem.image.removeAttribute('data-mce-src');\n });\n return result;\n }));\n };\n var destroy = function () {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n var replaceBlobUris = function (content) {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n var resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n var blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, null);\n }\n if (blobInfo) {\n var blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('SetContent', function () {\n if (isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', function (e) {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('GetContent', function (e) {\n if (e.source_view || e.format === 'raw') {\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 setup$5 = 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$5(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 preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n strikethrough: [\n {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n },\n {\n inline: 'strike',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n 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 (node, _fmt, _itemName) {\n return isElement$1(node) && node.hasAttribute('href');\n },\n onformat: function (elm, _fmt, vars) {\n Tools.each(vars, function (value, key) {\n dom.setAttrib(elm, key, value);\n });\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\s/), function (name) {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n\n 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(get$9(editor.dom));\n register(getFormats(editor));\n return {\n get: get,\n has: has$1,\n register: register,\n unregister: unregister\n };\n }\n\n var each$e = Tools.each;\n var dom = DOMUtils$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 item = typeof sItem === 'string' ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n var elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n var getRequiredParent = function (elm, candidate) {\n var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n var elmRule = schema.getElementRule(name);\n var parentsRequired = elmRule && elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n var wrapInHtml = function (elm, ancestry, siblings) {\n var parent, parentCandidate;\n var ancestor = ancestry.length > 0 && ancestry[0];\n var ancestorName = ancestor && ancestor.name;\n var parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else if (!siblings) {\n return elm;\n }\n if (parentCandidate) {\n parent = createElement(parentCandidate);\n parent.appendChild(elm);\n }\n if (siblings) {\n if (!parent) {\n parent = dom.create('div');\n parent.appendChild(elm);\n }\n Tools.each(siblings, function (sibling) {\n var siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n };\n if (ancestry && ancestry.length) {\n item = ancestry[0];\n elm = createElement(item);\n fragment = dom.create('div');\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n return fragment;\n } else {\n return '';\n }\n };\n var parseSelectorItem = function (item) {\n var tagName;\n var obj = {\n classes: [],\n attrs: {}\n };\n item = obj.selector = Tools.trim(item);\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($0, $1, $2, $3, $4) {\n switch ($1) {\n case '#':\n obj.attrs.id = $2;\n break;\n case '.':\n obj.classes.push($2);\n break;\n case ':':\n if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n obj.attrs[$2] = $2;\n }\n break;\n }\n if ($3 === '[') {\n var m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n if (m) {\n obj.attrs[m[1]] = m[2];\n }\n }\n return '';\n });\n }\n obj.name = tagName || 'div';\n return obj;\n };\n var parseSelector = function (selector) {\n if (!selector || typeof selector !== 'string') {\n return [];\n }\n selector = selector.split(/\\s*,\\s*/)[0];\n selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), function (item) {\n var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n var obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n var getCssText = function (editor, format) {\n var name, previewFrag;\n var previewCss = '', parentFontSize;\n var previewStyles = getPreviewStyles(editor);\n if (previewStyles === '') {\n return '';\n }\n var removeVars = function (val) {\n return val.replace(/%(\\w+)/g, '');\n };\n if (typeof format === 'string') {\n format = editor.formatter.get(format);\n if (!format) {\n return;\n }\n format = format[0];\n }\n if ('preview' in format) {\n var previewOpt = get(format, 'preview');\n if (previewOpt.is(false)) {\n return '';\n } else {\n previewStyles = previewOpt.getOr(previewStyles);\n }\n }\n name = format.block || format.inline || 'span';\n var items = parseSelector(format.selector);\n if (items.length) {\n if (!items[0].name) {\n items[0].name = name;\n }\n name = format.selector;\n previewFrag = parsedSelectorToHtml(items, editor);\n } else {\n previewFrag = parsedSelectorToHtml([name], editor);\n }\n var previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$e(format.styles, function (value, name) {\n 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 setup$6 = function (editor) {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (var i = 1; i <= 6; i++) {\n editor.addShortcut('access+' + i, '', [\n 'FormatBlock',\n false,\n 'h' + i\n ]);\n }\n editor.addShortcut('access+7', '', [\n 'FormatBlock',\n false,\n 'p'\n ]);\n editor.addShortcut('access+8', '', [\n 'FormatBlock',\n false,\n 'div'\n ]);\n editor.addShortcut('access+9', '', [\n 'FormatBlock',\n false,\n 'address'\n ]);\n };\n\n var Formatter = function (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n setup$6(editor);\n setup$3(editor);\n return {\n get: formats.get,\n has: formats.has,\n register: formats.register,\n unregister: formats.unregister,\n apply: function (name, vars, node) {\n applyFormat$1(editor, name, vars, node);\n },\n remove: function (name, vars, node, similar) {\n removeFormat$1(editor, name, vars, node, similar);\n },\n toggle: function (name, vars, node) {\n toggleFormat(editor, name, vars, node);\n },\n match: 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 registerEvents$1 = function (editor, undoManager, locks) {\n var isFirstTypedCharacter = Cell(false);\n var addNonTypingUndoLevel = function (e) {\n setTyping(undoManager, false, locks);\n undoManager.add({}, e);\n };\n editor.on('init', function () {\n undoManager.add();\n });\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd !== 'undo' && cmd !== 'redo' && cmd !== 'mcerepaint') {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n }\n });\n editor.on('ExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd !== 'undo' && cmd !== 'redo' && cmd !== 'mcerepaint') {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart cut', function () {\n undoManager.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('dragend', addNonTypingUndoLevel);\n editor.on('keyup', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter.get() && undoManager.typing && isEq$3(createFromEditor(editor), undoManager.data[0]) === false) {\n if (editor.isDirty() === false) {\n editor.setDirty(true);\n editor.fire('change', {\n level: undoManager.data[0],\n lastLevel: null\n });\n }\n editor.fire('TypingUndo');\n isFirstTypedCharacter.set(false);\n editor.nodeChanged();\n }\n });\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n return;\n }\n var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n undoManager.beforeChange();\n setTyping(undoManager, true, locks);\n undoManager.add({}, e);\n isFirstTypedCharacter.set(true);\n }\n });\n editor.on('mousedown', function (e) {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n var isInsertReplacementText = function (event) {\n return event.inputType === 'insertReplacementText';\n };\n var isInsertTextDataNull = function (event) {\n return event.inputType === 'insertText' && event.data === null;\n };\n var isInsertFromPasteOrDrop = function (event) {\n return event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n };\n editor.on('input', function (e) {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n };\n var addKeyboardShortcuts = function (editor) {\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n };\n\n var UndoManager = function (editor) {\n var beforeBookmark = Cell(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$1(editor, locks, beforeBookmark);\n },\n add: function (level, event) {\n return addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function () {\n return undo$1(editor, undoManager, locks, index);\n },\n redo: function () {\n return redo$1(editor, index, undoManager.data);\n },\n clear: function () {\n clear$1(editor, undoManager, index);\n },\n reset: function () {\n reset$1(editor, undoManager);\n },\n hasUndo: function () {\n return hasUndo$1(editor, undoManager, index);\n },\n hasRedo: function () {\n return hasRedo$1(editor, undoManager, index);\n },\n transact: function (callback) {\n return transact$1(editor, undoManager, locks, callback);\n },\n ignore: function (callback) {\n ignore$1(editor, locks, callback);\n },\n extra: function (callback1, callback2) {\n extra$1(editor, undoManager, index, callback1, callback2);\n }\n };\n if (!isRtc(editor)) {\n registerEvents$1(editor, undoManager, locks);\n }\n addKeyboardShortcuts(editor);\n return undoManager;\n };\n\n var nonTypingKeycodes = [\n 9,\n 27,\n VK.HOME,\n VK.END,\n 19,\n 20,\n 44,\n 144,\n 145,\n 33,\n 34,\n 45,\n 16,\n 17,\n 18,\n 91,\n 92,\n 93,\n VK.DOWN,\n VK.UP,\n VK.LEFT,\n VK.RIGHT\n ].concat(Env.browser.isFirefox() ? [224] : []);\n var placeholderAttr = 'data-mce-placeholder';\n var isKeyboardEvent = function (e) {\n return e.type === 'keydown' || e.type === 'keyup';\n };\n var isDeleteEvent = function (e) {\n var keyCode = e.keyCode;\n return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n };\n var isNonTypingKeyboardEvent = function (e) {\n if (isKeyboardEvent(e)) {\n var keyCode = e.keyCode;\n return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains(nonTypingKeycodes, keyCode));\n } else {\n return false;\n }\n };\n var isTypingKeyboardEvent = function (e) {\n return isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n };\n var isVisuallyEmpty = function (dom, rootElm, forcedRootBlock) {\n if (isEmpty$1(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$7 = function (editor) {\n var dom = editor.dom;\n var rootBlock = getForcedRootBlock(editor);\n var placeholder = getPlaceholder(editor);\n var updatePlaceholder = function (e, initial) {\n if (isNonTypingKeyboardEvent(e)) {\n return;\n }\n var body = editor.getBody();\n var showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n var isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n if (isPlaceholderShown !== showPlaceholder || initial) {\n dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null);\n firePlaceholderToggle(editor, showPlaceholder);\n editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n }\n };\n if (placeholder) {\n editor.on('init', function (e) {\n updatePlaceholder(e, true);\n editor.on('change SetContent ExecCommand', updatePlaceholder);\n editor.on('paste', function (e) {\n return Delay.setEditorTimeout(editor, function () {\n return updatePlaceholder(e);\n });\n });\n });\n }\n };\n\n var 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$8 = 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\n var isBlockElement = function (blockElements, node) {\n return blockElements.hasOwnProperty(node.nodeName);\n };\n var isValidTarget = function (blockElements, node) {\n if (isText$1(node)) {\n return true;\n } else if (isElement$1(node)) {\n return !isBlockElement(blockElements, node) && !isBookmarkNode$1(node);\n } else {\n return false;\n }\n };\n var hasBlockParent = function (blockElements, root, node) {\n return exists(parents$1(Element.fromDom(node), Element.fromDom(root)), function (elm) {\n return isBlockElement(blockElements, elm.dom());\n });\n };\n var shouldRemoveTextNode = function (blockElements, node) {\n if (isText$1(node)) {\n if (node.nodeValue.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n return true;\n }\n }\n return false;\n };\n var addRootBlocks = function (editor) {\n var dom = editor.dom, selection = editor.selection;\n var schema = editor.schema, blockElements = schema.getBlockElements();\n var node = selection.getStart();\n var rootNode = editor.getBody();\n var rootBlockNode, tempNode, wrapped;\n var forcedRootBlock = getForcedRootBlock(editor);\n if (!node || !isElement$1(node) || !forcedRootBlock) {\n return;\n }\n var rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n return;\n }\n var rng = selection.getRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var restoreSelection = hasFocus$1(editor);\n node = rootNode.firstChild;\n while (node) {\n if (isValidTarget(blockElements, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n rootBlockNode = dom.create(forcedRootBlock, getForcedRootBlockAttrs(editor));\n node.parentNode.insertBefore(rootBlockNode, node);\n wrapped = true;\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (wrapped && restoreSelection) {\n rng.setStart(startContainer, startOffset);\n rng.setEnd(endContainer, endOffset);\n selection.setRng(rng);\n editor.nodeChanged();\n }\n };\n var setup$9 = function (editor) {\n if (getForcedRootBlock(editor)) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\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\n var isText$8 = isText$1;\n var startsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[0] === ZWSP;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[node.data.length - 1] === ZWSP;\n };\n var createZwsp = function (node) {\n return node.ownerDocument.createTextNode(ZWSP);\n };\n var insertBefore$1 = function (node) {\n if (isText$8(node.previousSibling)) {\n if (endsWithCaretContainer$1(node.previousSibling)) {\n return node.previousSibling;\n } else {\n node.previousSibling.appendData(ZWSP);\n return node.previousSibling;\n }\n } else if (isText$8(node)) {\n if (startsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.insertData(0, ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n node.parentNode.insertBefore(newNode, node);\n return newNode;\n }\n };\n var insertAfter$1 = function (node) {\n if (isText$8(node.nextSibling)) {\n if (startsWithCaretContainer$1(node.nextSibling)) {\n return node.nextSibling;\n } else {\n node.nextSibling.insertData(0, ZWSP);\n return node.nextSibling;\n }\n } else if (isText$8(node)) {\n if (endsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.appendData(ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n if (node.nextSibling) {\n node.parentNode.insertBefore(newNode, node.nextSibling);\n } else {\n node.parentNode.appendChild(newNode);\n }\n return newNode;\n }\n };\n var insertInline$1 = function (before, node) {\n return before ? insertBefore$1(node) : insertAfter$1(node);\n };\n var insertInlineBefore = curry(insertInline$1, true);\n var insertInlineAfter = curry(insertInline$1, false);\n\n var insertInlinePos = function (pos, before) {\n if (isText$1(pos.container())) {\n return insertInline$1(before, pos.container());\n } else {\n return insertInline$1(before, pos.getNode());\n }\n };\n var isPosCaretContainer = function (pos, caret) {\n var caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n var renderCaret = function (caret, location) {\n return location.fold(function (element) {\n remove$5(caret.get());\n var text = insertInlineBefore(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, text.length - 1));\n }, function (element) {\n return firstPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n remove$5(caret.get());\n var text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition$1(text, 1);\n } else {\n return CaretPosition$1(caret.get(), 1);\n }\n });\n }, function (element) {\n return lastPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n remove$5(caret.get());\n var text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition$1(text, text.length - 1);\n } else {\n return CaretPosition$1(caret.get(), caret.get().length - 1);\n }\n });\n }, function (element) {\n remove$5(caret.get());\n var text = insertInlineAfter(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, 1));\n });\n };\n\n var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n var hasStrongRtl = function (text) {\n return strongRtl.test(text);\n };\n\n var isInlineTarget = function (editor, elm) {\n return is$1(Element.fromDom(elm), 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 (isText$1(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 (isText$1(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\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\n var Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n var rescope = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var before$4 = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeForwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.before(inline);\n });\n }, 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 findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n };\n var start = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var prevPos = prevPosition(inline, nPos);\n return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();\n });\n };\n var end = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var nextPos = nextPosition(inline, nPos);\n return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();\n });\n };\n var after$3 = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeBackwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.after(inline);\n });\n }, Option.none);\n };\n var isValidLocation = function (location) {\n return isRtl$1(getElement(location)) === false;\n };\n var readLocation = function (isInlineTarget, rootNode, pos) {\n var location = evaluateUntil([\n before$4,\n start,\n end,\n after$3\n ], [\n isInlineTarget,\n rootNode,\n pos\n ]);\n return location.filter(isValidLocation);\n };\n var getElement = function (location) {\n return location.fold(identity, identity, identity, identity);\n };\n var getName = function (location) {\n return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n };\n var outside = function (location) {\n return location.fold(Location.before, Location.before, Location.after, Location.after);\n };\n var inside = function (location) {\n return location.fold(Location.start, Location.start, Location.end, Location.end);\n };\n var isEq$5 = function (location1, location2) {\n return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n };\n var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n return lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n return Location.after(forward ? fromInline : toInline);\n } else {\n return location;\n }\n }).getOr(location);\n };\n var skipNoMovement = function (fromLocation, toLocation) {\n return fromLocation.fold(constant(true), function (fromLocation) {\n return !isEq$5(fromLocation, toLocation);\n });\n };\n var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n var from = normalizePosition(forward, pos);\n var to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n var location = to.fold(function () {\n return fromLocation.map(outside);\n }, function (to) {\n return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n });\n return location.filter(isValidLocation);\n };\n var findLocationSimple = function (forward, location) {\n if (forward) {\n return location.fold(compose(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 = normalizePosition(forward, pos);\n var fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n });\n };\n var prevLocation = curry(findLocation, false);\n var nextLocation = curry(findLocation, true);\n\n var setCaretPosition = function (editor, pos) {\n var rng = editor.dom.createRng();\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n editor.selection.setRng(rng);\n };\n var setSelected = function (state, elm) {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n var renderCaretLocation = function (editor, caret, location) {\n return renderCaret(caret, location).map(function (pos) {\n setCaretPosition(editor, pos);\n return location;\n });\n };\n var findLocation$1 = function (editor, caret, forward) {\n var rootNode = editor.getBody();\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var location = findLocation(forward, isInlineTarget$1, rootNode, from);\n return location.bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n };\n var toggleInlines = function (isInlineTarget, dom, elms) {\n var inlineBoundaries = map(descendants$1(Element.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), function (e) {\n return e.dom();\n });\n var selectedInlines = filter(inlineBoundaries, isInlineTarget);\n var targetInlines = filter(elms, isInlineTarget);\n each(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n var safeRemoveCaretContainer = function (editor, caret) {\n if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (CaretPosition$1.isTextPosition(pos) && isAtZwsp(pos) === false) {\n setCaretPosition(editor, removeAndReposition(caret.get(), pos));\n caret.set(null);\n }\n }\n };\n var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n if (editor.selection.isCollapsed()) {\n var inlines = filter(elms, isInlineTarget);\n each(inlines, function (_inline) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n });\n }\n };\n var move = function (editor, caret, forward) {\n return function () {\n return isInlineBoundariesEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\n };\n };\n var moveWord = function (forward, editor, _caret) {\n return function () {\n return isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n };\n };\n var setupSelectedState = function (editor) {\n var caret = Cell(null);\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.on('NodeChange', function (e) {\n if (isInlineBoundariesEnabled(editor) && !(Env.browser.isIE() && e.initial)) {\n toggleInlines(isInlineTarget$1, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents);\n }\n });\n return caret;\n };\n var moveNextWord = curry(moveWord, true);\n var movePrevWord = curry(moveWord, false);\n\n var BreakType;\n (function (BreakType) {\n BreakType[BreakType['Br'] = 0] = 'Br';\n BreakType[BreakType['Block'] = 1] = 'Block';\n BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n BreakType[BreakType['Eol'] = 3] = 'Eol';\n }(BreakType || (BreakType = {})));\n var flip = function (direction, positions) {\n return direction === HDirection.Backwards ? reverse(positions) : positions;\n };\n var walk$3 = function (direction, caretWalker, pos) {\n return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n };\n var getBreakType = function (scope, direction, currentPos, nextPos) {\n if (isBr(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n var getPositionsUntil = function (predicate, direction, scope, start) {\n var caretWalker = CaretWalker(scope);\n var currentPos = start, nextPos;\n var positions = [];\n while (currentPos) {\n nextPos = walk$3(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (isBr(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: 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 firstPositionIn(scope).map(function (pos) {\n return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n }).getOr([]);\n };\n var getLastLinePositions = function (scope) {\n return lastPositionIn(scope).map(function (pos) {\n return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n }).getOr([]);\n };\n\n var getNodeClientRects = function (node) {\n var toArrayWithNode = function (clientRects) {\n return map(clientRects, function (clientRect) {\n clientRect = clone$2(clientRect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (isElement$1(node)) {\n return toArrayWithNode(node.getClientRects());\n }\n if (isText$1(node)) {\n var rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n }\n };\n var getClientRects = function (nodes) {\n return bind(nodes, getNodeClientRects);\n };\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n var findUntil$1 = function (direction, root, predicateFn, node) {\n while (node = findNode(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n var line = 0;\n var result = [];\n var add = function (node) {\n var i, clientRect, clientRects;\n clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (i = 0; i < clientRects.length; i++) {\n clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, last$1(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n };\n var targetClientRect = last$1(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n var node = caretPosition.getNode();\n add(node);\n findUntil$1(direction, root, add, node);\n return result;\n };\n var aboveLineNumber = function (lineNumber, clientRect) {\n return clientRect.line > lineNumber;\n };\n var isLineNumber = function (lineNumber, clientRect) {\n return clientRect.line === lineNumber;\n };\n var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow);\n var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove);\n var positionsUntil = function (direction, root, predicateFn, node) {\n var caretWalker = CaretWalker(root);\n var walkFn, isBelowFn, isAboveFn, caretPosition;\n var result = [];\n var line = 0, clientRect;\n var getClientRect = function (caretPosition) {\n if (direction === 1) {\n return last$1(caretPosition.getClientRects());\n }\n return last$1(caretPosition.getClientRects());\n };\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow;\n isAboveFn = isAbove;\n caretPosition = CaretPosition$1.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove;\n isAboveFn = isBelow;\n caretPosition = CaretPosition$1.before(node);\n }\n var targetClientRect = getClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n clientRect = getClientRect(caretPosition);\n if (isAboveFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(clientRect, last$1(result))) {\n line++;\n }\n clientRect = clone$2(clientRect);\n clientRect.position = caretPosition;\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return result;\n }\n result.push(clientRect);\n } while (caretPosition = walkFn(caretPosition));\n return result;\n };\n var isAboveLine = function (lineNumber) {\n return function (clientRect) {\n return aboveLineNumber(lineNumber, clientRect);\n };\n };\n var isLine = function (lineNumber) {\n return function (clientRect) {\n return isLineNumber(lineNumber, clientRect);\n };\n };\n\n var isContentEditableFalse$7 = isContentEditableFalse;\n var findNode$1 = findNode;\n var distanceToRectLeft = function (clientRect, clientX) {\n return Math.abs(clientRect.left - clientX);\n };\n var distanceToRectRight = function (clientRect, clientX) {\n return Math.abs(clientRect.right - clientX);\n };\n var isInsideX = function (clientX, clientRect) {\n return clientX >= clientRect.left && clientX <= clientRect.right;\n };\n var isInsideY = function (clientY, clientRect) {\n return clientY >= clientRect.top && clientY <= clientRect.bottom;\n };\n var findClosestClientRect = function (clientRects, clientX) {\n return reduce(clientRects, function (oldClientRect, clientRect) {\n var oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n var newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n if (isInsideX(clientX, clientRect)) {\n return clientRect;\n }\n if (isInsideX(clientX, oldClientRect)) {\n return oldClientRect;\n }\n if (newDistance === oldDistance && isContentEditableFalse$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, startNode, includeChildren) {\n var node = findNode$1(startNode, direction, isEditableCaretCandidate, root, !includeChildren);\n do {\n if (!node || predicateFn(node)) {\n return;\n }\n } while (node = findNode$1(node, direction, isEditableCaretCandidate, root));\n };\n var findLineNodeRects = function (root, targetNodeRect, includeChildren) {\n if (includeChildren === void 0) {\n includeChildren = true;\n }\n var clientRects = [];\n var collect = function (checkPosFn, node) {\n var lineRects = filter(getClientRects([node]), function (clientRect) {\n return !checkPosFn(clientRect, targetNodeRect);\n });\n clientRects = clientRects.concat(lineRects);\n return lineRects.length === 0;\n };\n clientRects.push(targetNodeRect);\n walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node, includeChildren);\n walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node, includeChildren);\n return clientRects;\n };\n var getFakeCaretTargets = function (root) {\n return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);\n };\n var caretInfo = function (clientRect, clientX) {\n return {\n node: clientRect.node,\n before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n };\n };\n var closestFakeCaret = function (root, clientX, clientY) {\n var fakeTargetNodeRects = getClientRects(getFakeCaretTargets(root));\n var targetNodeRects = filter(fakeTargetNodeRects, curry(isInsideY, clientY));\n var closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\n if (closestNodeRect) {\n var includeChildren = !isTable(closestNodeRect.node);\n closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect, includeChildren), clientX);\n if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n return caretInfo(closestNodeRect, clientX);\n }\n }\n return null;\n };\n\n var isContentEditableTrue$3 = isContentEditableTrue;\n var isContentEditableFalse$8 = 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 isContentEditableFalse$9 = 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 = 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 closestNextLineRect, dist1, dist2, contentEditableFalseNode;\n contentEditableFalseNode = getSelectedNode$1(range);\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n var nextLinePositions = filter(linePositions, isLine(1));\n var caretClientRect = last$1(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 var 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 = last$1(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(getForcedRootBlock(editor));\n if (!Env.ie || Env.ie >= 11) {\n textBlock.innerHTML = '<br data-mce-bogus=\"1\">';\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 && hasForcedRootBlock(editor)) {\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$2(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n };\n var findClosestCorner = function (corners, x, y) {\n return foldl(corners, function (acc, newCorner) {\n return acc.fold(function () {\n return 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$1 = 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$1, getBottomValue, isAbove$1);\n var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1);\n var findClosestPositionInAboveCell = function (table, pos) {\n return head(pos.getClientRects()).bind(function (rect) {\n return getClosestCellAbove(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n });\n };\n var findClosestPositionInBelowCell = function (table, pos) {\n return last(pos.getClientRects()).bind(function (rect) {\n return getClosestCellBelow(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n });\n };\n\n var moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n 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) || !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 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 isElement$1(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();\n };\n var renderBlock = function (down, editor, table, pos) {\n var forcedRootBlock = getForcedRootBlock(editor);\n if (forcedRootBlock) {\n editor.undoManager.transact(function () {\n var element = Element.fromTag(forcedRootBlock);\n setAll(element, 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 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$2, 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 = getForcedRootBlock(editor);\n var rootBlockAttrs = getForcedRootBlockAttrs(editor);\n return getClosestTargetBlock(pos, root).exists(function () {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n var moveV$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 return function () {\n return f.apply(null, x);\n };\n };\n var execute = function (patterns, evt) {\n return find(match$1(patterns, evt), function (pattern) {\n return pattern.action();\n });\n };\n\n var executeKeydownOverride = function (editor, caret, evt) {\n var os = detect$3().os;\n 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: move(editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: move(editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: moveNextWord(editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: 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$a = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride(editor, caret, evt);\n }\n });\n };\n\n var isBeforeRoot = function (rootNode) {\n return function (elm) {\n return eq$2(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(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = normalizePosition(true, firstPos);\n var normalizedLastPos = normalizePosition(false, lastPos);\n var normalizedFromPos = normalizePosition(false, fromPos);\n if (forward) {\n return nextPosition(elm, normalizedFromPos).map(function (nextPos) {\n return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n }).getOr(false);\n } else {\n return prevPosition(elm, normalizedFromPos).map(function (prevPos) {\n return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n }).getOr(false);\n }\n }).getOr(true);\n };\n\n var blockPosition = function (block, position) {\n return {\n block: block,\n position: position\n };\n };\n var blockBoundary = function (from, to) {\n return {\n from: from,\n to: to\n };\n };\n var getBlockPosition = function (rootNode, pos) {\n var rootElm = Element.fromDom(rootNode);\n var containerElm = Element.fromDom(pos.container());\n return getParentBlock$1(rootElm, containerElm).map(function (block) {\n return blockPosition(block, pos);\n });\n };\n var isDifferentBlocks = function (blockBoundary) {\n return eq$2(blockBoundary.from.block, blockBoundary.to.block) === false;\n };\n var hasSameParent = function (blockBoundary) {\n return parent(blockBoundary.from.block).bind(function (parent1) {\n return parent(blockBoundary.to.block).filter(function (parent2) {\n return eq$2(parent1, parent2);\n });\n }).isSome();\n };\n var isEditable = function (blockBoundary) {\n return isContentEditableFalse(blockBoundary.from.block.dom()) === false && isContentEditableFalse(blockBoundary.to.block.dom()) === false;\n };\n var skipLastBr = function (rootNode, forward, blockPosition) {\n if (isBr(blockPosition.position.getNode()) && isEmpty$1(blockPosition.block) === false) {\n return positionIn(false, blockPosition.block.dom()).bind(function (lastPositionInBlock) {\n if (lastPositionInBlock.isEqual(blockPosition.position)) {\n return fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n return getBlockPosition(rootNode, to);\n });\n } else {\n return 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 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\n var getChildrenUntilBlockBoundary = function (block) {\n var children$1 = children(block);\n return findIndex(children$1, isBlock).fold(function () {\n return children$1;\n }, function (index) {\n return children$1.slice(0, index);\n });\n };\n var extractChildren = function (block) {\n var children = getChildrenUntilBlockBoundary(block);\n each(children, remove);\n return children;\n };\n var removeEmptyRoot = function (rootNode, block) {\n var parents = parentsAndSelf(block, rootNode);\n return find(parents.reverse(), function (element) {\n return isEmpty$1(element);\n }).each(remove);\n };\n var isEmptyBefore = function (el) {\n return filter(prevSiblings(el), function (el) {\n return !isEmpty$1(el);\n }).length === 0;\n };\n var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n if (isEmpty$1(toBlock)) {\n fillWithPaddingBr(toBlock);\n return firstPositionIn(toBlock.dom());\n }\n if (isEmptyBefore(insertionPoint) && isEmpty$1(fromBlock)) {\n before(insertionPoint, Element.fromTag('br'));\n }\n var position = 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 (isEmpty$1(toBlock)) {\n remove(toBlock);\n if (isEmpty$1(fromBlock)) {\n fillWithPaddingBr(fromBlock);\n }\n return firstPositionIn(fromBlock.dom());\n }\n var position = lastPositionIn(toBlock.dom());\n each(extractChildren(fromBlock), function (child) {\n append(toBlock, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var findInsertionPoint = function (toBlock, block) {\n var parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n return Option.from(parentsAndSelf$1[parentsAndSelf$1.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 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\n var backspaceDelete$1 = function (editor, forward) {\n var rootNode = Element.fromDom(editor.getBody());\n var position = read$3(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {\n return mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block);\n });\n position.each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n return position.isSome();\n };\n\n var deleteRangeMergeBlocks = function (rootNode, selection) {\n var rng = selection.getRng();\n return lift2(getParentBlock$1(rootNode, Element.fromDom(rng.startContainer)), getParentBlock$1(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {\n if (eq$2(block1, block2) === false) {\n rng.deleteContents();\n mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n selection.setRng(pos.toRange());\n });\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var isRawNodeInTable = function (root, rawNode) {\n var node = Element.fromDom(rawNode);\n var isRoot = curry(eq$2, 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 = prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();\n var noNext = 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$1 = 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$2 = function (editor, _forward) {\n return editor.selection.isCollapsed() ? false : deleteRange$1(editor);\n };\n\n var isBr$5 = function (pos) {\n return getElementFromPosition(pos).exists(isBr$1);\n };\n var findBr = function (forward, root, pos) {\n var parentBlocks = filter(parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n var scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom(), pos).filter(isBr$5);\n };\n var isBeforeBr = function (root, pos) {\n return getElementFromPosition(pos).exists(isBr$1) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr$1) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\n\n var 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 isElement$1(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n var inSameBlock = function (elm) {\n return isInline(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 getParentBlock$1(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) {\n return isEmpty$1(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 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 && isContentEditableFalse(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward === false && isContentEditableFalse(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return 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 && isContentEditableFalse(elm.nextSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (forward === false && 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(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(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 (isContentEditableFalse(selectedNode)) {\n var hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse);\n return hasCefAncestor.fold(function () {\n deleteOffscreenSelection(Element.fromDom(editor.getBody()));\n deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\n 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 (isContentEditableTrue(node) || 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 (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$3 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n\n var trimEmptyTextNode$1 = function (dom, node) {\n if (isText$1(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n 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 (!isText$1(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 = 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$4 = function (editor, forward) {\n return deleteCefBoundaryText(editor, forward);\n };\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(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = normalizePosition(true, firstPos);\n var normalizedLastPos = normalizePosition(false, lastPos);\n return 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 renderCaret(caret, location).map(function (pos) {\n 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$1 = curry(isInlineTarget, editor);\n editor.undoManager.ignore(function () {\n editor.selection.setRng(rangeFromPositions(from, to));\n editor.execCommand('Delete');\n readLocation(isInlineTarget$1, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(inside).map(setCaretLocation(editor, caret));\n });\n editor.nodeChanged();\n };\n var rescope$1 = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n var rootNode = rescope$1(editor.getBody(), from.container());\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n return fromLocation.bind(function (location) {\n if (forward) {\n return location.fold(constant(Option.some(inside(location))), Option.none, constant(Option.some(outside(location))), Option.none);\n } else {\n return location.fold(Option.none, constant(Option.some(outside(location))), Option.none, constant(Option.some(inside(location))));\n }\n }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n var toPosition = navigate(forward, rootNode, from);\n var toLocation = toPosition.bind(function (pos) {\n return readLocation(isInlineTarget$1, rootNode, pos);\n });\n if (fromLocation.isSome() && toLocation.isSome()) {\n return findRootInline(isInlineTarget$1, rootNode, from).map(function (elm) {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n 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$5 = function (editor, caret, forward) {\n if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return false;\n };\n\n var getParentInlines = function (rootElm, startElm) {\n var parents = parentsAndSelf(startElm, rootElm);\n return findIndex(parents, isBlock).fold(constant(parents), function (index) {\n return parents.slice(0, index);\n });\n };\n var hasOnlyOneChild$1 = function (elm) {\n return children(elm).length === 1;\n };\n var deleteLastPosition = function (forward, editor, target, parentInlines) {\n var isFormatElement$1 = curry(isFormatElement, editor);\n var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) {\n return elm.dom();\n });\n if (formatNodes.length === 0) {\n deleteElement(editor, forward, target);\n } else {\n var pos = replaceWithCaretFormat(target.dom(), formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n var deleteCaret$1 = 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$1);\n return last(parentInlines).map(function (target) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {\n deleteLastPosition(forward, editor, target, parentInlines);\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var backspaceDelete$6 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n };\n\n var deleteCaret$2 = function (editor, forward) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) {\n return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos);\n }).bind(function (pos) {\n return 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\n var isEditable$1 = function (target) {\n return closest(target, function (elm) {\n return isContentEditableTrue(elm.dom()) || isContentEditableFalse(elm.dom());\n }).exists(function (elm) {\n return isContentEditableTrue(elm.dom());\n });\n };\n var parseIndentValue = function (value) {\n var number = parseInt(value, 10);\n return isNaN(number) ? 0 : number;\n };\n var getIndentStyleName = function (useMargin, element) {\n var indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n var suffix = get$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(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 = getIndentation(editor);\n var indentUnit = /[a-z%]+$/i.exec(indentation)[0];\n var indentValue = parseInt(indentation, 10);\n var useMargin = shouldIndentUseMargin(editor);\n var forcedRootBlock = getForcedRootBlock(editor);\n if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n if (forcedRootBlock === '' && !dom.getParent(selection.getNode(), dom.isBlock)) {\n formatter.apply('div');\n }\n }\n each(getBlocksToIndent(editor), function (block) {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());\n });\n };\n\n var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock = function (root, pos) {\n return find(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\n var executeKeydownOverride$1 = function (editor, caret, evt) {\n execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$8, editor, false)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$3, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$3, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$4, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$4, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$5, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$5, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$7, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$7, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$2, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$2, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$1, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$1, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$6, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$6, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var executeKeyupOverride = function (editor, evt) {\n execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: action(paddEmptyElement, editor)\n }\n ], evt);\n };\n var setup$b = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$1(editor, caret, evt);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeyupOverride(editor, evt);\n }\n });\n };\n\n var firstNonWhiteSpaceNodeSibling = function (node) {\n while (node) {\n if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n };\n var moveToCaretPosition = function (editor, root) {\n var node, lastNode = root;\n var dom = editor.dom;\n var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild);\n }\n }\n var rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n var walker = new TreeWalker(root, root);\n while (node = walker.current()) {\n if (isText$1(node)) {\n rng.setStart(node, 0);\n rng.setEnd(node, 0);\n break;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n rng.setStartBefore(node);\n rng.setEndBefore(node);\n break;\n }\n lastNode = node;\n node = walker.next();\n }\n if (!node) {\n rng.setStart(lastNode, 0);\n rng.setEnd(lastNode, 0);\n }\n } else {\n if (isBr(root)) {\n if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n rng.setStartBefore(root);\n rng.setEndBefore(root);\n } else {\n rng.setStartAfter(root);\n rng.setEndAfter(root);\n }\n } else {\n rng.setStart(root, 0);\n rng.setEnd(root, 0);\n }\n }\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n };\n var getEditableRoot = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var getParentBlock$2 = function (editor) {\n return 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\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 (isElement$1(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n var insert = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n if (containerBlock === editor.getBody()) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent$1(containerBlock, 'LI')) {\n 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 moveToCaretPosition(editor, newBlock);\n };\n\n var trimZwsp = function (fragment) {\n each(descendants(Element.fromDom(fragment), isText), function (text) {\n var rawNode = text.dom();\n rawNode.nodeValue = trim$3(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 = '<br data-mce-bogus=\"1\">';\n };\n var containerAndSiblingName = function (container, nodeName) {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n var canSplitBlock = function (dom, node) {\n return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n };\n var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n var node = block;\n var firstChilds = [];\n var i;\n if (!node) {\n return;\n }\n while (node = node.firstChild) {\n if (dom.isBlock(node)) {\n return;\n }\n if (isElement$1(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n firstChilds.push(node);\n }\n }\n i = firstChilds.length;\n while (i--) {\n node = firstChilds[i];\n if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n dom.remove(node);\n } else {\n if (isEmptyAnchor(dom, node)) {\n dom.remove(node);\n }\n }\n }\n };\n var normalizeZwspOffset = function (start, container, offset) {\n if (isText$1(container) === false) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === ZWSP ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP ? container.data.length : offset;\n }\n };\n var includeZwspInRange = function (rng) {\n var newRng = rng.cloneRange();\n newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n return newRng;\n };\n var trimLeadingLineBreaks = function (node) {\n do {\n if (isText$1(node)) {\n node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n }\n node = node.firstChild;\n } while (node);\n };\n var getEditableRoot$1 = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n 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 = getForcedRootBlock(editor);\n if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n var forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n var newBlock, parentBlock, startNode, node, next, rootBlockName;\n var blockName = newBlockName || 'P';\n var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container);\n parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (parentBlock === editor.getBody() || isTableCell$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 block.normalize();\n var lastChild = block.lastChild;\n if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n var insert$1 = function (editor, evt) {\n var tmpRng, container, offset, parentBlock;\n var newBlock, fragment, containerBlock, parentBlockName, newBlockName, isAfterLastNodeInContainer;\n var dom = editor.dom;\n var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n var rng = editor.selection.getRng();\n var createNewBlock = function (name) {\n var node = container, block, clonedNode, caretNode;\n var textInlineElements = schema.getTextInlineElements();\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName);\n } else {\n block = parentBlock.cloneNode(false);\n }\n caretNode = block;\n if (shouldKeepStyles(editor) === false) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || isBookmarkNode$1(node)) {\n continue;\n }\n clonedNode = node.cloneNode(false);\n dom.setAttrib(clonedNode, 'id', '');\n if (block.hasChildNodes()) {\n clonedNode.appendChild(block.firstChild);\n block.appendChild(clonedNode);\n } else {\n caretNode = clonedNode;\n block.appendChild(clonedNode);\n }\n }\n } while ((node = node.parentNode) && node !== editableRoot);\n }\n setForcedBlockAttrs(editor, block);\n emptyBlock(caretNode);\n return block;\n };\n var isCaretAtStartOrEndOfBlock = function (start) {\n var node, name;\n var normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (isText$1(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n return false;\n }\n if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && isElement$1(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n var walker = new TreeWalker(container, parentBlock);\n if (isText$1(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.nodeValue.length) {\n walker.next();\n }\n }\n while (node = walker.current()) {\n if (isElement$1(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (isText$1(node) && !isWhitespaceText(node.nodeValue)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n var insertNewBlockAfter = function () {\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n newBlock = createNewBlock(newBlockName);\n } else {\n newBlock = createNewBlock();\n }\n if (shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n newBlock = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(newBlock, parentBlock);\n }\n moveToCaretPosition(editor, newBlock);\n };\n normalize$2(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n container = rng.startContainer;\n offset = rng.startOffset;\n newBlockName = getForcedRootBlock(editor);\n var shiftKey = !!(evt && evt.shiftKey);\n var ctrlKey = !!(evt && evt.ctrlKey);\n if (isElement$1(container) && container.hasChildNodes()) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$1(container)) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var editableRoot = getEditableRoot$1(dom, container);\n if (!editableRoot) {\n return;\n }\n if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n parentBlock = dom.getParent(container, dom.isBlock);\n containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !ctrlKey) {\n parentBlock = containerBlock;\n containerBlock = containerBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n if (dom.isEmpty(parentBlock)) {\n insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (newBlockName && parentBlock === editor.getBody()) {\n return;\n }\n newBlockName = newBlockName || 'P';\n if (isCaretContainerBlock(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock()) {\n insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true)) {\n newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n } else {\n tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n fragment = tmpRng.extractContents();\n trimZwsp(fragment);\n trimLeadingLineBreaks(fragment);\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, parentBlock);\n trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n addBrToBlockIfNeeded(dom, parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n newBlock.normalize();\n if (dom.isEmpty(newBlock)) {\n dom.remove(newBlock);\n insertNewBlockAfter();\n } else {\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.fire('NewBlock', { newBlock: newBlock });\n };\n\n var hasRightSideContent = function (schema, container, parentBlock) {\n var walker = new 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', {}, '&nbsp;');\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 normalize$2(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 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 nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {\n return isBr(pos.getNode());\n }).getOr(false);\n }\n };\n var isAnchorLink = function (elm) {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n var isInsideAnchor = function (location) {\n return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));\n };\n var readInlineAnchorLocation = function (editor) {\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n };\n var insertBrOutsideAnchor = function (editor, location) {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n var insert$2 = function (editor, evt) {\n var anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n\n var matchesSelector = function (editor, selector) {\n return getParentBlock$2(editor).filter(function (parentBlock) {\n return selector.length > 0 && is$1(Element.fromDom(parentBlock), selector);\n }).isSome();\n };\n var shouldInsertBr = function (editor) {\n return matchesSelector(editor, getBrNewLineSelector(editor));\n };\n var shouldBlockNewLine = function (editor) {\n return matchesSelector(editor, getNoNewLineSelector(editor));\n };\n\n var newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n var shouldBlockNewLine$1 = function (editor, _shiftKey) {\n return shouldBlockNewLine(editor);\n };\n var isBrMode = function (requiredState) {\n return function (editor, _shiftKey) {\n var brMode = getForcedRootBlock(editor) === '';\n return brMode === requiredState;\n };\n };\n var inListBlock = function (requiredState) {\n return function (editor, _shiftKey) {\n return isListItemParentBlock(editor) === requiredState;\n };\n };\n var inBlock = function (blockName, requiredState) {\n return function (editor, _shiftKey) {\n var state = getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n };\n var inPreBlock = function (requiredState) {\n return inBlock('pre', requiredState);\n };\n var inSummaryBlock = function () {\n return inBlock('summary', true);\n };\n var shouldPutBrInPre$1 = function (requiredState) {\n return function (editor, _shiftKey) {\n return shouldPutBrInPre(editor) === requiredState;\n };\n };\n var inBrContext = function (editor, _shiftKey) {\n return shouldInsertBr(editor);\n };\n var hasShiftKey = function (_editor, shiftKey) {\n return shiftKey;\n };\n var canInsertIntoEditableRoot = function (editor) {\n var forcedRootBlock = getForcedRootBlock(editor);\n var rootEditable = getEditableRoot(editor.dom, editor.selection.getStart());\n return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n };\n var match$2 = function (predicates, action) {\n return function (editor, shiftKey) {\n var isMatch = foldl(predicates, function (res, p) {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Option.some(action) : Option.none();\n };\n };\n var getAction$1 = function (editor, evt) {\n return evaluateUntil([\n match$2([shouldBlockNewLine$1], newLineAction.none()),\n match$2([inSummaryBlock()], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false)\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true),\n hasShiftKey\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true)\n ], newLineAction.br()),\n match$2([\n inListBlock(true),\n hasShiftKey\n ], newLineAction.br()),\n match$2([inListBlock(true)], newLineAction.block()),\n match$2([\n isBrMode(true),\n hasShiftKey,\n canInsertIntoEditableRoot\n ], newLineAction.block()),\n match$2([isBrMode(true)], newLineAction.br()),\n match$2([inBrContext], newLineAction.br()),\n match$2([\n isBrMode(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([canInsertIntoEditableRoot], newLineAction.block())\n ], [\n editor,\n !!(evt && evt.shiftKey)\n ]).getOr(newLineAction.none());\n };\n\n var insert$3 = function (editor, evt) {\n getAction$1(editor, evt).fold(function () {\n insert$2(editor, evt);\n }, function () {\n insert$1(editor, evt);\n }, noop);\n };\n\n var handleEnterKeyEvent = function (editor, event) {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevelIgnoreLocks(editor.undoManager);\n editor.undoManager.transact(function () {\n if (editor.selection.isCollapsed() === false) {\n editor.execCommand('Delete');\n }\n insert$3(editor, event);\n });\n };\n var setup$c = function (editor) {\n editor.on('keydown', function (event) {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n\n var insertTextAtPosition = function (text, pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (isText$1(container)) {\n container.insertData(offset, text);\n return 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(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) || prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace);\n }\n };\n var hasSpaceAfter = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace);\n }\n };\n var isPreValue = function (value) {\n return contains([\n 'pre',\n 'pre-wrap'\n ], value);\n };\n var isInPre = function (pos) {\n return getElementFromPosition(pos).bind(function (elm) {\n return closest(elm, isElement);\n }).exists(function (elm) {\n return isPreValue(get$4(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return prevPosition(root.dom(), pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return nextPosition(root.dom(), pos).isNone();\n };\n var isAtLineBoundary = function (root, pos) {\n return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos);\n };\n var needsToHaveNbsp = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbspLeft = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\n }\n };\n var leanRight = function (pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (isText$1(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n var needsToBeNbspRight = function (root, pos) {\n 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 isText$1(container) && contains$1(container.data, nbsp);\n };\n var normalizeNbspMiddle = function (text) {\n var chars = text.split('');\n return map(chars, function (chr, i) {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(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 prevPosition(root.dom(), CaretPosition$1.before(element));\n }, function (element) {\n return firstPositionIn(element);\n }, function (element) {\n return lastPositionIn(element);\n }, function (element) {\n return nextPosition(root.dom(), CaretPosition$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$1 = curry(isInlineTarget, editor);\n var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));\n } else {\n return false;\n }\n };\n\n var executeKeydownOverride$2 = function (editor, evt) {\n execute([{\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$d = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, evt);\n }\n });\n };\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$e = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n\n var browser$4 = detect$3().browser;\n var setupIeInput = function (editor) {\n var keypressThrotter = first(function () {\n if (!editor.composing) {\n normalizeNbspsInEditor(editor);\n }\n }, 0);\n if (browser$4.isIE()) {\n editor.on('keypress', function (_e) {\n keypressThrotter.throttle();\n });\n editor.on('remove', function (_e) {\n keypressThrotter.cancel();\n });\n }\n };\n var setup$f = 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 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$g = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$3(editor, evt);\n }\n });\n };\n\n var registerKeyboardOverrides = function (editor) {\n var caret = setupSelectedState(editor);\n setup$e(editor);\n setup$a(editor, caret);\n setup$b(editor, caret);\n setup$c(editor);\n setup$d(editor);\n setup$f(editor);\n setup$g(editor);\n };\n var setup$h = function (editor) {\n if (!isRtc(editor)) {\n registerKeyboardOverrides(editor);\n }\n };\n\n var NodeChange = function () {\n function NodeChange(editor) {\n this.lastPath = [];\n this.editor = editor;\n var lastRng;\n var self = this;\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange click mouseup keyup focus', function (e) {\n var nativeRng = editor.selection.getRng();\n var fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !isEq$4(fakeRng, lastRng)) {\n editor.fire('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', function () {\n editor.fire('SelectionChange');\n });\n editor.on('SelectionChange', function () {\n var startElm = editor.selection.getStart(true);\n if (!startElm || !Env.range && editor.selection.isCollapsed()) {\n return;\n }\n if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n editor.nodeChanged({ selectionChange: true });\n }\n });\n editor.on('mouseup', function (e) {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, function () {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n }\n NodeChange.prototype.nodeChanged = function (args) {\n var selection = this.editor.selection;\n var node, parents, root;\n if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n root = this.editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) {\n node = root;\n }\n parents = [];\n this.editor.dom.getParent(node, function (node) {\n if (node === root) {\n return true;\n }\n parents.push(node);\n });\n args = args || {};\n args.element = node;\n args.parents = parents;\n this.editor.fire('NodeChange', args);\n }\n };\n NodeChange.prototype.isSameElementPath = function (startElm) {\n var i;\n var currentPath = this.editor.$(startElm).parentsUntil(this.editor.getBody()).add(startElm);\n if (currentPath.length === this.lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== this.lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n this.lastPath = currentPath;\n return true;\n }\n }\n this.lastPath = currentPath;\n return false;\n };\n return NodeChange;\n }();\n\n var preventSummaryToggle = function (editor) {\n editor.on('click', function (e) {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n var filterDetails = function (editor) {\n editor.parser.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n details.attr('data-mce-open', details.attr('open'));\n details.attr('open', 'open');\n });\n });\n editor.serializer.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n var open = details.attr('data-mce-open');\n details.attr('open', isString(open) ? open : null);\n details.attr('data-mce-open', null);\n });\n });\n };\n var setup$i = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n var isTextBlockNode = function (node) {\n return isElement$1(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 firstPositionIn(container).each(function (pos) {\n return rng.setStart(pos.container(), pos.offset());\n });\n }\n }\n if (CaretPosition.isElementPosition(endPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n lastPositionIn(container).each(function (pos) {\n return rng.setEnd(pos.container(), pos.offset());\n });\n }\n }\n editor.selection.setRng(normalize$1(rng));\n };\n var setup$j = 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 clientRect = elm.getBoundingClientRect();\n var doc = elm.ownerDocument;\n var docElem = doc.documentElement;\n var win = doc.defaultView;\n return {\n top: clientRect.top + win.pageYOffset - docElem.clientTop,\n left: clientRect.left + win.pageXOffset - docElem.clientLeft\n };\n };\n var getBodyPosition = function (editor) {\n return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n };\n var getScrollPosition = function (editor) {\n var body = editor.getBody();\n return editor.inline ? {\n left: body.scrollLeft,\n top: body.scrollTop\n } : {\n left: 0,\n top: 0\n };\n };\n var getBodyScroll = function (editor) {\n var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n var inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n var iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n var getMousePosition = function (editor, event) {\n if (event.target.ownerDocument !== editor.getDoc()) {\n var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n var scrollPosition = getBodyScroll(editor);\n return {\n left: event.pageX - iframePosition.left + scrollPosition.left,\n top: event.pageY - iframePosition.top + scrollPosition.top\n };\n }\n return {\n left: event.pageX,\n top: event.pageY\n };\n };\n var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n return {\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n };\n };\n var calc = function (editor, event) {\n return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n };\n\n var isContentEditableFalse$a = isContentEditableFalse, isContentEditableTrue$4 = 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), 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, 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 = DOMUtils$1.DOM;\n var rootDocument = domGlobals.document;\n var dragStartHandler = start$1(state, editor);\n var dragHandler = move$1(state, editor);\n var dropHandler = drop(state, editor);\n var dragEndHandler = stop(state, editor);\n editor.on('mousedown', dragStartHandler);\n editor.on('mousemove', dragHandler);\n editor.on('mouseup', dropHandler);\n pageDom.bind(rootDocument, 'mousemove', dragHandler);\n pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n editor.on('remove', function () {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n };\n var blockIeDrop = function (editor) {\n editor.on('drop', function (e) {\n var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n if (isContentEditableFalse$a(realTarget) || isContentEditableFalse$a(editor.dom.getContentEditableParent(realTarget))) {\n e.preventDefault();\n }\n });\n };\n var blockUnsupportedFileDrop = function (editor) {\n var preventFileDrop = function (e) {\n if (!e.defaultPrevented) {\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && (contains(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) {\n e.preventDefault();\n }\n }\n };\n var preventFileDropIfUIElement = function (e) {\n if (isUIElement(editor, e.target)) {\n preventFileDrop(e);\n }\n };\n var setup = function () {\n var pageDom = DOMUtils$1.DOM;\n var dom = editor.dom;\n var doc = domGlobals.document;\n var editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n var eventNames = [\n 'drop',\n 'dragover'\n ];\n each(eventNames, function (name) {\n pageDom.bind(doc, name, preventFileDropIfUIElement);\n dom.bind(editorRoot, name, preventFileDrop);\n });\n editor.on('remove', function () {\n each(eventNames, function (name) {\n pageDom.unbind(doc, name, preventFileDropIfUIElement);\n dom.unbind(editorRoot, name, preventFileDrop);\n });\n });\n };\n editor.on('init', function () {\n Delay.setEditorTimeout(editor, setup, 0);\n });\n };\n var init = function (editor) {\n bindFakeDragEvents(editor);\n blockIeDrop(editor);\n if (shouldBlockUnsupportedDrop(editor)) {\n blockUnsupportedFileDrop(editor);\n }\n };\n\n var setup$k = 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\n var isContentEditableTrue$5 = isContentEditableTrue;\n var isContentEditableFalse$b = 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 hasFocus$1(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 = 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 && isXYInContentArea(editor, e.clientX, e.clientY)) {\n setRange(renderCaretAtRange(editor, range, false));\n }\n });\n editor.on('click', function (e) {\n var 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 targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n return;\n }\n var 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) && !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 fakeCaretInfo = closestFakeCaret(rootNode, e.clientX, e.clientY);\n if (fakeCaretInfo) {\n if (!hasBetterMouseTarget(e.target, fakeCaretInfo.node)) {\n e.preventDefault();\n var range = showCaret(1, fakeCaretInfo.node, fakeCaretInfo.before, false);\n editor.getBody().focus();\n setRange(range);\n }\n }\n }\n });\n editor.on('keypress', function (e) {\n if (VK.modifierPressed(e)) {\n return;\n }\n 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 init(editor);\n setup$k(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, startContainer, startOffset, 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 var endOffset = range.endOffset;\n if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$b(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (startContainer.nodeType !== 1) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n node = startContainer.childNodes[startOffset];\n }\n if (!isContentEditableFalse$b(node)) {\n return null;\n }\n targetClone = origTargetClone = node.cloneNode(true);\n var 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 = $('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n range = editor.dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('<p style=\"font-size: 0\" data-mce-bogus=\"all\">\\xA0</p>').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 var 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$2(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, 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, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n var root = dom.getRoot();\n parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.tagName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', null, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n var setGeckoEditingOptions = function () {\n var setOpts = function () {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!getObjectResizing(editor)) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!isReadOnly(editor)) {\n editor.on('BeforeExecCommand mousedown', setOpts);\n }\n };\n var addBrAfterLastLinks = function () {\n var fixLinks = function () {\n each(dom.select('a'), function (node) {\n var parentNode = node.parentNode;\n var root = dom.getRoot();\n if (parentNode.lastChild === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', function (e) {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n var setDefaultBlockType = function () {\n if (getForcedRootBlock(editor)) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n });\n }\n };\n var normalizeSelection = function () {\n editor.on('keyup focusin mouseup', function (e) {\n if (!VK.modifierPressed(e)) {\n selection.normalize();\n }\n }, true);\n };\n var showBrokenImageIcon = function () {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n var restoreFocusOnKeyDown = function () {\n if (!editor.inline) {\n editor.on('keydown', function () {\n if (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 = fromPoint$1(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 if (!isGecko || editor.removed) {\n return false;\n }\n var sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n inputMethodFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n return {\n refreshContentEditable: refreshContentEditable,\n isHidden: isHidden\n };\n };\n\n var DOM$4 = DOMUtils$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 getRootName = function (editor) {\n return editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n };\n var removeUndefined = function (obj) {\n return filter$1(obj, function (v) {\n return isUndefined(v) === false;\n });\n };\n var mkParserSettings = function (editor) {\n var settings = editor.settings;\n var blobCache = editor.editorUpload.blobCache;\n return removeUndefined({\n allow_conditional_comments: settings.allow_conditional_comments,\n allow_html_data_urls: settings.allow_html_data_urls,\n allow_html_in_named_anchor: settings.allow_html_in_named_anchor,\n allow_script_urls: settings.allow_script_urls,\n allow_unsafe_link_target: settings.allow_unsafe_link_target,\n convert_fonts_to_spans: settings.convert_fonts_to_spans,\n fix_list_elements: settings.fix_list_elements,\n font_size_legacy_values: settings.font_size_legacy_values,\n forced_root_block: settings.forced_root_block,\n forced_root_block_attrs: settings.forced_root_block_attrs,\n padd_empty_with_br: settings.padd_empty_with_br,\n preserve_cdata: settings.preserve_cdata,\n remove_trailing_brs: settings.remove_trailing_brs,\n inline_styles: settings.inline_styles,\n root_name: getRootName(editor),\n validate: true,\n blob_cache: blobCache,\n images_dataimg_filter: settings.images_dataimg_filter\n });\n };\n var mkSerializerSettings = function (editor) {\n var settings = editor.settings;\n return __assign(__assign({}, mkParserSettings(editor)), removeUndefined({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope,\n element_format: settings.element_format,\n entities: settings.entities,\n entity_encoding: settings.entity_encoding,\n indent: settings.indent,\n indent_after: settings.indent_after,\n indent_before: settings.indent_before,\n block_elements: settings.block_elements,\n boolean_attributes: settings.boolean_attributes,\n custom_elements: settings.custom_elements,\n extended_valid_elements: settings.extended_valid_elements,\n invalid_elements: settings.invalid_elements,\n invalid_styles: settings.invalid_styles,\n move_caret_before_on_enter_elements: settings.move_caret_before_on_enter_elements,\n non_empty_elements: settings.non_empty_elements,\n schema: settings.schema,\n self_closing_elements: settings.self_closing_elements,\n short_ended_elements: settings.short_ended_elements,\n special: settings.special,\n text_block_elements: settings.text_block_elements,\n text_inline_elements: settings.text_inline_elements,\n valid_children: settings.valid_children,\n valid_classes: settings.valid_classes,\n valid_elements: settings.valid_elements,\n valid_styles: settings.valid_styles,\n verify_html: settings.verify_html,\n whitespace_elements: settings.whitespace_elements\n }));\n };\n var createParser = function (editor) {\n var parser = DomParser(mkParserSettings(editor), editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n var i = nodes.length, node, value;\n var dom = editor.dom;\n var internalName = 'data-mce-' + name;\n while (i--) {\n node = nodes[i];\n value = node.attr(name);\n if (value && !node.attr(internalName)) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n if (editor.settings.preserve_cdata) {\n parser.addNodeFilter('#cdata', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + editor.dom.encode(node.value) + ']]';\n }\n });\n }\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n var i = nodes.length;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n var node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new Node('br', 1)).shortEnded = true;\n }\n }\n });\n return parser;\n };\n var autoFocus = function (editor) {\n if (editor.settings.auto_focus) {\n Delay.setEditorTimeout(editor, function () {\n var focusEditor;\n if (editor.settings.auto_focus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n }\n if (!focusEditor.destroyed) {\n focusEditor.focus();\n }\n }, 100);\n }\n };\n var moveSelectionToFirstCaretPosition = function (editor) {\n var root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n firstPositionIn(root).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable(node) ? firstPositionIn(node).getOr(pos) : pos;\n if (Env.browser.isIE()) {\n storeNative(editor, caretPos.toRange());\n } else {\n editor.selection.setRng(caretPos.toRange());\n }\n });\n }\n };\n var initEditor = function (editor) {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n fireInit(editor);\n editor.focus(true);\n moveSelectionToFirstCaretPosition(editor);\n editor.nodeChanged({ initial: true });\n editor.execCallback('init_instance_callback', editor);\n autoFocus(editor);\n };\n var getStyleSheetLoader = function (editor) {\n return editor.inline ? DOM$4.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var preInit = function (editor, rtcMode) {\n var settings = editor.settings, doc = editor.getDoc(), body = editor.getBody();\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$4.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n var directionality = getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\n }\n if (settings.protect) {\n editor.on('BeforeSetContent', function (e) {\n Tools.each(settings.protect, function (pattern) {\n e.content = e.content.replace(pattern, function (str) {\n return '<!--mce:protected ' + escape(str) + '-->';\n });\n });\n });\n }\n editor.on('SetContent', function () {\n editor.addVisual(editor.getBody());\n });\n if (rtcMode === false) {\n editor.load({\n initial: true,\n format: 'html'\n });\n }\n editor.startContent = editor.getContent({ format: 'raw' });\n editor.on('compositionstart compositionend', function (e) {\n editor.composing = e.type === 'compositionstart';\n });\n if (editor.contentStyles.length > 0) {\n var contentCssText_1 = '';\n Tools.each(editor.contentStyles, function (style) {\n contentCssText_1 += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText_1);\n }\n 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 = function (editor, skipWrite) {\n var settings = editor.settings;\n var targetElm = editor.getElement();\n var doc = editor.getDoc();\n if (!settings.inline) {\n editor.getElement().style.visibility = editor.orgVisibility;\n }\n if (!skipWrite && !editor.inline) {\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n }\n if (editor.inline) {\n DOM$4.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = domGlobals.document;\n editor.contentWindow = domGlobals.window;\n editor.bodyElement = targetElm;\n editor.contentAreaContainer = targetElm;\n }\n var body = editor.getBody();\n body.disabled = true;\n editor.readonly = !!settings.readonly;\n if (!editor.readonly) {\n if (editor.inline && DOM$4.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = editor.getParam('content_editable_state', true);\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(settings);\n editor.dom = DOMUtils$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: shouldUseContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = Serializer$1(mkSerializerSettings(editor), 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 setup$8(editor);\n setup$i(editor);\n if (!isRtc(editor)) {\n setup$j(editor);\n }\n setup$h(editor);\n setup$9(editor);\n setup$7(editor);\n firePreInit(editor);\n setup$4(editor).fold(function () {\n preInit(editor, false);\n }, function (loadingRtc) {\n editor.setProgressState(true);\n loadingRtc.then(function (rtcMode) {\n editor.setProgressState(false);\n preInit(editor, rtcMode);\n });\n });\n };\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('mce');\n editor[bodyUuid] = function () {\n 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 iframeHTML = getDocType(editor) + '<html><head>';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '<base href=\"' + editor.documentBaseURI.getURI() + '\" />';\n }\n iframeHTML += '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';\n var bodyId = getBodyId(editor);\n var bodyClass = getBodyClass(editor);\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '<meta http-equiv=\"Content-Security-Policy\" content=\"' + getContentSecurityPolicy(editor) + '\" />';\n }\n iframeHTML += '</head><body id=\"' + bodyId + '\" class=\"mce-content-body ' + bodyClass + '\" data-id=\"' + editor.id + '\"><br></body></html>';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var title = editor.editorManager.translate('Rich Text Area. Press ALT-0 for help.');\n var ifr = createIframeElement(editor.id, title, o.height, getIframeAttrs(editor)).dom();\n ifr.onload = function () {\n ifr.onload = null;\n editor.fire('load');\n };\n var isDomainRelaxed = relaxDomain(editor, ifr);\n editor.contentAreaContainer = o.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$5.add(o.iframeContainer, ifr);\n return isDomainRelaxed;\n };\n var init$1 = function (editor, boxInfo) {\n var isDomainRelaxed = createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n DOM$5.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$5.setAttrib(editor.id, 'aria-hidden', 'true');\n if (!isDomainRelaxed) {\n initContentBody(editor);\n }\n };\n\n var DOM$6 = DOMUtils$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 pluginInitError(editor, plugin, e);\n }\n }\n };\n var trimLegacyPrefix = function (name) {\n return name.replace(/^\\-/, '');\n };\n var initPlugins = function (editor) {\n var initializedPlugins = [];\n Tools.each(getPlugins(editor).split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initIcons = function (editor) {\n var iconPackName = Tools.trim(getIconPackName(editor));\n var currentIcons = editor.ui.registry.getAll().icons;\n var loadIcons = __assign(__assign({}, IconManager.get('default').icons), IconManager.get(iconPackName).icons);\n each$1(loadIcons, function (svgData, icon) {\n if (!has(currentIcons, icon)) {\n editor.ui.registry.addIcon(icon, svgData);\n }\n });\n };\n var initTheme = function (editor) {\n var theme = getTheme(editor);\n if (isString(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n var Theme = ThemeManager.get(theme);\n editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n if (editor.theme.init) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n }\n } else {\n editor.theme = {};\n }\n };\n var renderFromLoadedTheme = function (editor) {\n return editor.theme.renderUI();\n };\n var renderFromThemeFunc = function (editor) {\n var elm = editor.getElement();\n var theme = getTheme(editor);\n var info = theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n var createThemeFalseResult = function (element) {\n return {\n editorContainer: element,\n iframeContainer: element\n };\n };\n var renderThemeFalseIframe = function (targetElement) {\n var iframeContainer = DOM$6.create('div');\n DOM$6.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer);\n };\n var renderThemeFalse = function (editor) {\n var targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n var renderThemeUi = function (editor) {\n var elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(getTheme(editor))) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(getTheme(editor))) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var 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(editor);\n } else {\n return init$1(editor, boxInfo);\n }\n };\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 = getLanguageCode(editor);\n var languageUrl = getLanguageUrl(editor);\n if (I18n.hasCode(languageCode) === false && languageCode !== 'en') {\n var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js';\n scriptLoader.add(url_1, noop, undefined, function () {\n languageLoadError(editor, url_1, languageCode);\n });\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var theme = getTheme(editor);\n if (isString(theme)) {\n if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\n var themeUrl = getThemeUrl(editor);\n if (themeUrl) {\n ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n } else {\n ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n }\n }\n scriptLoader.loadQueue(function () {\n ThemeManager.waitFor(theme, callback);\n });\n } else {\n callback();\n }\n };\n var getIconsUrlMetaFromUrl = function (editor) {\n return Option.from(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, name, suffix) {\n return Option.from(name).filter(function (name) {\n return name.length > 0 && !IconManager.has(name);\n }).map(function (name) {\n return {\n url: editor.editorManager.baseURL + '/icons/' + name + '/icons' + suffix + '.js',\n name: Option.some(name)\n };\n });\n };\n var loadIcons = function (scriptLoader, editor, suffix) {\n var defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n var customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(function () {\n return getIconsUrlMetaFromName(editor, getIconPackName(editor), '');\n });\n each(cat([\n defaultIconsUrl,\n customIconsUrl\n ]), function (urlMeta) {\n scriptLoader.add(urlMeta.url, noop, undefined, function () {\n iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n var loadPlugins = function (editor, suffix) {\n Tools.each(getExternalPlugins(editor), function (url, name) {\n PluginManager.load(name, url, noop, undefined, function () {\n pluginLoadError(editor, url, name);\n });\n editor.settings.plugins += ' ' + name;\n });\n Tools.each(getPlugins(editor).split(/[ ,]/), function (plugin) {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager.urls[plugin]) {\n if (hasSkipLoadPrefix(plugin)) {\n plugin = plugin.substr(1, plugin.length);\n var dependencies = PluginManager.dependencies(plugin);\n Tools.each(dependencies, function (depPlugin) {\n var defaultSettings = {\n prefix: 'plugins/',\n resource: depPlugin,\n suffix: '/plugin' + suffix + '.js'\n };\n var dep = PluginManager.createUrl(defaultSettings, depPlugin);\n PluginManager.load(dep.resource, dep, noop, undefined, function () {\n pluginLoadError(editor, dep.prefix + dep.resource + dep.suffix, dep.resource);\n });\n });\n } else {\n var url_2 = {\n prefix: 'plugins/',\n resource: plugin,\n suffix: '/plugin' + suffix + '.js'\n };\n PluginManager.load(plugin, url_2, noop, undefined, function () {\n pluginLoadError(editor, url_2.prefix + url_2.resource + url_2.suffix, plugin);\n });\n }\n }\n });\n };\n var loadScripts = function (editor, suffix) {\n var scriptLoader = ScriptLoader.ScriptLoader;\n loadTheme(scriptLoader, editor, suffix, function () {\n loadLanguage(scriptLoader, editor);\n loadIcons(scriptLoader, editor, suffix);\n loadPlugins(editor, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n init$2(editor);\n }\n }, editor, function () {\n if (!editor.removed) {\n init$2(editor);\n }\n });\n });\n };\n var getStyleSheetLoader$1 = function (element, editor) {\n return instance.forElement(element, {\n contentCssCors: hasContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor)\n });\n };\n var render = function (editor) {\n var id = editor.id;\n I18n.setCode(getLanguageCode(editor));\n var readyHandler = function () {\n DOM$7.unbind(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 var element = Element.fromDom(editor.getElement());\n var snapshot = clone(element);\n editor.on('remove', function () {\n eachr(element.dom().attributes, function (attr) {\n return remove$1(element, attr.name);\n });\n setAll(element, snapshot);\n });\n editor.ui.styleSheetLoader = getStyleSheetLoader$1(element, editor);\n if (!isInline$1(editor)) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n var form = editor.getElement().form || DOM$7.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n DOM$7.insertAfter(DOM$7.create('input', {\n type: 'hidden',\n name: id\n }), id);\n editor.hasHiddenInput = true;\n }\n editor.formEventDelegate = function (e) {\n editor.fire(e.type, e);\n };\n DOM$7.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', function () {\n editor.resetContent();\n });\n if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = function () {\n editor.editorManager.triggerSave();\n editor.setDirty(false);\n return form._mceOldSubmit(form);\n };\n }\n }\n editor.windowManager = WindowManager(editor);\n editor.notificationManager = NotificationManager(editor);\n if (isEncodingXml(editor)) {\n editor.on('GetContent', function (e) {\n if (e.save) {\n e.content = DOM$7.encode(e.content);\n }\n });\n }\n if (shouldAddFormSubmitTrigger(editor)) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (shouldAddUnloadTrigger(editor)) {\n editor._beforeUnload = function () {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : constant(false);\n };\n var ancestor$3 = function (scope, transform, isRoot) {\n var element = scope.dom();\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = 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 var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Option.none() : ancestor$3(scope, transform, stop);\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$2(Element.fromDom(rootElm), elm);\n };\n return closest$2(Element.fromDom(elm), function (elm) {\n return getProperty(elm);\n }, isRoot);\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return 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 getFontSize = getFontProp('font-size');\n var getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n var findFirstCaretElement = function (editor) {\n return firstPositionIn(editor.getBody()).map(function (caret) {\n var container = caret.container();\n return isText$1(container) ? container.parentNode : container;\n });\n };\n var 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 = getFontStyleValues(editor);\n var fontClasses = getFontSizeClasses(editor);\n if (fontClasses) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n var normalizeFontNames = function (font) {\n var fonts = font.split(/\\s*,\\s*/);\n return map(fonts, function (font) {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, '\\''))) {\n return '\\'' + font + '\\'';\n } else {\n return font;\n }\n }).join(',');\n };\n var fontNameAction = function (editor, value) {\n var font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n editor.nodeChanged();\n };\n var fontNameQuery = function (editor) {\n return getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return getFontFamily(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return 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 getFontSize(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return getFontSize(editor.getBody(), caretElement);\n });\n };\n\n var processValue = function (value) {\n var details;\n if (typeof value !== 'string') {\n details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details: details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n var insertAtCaret$1 = function (editor, value) {\n var result = processValue(value);\n insertContent(editor, result.content, result.details);\n };\n\n var nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor) {\n if (backspaceDelete$8(editor)) {\n return;\n } else if (backspaceDelete$3(editor, false)) {\n return;\n } else if (backspaceDelete$4(editor, false)) {\n return;\n } else if (backspaceDelete$5(editor, false)) {\n return;\n } else if (backspaceDelete$1(editor, false)) {\n return;\n } else if (backspaceDelete(editor)) {\n return;\n } else if (backspaceDelete$2(editor)) {\n return;\n } else if (backspaceDelete$6(editor, false)) {\n return;\n } else {\n nativeCommand(editor, 'Delete');\n paddEmptyBody(editor);\n }\n };\n var forwardDeleteCommand = function (editor) {\n if (backspaceDelete$3(editor, true)) {\n return;\n } else if (backspaceDelete$4(editor, true)) {\n return;\n } else if (backspaceDelete$5(editor, true)) {\n return;\n } else if (backspaceDelete$1(editor, true)) {\n return;\n } else if (backspaceDelete(editor)) {\n return;\n } else if (backspaceDelete$2(editor)) {\n return;\n } else if (backspaceDelete$6(editor, true)) {\n return;\n } else {\n nativeCommand(editor, 'ForwardDelete');\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, state = false;\n var self = this;\n if (self.editor.removed) {\n return;\n }\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n self.editor.focus();\n } else {\n restore(self.editor);\n }\n args = self.editor.fire('BeforeExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n if (args.isDefaultPrevented()) {\n return false;\n }\n var customCommand = command.toLowerCase();\n if (func = self.commands.exec[customCommand]) {\n func(customCommand, ui, value);\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n each$f(this.editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n state = true;\n return false;\n }\n });\n if (state) {\n return state;\n }\n if (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = self.editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n EditorCommands.prototype.queryCommandState = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.state[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.queryCommandValue = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.value[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n EditorCommands.prototype.addCommands = function (commandList, type) {\n 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 listParent;\n self.execNativeCommand(command);\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n if (listElm) {\n listParent = listElm.parentNode;\n if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n self.storeSelection();\n editor.dom.split(listParent, listElm);\n self.restoreSelection();\n }\n }\n },\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n self.toggleFormat(command);\n },\n 'ForeColor,HiliteColor': function (command, ui, value) {\n self.toggleFormat(command, value);\n },\n 'FontName': function (command, ui, value) {\n fontNameAction(editor, value);\n },\n 'FontSize': function (command, ui, value) {\n fontSizeAction(editor, value);\n },\n 'RemoveFormat': function (command) {\n editor.formatter.remove(command);\n },\n 'mceBlockQuote': function () {\n self.toggleFormat('blockquote');\n },\n 'FormatBlock': function (command, ui, value) {\n return self.toggleFormat(value || 'p');\n },\n 'mceCleanup': function () {\n var bookmark = editor.selection.getBookmark();\n editor.setContent(editor.getContent());\n editor.selection.moveToBookmark(bookmark);\n },\n 'mceRemoveNode': function (command, ui, value) {\n var node = value || editor.selection.getNode();\n if (node !== editor.getBody()) {\n self.storeSelection();\n editor.dom.remove(node, true);\n self.restoreSelection();\n }\n },\n 'mceSelectNodeDepth': function (command, ui, value) {\n var counter = 0;\n editor.dom.getParent(editor.selection.getNode(), function (node) {\n if (node.nodeType === 1 && counter++ === value) {\n editor.selection.select(node);\n return false;\n }\n }, editor.getBody());\n },\n 'mceSelectNode': function (command, ui, value) {\n editor.selection.select(value);\n },\n 'mceInsertContent': function (command, ui, value) {\n insertAtCaret$1(editor, value);\n },\n 'mceInsertRawHTML': function (command, ui, value) {\n editor.selection.setContent('tiny_mce_marker');\n var content = editor.getContent();\n editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n return value;\n }));\n },\n 'mceInsertNewLine': function (command, ui, value) {\n insert$3(editor, value);\n },\n 'mceToggleFormat': function (command, ui, value) {\n self.toggleFormat(value);\n },\n 'mceSetContent': function (command, ui, value) {\n editor.setContent(value);\n },\n 'Indent,Outdent': function (command) {\n handle(editor, command);\n },\n 'mceRepaint': function () {\n },\n 'InsertHorizontalRule': function () {\n editor.execCommand('mceInsertContent', false, '<hr />');\n },\n 'mceToggleVisualAid': function () {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n },\n 'mceReplaceContent': function (command, ui, value) {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n },\n 'mceInsertLink': function (command, ui, value) {\n if (typeof value === 'string') {\n value = { href: value };\n }\n var anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n value.href = value.href.replace(/ /g, '%20');\n if (!anchor || !value.href) {\n editor.formatter.remove('link');\n }\n if (value.href) {\n editor.formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue);\n if (editingHost) {\n var rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n },\n 'delete': function () {\n deleteCommand(editor);\n },\n 'forwardDelete': function () {\n forwardDeleteCommand(editor);\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n insert$2(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var 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 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 (hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n }\n };\n var isReadOnly$1 = function (editor) {\n return editor.readonly;\n };\n var registerFilters = function (editor) {\n editor.parser.addAttributeFilter('contenteditable', function (nodes) {\n if (isReadOnly$1(editor)) {\n each(nodes, function (node) {\n node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n node.attr('contenteditable', 'false');\n });\n }\n });\n editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) {\n if (isReadOnly$1(editor)) {\n each(nodes, function (node) {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n var registerReadOnlyContentFilters = function (editor) {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', function () {\n registerFilters(editor);\n });\n }\n };\n var isClickEvent = function (e) {\n return e.type === 'click';\n };\n var 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$1(editor)) {\n e.preventDefault();\n }\n });\n editor.on('ObjectSelected', function (e) {\n if (isReadOnly$1(editor)) {\n e.preventDefault();\n }\n });\n };\n\n var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n var EventDispatcher = function () {\n function EventDispatcher(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n EventDispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n EventDispatcher.prototype.fire = function (name, args) {\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 var handlers = this.bindings[name];\n if (handlers) {\n for (var i = 0, l = handlers.length; i < l; i++) {\n var callback = handlers[i];\n if (callback.once) {\n this.off(name, callback.func);\n }\n if (args.isImmediatePropagationStopped()) {\n args.stopPropagation();\n return args;\n }\n if (callback.func.call(this.scope, args) === false) {\n args.preventDefault();\n return args;\n }\n }\n }\n return args;\n };\n EventDispatcher.prototype.on = function (name, callback, prepend, extra) {\n 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 _this = this;\n var i, handlers, 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 each$1(this.bindings, function (_value, bindingName) {\n _this.toggleEvent(bindingName, false);\n delete _this.bindings[bindingName];\n });\n return this;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n 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 each$1(this.bindings, function (_value, name) {\n _this.toggleEvent(name, false);\n });\n this.bindings = {};\n }\n return this;\n };\n EventDispatcher.prototype.once = function (name, callback, prepend) {\n return this.on(name, callback, prepend, { once: true });\n };\n EventDispatcher.prototype.has = function (name) {\n name = name.toLowerCase();\n return !(!this.bindings[name] || this.bindings[name].length === 0);\n };\n return EventDispatcher;\n }();\n\n var getEventDispatcher = function (obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new EventDispatcher({\n scope: obj,\n toggleEvent: function (name, state) {\n if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n var Observable = {\n fire: function (name, args, bubble) {\n var self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return args;\n }\n var dispatcherArgs = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent_1 = self.parent();\n while (parent_1 && !dispatcherArgs.isPropagationStopped()) {\n parent_1.fire(name, dispatcherArgs, false);\n parent_1 = parent_1.parent();\n }\n }\n return dispatcherArgs;\n },\n on: function (name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off: function (name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once: function (name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n var DOM$8 = DOMUtils$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 var eventRoot = getEventRoot(editor);\n if (eventRoot) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$8.select(eventRoot)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n var isListening = function (editor) {\n return !editor.hidden && !isReadOnly$1(editor);\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly$1(editor)) {\n preventReadOnlyEvents(editor, e);\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n var eventRootElm = getEventTarget(editor, eventName);\n if (getEventRoot(editor)) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n each$1(customEventRootDelegates, function (_value, name) {\n editor.dom.unbind(getEventTarget(editor, name));\n });\n customEventRootDelegates = null;\n }\n }\n });\n }\n if (customEventRootDelegates[eventName]) {\n return;\n }\n delegate = function (e) {\n var target = e.target;\n var editors = editor.editorManager.get();\n var i = editors.length;\n while (i--) {\n var body = editors[i].getBody();\n if (body === target || DOM$8.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$8.bind(eventRootElm, eventName, delegate);\n } else {\n delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$8.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n var EditorObservable = __assign(__assign({}, Observable), {\n bindPendingEventDelegates: function () {\n var self = this;\n Tools.each(self._pendingNativeEvents, function (name) {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent: function (name, state) {\n var self = this;\n if (name === 'focus' || name === 'blur') {\n return;\n }\n if (state) {\n if (self.initialized) {\n bindEventDelegate(self, name);\n } else {\n if (!self._pendingNativeEvents) {\n self._pendingNativeEvents = [name];\n } else {\n self._pendingNativeEvents.push(name);\n }\n }\n } else if (self.initialized) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents: function () {\n var self = this;\n var body = self.getBody();\n var dom = self.dom;\n if (self.delegates) {\n each$1(self.delegates, function (value, name) {\n self.dom.unbind(getEventTarget(self, name), name, value);\n });\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n });\n\n var defaultModes = [\n 'design',\n 'readonly'\n ];\n var switchToMode = function (editor, activeMode, availableModes, mode) {\n var oldMode = availableModes[activeMode.get()];\n var newMode = availableModes[mode];\n try {\n newMode.activate();\n } catch (e) {\n 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$5 = function (editor) {\n var activeMode = Cell('design');\n var availableModes = Cell({\n design: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: false\n },\n readonly: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: true\n }\n });\n registerReadOnlyContentFilters(editor);\n registerReadOnlySelectionBlockers(editor);\n return {\n isReadOnly: function () {\n return isReadOnly$1(editor);\n },\n set: function (mode) {\n return setMode(editor, availableModes.get(), activeMode, mode);\n },\n get: function () {\n return activeMode.get();\n },\n register: function (mode, api) {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n var each$g = Tools.each, explode$3 = Tools.explode;\n var keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n var 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 = cmdFunc;\n if (typeof cmd === '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 key;\n var shortcut = {};\n each$g(explode$3(pattern.toLowerCase(), '+'), function (value) {\n if (value in modifierNames) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n var id = [shortcut.keyCode];\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (Env.mac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (Env.mac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) {\n var 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$6 = function () {\n var buttons = {};\n var menuItems = {};\n var popups = {};\n var icons = {};\n var contextMenus = {};\n var contextToolbars = {};\n var sidebars = {};\n var add = function (collection, type) {\n return function (name, spec) {\n return collection[name.toLowerCase()] = __assign(__assign({}, spec), { type: type });\n };\n };\n var addIcon = function (name, svgData) {\n return icons[name.toLowerCase()] = svgData;\n };\n return {\n addButton: add(buttons, 'button'),\n addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n addToggleButton: add(buttons, 'togglebutton'),\n addMenuButton: add(buttons, 'menubutton'),\n addSplitButton: add(buttons, 'splitbutton'),\n addMenuItem: add(menuItems, 'menuitem'),\n addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n addAutocompleter: add(popups, 'autocompleter'),\n addContextMenu: add(contextMenus, 'contextmenu'),\n addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n addContextForm: add(contextToolbars, 'contextform'),\n addSidebar: add(sidebars, 'sidebar'),\n addIcon: addIcon,\n getAll: function () {\n return {\n buttons: buttons,\n menuItems: menuItems,\n icons: icons,\n popups: popups,\n contextMenus: contextMenus,\n contextToolbars: contextToolbars,\n sidebars: sidebars\n };\n }\n };\n };\n\n var registry = function () {\n var bridge = create$6();\n return {\n addAutocompleter: bridge.addAutocompleter,\n addButton: bridge.addButton,\n addContextForm: bridge.addContextForm,\n addContextMenu: bridge.addContextMenu,\n addContextToolbar: bridge.addContextToolbar,\n addIcon: bridge.addIcon,\n addMenuButton: bridge.addMenuButton,\n addMenuItem: bridge.addMenuItem,\n addNestedMenuItem: bridge.addNestedMenuItem,\n addSidebar: bridge.addSidebar,\n addSplitButton: bridge.addSplitButton,\n addToggleButton: bridge.addToggleButton,\n addGroupToolbarButton: bridge.addGroupToolbarButton,\n addToggleMenuItem: bridge.addToggleMenuItem,\n getAll: bridge.getAll\n };\n };\n\n var each$h = Tools.each, trim$4 = Tools.trim;\n var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n var DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n var URI = function () {\n function URI(url, settings) {\n url = trim$4(url);\n this.settings = settings || {};\n var baseUri = this.settings.base_uri;\n var self = this;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n var isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(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 breakPoint = 0, out = '', i, l;\n var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n var items = path.split('/');\n if (normalizedBase.length >= items.length) {\n for (i = 0, l = normalizedBase.length; i < l; i++) {\n if (i >= items.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (normalizedBase.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (breakPoint === 1) {\n return path;\n }\n for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) {\n out += '../';\n }\n for (i = breakPoint - 1, l = items.length; i < l; i++) {\n if (i !== breakPoint - 1) {\n out += '/' + items[i];\n } else {\n out += items[i];\n }\n }\n return out;\n };\n URI.prototype.toAbsPath = function (base, path) {\n var i, nb = 0, o = [], outPath;\n var tr = /\\/$/.test(path) ? '/' : '';\n var normalizedBase = base.split('/');\n var normalizedPath = path.split('/');\n each$h(normalizedBase, function (k) {\n if (k) {\n o.push(k);\n }\n });\n normalizedBase = o;\n for (i = normalizedPath.length - 1, o = []; i >= 0; i--) {\n if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n continue;\n }\n if (normalizedPath[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n o.push(normalizedPath[i]);\n }\n i = normalizedBase.length - nb;\n if (i <= 0) {\n outPath = reverse(o).join('/');\n } else {\n outPath = normalizedBase.slice(0, i).join('/') + '/' + reverse(o).join('/');\n }\n if (outPath.indexOf('/') !== 0) {\n outPath = '/' + outPath;\n }\n if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n outPath += tr;\n }\n return outPath;\n };\n URI.prototype.getURI = function (noProtoHost) {\n if (noProtoHost === void 0) {\n noProtoHost = false;\n }\n var s;\n if (!this.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (this.protocol) {\n s += this.protocol + '://';\n } else {\n s += '//';\n }\n if (this.userInfo) {\n s += this.userInfo + '@';\n }\n if (this.host) {\n s += this.host;\n }\n if (this.port) {\n s += ':' + this.port;\n }\n }\n if (this.path) {\n s += this.path;\n }\n if (this.query) {\n s += '?' + this.query;\n }\n if (this.anchor) {\n s += '#' + this.anchor;\n }\n this.source = s;\n }\n return this.source;\n };\n return URI;\n }();\n\n var DOM$9 = DOMUtils$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 = {\n registry: registry(),\n styleSheetLoader: undefined\n };\n var self = this;\n var modeInstance = create$5(self);\n this.mode = modeInstance;\n this.setMode = modeInstance.set;\n editorManager.fire('SetupEditor', { editor: this });\n this.execCallback('setup', this);\n this.$ = DomQuery.overrideDefaults(function () {\n return {\n context: _this.inline ? _this.getBody() : _this.getDoc(),\n element: _this.getBody()\n };\n });\n }\n Editor.prototype.render = function () {\n render(this);\n };\n Editor.prototype.focus = function (skipFocus) {\n focus$1(this, skipFocus);\n };\n Editor.prototype.hasFocus = function () {\n return hasFocus$1(this);\n };\n Editor.prototype.execCallback = function (name) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var self = this;\n var callback = self.settings[name], scope;\n if (!callback) {\n return;\n }\n if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n callback = scope.func;\n scope = scope.scope;\n }\n if (typeof callback === 'string') {\n scope = callback.replace(/\\.\\w+$/, '');\n scope = scope ? resolve$3(scope) : 0;\n callback = resolve$3(callback);\n self.callbackLookup = self.callbackLookup || {};\n self.callbackLookup[name] = {\n func: callback,\n scope: scope\n };\n }\n return callback.apply(scope || self, x);\n };\n Editor.prototype.translate = function (text) {\n return I18n.translate(text);\n };\n Editor.prototype.getParam = function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n };\n Editor.prototype.nodeChanged = function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n };\n Editor.prototype.addCommand = function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n };\n Editor.prototype.addQueryStateHandler = function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n };\n Editor.prototype.addQueryValueHandler = function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n };\n Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n };\n Editor.prototype.execCommand = function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n };\n Editor.prototype.queryCommandState = function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n };\n Editor.prototype.queryCommandValue = function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n };\n Editor.prototype.queryCommandSupported = function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n };\n Editor.prototype.show = function () {\n var self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = 'true';\n } else {\n DOM$9.show(self.getContainer());\n DOM$9.hide(self.id);\n }\n self.load();\n self.fire('show');\n }\n };\n Editor.prototype.hide = function () {\n var self = this, doc = self.getDoc();\n if (!self.hidden) {\n if (ie$1 && doc && !self.inline) {\n doc.execCommand('SelectAll');\n }\n self.save();\n if (self.inline) {\n self.getBody().contentEditable = 'false';\n if (self === self.editorManager.focusedEditor) {\n self.editorManager.focusedEditor = null;\n }\n } else {\n DOM$9.hide(self.getContainer());\n DOM$9.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.fire('hide');\n }\n };\n Editor.prototype.isHidden = function () {\n return !!this.hidden;\n };\n Editor.prototype.setProgressState = function (state, time) {\n this.fire('ProgressState', {\n state: state,\n time: time\n });\n };\n Editor.prototype.load = function (args) {\n var self = this;\n var elm = self.getElement(), html;\n if (self.removed) {\n return '';\n }\n if (elm) {\n args = args || {};\n args.load = true;\n var value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n html = self.setContent(value, args);\n args.element = elm;\n if (!args.no_events) {\n self.fire('LoadContent', args);\n }\n args.element = elm = null;\n return html;\n }\n };\n Editor.prototype.save = function (args) {\n var self = this;\n var elm = self.getElement(), html, form;\n if (!elm || !self.initialized || self.removed) {\n return;\n }\n args = args || {};\n args.save = true;\n args.element = elm;\n html = args.content = self.getContent(args);\n if (!args.no_events) {\n self.fire('SaveContent', args);\n }\n if (args.format === 'raw') {\n self.fire('RawSaveContent', args);\n }\n html = args.content;\n if (!isTextareaOrInput(elm)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n if (form = DOM$9.getParent(self.id, 'form')) {\n each$i(form.elements, function (elm) {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n }\n });\n }\n } else {\n elm.value = html;\n }\n args.element = elm = null;\n if (args.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n };\n Editor.prototype.setContent = function (content, args) {\n return setContent$1(this, content, args);\n };\n Editor.prototype.getContent = function (args) {\n return getContent$1(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$1(this, this.startContent, { format: 'raw' });\n } else {\n setContent$1(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$7(this);\n };\n Editor.prototype.destroy = function (automatic) {\n destroy(this, automatic);\n };\n Editor.prototype.uploadImages = function (callback) {\n return this.editorUpload.uploadImages(callback);\n };\n Editor.prototype._scanForImages = function () {\n return this.editorUpload.scanForImages();\n };\n Editor.prototype.addButton = function () {\n throw new Error('editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead');\n };\n Editor.prototype.addSidebar = function () {\n throw new Error('editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead');\n };\n Editor.prototype.addMenuItem = function () {\n throw new Error('editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead');\n };\n Editor.prototype.addContextToolbar = function () {\n throw new Error('editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead');\n };\n return Editor;\n }();\n\n var DOM$a = DOMUtils$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: '4.2',\n releaseDate: '2020-08-17',\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 setup$2(self);\n },\n overrideDefaults: function (defaultSettings) {\n var baseUrl = defaultSettings.base_url;\n if (baseUrl) {\n this._setBaseUrl(baseUrl);\n }\n var suffix = defaultSettings.suffix;\n if (defaultSettings.suffix) {\n this.suffix = suffix;\n }\n this.defaultSettings = defaultSettings;\n var pluginBaseUrls = defaultSettings.plugin_base_urls;\n if (pluginBaseUrls !== undefined) {\n each$1(pluginBaseUrls, function (pluginBaseUrl, pluginName) {\n AddOnManager$1.PluginManager.urls[pluginName] = pluginBaseUrl;\n });\n }\n },\n init: function (settings) {\n var self = this;\n var result;\n var invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n var isInvalidInlineTarget = function (settings, elm) {\n return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n };\n var createId = function (elm) {\n var id = elm.id;\n if (!id) {\n id = get(elm, 'name').filter(function (name) {\n return !DOM$a.get(name);\n }).getOrThunk(DOM$a.uniqueId);\n elm.setAttribute('id', id);\n }\n return id;\n };\n var execCallback = function (name) {\n var callback = settings[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, 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 targets = [];\n if (Env.browser.isIE() && Env.browser.version.major < 11) {\n initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\n return [];\n } else if (isQuirksMode) {\n initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n return [];\n }\n if (settings.types) {\n each$j(settings.types, function (type) {\n targets = targets.concat(DOM$a.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM$a.select(settings.selector);\n } else if (settings.target) {\n return [settings.target];\n }\n switch (settings.mode) {\n case 'exact':\n var l = settings.elements || '';\n if (l.length > 0) {\n each$j(explode$4(l), function (id) {\n var elm = DOM$a.get(id);\n if (elm) {\n targets.push(elm);\n } else {\n each$j(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 initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), settings, elm);\n }\n });\n }\n };\n self.settings = settings;\n DOM$a.bind(window, 'ready', initEditors);\n return new promiseObj(function (resolve) {\n if (result) {\n resolve(result);\n } else {\n provideResults = function (editors) {\n resolve(editors);\n };\n }\n });\n },\n get: function (id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find(editors, function (editor) {\n return editor.id === id;\n }).getOr(null);\n } else if (isNumber(id)) {\n return editors[id] ? editors[id] : null;\n } else {\n return null;\n }\n },\n add: function (editor) {\n var self = this;\n var existingEditor = legacyEditors[editor.id];\n if (existingEditor === editor) {\n return editor;\n }\n if (self.get(editor.id) === null) {\n if (isValidLegacyKey(editor.id)) {\n legacyEditors[editor.id] = editor;\n }\n legacyEditors.push(editor);\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.fire('AddEditor', { editor: editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = function (e) {\n var event = self.fire('BeforeUnload');\n if (event.returnValue) {\n e.preventDefault();\n e.returnValue = event.returnValue;\n return event.returnValue;\n }\n };\n window.addEventListener('beforeunload', beforeUnloadDelegate);\n }\n return editor;\n },\n createEditor: function (id, settings) {\n return this.add(new Editor(id, settings, this));\n },\n remove: function (selector) {\n var self = this;\n var i, editor;\n if (!selector) {\n for (i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each$j(DOM$a.select(selector), function (elm) {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.fire('RemoveEditor', { editor: editor });\n }\n if (editors.length === 0) {\n window.removeEventListener('beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand: function (cmd, ui, value) {\n var self = this, editor = self.get(value);\n switch (cmd) {\n case 'mceAddEditor':\n if (!self.get(value)) {\n new Editor(value, self.settings, self).render();\n }\n return true;\n case 'mceRemoveEditor':\n if (editor) {\n editor.remove();\n }\n return true;\n case 'mceToggleEditor':\n if (!editor) {\n self.execCommand('mceAddEditor', 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 walk$1(dom, rng, callback);\n };\n var split = split$1;\n var normalize = function (rng) {\n return normalize$2(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 = isEq$4;\n RangeUtils.getCaretRangeFromPoint = fromPoint$1;\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$7 = 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$7();\n\n var min = Math.min, max = Math.max, round$1 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x = targetRect.x;\n var y = targetRect.y;\n var w = rect.w;\n var h = rect.h;\n var targetW = targetRect.w;\n var targetH = targetRect.h;\n 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$1(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += round$1(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$1(h / 2);\n }\n if (rel[4] === 'c') {\n x -= round$1(w / 2);\n }\n return create$8(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$8(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n var intersect = function (rect, cropRect) {\n var x1 = max(rect.x, cropRect.x);\n var y1 = max(rect.y, cropRect.y);\n var x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n var y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$8(x1, y1, x2 - x1, y2 - y1);\n };\n var clamp$1 = function (rect, clampRect, fixedSize) {\n var x1 = rect.x;\n var y1 = rect.y;\n var x2 = rect.x + rect.w;\n var y2 = rect.y + rect.h;\n var cx2 = clampRect.x + clampRect.w;\n var cy2 = clampRect.y + clampRect.h;\n var underflowX1 = max(0, clampRect.x - x1);\n var underflowY1 = max(0, clampRect.y - y1);\n var overflowX2 = max(0, x2 - cx2);\n var overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$8(x1, y1, x2 - x1, y2 - y1);\n };\n var create$8 = 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$8(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$8,\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 Class = function () {\n var i, mixins, mixin;\n var self = this;\n if (!initializing) {\n if (self.init) {\n self.init.apply(self, arguments);\n }\n mixins = self.Mixins;\n if (mixins) {\n i = mixins.length;\n while (i--) {\n mixin = mixins[i];\n if (mixin.init) {\n mixin.init.apply(self, arguments);\n }\n }\n }\n }\n };\n var dummy = function () {\n return this;\n };\n var createMethod = function (name, fn) {\n return function () {\n var self = this;\n var tmp = self._super;\n self._super = _super[name];\n var ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n var prototype = new self();\n initializing = false;\n if (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 each$1(prop, function (member, name) {\n if (typeof member === 'function' && _super[name]) {\n prototype[name] = createMethod(name, member);\n } else {\n prototype[name] = member;\n }\n });\n Class.prototype = prototype;\n Class.constructor = Class;\n Class.extend = extendClass;\n return Class;\n };\n\n var min$1 = Math.min, max$1 = Math.max, round$2 = Math.round;\n var Color = function (value) {\n var self = {};\n var r = 0, g = 0, b = 0;\n var rgb2hsv = function (r, g, b) {\n var h, s, v;\n h = 0;\n s = 0;\n v = 0;\n r = r / 255;\n g = g / 255;\n b = b / 255;\n var minRGB = min$1(r, min$1(g, b));\n var maxRGB = max$1(r, max$1(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return {\n h: 0,\n s: 0,\n v: v * 100\n };\n }\n var d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return {\n h: round$2(h),\n s: round$2(s * 100),\n v: round$2(v * 100)\n };\n };\n var hsvToRgb = function (hue, saturation, brightness) {\n hue = (parseInt(hue, 10) || 0) % 360;\n saturation = parseInt(saturation, 10) / 100;\n brightness = parseInt(brightness, 10) / 100;\n saturation = max$1(0, min$1(saturation, 1));\n brightness = max$1(0, min$1(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$2(255 * brightness);\n return;\n }\n var side = hue / 60;\n var chroma = brightness * saturation;\n var x = chroma * (1 - Math.abs(side % 2 - 1));\n var match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$2(255 * (r + match));\n g = round$2(255 * (g + match));\n b = round$2(255 * (b + match));\n };\n var toHex = function () {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var toRgb = function () {\n return {\n r: r,\n g: g,\n b: b\n };\n };\n var toHsv = function () {\n return rgb2hsv(r, g, b);\n };\n var parse = function (value) {\n var matches;\n if (typeof value === 'object') {\n if ('r' in value) {\n r = value.r;\n g = value.g;\n b = value.b;\n } else if ('v' in value) {\n hsvToRgb(value.h, value.s, value.v);\n }\n } else {\n if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n r = parseInt(matches[1], 10);\n g = parseInt(matches[2], 10);\n b = parseInt(matches[3], 10);\n } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n r = parseInt(matches[1], 16);\n g = parseInt(matches[2], 16);\n b = parseInt(matches[3], 16);\n } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n r = parseInt(matches[1] + matches[1], 16);\n g = parseInt(matches[2] + matches[2], 16);\n b = parseInt(matches[3] + matches[3], 16);\n }\n }\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n return self;\n };\n if (value) {\n parse(value);\n }\n self.toRgb = toRgb;\n self.toHsv = toHsv;\n self.toHex = toHex;\n self.parse = parse;\n return self;\n };\n\n var serialize = function (obj) {\n var data = JSON.stringify(obj);\n if (!isString(data)) {\n return data;\n }\n return data.replace(/[\\u0080-\\uFFFF]/g, function (match) {\n var hexCode = match.charCodeAt(0).toString(16);\n return '\\\\u' + '0000'.substring(hexCode.length) + hexCode;\n });\n };\n var JSONUtils = {\n serialize: serialize,\n parse: function (text) {\n try {\n return JSON.parse(text);\n } catch (ex) {\n }\n }\n };\n\n var JSONP = {\n callbacks: {},\n count: 0,\n send: function (settings) {\n var self = this, dom = DOMUtils$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$9 = function () {\n return function () {\n var data = {};\n var keys = [];\n var storage = {\n getItem: function (key) {\n var item = data[key];\n return item ? item : null;\n },\n setItem: function (key, value) {\n keys.push(key);\n data[key] = String(value);\n },\n key: function (index) {\n return keys[index];\n },\n removeItem: function (key) {\n keys = keys.filter(function (k) {\n return k === key;\n });\n delete data[key];\n },\n clear: function () {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: function () {\n return keys.length;\n },\n configurable: false,\n enumerable: false\n });\n return storage;\n }();\n };\n\n var localStorage;\n try {\n var test = '__storage_test__';\n localStorage = domGlobals.window.localStorage;\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n } catch (e) {\n localStorage = create$9();\n }\n var LocalStorage = localStorage;\n\n var publicApi = {\n geom: { Rect: Rect },\n util: {\n Promise: promiseObj,\n Delay: Delay,\n Tools: Tools,\n VK: VK,\n URI: URI,\n Class: Class,\n EventDispatcher: EventDispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSONUtils,\n JSONRequest: JSONRequest,\n JSONP: JSONP,\n LocalStorage: LocalStorage,\n Color: Color\n },\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 StyleSheetLoader: StyleSheetLoader,\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,\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.4.2 (2020-08-17)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var identity = function (x) {\n return x;\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var zeroWidth = '\\uFEFF';\n var removeZwsp = function (s) {\n return s.replace(/\\uFEFF/g, '');\n };\n\n var 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 map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n\n var SETS$1 = SETS;\n var OTHER = characterIndices.OTHER;\n var getType = function (char) {\n var type = OTHER;\n var setsLength = SETS$1.length;\n for (var j = 0; j < setsLength; ++j) {\n var set = SETS$1[j];\n if (set && set.test(char)) {\n type = j;\n break;\n }\n }\n return type;\n };\n var memoize = function (func) {\n var cache = {};\n return function (char) {\n if (cache[char]) {\n return cache[char];\n } else {\n var result = func(char);\n cache[char] = result;\n return result;\n }\n };\n };\n var classify = function (characters) {\n var memoized = memoize(getType);\n return map(characters, memoized);\n };\n\n var isWordBoundary = function (map, index) {\n var type = map[index];\n var nextType = map[index + 1];\n if (index < 0 || index > map.length - 1 && index !== 0) {\n return false;\n }\n if (type === characterIndices.ALETTER && nextType === characterIndices.ALETTER) {\n return false;\n }\n var nextNextType = map[index + 2];\n if (type === characterIndices.ALETTER && (nextType === characterIndices.MIDLETTER || nextType === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextNextType === characterIndices.ALETTER) {\n return false;\n }\n var prevType = map[index - 1];\n if ((type === characterIndices.MIDLETTER || type === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextType === characterIndices.ALETTER && prevType === characterIndices.ALETTER) {\n return false;\n }\n if ((type === characterIndices.NUMERIC || type === characterIndices.ALETTER) && (nextType === characterIndices.NUMERIC || nextType === characterIndices.ALETTER)) {\n return false;\n }\n if ((type === characterIndices.MIDNUM || type === characterIndices.MIDNUMLET) && nextType === characterIndices.NUMERIC && prevType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.NUMERIC && (nextType === characterIndices.MIDNUM || nextType === characterIndices.MIDNUMLET) && nextNextType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.EXTEND || type === characterIndices.FORMAT || prevType === characterIndices.EXTEND || prevType === characterIndices.FORMAT || nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT) {\n return false;\n }\n if (type === characterIndices.CR && nextType === characterIndices.LF) {\n return false;\n }\n if (type === characterIndices.NEWLINE || type === characterIndices.CR || type === characterIndices.LF) {\n return true;\n }\n if (nextType === characterIndices.NEWLINE || nextType === characterIndices.CR || nextType === characterIndices.LF) {\n return true;\n }\n if (type === characterIndices.KATAKANA && nextType === characterIndices.KATAKANA) {\n return false;\n }\n if (nextType === characterIndices.EXTENDNUMLET && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTENDNUMLET)) {\n return false;\n }\n if (type === characterIndices.EXTENDNUMLET && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA)) {\n return false;\n }\n if (type === characterIndices.AT) {\n return false;\n }\n return true;\n };\n\n var EMPTY_STRING$1 = EMPTY_STRING;\n var WHITESPACE$1 = WHITESPACE;\n var PUNCTUATION$1 = PUNCTUATION;\n var isProtocol = function (str) {\n return str === 'http' || str === 'https';\n };\n var findWordEnd = function (characters, startIndex) {\n var i;\n for (i = startIndex; i < characters.length; i++) {\n if (WHITESPACE$1.test(characters[i])) {\n break;\n }\n }\n return i;\n };\n var findUrlEnd = function (characters, startIndex) {\n var endIndex = findWordEnd(characters, startIndex + 1);\n var peakedWord = characters.slice(startIndex + 1, endIndex).join(EMPTY_STRING$1);\n return peakedWord.substr(0, 3) === '://' ? endIndex : startIndex;\n };\n var findWords = function (chars, sChars, characterMap, options) {\n var words = [];\n var word = [];\n for (var i = 0; i < characterMap.length; ++i) {\n word.push(chars[i]);\n if (isWordBoundary(characterMap, i)) {\n var ch = sChars[i];\n if ((options.includeWhitespace || !WHITESPACE$1.test(ch)) && (options.includePunctuation || !PUNCTUATION$1.test(ch))) {\n var startOfWord = i - word.length + 1;\n var endOfWord = i + 1;\n var str = sChars.slice(startOfWord, endOfWord).join(EMPTY_STRING$1);\n if (isProtocol(str)) {\n var endOfUrl = findUrlEnd(sChars, i);\n var url = chars.slice(endOfWord, endOfUrl);\n Array.prototype.push.apply(word, url);\n i = endOfUrl;\n }\n words.push(word);\n }\n word = [];\n }\n }\n return words;\n };\n var getDefaultOptions = function () {\n return {\n includeWhitespace: false,\n includePunctuation: false\n };\n };\n var getWords = function (chars, extract, options) {\n options = __assign(__assign({}, getDefaultOptions()), options);\n var filteredChars = [];\n var extractedChars = [];\n for (var i = 0; i < chars.length; i++) {\n var ch = extract(chars[i]);\n if (ch !== zeroWidth) {\n filteredChars.push(chars[i]);\n extractedChars.push(ch);\n }\n }\n var characterMap = classify(extractedChars);\n return findWords(filteredChars, extractedChars, characterMap, options);\n };\n\n var getWords$1 = getWords;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var getText = function (node, schema) {\n var blockElements = schema.getBlockElements();\n var shortEndedElements = schema.getShortEndedElements();\n var isNewline = function (node) {\n return blockElements[node.nodeName] || shortEndedElements[node.nodeName];\n };\n var textBlocks = [];\n var txt = '';\n var treeWalker = new global$1(node, node);\n while (node = treeWalker.next()) {\n if (node.nodeType === 3) {\n txt += removeZwsp(node.data);\n } else if (isNewline(node) && txt.length) {\n textBlocks.push(txt);\n txt = '';\n }\n }\n if (txt.length) {\n textBlocks.push(txt);\n }\n return textBlocks;\n };\n\n var strLen = function (str) {\n return str.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n };\n var countWords = function (node, schema) {\n var text = getText(node, schema).join('\\n');\n return getWords$1(text.split(''), identity).length;\n };\n var countCharacters = function (node, schema) {\n var text = getText(node, schema).join('');\n return strLen(text);\n };\n var countCharactersWithoutSpaces = function (node, schema) {\n var text = getText(node, schema).join('').replace(/\\s/g, '');\n return strLen(text);\n };\n\n var createBodyCounter = function (editor, count) {\n return function () {\n return count(editor.getBody(), editor.schema);\n };\n };\n var createSelectionCounter = function (editor, count) {\n return function () {\n return count(editor.selection.getRng().cloneContents(), editor.schema);\n };\n };\n var createBodyWordCounter = function (editor) {\n return createBodyCounter(editor, countWords);\n };\n var get = function (editor) {\n return {\n body: {\n getWordCount: createBodyWordCounter(editor),\n getCharacterCount: createBodyCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createBodyCounter(editor, countCharactersWithoutSpaces)\n },\n selection: {\n getWordCount: createSelectionCounter(editor, countWords),\n getCharacterCount: createSelectionCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createSelectionCounter(editor, countCharactersWithoutSpaces)\n },\n getCount: createBodyWordCounter(editor)\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var fireWordCountUpdate = function (editor, api) {\n editor.fire('wordCountUpdate', {\n wordCount: {\n words: api.body.getWordCount(),\n characters: api.body.getCharacterCount(),\n charactersWithoutSpaces: api.body.getCharacterCountWithoutSpaces()\n }\n });\n };\n\n var updateCount = function (editor, api) {\n fireWordCountUpdate(editor, api);\n };\n var setup = function (editor, api, delay) {\n var debouncedUpdate = global$2.debounce(function () {\n return updateCount(editor, api);\n }, delay);\n editor.on('init', function () {\n updateCount(editor, api);\n global$2.setEditorTimeout(editor, function () {\n editor.on('SetContent BeforeAddUndo Undo Redo keyup', debouncedUpdate);\n }, 0);\n });\n };\n\n var open = function (editor, api) {\n editor.windowManager.open({\n title: 'Word Count',\n body: {\n type: 'panel',\n items: [{\n type: 'table',\n header: [\n 'Count',\n 'Document',\n 'Selection'\n ],\n cells: [\n [\n 'Words',\n String(api.body.getWordCount()),\n String(api.selection.getWordCount())\n ],\n [\n 'Characters (no spaces)',\n String(api.body.getCharacterCountWithoutSpaces()),\n String(api.selection.getCharacterCountWithoutSpaces())\n ],\n [\n 'Characters',\n String(api.body.getCharacterCount()),\n String(api.selection.getCharacterCount())\n ]\n ]\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }]\n });\n };\n\n var register = function (editor, api) {\n editor.ui.registry.addButton('wordcount', {\n tooltip: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n editor.ui.registry.addMenuItem('wordcount', {\n text: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n };\n\n function Plugin (delay) {\n if (delay === void 0) {\n delay = 300;\n }\n global.add('wordcount', function (editor) {\n var api = get(editor);\n register(editor, api);\n setup(editor, api, delay);\n return api;\n });\n }\n\n Plugin();\n\n}());\n"],"sourceRoot":""}