{"version":3,"sources":["webpack:///./node_modules/tinymce/themes/silver/theme.js","webpack:///./node_modules/bs-stepper/dist/js/bs-stepper.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/themes/silver/index.js","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./src/views/newsletter/index.vue?3c1b","webpack:///./node_modules/tinymce/plugins/emoticons/js/emojis.js","webpack:///./node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/tinymce/plugins/emoticons/index.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./src/components/popup-modal/index.vue?54d1","webpack:///src/components/popup-modal/index.vue","webpack:///./src/components/popup-modal/index.vue?27b3","webpack:///./src/components/popup-modal/index.vue","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/icons/default/index.js","webpack:///./node_modules/tinymce/plugins/code/plugin.js","webpack:///./src/views/newsletter/index.vue?1b07","webpack:///src/views/newsletter/index.vue","webpack:///./src/views/newsletter/index.vue?5d52","webpack:///./src/views/newsletter/index.vue?f471","webpack:///./node_modules/tinymce/icons/default/icons.js"],"names":["typeOf","x","t","Array","prototype","isPrototypeOf","constructor","name","String","isType$1","type","value","isSimpleType","eq$1","a","isString","isObject","isArray","isNull","isBoolean","isUndefined","undefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","i","len","length","noop","noarg","f","compose","fa","fb","args","_i","arguments","apply","compose1","fbc","fab","constant$1","identity$1","tripleEquals","b","curry","fn","initialArgs","restArgs","all","concat","not","die","msg","Error","never","always","global$h","tinymce","util","Tools","resolve","__assign","Object","assign","s","n","p","hasOwnProperty","call","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArray","to","from","pack","ar","l","slice","SimpleResultType","none","NONE","thunk","id","me","fold","_s","isSome","isNone","getOr","getOrThunk","getOrDie","getOrNull","getOrUndefined","or","orThunk","map","each","bind","exists","forall","filter","toArray","toString","some","constant_a","self","from$1","Optional","nativeSlice","nativeIndexOf","nativePush","push","rawIndexOf","ts","xs","r","contains$2","range$2","num","chunk$1","array","size","map$2","each$1","eachr","partition$3","pass","fail","arr","filter$2","foldr","acc","foldl","findUntil","until","find$5","findIndex$1","flatten","bind$3","reverse","difference","a1","a2","mapToObject","pure$2","sort","comparator","copy","get$f","head","last$2","findMap","value$3","o","_opt","_f","mapError","_","onValue","toOptional","isValue","isError","error$1","message","onError","fromOption","opt","err","Result","error","fold$1","res","stype","serror","svalue","partition$2","results","values","errors","obj","val","map$1","Value","bind$2","bindError","v","toResult$1","fromResult$1","SimpleResult","fromResult","toResult","partition","field$2","key","newKey","presence","prop","tag","customField$1","instantiator","ifField","ifCustom","keys","props","k","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","filter$1","mapToArray","find$4","get$e","has$2","hasNonNullableKey","shallow$1","old","nu","deep","bothObjects","deepMerge","baseMerge","merger","objects","ret","j","curObject","merge$1","cached","called","required$2","process","defaultedThunk","fallbackThunk","defaulted$1","fallback","asOption","mergeWithThunk","baseThunk","mergeWith","base","mergeValues$1","mergeErrors$1","consolidateObj","consolidateArr","partitions","ResultCombine","formatObj","input","JSON","stringify","formatErrors","es","path","getErrorInfo","join","nu$d","missingRequired","missingKey","missingBranch","branches","branch","unsupportedFields","unsupported","custom","value$2","validator","extract","anyValue$1","requiredAccess","bundle","fallbackAccess","optionAccess","optionDefaultedAccess","extractField","field","av","bundleAsOption","optValue","ov","result","extractFields","fields","success","fields_1","valueThunk","getDelegate","getSetKeys","objOfOnly","delegate","objOf","fieldNames","_a","extra","fieldStrings","_okey","_presence","_instantiator","arrOf","oneOf","props_1","setOf$1","validateKeys","keys$1","validatedKeys","validKeys","schema","vk","_desc","processor","getP","arrOfObj","anyValue","typedValue","expectedType","actualType","number","string","boolean","functionProcessor","isPostMessageable","every","postMessageable","chooseFrom","ch","vp","choose$2","choice","chosen","arrOfVal","valueOf","setOf","extractValue","label","errs","asRaw","extraction","errInfo","formatError","asRawOrDie$1","choose$1","thunkOf","desc","field$1","customField","validateEnum","required$1","requiredOf","requiredNumber","requiredString","requiredStringEnum","requiredBoolean","requiredFunction","forbid","_v","requiredObjOf","objSchema","requiredArrayOfObj","objFields","requiredArrayOf","option","optionOf","optionNumber","optionString","optionFunction","optionArrayOf","optionObjOf","optionObjOfOnly","defaulted","defaultedOf","defaultedNumber","defaultedString","defaultedStringEnum","defaultedBoolean","defaultedFunction","defaultedPostMsg","defaultedArrayOf","defaultedObjOf","Cell","initial","get","set","fromHtml$2","html","scope","doc","document","div","createElement","innerHTML","hasChildNodes","childNodes","console","fromDom","fromTag","node","fromText","text","createTextNode","dom","fromPoint","docElm","y","elementFromPoint","SugarElement","fromHtml","DeviceType","os","browser","userAgent","mediaMatch","isiPad","isiOS","test","isiPhone","isMobile","isAndroid","isTouch","isTablet","isPhone","iOSwebview","isSafari","isDesktop","isWebView","firstMatch","regexes","find$3","agent","major","minor","group","Number","replace","nu$c","detect$4","versionRegexes","cleanedAgent","toLowerCase","unknown$3","Version","detect","unknown","detectBrowser$1","browsers","userAgentData","brands","uaBrand","lcBrand","brand","info","current","version","parseInt","detect$3","candidates","candidate","search","detectBrowser","detectOs","oses","addToEnd","str","suffix","removeFromStart","numChars","substring","checkRange","substr","start","removeLeading","prefix","startsWith","ensureTrailing","endsWith","contains$1","blank","trim$1","isNotEmpty","isEmpty","normalVersionRegex","checkContains","target","uastring","PlatformInfo","edge","chrome","ie","opera","firefox","safari","unknown$2","nu$b","isBrowser","isEdge","isChrome","isIE","isOpera","isFirefox","Browser","windows","ios","android","linux","osx","solaris","freebsd","chromeos","unknown$1","nu$a","isOS","isWindows","isOSX","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","detect$2","userAgentDataOpt","deviceType","PlatformDetection","query","window","matchMedia","matches","platform","navigator","detect$1","compareDocumentPosition","match","documentPositionContainedBy","Node","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT","DOCUMENT_FRAGMENT","ELEMENT","TEXT","is$1","element","selector","nodeType","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","all$3","querySelectorAll","one","querySelector","eq","e1","e2","regularContains","d1","d2","contains","ieContains","generate$7","cases","constructors","adt","acase","count","argLength","branchKeys","allReqd","reqKey","foldArgs","log","params","Adt","generate","bothErrors","firstError","secondError","bothValues","partition$1","exclude$1","wrap$2","wrapAll$1","keyvalues","kv","exclude","wrap$1","wrapAll","mergeValues","mergeErrors","consolidate","objs","ensureIsRoot","isRoot","ancestor$2","transform","stop","parentNode","el","transformed","closest$4","isSource","component","simulatedEvent","event","defaultEventHandler","can","abort","run","nu$9","parts","all$2","handlers","handler","any","read$2","fuse$1","constant","touchstart","touchmove","touchend","touchcancel","mousedown","mousemove","mouseout","mouseup","mouseover","focusin","focusout","keydown","keyup","change","click","transitioncancel","transitionend","transitionstart","selectstart","prefixName","alloy","tap","focus$4","postBlur","postPaste","receive","execute$5","focusItem","longpress","sandboxClose","typeaheadCancel","systemInit","documentTouchmove","documentTouchend","windowScroll","windowResize","attachedToDom","detachedFromDom","dismissRequested","repositionRequested","focusShifted","slotVisibility","changeTab","dismissTab","highlight$1","dehighlight$1","emit","dispatchWith","emitWith","properties","emitExecute","dispatch","data","getSystem","triggerEvent","dispatchEvent","derive$2","configs","predicate","preventDefault","prevent","run$1","runActionExtra","action","runOnName","runOnSourceName","redirectToUid","uid","getByUid","redirectee","redirectToPart","detail","partName","partUids","runWithTarget","ev","getByDom","closest","cutter","cut","stopper","runOnSource","runOnAttached","runOnDetached","runOnInit","runOnExecute$1","Function","_a$2","name$2","nodeName","isType","isElement$2","isText$1","isDocument","isDocumentFragment","owner$4","ownerDocument","documentOrOwner","dos","documentElement","defaultView","parent","offsetParent","nextSibling","children","child$2","index","cs","firstChild","spot","offset","leaf","isShadowRoot","host","supported","Element","attachShadow","getRootNode","isSupported$1","getContentContainer","body","isInShadowRoot","getShadowRoot","getShadowHost","getOriginalEventTarget","isOpenShadowHost","composed","composedPath","shadowRoot","before$2","marker","parent$1","insertBefore","after$2","sibling","append$2","prepend$1","firstChild$1","appendChild","appendAt","before$1","elements","append$1","empty","textContent","rogue","remove$7","removeChild","unwrap","wrapper","children$1","fromHtml$1","get$d","set$8","content","owner","docDom","fragment","createDocumentFragment","contentElements","getOuter$2","container","clone","cloneNode","rawSet","setAttribute","set$7","setAll$1","attrs","get$c","getAttribute","getOpt","has$1","hasAttribute","remove$6","removeAttribute","clone$1","original","isDeep","shallow","getHtml","isRecursive","originator","events$i","warn","DefaultEvents","freeze","__proto__","events","unique","generate$6","date","Date","time","getTime","random","Math","floor","prefix$1","idAttr$1","idAttr","write","writeOnly","defineProperty","writable","read$1","generate$5","make$8","NoContextApi","getComp","getMessage","debugInfo","triggerFocus","triggerEscape","broadcast","broadcastOn","broadcastEvent","build","addToWorld","removeFromWorld","addToGui","removeFromGui","isConnected","singleton$1","markAsBehaviourApi","apiName","apiFunction","endIndex","openBracketIndex","parameters","split","toFunctionAnnotation","cleanParameters","markAsExtraApi","extraName","markAsSketchApi","premadeTag","premade$1","comp","getPremade","spec","makeApi","rest","getApis","NoState","init","nu$8","readState","generateFrom$1","validated","behaviours","list","optBlobThunk","output","blob","config","state","getBehaviours$3","bData","getData$2","byInnerKey","indexKey","chain","nu$7","classes","attributes","styles","merge","defnA","mod","combine$2","baseMod","modsByBehaviour","behaviour","exhibit","byAspect","modification","combineObjects","combinedClasses","combinedAttributes","combinedStyles","sortKeys","keyName","order","sorted","aKey","bKey","aIndex","bIndex","uncurried","purpose","curried","cHandler","curryArgs","descHandler","extraArgs","getCurried","behaviourTuple","nameToHandlers","groupByEvents","behaviourEvents","combine$1","eventOrder","byEventName","combineGroups","assemble","rawHandler","missingOrderError","eventName","tuples","c","fuse","sortedTuples","combined","assembled","baseBehaviour","schema$z","toInfo","toDefinition","domChildren","components","toModification","domModification","toEvents","read","attr","add$4","remove$5","supports","classList","get$b","add$3","clazz","remove$4","add$2","add","cleanClass","remove$3","remove","has","add$1","remove$2","hasAll","is","lhs","rhs","left","equals","lift2","cat","sequence","oa","ob","lift3","oc","mapFrom","someIf","isSupported","style","getPropertyValue","inBody","getBody","internalSet","property","setProperty","internalRemove","removeProperty","set$6","setAll","css","setOptions","get$a","getComputedStyle","getUnsafeProperty","getRaw","raw","getAllRaw","ruleName","item","isValidValue","remove$1","reflow","offsetWidth","get$9","set$5","renderToDom","definition","subject","innerHtml","getBehaviours$2","generateFrom","generate$4","getDomDefinition","bList","infoModification","baseModification","getEvents","baseEvents","build$2","getMe","systemApi","bBlob","modDefinition","subcomponents","connect","newApi","disconnect","syncComponents","subs","child","hasConfigured","apis","behaviourName","buildSubcomponents","build$1","buildFromSpec","userSpec","specEvents","completeSpec","external$2","extSpec","uids","isSketchSpec$1","userSpecWithUid","premade","Dimension","getOffset","h","parseFloat","getOuter","aggregate","isNaN","max","cumulativeInclusions","absoluteMax","api$2","getBoundingClientRect","height","offsetHeight","get$8","getOuter$1","setMax$1","inclusions","absMax","r$1","top","translate","SugarPosition","boxPosition","box","firstDefinedOrZero","absolute$3","win","offsetLeft","offsetTop","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport$1","api$1","set$4","get$7","setMax","mkEvent","kill","fromRawEvent$1","rawEvent","stopPropagation","clientX","clientY","handle","binder","useCapture","wrapped","addEventListener","unbind","bind$1","capture$1","removeEventListener","get$6","_DOC","scrollTo","get$5","_win","bounds$1","width","right","bottom","getBounds$3","scroll","clientWidth","clientHeight","visualViewport","pageLeft","pageTop","walkUp","navigation","frame","view","pathTo","d","paths","frameElement","owner$3","Navigation","find$2","frames","loc","pointed","point","rect","bounds","box$1","xy","w","absolute$2","position","ClosestOrAncestor","ancestor","EventConfiguration","ancestor$1","closest$3","child$1","descendant$1","descend","child_1","closest$2","descendant","closest$1","find$1","queryElem","dependent","dep","manager","ariaId","link","unlink","isAriaPartOf","isPartOf$1","eventConfig","makeEventLogger","initialTarget","startTime","logEventCut","_name","outcome","logEventStopped","logNoParent","logEventNoHandlers","logEventResponse","finishTime","processEvent","status","patterns","NORMAL","noLogger","LOGGING","logger","STOP","getTrace","stack","lines","line","ignoreEvent","monitorEvent","menuFields","itemFields","itemSchema$3","_initSize","itemMarkers","tieredMenuMarkers","markers$1","required","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","output$1","snapshot","initSize","nu$6","bubble","direction","placement","boundsRestriction","labelPrefix","alwaysFit","restriction","adt$a","southeast","southwest","northeast","northwest","south","north","east","west","cata$2","cataVertical","middle","cataHorizontal","southeast$3","southwest$3","northeast$3","northwest$3","south$3","north$3","east$3","west$3","cycleBy","delta","min","clamp$1","getRestriction","anchor","restrictions","dir","adjustBounds","bubbleOffset","applyRestriction","pos","isVerticalAxis","newPos","adjustedLeft","adjustedTop","adjustedRight","adjustedBottom","labelPrefix$2","eastX$1","middleX$1","westX$1","northY$2","southY$2","centreY$1","eastEdgeX$1","westEdgeX$1","southeast$2","bubbles","southwest$2","northeast$2","northwest$2","north$2","south$2","east$2","west$2","all$1","allRtl$1","aboveOrBelow","aboveOrBelowRtl","belowOrAbove","belowOrAboveRtl","chooseChannels","channels","universal","events$h","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","onReceive","ActiveReceiving","ReceivingSchema","executeEvent","bConfig","bState","executor","loadEvent","_simulatedEvent","create$8","active","configSchema","schemaSchema","doCreate","createModes$1","modes","wrapApi","bName","revokeBehaviour","getConfig","wrappedApis","apiF","wrappedExtra","extraF","revoke","prepared","configAsRaw","initialConfig","behaviourInfo","exhibitor","derive$1","capabilities","simpleSchema","create$7","modeSchema","createModes","branchKey","Receiving","exhibit$6","posConfig","useFixed","ActivePosition","getDocument","focus$3","focus","blur$1","blur","hasFocus","root","activeElement","preserve$1","refocus","focused","oldFocus","newFocus","NuPositionCss","toPx","toOptions","applyPositionCss","adt$9","relative","fixed","positionWithDirection","posName","decision","decisionRect","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","reposition","origin","toBox","rel","viewport","getBounds","translate$2","removeScroll","outerScroll","cata$1","onNone","onRelative","onFixed","AttributeValue","relative$1","fixed$1","anchorBox","placementAttribute","setPlacement$1","getPlacement","reset$2","adt$8","fit","nofit","determinePosition","boundsX","boundsY","boundsRight","boundsBottom","xInBounds","yInBounds","originInBounds","rightInBounds","bottomInBounds","sizeInBounds","visibleW","visibleH","calcReposition","maxX","maxY","restrictedX","restrictedY","restrictedWidth","restrictedHeight","calcMaxSizes","upAvailable","downAvailable","maxHeight","westAvailable","eastAvailable","maxWidth","attempt","adjustedBounds","newX","newY","fits","fittedBox","isPartlyVisible","_b","on","classesOn","off","classesOff","layout","testY","attempts","elementBox","panelWidth","panelHeight","attemptBestFit","isVisible","next","attemptLayout","newReposition","newVisibleW","newVisibleH","newIsVisible","improved","abc","bestNext","singleton","doRevoke","clear","isSet","destroyable","destroy","unbindable","value$1","capture","fromRawEvent","timerAttr","isTransitioning$1","transition","shouldApplyTransitionCss","lastPlacement","placer","mode","hasChanges","intermediate","round","toPrecision","newValue","getTransitionDuration","times","parse","delay","duration","dur","setupTransitionListeners","timer","transitionEnd","transitionCancel","isSourceTransition","pseudoElement","propertyName","transitionDone","clearTimeout","transitionStarted","transitionStart_1","requestAnimationFrame","setTimeout","startTransitioning","timerId","applyTransitionCss","shouldTransition","intermediatePosition_1","intermediateCssOptions","elementSize","options","preference","setClasses","classInfo","setHeight","maxHeightFunction","setWidth","maxWidthFunction","position$2","positionCss","setPlacement","setMaxHeight","anchored","available","expandable$1","defaultOr","dephault","simple","layouts","overrideOptions","go","allAlignments","nu$5","xOffset","yOffset","insetModifier","insetXOffset","insetYOffset","getClasses","make","xDelta","yDelta","alignmentsOn","alignmentsOff","insetNortheast","insetNorthwest","insetNorth","insetSoutheast","insetSouthwest","insetSouth","insetEast","insetWest","nu$4","onDirection","isLtr","isRtl","getDirection","Attribute","isBottomToTopDir","BottomToTop","schema$y","get$4","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","onLtr","customRtl","onRtl","ltr","onBottomLtr","rtl","onBottomRtl","placement$4","anchorInfo","hotspot","overrides","HotspotAnchor","placement$3","MakeshiftAnchor","adt$7","screen","absolute","toFixed","toAbsolute","sum","points","sumAsFixed","positions","sumAsAbsolute","absolute$1","hasSameOwner","frameOwner","compOwner","getRootPoint","getBox","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","showAbove","layoutsRtl","placement$2","nodeBox","NodeAnchor","zeroWidth","nbsp","create$6","soffset","finish","foffset","SimRange","create","adt$6","before","after","cata","onBefore","onOn","onAfter","getStart$1","situ","on$1","after$1","Situ","getStart","adt$5","domRange","exact","exactFromRange","simRange","selection","rng","startContainer","startSitu","_finishSitu","_soffset","_finish","_foffset","getWin","range$1","SimSelection","range","setStart","setStartBefore","setStartAfter","setFinish","setEndBefore","setEnd","setEndAfter","relativeToNative","finishSitu","createRange","exactToNative","toRect","getFirstRect$1","rects","getClientRects","getBounds$2","adt$4","fromRange","startOffset","endContainer","endOffset","getRanges","doDiagnose","ranges","collapsed","reversed","rev","diagnose","asLtrRange","diagnosis","FocusInsideModes","NodeValue","getOption","nodeValue","api","get$3","getEnd","isTextNodeWithCursorPosition","trim","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","last$1","descendantRtl","descendants","makeRange","same","getNativeSelection","getSelection","readRange","rangeCount","firstRng","getRangeAt","lastRng","doGetExact","anchorNode","focusNode","focus_1","anchorOffset","focusOffset","getExact","sel","getFirstRect","getBounds$1","point$1","descendOnce$1","last","descendOnce","getAnchorSelection","modStart","modFinish","placement$1","selectionBox","optRect","rawRect","targetElement","SelectionAnchor","labelPrefix$1","eastX","westX","northY$1","southY$1","southeast$1","southwest$1","northeast$1","northwest$1","allRtl","submenuInfo","SubmenuAnchor","AnchorSchema","submenu","makeshift","TransitionSchema","PositionSchema","PlacementSchema","getFixedOrigin","getRelativeOrigin","place","anchoring","placee","lastPlace","position$1","posState","placementSpec","positionWithin","boxElement","boundsBox","positionWithinBounds","placeeDetail","anchorage","placeeState","oldVisibility","doPlace","newState","vis","getMode","pConfig","_pState","reset$1","PositionApis","reset","init$g","PositioningState","Positioning","fireDetaching","fireAttaching","attach$1","detachChildren$1","childComp","replaceChildren","newChildren","deleted","attach","attachWith","insertion","doDetach","detach","detachChildren","attachSystem","guiSystem","attachSystemWith","attachSystemAfter","inserter","detachSystem","rebuild","sandbox","sConfig","sState","_data","getAttachPoint","built","open$1","onOpen","setContent","openWhileCloaked","transaction","cloak","decloak","close$1","onClose","isOpen$1","_sandbox","_sConfig","isOpen","isPartOf","getState$2","store","cssKey","restore","oldValue","_sState","sink","cloakVisibilityAttr","hasPosition","SandboxApis","open","close","getState","events$g","sandboxConfig","sandboxState","ActiveSandbox","SandboxSchema","init$f","contents","SandboxState","Sandboxing","dismissPopups","repositionPopups","mouseReleased","schema$x","receivingChannel$1","rawSpec","isPart","isExtraPart","fireEventInstead","fe","schema$w","receivingChannel","doReposition","onLoad$5","repConfig","repState","onLoad","onUnload$2","onUnload","setValue$3","setValue","getValue$3","getValue","getState$1","RepresentApis","events$f","resetOnDom","_se","ActiveRepresenting","memory$1","isNotSet","manual","dataset","dataByValue","dataByText","lookup","itemString","update","items","currentDataByValue","currentDataByText","newDataByValue","newDataByText","meta","init$e","RepresentState","memory","setValue$2","onSetValue","getValue$2","getDataKey","getFallbackEntry","onLoad$4","initialValue","onUnload$1","DatasetStore","getValue$1","_repState","setValue$1","onLoad$3","ManualStore","onLoad$2","initVal","MemoryStore","RepresentSchema","Representing","setValueFrom","source","forbidden","get$2","dump","augment","SketchBehaviours","_placeholder","adt$3","single","multiple","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","uiType","substitute","req","childSpecs","substituted","valuesThunk","preprocessor","preprocess","substituteAll","oneReplace","replacements","used","substitutePlaces","ps","ph","single$2","placeholder","adt$2","external","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","partSpec","partValidated","defaults","internals","externals","pname","factory","_partSpec","_partValidated","units","u","generate$3","np","g","doGenerateOne","generateOne$1","schemas","names","substitutes","components$1","getPart","partKey","getPartOrDie","getParts","partKeys","system","pk","getAllParts","pUid","_k","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","generateOne","partSchemas","partUidsSchemas","asRawOrDie","baseS","single$1","specWithUid","supplyUid","composite$1","partUidsSchema","hasUid","isSketchSpec","singleSchema","compositeSchema","rawConfig","configFields","extraApis","composite","partFields","inside","getCurrent","composeConfig","_composeState","find","ComposeApis","ComposeSchema","Composing","nativeDisabled","onLoad$1","disableConfig","disableState","disabled","disable$1","enable$1","hasNative","useNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","_disableState","disableClass","onDisabled","onEnabled","isDisabled","set$3","DisableApis","enable","disable","exhibit$5","events$e","ActiveDisable","DisableSchema","Disabling","dehighlightAllExcept","hConfig","hState","skip","highlighted","highlightClass","skipComp","onDehighlight","dehighlightAll","dehighlight","isHighlighted","highlight","onHighlight","highlightFirst","getFirst","firstComp","highlightLast","getLast","lastComp","highlightAt","getByIndex","highlightBy","getCandidates","targetComp","queryTarget","getHighlighted","_hState","itemClass","getDelta$2","selected","dest","getPrevious","getNext","HighlightApis","HighlightSchema","Highlighting","BACKSPACE","TAB","ENTER","ESCAPE","SPACE","LEFT","UP","RIGHT","DOWN","cyclePrev","tryPrev","cycleNext","tryNext","inSet","which","and","preds","isShift","shiftKey","isControl","ctrlKey","isNotShift","rule","classification","choose","transitions","reportFocusShifting","prevFocus","noChange","dom$2","focusee","highlights","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusInside","OnFocusMode","focusIn","tryGoInsideComponent","isEnterOrSpace","OnEnterOrSpaceMode","keyboardEvents","create$5","cyclicField","tabbingConfig","visibilitySelector","findInitial","tabstops","visibles","firstTabstop","findCurrent","focusManager","isTabstop","useTabstopAt","_tabbingState","goFromTabstop","stopIndex","cycle","cyclic","tabstop","optStopIndex","goBackwards","navigate","goForwards","execute","onEnter","exit","onEscape","AcyclicType","CyclicType","doDefaultExecute","defaultExecute","isComplex","stopEventForFirefox","_component","schema$v","execute$4","executeConfig","getKeydownRules$5","_executeState","spaceExec","useSpace","enterExec","useEnter","downExec","useDown","execKeys","useControlEnter","getKeyupRules$5","ExecutionType","flatgrid$1","dimensions","setGridSize","numRows","numColumns","getNumRows","getNumColumns","init$d","KeyingState","flatgrid","useH","movement","move","use","west$1","moveLeft","moveRight","east$1","useV","north$1","south$1","move$1","isHidden$1","locate","locateVisible","visible","findIndex","withGrid","numCols","oldRow","oldColumn","address","newIndex","row","column","cycleHorizontal$1","onLastRow","colsInRow","newColumn","cycleVertical$1","newRow","newCol","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","schema$u","focusIn$3","gridConfig","_gridState","first","findCurrent$1","execute$3","doMove$2","gridState","identified","handleTab","captureTab","doEscape$1","moveLeft$3","moveRight$3","moveNorth$1","moveSouth$1","getKeydownRules$4","getKeyupRules$4","FlatgridType","horizontal","isDisabledButton","tryCycle","schema$t","flowConfig","execute$2","focusIn$2","_state","getInitial","moveLeft$2","moveRight$2","doMove$1","flowState","executeOnMove","doEscape","getKeydownRules$3","_flowState","westMovers","allowVertical","eastMovers","getKeyupRules$3","FlowType","toCell","matrix","rowIndex","columnIndex","cell","cycleHorizontal","startCol","deltaCol","newColIndex","cycleVertical","colIndex","startRow","deltaRow","nextRowIndex","colsInNextRow","nextColIndex","moveHorizontal","moveVertical","cycleRight","cycleLeft","cycleUp","cycleDown","moveLeft$1","moveRight$1","moveUp$1","moveDown$1","schema$s","focusIn$1","matrixConfig","previousSelector","selectors","execute$1","toMatrix","rows","doMove","ifCycle","ifMove","cycles","inRow","cellsInRow","allRows","moveNorth","moveSouth","getKeydownRules$2","getKeyupRules$2","MatrixType","schema$r","menuConfig","moveUp","moveDown","fireShiftTab","menuState","moveOnTab","fireTab","getKeydownRules$1","getKeyupRules$1","MenuType","schema$q","specialInfo","onSpace","onShiftEnter","onShiftTab","onTab","onUp","onDown","onLeft","onRight","stopSpaceKeyup","SpecialType","acyclic","flow","execution","menu","special","KeyboardBranches","isFlatgridState","keyState","Keying","keyConfig","sendFocusIn","set$2","replaceConfig","replaceState","insert","childSpec","append","appendee","prepend","prependee","removee","foundChild","_replaceConfig","replaceAt","replaceeIndex","replacer","replacee","replaceBy","replaceePred","ReplaceApis","Replacing","events$d","eventHandlers","focus$2","focusConfig","ignore","onFocus","isFocused","FocusApis","exhibit$4","tabindex","events$c","stopMousedown","ActiveFocus","FocusSchema","Focusing","SetupBehaviourCellState","initialState","updateAriaState","toggleConfig","toggleState","ariaInfo","aria","updateClass","toggleClass","toggle$2","set$1","isOn","ToggleApis","toggle","exhibit$3","events$b","load","toggleOnExecute","ActiveToggle","updatePressed","syncWithExpanded","updateExpanded","updateSelected","updateChecked","ToggleSchema","pressed","checked","expanded","Toggling","pointerEvents","onClick","events$a","optAction","executeHandler","hoverEvent","focusEvent","onHover","onFocus$1","hover","focus$1","builder$2","toggling","hasSubmenu","itemBehaviours","tConfig","ignoreFocus","schema$p","builder$1","schema$o","owner$2","parts$h","builder","focusWidget","widget","onHorizontalArrow","autofocus","setSource","_widget","widgetBehaviours","schema$n","itemSchema$2","separator","configureGrid","movementInfo","markers","configureMatrix","rowSelector","configureMenu","parts$g","itemInfo","unit","fakeFocus","schema$m","grid","make$7","_spec","_externals","menuBehaviours","selectedItem","role","Menu","transpose$1","trace","byItem","byMenu","triggerItem","triggerMenu","generate$2","menus","expansions","menuItems","menuPaths","_triggerItem","init$c","primary","directory","isClear","setMenuBuilt","menuName","setContents","sPrimary","sMenus","sExpansions","sPaths","getTriggeringItem","menuValue","getTriggerData","getItemByValue","getPreparedMenu","triggeringItemValue","triggeredItem","triggeredMenu","triggeringItem","triggeringPath","getTriggeringPath","itemValue","extraPath","lookupItem","revPath","triggers","menuIndex","expand","collapse","refresh","lookupMenu","extractPreparedMenu","otherMenus","menuValues","getPrimary","getMenus","prep","LayeredState","make$6","_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$1","tieredData","singleData","collapseItem","tieredMenu","tmenu","makeMenu","menuSandbox","menuSpec","lazySink","isFirstTierSubmenu","triggeringPaths","getSubmenuLayouts","submenuTriggers","st","submenuLayouts","factory$m","isPartOfRelated","related","getRelated","thing","showAt","showWithin","showWithinBounds","showMenuAt","showMenuWithinBounds","hide","getContent","inlineBehaviours","onShow","onHide","fireDismissalEventInstead","fireRepositionEventInstead","InlineView","westEdgeX","middleX","eastEdgeX","northY","southY","centreY","lookupPreserveLayout","preserve","lookupFlippedLayout","flip$2","global$g","factory$l","lookupAttr","getModAttributes","roleAttrs","buttonBehaviours","Button","record","anyInSystem","asSpec","global$f","rtlTransform","defaultIconName","defaultIcon","icons","getIconName","lcName","rtlName","lookupIcon","get$1","iconProvider","fallbackIcon","needsRtlTransform","iconName","addFocusableBehaviour","svg","renderIcon$2","rtlIconClasses","iconHtml","render$3","renderFirst","iconNames","notificationIconMap","warning","factory$k","memBannerText","translationProvider","renderPercentBar","percent","renderPercentText","memBannerProgress","progress","updateProgress","updateText","text$1","banner","iconChoices","icon","level","memButton","onAction","notificationIconSpec","notificationBodySpec","closeButton","Notification","NotificationManagerImpl","editor","extras","uiMothership","sharedBackstage","backstage","shared","getLayoutDirection","prePositionNotifications","notifications","notification","moveTo","positionNotifications","firstItem","moveRel","getEl","settings","closeCallback","hideCloseButton","timeout","notificationWrapper","progressBar","providers","getSink","header","isPositionedAtTop","layoutDirection_1","nodeAnchor","anchors","nuText","getArgs","ItemResponse","rate","cancel","throttle","global$e","isBoundary","isBlock","getContentEditable","repeatLeft","rootNode","backwards","autocompleteSelector","create$4","getNode","getDoc","extractContents","insertNode","elm","normalize","setCursorLocation","isValidTextRange","getText","isWhitespace","chr","stripTriggerChar","triggerCh","findChar","char","charAt","findStart","initRange","minChars","findTriggerChIndex","getParent","getRoot","cloneRange","triggerCharIndex","lastIndexOf","triggerChar","getContext","createRng","selectNode","setup$e","onKeypress","redirectKeyToItem","getItem","getView","isActive","cancelIfNecessary","isMenuOpen","stopImmediatePropagation","isProcessingAction","AutocompleterEditorEvents","global$d","isText","isElement$1","toLast","toLeaf","isPreviousCharContent","isStartOfWord","getTriggerContext","database","triggerChars","lookup$2","getDatabase","getRng","context","lookupWithContext","fetchOptions","startText","autocompleters","lookupByChar","autocompleter","lookupData","ac","fetchResult","fetch","maxResults","then","matchText","columns","highlightOn","separatorMenuItemSchema","createSeparatorMenuItem","autocompleterItemSchema","autocompleterSchema","createSeparatorItem","createAutocompleterItem","createAutocompleter","baseToolbarButtonFields","toolbarButtonSchema","createToolbarButton","baseToolbarToggleButtonFields","toggleButtonSchema","createToggleButton","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","contextformbutton","contextformtogglebutton","contextFormSchema","createContextForm","contextToolbarSchema","createContextToolbar","stringArray","register$b","popups","ui","registry","getAll","popup","datasetValues","dv","ToolbarMode","ItemResponse$1","navClass","selectableClass","colorClass","presetClasses","normal","color","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","containerClass","containerColumnClass","containerRowClass","containerAlignRightClass","containerAlignLeftClass","containerValignTopClass","containerValignMiddleClass","containerValignBottomClass","classForPreset","presets","forMenu","hasIcons","menuClasses","dom$1","chunk","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","forCollection","initItems","_hasIcons","_item","forHorizontalCollection","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_presets","structure","createPartialMenuWithAlloyItems","cardImageFields","cardImageSchema","cardTextFields","cardTextSchema","itemSchema$1","cardimage","cardtext","cardcontainer","cardContainerSchema","commonMenuItemFields","cardMenuItemSchema","createCardMenuItem","choiceMenuItemSchema","createChoiceMenuItem","baseFields","insertTableFields","colorSwatchFields","fancyMenuItemSchema","inserttable","colorswatch","createFancyMenuItem","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","detectSize","margin","selectorClass","descendants$1","columnLength","thisTop","cTop","abs","ceil","namedEvents","unnamedEvents","SimpleBehaviours","ExclusivityChannel","ShowTooltipEvent","HideTooltipEvent","hideAllExclusive","_tConfig","_tState","setComponents","tState","specs","getTooltip","tooltip","TooltippingApis","events$9","tooltipConfig","clearTooltip","clearTimer","show","isShowing","tooltipDom","tooltipComponents","setTooltip","resetTimer","ActiveTooltipping","TooltippingSchema","init$b","TooltippingState","Tooltipping","escape","global$c","global$b","getSkinUrl","skin","getParam","skinUrl","skinName","documentBaseURI","baseURL","isReadOnly","isSkinDisabled","getHeightSetting","getElement","getWidthSetting","DOM","getStyle","getMinWidthSetting","getMinHeightSetting","getMaxWidthSetting","getMaxHeightSetting","getUserStyleFormats","isMergeStyleFormats","getLineHeightFormats","getContentLanguages","getRemovedMenuItems","isMenubarEnabled","isToolbarEnabled","toolbar","isToolbarTrue","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsSetting","toolbars","toolbarArray","ToolbarLocation","getToolbarMode","_a$1","getToolbarGroups","getToolbarLocation","auto","isToolbarLocationBottom","fixedContainerSelector","fixedToolbarContainerTarget","isToolbarPersist","fixedContainerTarget","inline","useFixedContainer","getUiContainer","fixedContainer","isDistractionFree","isStickyToolbar","getStickyToolbarOffset","isDraggableModal$1","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$a","convertText","mac","alt","ctrl","shift","access","other","shortcut","updated","segment","renderIcon$1","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderContainer","directionClass","alignClass","align","getValignClass","valign","renderImage","src","renderColorStructure","providerBackstage","colorPickerCommand","removeColorCommand","itemText","ariaLabel","iconSvg","iconContent","getDom","common","title","baseDom","renderItemDomStructure","domTitle","renderNormalItemStructure","providersBackstage","renderIcons","iconSpec","renderIcon","renderEmptyIcon","leftIcon","checkmark","checkMark","textRender","htmlContent","menuItem","shortcutContent","caret","renderItemStructure","tooltipBehaviour","tooltipWorker","_tooltip","encodeText","encode","replaceText","translated","encoded","escapedMatchRegex","RegExp","renderAutocompleteItem","useText","onItemValueHandler","_api","render$2","shouldHighlight","cardText","renderCardMenuItem","setDisabled","renderChoiceItem","isSelected","setActive","parts$f","hexColour","shorthandRegex","longformRegex","isHexString","hex","normalizeHex","toUpperCase","fromString$1","getLongForm","hexString","m","extractValues","longForm","splitForm","exec","toHex","fromRgba","rgbaColour","red","green","blue","round$1","rgbRegex","rgbaRegex","alpha","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fromStringValues","fromString","rgbaString","rgbMatch","rgbaMatch","rgba","fireSkinLoaded$1","fire","fireSkinLoadError$1","fireResizeEditor","fireResizeContent","fireScrollContent","fireTextColorChange","hsvColour","fromRgb","minRGB","maxRGB","hexToHsv","hsvToHex","anyToHex","canvas","canvasContext","clearRect","fillStyle","fillRect","getImageData","global$9","storageName","ColorCache","storageString","localstorage","prune","diff","cache","unshift","pop","setItem","idx","splice","FocusMode","choiceItem","defaultColors","colorCache","mapColors","colorMap","colors","getColorCols$2","defaultCols","hasCustomColors$1","getColorMap","getColors$2","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$1","callback","setIconColor","splitButtonApi","newColor","setIconFill","registerTextColorButton","lastColor","addSplitButton","select","optCurrentRgb","currentRgb","currentHex","_splitButtonApi","onItemAction","registerTextColorMenuItem","addNestedMenuItem","getSubmenuItems","fancytype","isValid","onSubmit","getData","colorpicker","windowManager","alert","details","initialData","buttons","onCancel","register$a","lastForeColor","lastBackColor","createPartialChoiceMenu","presetItemTypes","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","rowClass","deriveCollectionMovement","renderColorSwatchItem","getColorItems","colorinput","getColorCols","widgetSpec","useCustomColors","initData","allowCustomColors","hasCustomColors","getColors","cellOverEvent","cellExecuteEvent","makeCell","col","labelId","emitCellOver","se","makeCells","cells","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","renderInsertTableMenuItem","sizeLabelId","memLabel","fancyMenuItems","renderFancyMenuItem","render","renderNestedItem","downwardsCaret","renderNormalItem","renderSeparatorItem","renderToggleMenuItem","autocomplete","separator$3","nested","toggle$1","fancy","card","createMenuItemFromBridge","isHorizontalMenu","parseForHorizontalMenu","menuitem","createAutocompleteItems","createPartialMenu","itemHasIcon","createItem","createPartial","createTieredDataFrom","partialMenu","createMenuFrom","focusMode","ContentFocus","register$9","activeAutocompleter","processingAction","hideIfNecessary","lastElement","getAutocompleters","getCombinedItems","choices","itemMeta","nr","autocompleterApi","reload","BUBBLE_TO_SANDBOX","commenceIfNecessary","matchLength","display","ld","doLookup","newContext","lookupInfo","combinedItems","autocompleterUiApi","hasPlugin","Autocompleter","register","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$d","rawSettings","tapEvent","simpleEvents","tapStopped","stopped","pasteTimeout","onPaste","onKeydown","stopBackspace","onFocusIn","focusoutTimeout","onFocusOut","derive","rawTarget","fromSource","isStopped","isCut","fromExternal","adt$1","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$j","domWithoutAttributes","containerBehaviours","Container","takeover","domEvents","_alloyId","broadcast$1","broadcastData","receivers","receiver","renderBar","interpreter","schema$l","parts$e","excludeFactory","factory$i","fieldBehaviours","descriptor","descriptorId","getField","getLabel","FormField","exhibit$2","tabConfig","tabAttr","ActiveTabstopping","TabstopSchema","Tabstopping","global$8","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel$2","formChangeEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderCollection","runOnItem","htmlLines","mapItemName","disabledClass","encodeAllRaw","tgt","collectionEvents","currentActive","iterCollectionItems","applyAttributes","childElm","schema$k","focusBehaviours","selectOnFocus","setSelectionRange","inputBehaviours","inputAttributes","inputStyles","inputClasses","factory$h","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","done","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","Promise$2","nu$3","baseFn","callbacks","nCallback","isReady","cbs","pure$1","LazyValue","pure","errorReporter","make$5","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","nu$2","Future","ariaElements","isAriaElement","markValid","invalidConfig","invalidClass","notify","notifyInfo","getContainer","validHtml","onValid","markInvalid","invalidState","onInvalid","_invalidState","validatorInfo","validate","onValidate","valid","isInvalid","InvalidateApis","events$8","onEvent","validateOnLoad","ActiveInvalidate","InvalidateSchema","Invalidating","validation","getCoupled","coupleConfig","coupleState","getOrCreate","CouplingApis","CouplingSchema","init$a","coupled","CouplingState","Coupling","partType$1","getAnchor","getHotspot","getAnchorOverrides","mapFetch","fetcher","openF","highlightOnOpen","futureData","getLazySink","tdata","HighlightFirst","onOpenSync","processed","_onOpenSync","_highlightOnOpen","togglePopup","showing","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox$1","ariaOwner","sandboxClasses","sandboxBehaviours","sandboxFields","schema$j","parts$d","factory$g","switchToMenu","HighlightNone","triggerExecute","dropdownBehaviours","Dropdown","exhibit$1","unselectable","events$7","ActiveUnselecting","Unselecting","renderPanelButton","colorInputChangeEvent","colorSwatchChangeEvent","colorPickerCancelEvent","renderColorInput","colorInputBackstage","inputValue","span","emitSwatchChange","colorBit","memColorButton","colorPicker","valueOpt","colorButton","_field","labelPart","edgePart","model","edgeActions","det","mouseIsDown","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","spectrumPart","modelDetail","getValueFromEvent","spectrum","SliderParts","_sliderChangeEvent","sliderChangeEvent","isTouchEvent$1","evt","getEventSource","touchEvent","mouseEvent","minX","minY","min1X","min1Y","max1X","max1Y","xRange","yRange","halfX","halfY","step","stepSize","snap","snapToGrid","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","currentValue","xValue","yValue","xyValue","fireSliderChange$3","setToTLEdgeXY","setToTEdge","setToTEdgeXY","setToTREdgeXY","setToREdge","setToREdgeXY","setToBREdgeXY","setToBEdge","setToBEdgeXY","setToBLEdgeXY","setToLEdge","setToLEdgeXY","reduceBy","increaseBy","capValue","snapValueOf","initValue","extraValue","remainder","adjustment","rawSteps","maxSteps","numSteps","findOffsetOf","findValueOf","hasMinEdge","hasMaxEdge","minBound","maxBound","screenRange","capMin","capMax","findOffsetOfValue$2","maxOffset","centerMinEdge","centerMaxEdge","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$2","sliderValue$2","findValueOfOffset$1","setValueFrom$2","sliderVal","setToMin$2","setToMax$2","moveBy$2","handleMovement$2","getValueFromEvent$2","findOffsetOfValue$1","minEdge","maxEdge","minOffset","findPositionOfValue$1","slider","setPositionFromValue$2","thumb","edges","getSpectrum","getLeftEdge","getRightEdge","thumbRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","HorizontalModel","setToMin","setToMax","findValueOfOffset","findPositionOfValue","setPositionFromValue","fireSliderChange$1","sliderValue$1","setValueFrom$1","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue","setPositionFromValue$1","getTopEdge","getBottomEdge","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange","sliderValue","moveBy","isVerticalMovement","handleMovement","mX","mY","xPos","yPos","thumbXRadius","thumbYRadius","TwoDModel","SliderSchema","sketch$2","getThumb","changeValue","onChange","resetToMin","resetToMax","fireOnChoose","onChoose","wasDown","onDragStart","onDragEnd","sliderBehaviours","getInitialValue","onInit","Slider","fieldsUpdate","sliderUpdate","paletteUpdate","sliderFactory","getClass","_thumb","owner$1","schema$i","getPartName$1","sketch$1","fSpec","fieldParts","make$4","formBehaviours","form","resPs","resPThunk","pName","Form","validInput","invalidInput","validatingInput","translatePrefix","rgbFormFactory","onValidHexx","onInvalidHexx","invalidation","renderTextField","description","helptext","comps","concats","copyRgbToHex","hexField","copyRgbToForm","rgb","memPreview","updatePreview","preview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","updateHex","rgbFormSketcher","paletteFactory","_translate","setColour","ctx","grdWhite","createLinearGradient","addColorStop","grdBlack","setPaletteHue","setPaletteThumb","_detail","_slider","saturationBrightnessPaletteSketcher","setHue","_apis","setThumb","makeFactory","rgbForm","onInvalidHex","sbPalette","hueSliderToDegrees","hueDegreesToSlider","paletteRgba","paletteHue","memSlider","memPalette","memRgb","updatePalette","_hex","palette","updateFields","updateSlider","updatePaletteThumb","updateState","runUpdates","updates","onPaletteUpdate","oldHue","newHsv","newHex","onSliderUpdate","oldRgb","oldHsv","onFieldsUpdate","colourPickerSketcher","self$1","memento$1","mem","childAt","ComposingConfigs","memento","english","getEnglishText","translate$1","renderColorPicker","colourPickerFactory","memPicker","picker","optRgbForm","optHex","formValues","pattern","global$7","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","ta","scriptId","scriptUrl","ea","cvalue","ed","global$6","processors","rawProcessors","rawValue","postprocess","withComp","optInitialValue","getter","setter","withElement","domValue","domHtml","RepresentingConfigs","defaultImageFileTypes","filterByExtension","files","allowedImageFileTypes","explode","getSetting","isFileInAllowedTypes","file","renderDropZone","actions","onDrop","transferEvent","handleFiles","dataTransfer","onSelect","memInput","accept","renderField","inputComp","renderGrid","beforeObject","afterObject","craftWithClasses","outline","craft","triggerTab","isPseudoStop","platformNeedsSandboxing","getDynamicSource","isSandbox","cachedValue","_frameComponent","frameComponent","contentWindow","renderIFrame","sandboxed","sourcing","create$3","resize$3","tCanvas","get2dContext","drawImage","getWidth$1","image","naturalWidth","getHeight$1","naturalHeight","anyWindow","asap","immediateFn","catch","values_1","Promise$1","blobToImage","blobUrl","URL","createObjectURL","Image","removeListeners","loaded","dataUriToBlobSync","uri","mimetype","base64","sliceSize","byteCharacters","atob","bytesLength","slicesCount","byteArrays","sliceIndex","begin","end","bytes","charCodeAt","Uint8Array","Blob","dataUriToBlob","canvasToBlob","quality","HTMLCanvasElement","toBlob","toDataURL","canvasToDataURL","blobToCanvas","revokeImageUrl","blobToDataUri","reader","FileReader","onloadend","readAsDataURL","revokeObjectURL","create$2","getCanvas","initialType","getType","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","dataurl","toCanvas","fromBlob","fromCanvas","blobToImageResult","clamp","parsedValue","identity","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$1","brightness$1","contrast$1","colorize$1","sharpen$1","gamma$1","pow","scale","dW","dH","sW","sH","wRatio","hRatio","scaleCapped","scaled","_scale","ceilWithPrecision","precision","mul","upper","rotate$1","angle","applyRotate","degrees","rad","PI","sin","cos","newWidth","newHeight","rotate","flip$1","axis","applyFlip","crop$1","applyCrop","resize$2","newCanvas","invert","sharpen","gamma","colorize","contrast","flip","crop","resize$1","iconsProvider","renderIconFromPack","renderReplacableIconFromPack","renderLabel$1","internalToolbarButtonExecute","onToolbarButtonExecute","itemApi","buttonApi","toolbarButtonEventOrder","updateMenuText","updateMenuIcon","renderCommonDropdown","optMemDisplayText","optMemDisplayIcon","onLeftOrRightInMenu","dropdown","tooltipAttributes","translatedTooltip","memDropdown","displayText","displayIcon","isMenuItemReference","isSeparator$1","isExpandingMenuItem","separator$2","unwrapReferences","realItems","getFromExpandingItem","submenuItems","newMenus","newExpansions","getFromItem","generateValueIfRequired","itemWithValue","newData","mainMenu","submenus","getMenuButtonApi","renderMenuButton","_comp","getFetch","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$h","coupledPart","selfName","otherName","lock","onLockedChange","parts$c","locked","lockClass","factory$f","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","makeIcon","pLock","formGroup","getFieldPart","isField1","widthField","heightField","_lock","newSize","optCurrent","optOther","value1","value2","undo","redo","zoom","back","swap","transform$1","tempTransform","transformApply","internal","saveState","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$5","global$4","global$3","global$2","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$1","currentRect","viewPortRect","clampRect","containerElm","dragHelpers","handles","xMul","yMul","deltaW","deltaH","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","bg","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","updateTempState","newTempState","createState","destroyTempState","destroyState","destroyStates","states","addBlobState","addTempState","applyTempState","postApply","temp","currentState","getHistoryStates","renderImageTools","historyStates","sideBar","disableUndoRedo","_oImg","unblock","imageResultToBlob","block","editPanel","applyButton","blobManipulate","manipulate","tempManipulate","manipulateApply","currentUrl","renderLabel","backstageShared","isSingleListItem","dataAttribute","fetchItems","dropdownComp","selectedValue","findItemByValue","renderListBox","initialItem","sketchSpec","listBoxWrap","renderPanel","factory$e","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$6","streamConfig","streamState","streams","stream","cancelEvent","ActiveStreaming","_config","setTimer","init$9","StreamingState","setup$c","streamInfo","sInfo","throttler","onStream","stopEvent","StreamingSchema","Streaming","setValueFromItem","itemData","setCursorAtEnd","setSelectionOn","setSelectionToEnd","attemptSelectOver","selectsOver","inputDisplay_1","getDisplayText","itemDisplay","itemExecute","make$3","navigateList","highlighter","previewing","focusBehaviours$1","responseTime","focusInInput","previousValue_1","pv","sandboxIsOpen","openClass","onItemExecute","dismissOnBlur","typeahead","typeaheadBehaviours","schema$g","parts$b","populateFromBrowse","Typeahead","wrap","bindFuture","resA","bindResult","mapResult","foldResult","whenError","whenValue","withTimeout","errorThunk","timedOut","nu$1","worker","fromFuture","future","fromPromise","completer","FutureResult","separator$1","toMenuItem","staticMenuItem","toMenuItems","targets","filterLinkTargets","filteredTargets","headerTargets","linkInfo","anchorTargets","anchorTargetTop","anchorTop","anchorTargetBottom","anchorBottom","historyTargets","history","joinMenuLists","bothEmpty","filterByQuery","term","lowerCaseTerm","getItems","fileType","urlBackstage","urlInputValue","getLinkInformation","getHistory","errorId","renderUrlInput","updateHistory","urlEntry","addToHistory","filetype","memUrlBox","_newValue","getValidationHandler","memInvalidIcon","invalidComp","_menu","_entry","errId","memStatus","optUrlPicker","getUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","fieldname","chosenData","renderAlertBanner","iconTooltip","renderCheckbox","repBehaviour","toggleCheckboxHandler","className","memIcons","renderHtmlPanel","make$2","makeIframe","iframeSpec","factories","bar","collection","alertbanner","textarea","iframe","checkbox","dropzone","listbox","selectbox","sizeinput","urlinput","customeditor","htmlpanel","imagetools","table","noFormParts","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","bubbleAlignments$2","valignCentre","alignCentre","alignLeft","alignRight","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","lazyUseEditableAreaAnchor","bubbleSize","editableAreaAnchor","standardAnchor","getBannerAnchor","getCursorAnchor","bodyElement","getNodeAnchor$1","getAnchors","isToolbarTop","useFixedToolbarContainer","getContentAreaContainer","inlineDialog","ColorInputBackstage","isDraggableModal","DialogBackstage","HeaderBackstage","getDockingMode","setDockingMode","defaultStyleFormats","isNestedFormat","isBlockFormat","isInlineFormat","isSelectorFormat","mapFormats","userFormats","fmt","customFormats","formats","formatName","formatNameWithPrefix","registerCustomFormats","registerFormats","getStyleFormats","registeredUserFormats","processBasic","isSelectedFor","getPreviewFor","formatterSpec","getStylePreview","register$8","enrichSupported","enrichMenu","submenuSpec","enrichCustom","customSpec","newItem","doEnrich","newItems","getStyleItems","init$8","parseStyle","getCssText","settingsFormats","settingsFlattenedFormats","eventsFormats","eventsFlattenedFormats","replaceSettings","_e","enriched","modifications","fromSettings","fromEvents","getFlattenedKeys","isElement","hasContentEditableState","contentEditable","isContentEditableTrue","isContentEditableFalse","isChildOfContentEditableTrue","getElementText","innerText","getOrGenerateId","isAnchor","isValidAnchor","isEditable","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","elms","getAnchorTargets","getTargetElements","hasTitle","LinkTargets","STORAGE_KEY","HISTORY_LENGTH","isHttpUrl","isArrayOfUrl","isRecordOfUrlArray","getAllHistory","unparsedHistory","SyntaxError","setAllHistory","itemsWithoutUrl","isTruthy","makeMap","getPicker","getPickerTypes","optFileTypes","optLegacyTypes","optTypes","_picker","types","getPickerSetting","pickerTypes","entry","getTextSetting","UrlInputBackstage","init$7","contextMenuState","styleselect","isContextMenuOpen","setContextMenuState","setup$b","ship","channel","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onContentMousedown","editorManager","loopEditor","relatedTarget","onWindowScroll","onWindowResize","onEditorResize","onEditorProgress","onDismissPopups","parts$a","partType","schema$f","customListDetail","itemsPart","parts$9","factory$d","_external","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","makeItem","itemsToRemove","builtLists","setupItem","shell","listBehaviours","CustomList","schema$e","enhanceGroups","parts$8","factory$c","setGroups","groups","getGroupContainer","toolbarBehaviours","Toolbar","setup$a","isDocked$2","getBehaviours$1","StaticHeader","isDocked","getBehaviours","getOffsetParent","isFixed","offsetParent$1","getOrigin","morphAdt","static","appear","contextualInfo","transitionClass","fadeOutClass","fadeInClass","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","isVisibleForModes","getPrior","getInitialPos","storePrior","setInitialPos","revertToOriginal","clearInitialPos","offsetBox_1","_left","_top","_right","_bottom","morphToOriginal","getModes","morphToFixed","winBox","top_1","isTop","getMorph","getMorphToOriginal","morphToStatic","onUndocked","morphToCoord","method","onDocked","updateVisibility","morphToDocked","contextual","contextInfo","lazyContext","setVisible","refreshInternal","lazyViewport","morph","setDocked","resetInternal","refresh$4","isDocked$1","setModes","DockingApis","events$5","dockInfo","dockState","onShown","onHidden","ActiveDocking","DockingSchema","init$6","docked","initialBounds","DockingState","Docking","toolbarHeightChange","visibility","editorStickyOnClass","editorStickyOffClass","scrollFromBehindHeader","containerHeader","viewHeight","innerHeight","scrollPos","markerElement","markerPos","markerHeight","markerTop","markerBottom","editorHeaderPos","editorHeaderHeight","editorHeaderTop","editorHeaderBottom","editorHeaderDockedAtTop","editorHeaderDockedAtBottom","isDockedMode","updateIframeContentFlow","getOccupiedHeight","parentElem","padding","parentWidth","updateSinkVisibility","sinkElem","updateEditorClasses","editorContainer","restoreFocus","headerElem","focusedElem","ownerDoc","activeElm","findFocusedElem","rootElm","setup$9","lazyHeader","getIframeBehaviours","focusedElm","runOnSinkElement","onDockingSwitch","additionalBehaviours","headerHeight","boxHeight","topBound","win$1","StickyHeader","sticky","groupToolbarButtonSchema","createGroupToolbarButton","baseMenuButtonFields","MenuButtonSchema","createMenuButton","splitButtonSchema","createSplitButton","factory$b","setMenus","activeButton","hoveredButton","activeComp","hoveredComp","prev","SilverMenubar","getAnimationRoot","slideConfig","getDimensionProperty","dimension","getDimension","disableTransitions","shrinkingClass","growingClass","setShrunk","closedClass","setGrown","doImmediateShrink","slideState","_calculatedSize","setCollapsed","onStartShrink","onShrunk","doStartShrink","calculatedSize","doStartSmartShrink","shrinker","doStartGrow","wasShrinking","beforeSize","fullSize","startPartialGrow","startCompleteGrow","setStartSize","setExpanded","onStartGrow","refresh$3","isExpanded","grow","shrink","immediateShrink","hasGrown","hasShrunk","isCollapsed","isGrowing","_slideState","isShrinking","isTransitioning","toggleGrow","SlidingApis","events$4","onGrown","ActiveSliding","SlidingSchema","init$5","SlidingState","Sliding","schema$d","getPartName","sSpec","slot","make$1","getSlotNames","getSlot","onSlot","def","onSlots","doShowing","_key","doShow","doHide","hideSlot","hideSlots","hideAllSlots","showSlot","slotBehaviours","slotApis","SlotContainer","sidebarSchema","createSidebar","setup$8","sidebars","queryCommandValue","addToggleButton","handleToggle","makePanels","panelConfigs","bridged","sidepanel","optSidePanelSpec","sidePanelSpec","makeSidebar","slotContainer","setSidebar","sidebar","optSlider","toggleSidebar","optSlotContainer","whichSidebar","sidebarOpen","fixSize","autoSize","renderSidebar","getBusySpec","blockerBehaviours","blockSpec","isBlocked","onBlock","blockWith","onUnblock","BlockingApis","BlockingSchema","init$4","BlockingState","Blocking","getAttrs","getBusySpec$1","_root","_behaviours","focusBusyComponent","throbber","toggleEditorTabIndex","tabIndexAttr","dataTabIndexAttr","iframeElement","tabIndex","toggleThrobber","throbberFocus","busyComp","renderThrobber","isFocusEvent","isPasteBinTarget","targetElm","setup$7","lazyThrobber","throbberState","stealFocus","command","setEditorTimeout","generate$1","within","withinWidth","apportion","total","parray","toUnit","fitLast","overflow","overflower","fitAll","tryFit","divide","setGroups$1","storedGroups","bGroups","findFocusedComp","refresh$2","setOverflow","builtGroups","overflowGroup","focusedComp","availableWidth","overflows","schema$c","schema$b","parts$7","expandable","schema$a","parts$6","toggledClass","toolbarSandbox","bounder","makeSandbox","factory$a","FloatingToolbarButton","schema$9","parts$5","factory$9","tgroupBehaviours","itemSelector","ToolbarGroup","buildGroups","refresh$1","memFloatingToolbarButton","overflowGroups","floatingToolbarButton","factory$8","getOverflowBounds","overflowToggledClass","splitToolbarBehaviours","getOverflow","SplitFloatingToolbar","schema$8","parts$4","onClosed","onOpened","toggleToolbar","overf","factory$7","toolbarToggleEvent","doSetGroups","_button","SplitSlidingToolbar","renderToolbarGroupCommon","toolbarGroup","renderToolbarGroup","getToolbarbehaviours","toolbarSpec","modeName","onAttached","initGroups","renderMoreToolbarCommon","cyclicKeying","renderFloatingMoreToolbar","baseSpec","overflowXOffset","moreDrawerData","headerBounds","docElem","docBounds","renderSlidingMoreToolbar","renderToolbar","scrolling","factory$6","getSocket","getHeader","setToolbar","setToolbars","mToolbar","refreshToolbar","toggleToolbarDrawer","isToolbarDrawerToggled","getThrobber","focusToolbar","optToolbar","setMenubar","menubar","focusMenubar","partMenubar","toolbarFactory","sliding","floating","partMultipleToolbar","_mToolbar","tc","_index","partToolbar","renderer","lazyToolbar","lazyMoreButton","partHeader","partSocket","partSidebar","partThrobber","OuterContainer","grps","grp","renderedToolbars","defaultMenubar","defaultMenus","edit","tools","help","removedMenuItems","itemName","removedMenuItem","parseItemsString","identifyMenus","rawMenuData","userDefinedMenus","validMenus","isDefaultMenu","menuData","isNotSeparator","fireSkinLoaded","_skinLoaded","initialized","fireSkinLoadError","loadStylesheet","stylesheetUrl","styleSheetLoader","unload","loadUiSkins","skinUiCss","loadShadowDomUiSkins","isInShadowRoot$1","shadowDomSkinCss","loadSkin","isInline","contentCSS","onSetupFormatToggle","boundCallback","formatChanged","onSetupEvent","handleEvent","onActionToggleFormat$1","rawItem","onActionExecCommand","generateSelectItems","_editor","generateItem","response","si","invalid","validateItems","preItems","getCurrentValue","shouldHide","createMenuItems","createSelectButton","getComponent","rawFormats","buildBasicStaticDataset","ResizeTypes","delimiter","SemiColon","buildBasicSettingsDataset","settingName","alignMenuItems","getSpec$4","getMatchingValue","_format","updateSelectMenuIcon","alignment","canApply","createAlignSelect","alignSelectMenu","defaultFontsFormats","systemStackFonts","splitFonts","fontFamily","fonts","font","isSystemFontStack","matchesSystemStack","getSpec$3","systemFont","getFirstFont","matchOpt","updateSelectMenuText","createFontSelect","fontSelectMenu","defaultFontsizeFormats","legacyFontSizes","keywordFontSizes","factor","toPt","fontSize","toLegacy","getSpec$2","_loop_1","pt","legacy","Space","createFontsizeSelect","fontsizeSelectMenu","findNearest","getStyles","defaultBlocks","getSpec$1","fallbackFormat","detectedFormat","createFormatSelect","formatSelectMenu","getSpec","getFormatItems","flattenedItems","createStyleSelect","styleSelectMenu","events$3","reflectingConfig","reflectingState","renderComponents","newComponents","rawData","ActiveReflecting","reflectState","ReflectingApis","ReflectingSchema","init$3","ReflectingState","Reflecting","schema$7","arrowPart","arrow","buttonPart","btn","splitDropdown","parts$3","factory$5","openMenu","executeOnButton","buttonEvents","ariaDescriptor","splitDropdownBehaviours","SplitDropdown","getButtonApi","getToggleApi","getTooltipAttributes","focusButtonEvent","renderCommonStructure","_d","renderFloatingToolbarButton","identifyButtons","renderCommonToolbarButton","specialisation","toolbarButtonBehaviours","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","displayChannel","underlinePath","setIconStroke","buttonComp","_c","defaultToolbar","renderFromBridge","bridgeBuilder","togglebutton","menubutton","splitbutton","grouptoolbarbutton","identify","allowToolbarGroups","TopToBottom","styleSelectButton","fontsizeSelectButton","fontSelectButton","formatButton","alignMenuButton","extractFrom","bespokeButtons","fontsizeselect","fontselect","formatselect","removeUnusedDefaults","filteredItemGroups","subItem","convertStringToolbar","strToolbar","groupsStrings","isToolbarGroupSettingArray","createToolbar","toolbarConfig","lookupButton","toolbarItem","prefixes","toolbarGroups","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents$1","initialDocEle","lastWindowDimensions","innerWidth","lastDocumentDimensions","resizeWindow","outer","resizeDocument","docEle","inner","elementLoad","render$1","lastToolbarWidth","eTargetNode","targetNode","uiRoot","socket","limit","unbinder","_ui","addQueryValueHandler","toolbarMode","refreshDrawer","iframeContainer","Iframe","parseToInt","re","numToPx","calcCappedSize","minSize","maxSize","minOverride","maxOverride","getHeight","baseHeight","minHeight","getHeightWithFallback","getWidth","baseWidth","minWidth","getWidthWithFallback","InlineHeader","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","toolbarPersist","prevPosAndBounds","resizeContent","prevPos","prevBounds","hasResized","uiContainer","delayedRender","Inline","showContextToolbarEvent","hideContextToolbarEvent","getFormApi","runOnExecute","formApi","renderContextButton","renderContextToggleButton","mementos","asSpecs","findPrimary","compInSystem","buildInitGroups","commands","renderContextForm","toolbarType","ContextForm","isVerticalOverlap","threshold","getRangeRect","leaf$1","getSelectionBounds","scroll_1","bodyPos","getAnchorElementBounds","getHorizontalBounds","contentAreaBox","viewportBounds","getVerticalBounds","isToolbarLocationTop","headerBox","isToolbarBelowContentArea","isToolbarAbove","containerBounds","getContextToolbarBounds","toolbarOrMenubarEnabled","bubbleSize$1","bubbleAlignments$1","inset","anchorOverrides","isEntireElementSelected","preservePosition","currentPosition","shouldUseInsetLayouts","determineInsetLayout","contextbar","selectionBounds","isSameAnchorElement","isOverlapping","isReposition","yBounds","contextbarHeight","getAnchorSpec$2","mobile","smartInsetLayout","newAnchor","getInsetLayouts","desktopAnchorSpecLayouts","mobileAnchorSpecLayouts","getAnchorLayout","matchTargetWith","ctxs","toolbarApi","contextToolbars","contextForms","filterByPositionForStartNode","doesPositionExist","filterToolbarsByPosition","hasSelectionToolbars","hasNodeToolbars","nodeToolbars","selectionToolbars","filterByPositionForAncestorNode","findPosition_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","register$7","registryContextToolbars","lastTrigger","lastContextPosition","canLaunchToolbar","isSameLaunchElement","shouldContextToolbarHide","contextToolbarBounds","anchorBounds","hideOrRepositionIfNecessary","contextBarEle","wrapInPopDialog","shortcuts","getScopes","alloySpec","buildToolbar","buildContextToolbarGroups","allButtons","buildContextFormGroups","default","anchorLayout","launchContext","launchContextToolbar","toolbarKey","register$6","alignToolbarButtons","cmd","addButton","unsupportedLength","decimalDigits","signedInteger","exponentPart","dot","unsignedDecimalLiteral","float","isUnit","accepted","check","unitRaw","normalise","registerController","getMenuItems","getOptions","hash","oldApi","unbindWatcher","watcher","setCurrent","addMenuButton","onToolbarSetup","onMenuSetup","lineHeightSpec","languageSpec","settingsOpt","customCode","customValue","ele","codeOpt","lang","register$5","register$4","onSetupOutdentState","queryCommandState","registerButtons$2","register$3","onActionToggleFormat","registerFormatButtons","_idx","name_1","registerCommandButtons","registerCommandToggleButtons","registerButtons$1","registerMenuItems$2","addMenuItem","register$2","onSetupUndoRedoState","registerMenuItems$1","registerButtons","register$1","onSetupVisualAidState","hasVisual","registerMenuItems","addToggleMenuItem","registerToolbarButton","setup$6","transpose","dx","dy","isTouchEvent","fromPageXY","pageX","pageY","fromClientXY","transposeContentAreaContainer","containerPos","getPos","getPointAnchor","getSelectionAnchor","getNodeAnchor","getAnchorSpec$1","anchorType","initAndShow$1","buildMenu","contextmenu","anchorSpec","bubbleAlignments","isTouchWithinSelection","touch_1","rngRectOpt","rngRect","setupiOSOverrides","originalSelection","selectionReset","setRng","unbindEventListeners","preventMousedown","clearSelectionReset","getAnchorSpec","bubbleYOffset","initAndShow","shouldHighlightImmediately","openiOS_1","patchPipeConfig","shouldNeverUseNative","defaultItems","contextMenus","isContextMenuDisabled","getContextMenu","getAvoidOverlapSelector","makeContextItem","commonMenuItem","addContextMenuGroup","groupItems","lastMenuItem","generateContextMenu","selectedElement","sections","allItems","isNativeOverrideKeyEvent","isTriggeredByKeyboard","pointerType","getSelectedElement","getAnchorType","selectorExists","setup$5","hideContextMenu","showContextMenu","initAndShow$2","hideEvents","subtract","changes","asFixed","coord","asAbsolute","asOffset","withinRange","coord1","coord2","getDeltas","toStyles","stylesOpt","absorb","partialCoord","originalCoord","absorbOne","stencil","optX","optY","parseAttrToInt","NaN","snapsInfo","leftAttr","topAttr","getCoords","snapInfo","moveOrSnap","newCoord","mustSnap","findClosestSnap","findSnap","fixedCoord","spanned","stopDrag","findMatchingSnap","snaps","sensor","inRange","getSnapPoints","matchSnap","bestSnap","deltas","bestDeltas","currAvg","bestAvg","snapTo$1","snapTo","dragConfig","getTarget","repositionTarget","origin_1","snapPin","DraggingApis","initialAttribute","resetZIndex","changeZIndex","zindex","instigate","anyComponent","discard","createComponent","blockerClass","blockerEvents","SnapSchema","schema$6","getCurrentCoord","location","clampCoords","coords","absoluteCoord","newCoords","offset$1","calcNewCoord","optSnaps","currentCoord","snapping","onSensor","dragBy","onDrag","calcStartData","dragState","dragMode","dragStartData","getStartData","dlt","updateStartState","setStartData","init$2","dragApi","forceDrop","drop","delayDrop","getData$1","getDelta$1","MouseData","getDelta","events$2","stop$1","schema$5","init$1","getDataFrom","TouchData","events$1","blockerSingleton","stopBlocking","schema$4","schema$3","mouse","mouseOrTouch","DraggingBranches","previous","calculateDelta","dragEvent","nuData","DragState","Dragging","dragger","snapWidth","snapOffset","calcSnap","selectorOpt","td","selectorHandle","sensorLeft","sensorTop","sensorWidth","sensorHeight","getSnapsConfig","isSameCell","cellOpt","currentTd","createSelector","setup$4","tlTds","brTds","startCell","finishCell","getTopLeftSnap","memTopLeft","getTopLeftSnaps","getBottomRightSnap","memBottomRight","getBottomRightSnaps","topLeftSnaps","bottomRightSnaps","bottomRight","showOrHideHandle","isAbove","isBelow","cellRect","viewportHeight","aboveViewport","belowViewport","getSnapConfig","snapTopLeft","snapLastTopLeft","snapBottomRight","snapLastBottomRight","otherCells","upOrLeftCells","downOrRightCells","isHidden","renderElementPath","getDataPath","newPathElements","_btn","divider","newAcc","updatePath","parents","newPath","parent_1","isDefaultPrevented","isPropagationStopped","getDimensions","resizeType","originalHeight","originalWidth","Both","resize","dim","getResizeType","None","Vertical","keyboardHandler","renderResizeHandler","_target","renderWordCount","replaceCountText","words","characters","currentVal","wordCount","renderStatusbar","renderBranding","linkHtml","getTextComponents","getComponents","resizeHandler","setup$3","lazyOuterContainer","platformClasses","touchPlatformClass","deviceClasses","isToolbarBottom","dirAttributes","verticalDirAttributes","isHeaderDocked","resizeUiMothership","makeSinkDefinition","isGridUiContainer","sinkSpec","reactiveWidthSpec","memAnchorBar","lazyAnchorBar","sb","statusbar","socketSidebarContainer","hasMultipleToolbar","hasToolbar","hasMenubar","getPartToolbar","editorComponents","containerComponents","border","addQueryStateHandler","getUi","broadcastAll","setEditorSize","parsedHeight","parsedWidth","renderUI","toolbarGroupButtonConfig","addGroupToolbarButton","toolbarOpt","describedBy","describedElement","describeElement","describeId","labelledBy","labelledElement","labelElement","schema$2","basic","parts$2","dragBlockClass","getDragBounds","factory$4","dialogComp","showDialog","externalBlocker","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","getFooter","modalBehaviours","ModalDialog","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseFooterButtonFields","dialogFooterButtonFields","normalFooterButtonFields","menuFooterButtonFields","dialogFooterButtonSchema","submit","alertBannerFields","alertBannerSchema","createBarFields","itemsField","buttonFields","buttonSchema","checkboxFields","checkboxSchema","checkboxDataProcessor","formComponentFields","formComponentWithLabelFields","collectionFields","collectionSchema","collectionDataProcessor","colorInputFields","colorInputSchema","colorInputDataProcessor","colorPickerFields","colorPickerSchema","colorPickerDataProcessor","customEditorFields","customEditorFieldsOld","customEditorSchema","customEditorDataProcessor","dropZoneFields","dropZoneSchema","dropZoneDataProcessor","createGridFields","htmlPanelFields","htmlPanelSchema","iframeFields","iframeSchema","iframeDataProcessor","imageToolsFields","imageToolsSchema","inputFields","inputSchema","inputDataProcessor","createLabelFields","listBoxSingleItemFields","listBoxNestedItemFields","listBoxItemSchema","listBoxFields","listBoxSchema","listBoxDataProcessor","selectBoxFields","selectBoxSchema","selectBoxDataProcessor","sizeInputFields","sizeInputSchema","sizeInputDataProcessor","tableFields","tableSchema","textAreaFields","textAreaSchema","textAreaDataProcessor","urlInputFields","urlInputSchema","urlInputDataProcessor","createItemsField","itemSchema","sErr","passValue","panelSchema","panelFields","tabFields","tabPanelFields","tabPanelSchema","dialogButtonFields","dialogButtonSchema","dialogSchema","tabpanel","createDialog","urlDialogButtonSchema","urlDialogSchema","createUrlDialog","getAllObjects","isNamedItem","dataProcessors","togglemenuitem","getDataProcessor","getNamedItems","createDataValidator","namedItems","internalDialog","dataValidator","DialogManager","openUrl","redial","toValidValues","renderBodyPanel","memForm","formValue","factory$3","tabButtonBehaviours","TabButton","schema$1","tabsPart","barDetail","dismissTab$1","tabbar","changeTab$1","clickToDismiss","tabClass","parts$1","factory$2","tabbarBehaviours","selectedClass","tab","Tabbar","factory$1","tabviewBehaviours","Tabview","barPart","tabs","viewPart","tabValue","tabview","tabWithValue","tabData","onChangeTab","changeTabBy","section","byPred","tabSectionBehaviours","selectFirst","onDismissTab","getViewItems","showTab","tabKey","getTabIfNotActive","optTab","TabSection","measureHeights","allTabs","tabviewComp","_tab","getMaxHeight","heights","getMaxTabviewHeight","tablist","documentElement$1","tabviewHeight","isTabListBeside","currentTabHeight","dialogTopMargin","dialogBottomMargin","dialogHeight","chromeHeight","setTabviewHeight","updateTabviewHeight","dialogBody","maxTabHeight","getTabview","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$1","dialogClass","blockerBackdropClass","scrollLockClass","extraStyles","dialogEvents","renderClose","renderTitle","renderDragHandle","renderInlineHeader","titleId","renderModalHeader","pTitle","pHandle","draghandle","draggable","bs","getEventExtras","lazyDialog","closeWindow","blockEvent","renderModalDialog","mapMenuButtons","mapItems","extractCellsToObject","menuButton","innerAcc","initCommonEvents","fireApiEvent","_event","initUrlDialog","getInstanceApi","withSpec","currentDialog","initDialog","currentDialogInit","cur","onTabChange","newTabName","oldTabName","SilverDialogEvents","makeButton","footerButtons","buttonName","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","getCompByName","form_1","getFormWrapper","footerState","validateData$1","dialogState","getDialogApi","doRedial","menuItemStates","withRoot","valueComp","representedValues","menuItemCurrentState","setData","prevData","instanceApi","mergedData","newInternalData","bodyState","tabSection","dialogInit","getDialogSizeClasses","renderDialog","storagedMenuButtons","objOfCells","dialogSize","modalAccess","getForm","outerForm","renderInlineDialog","dialogLabelId","dialogContentId","memHeader","memBody","memFooter","global$1","getUrlDialogApi","sendMessage","SUPPORTED_MESSAGE_ACTIONS","isSupportedMessage","mceAction","isCustomMessage","handleMessage","insertContent","renderUrlDialog","iframeUri","base_uri","href","iframeDomain","protocol","port","messageHandlerUnbinder","isSameOrigin","onMessage","iframeEle","iframeWin","postMessage","setup$2","closeDialog","alertDialog","memFooterClose","titleSpec","closeSpec","footerCloseButton","setup$1","confirmDialog","memFooterYes","footerNo","footerYesButton","validateData","isAlertOrConfirmDialog","inlineAdditionalBehaviours","isStickyToolbar$1","openInlineDialog","openModalDialog","openModalUrlDialog","internalInitialData","config$1","refreshDocking","dialogUi","inlineDialogComp","confirm","Theme","windowMgr","getWindowManagerImpl","getNotificationManagerImpl","_extends","WinEvent","inType","Event","createCustomEvent","cEvent","CustomEvent","polyfill","parentElement","createEvent","initEvent","Boolean","cancelable","originPreventDefault","initCustomEvent","MILLISECONDS_MULTIPLIER","ClassName","ACTIVE","LINEAR","BLOCK","FADE","VERTICAL","transitionEndEvent","customProperty","stepperNode","indexStep","stepper","_steps","_stepsContents","showEvent","_currentIndex","activeStep","activeContent","defaultPrevented","animation","showStep","showContent","stepList","forEach","trigger","currentTrigger","contentList","toIndex","shownEvent","getTransitionDurationFromElement","emulateTransitionEnd","transitionDuration","floatTransitionDuration","durationPadding","emulatedDuration","detectAnimation","buildClickStepLinearListener","buildClickStepNonLinearListener","steps","stepIndex","DEFAULT_OPTIONS","linear","Stepper","_options","_this","_element","_setLinkListeners","_proto","_this2","_clickStepLinearListener","_clickStepNonLinearListener","_this3","nextStep","_this4","previousStep","stepNumber","_this5","tempIndex","_this6","_this7","groupBy","wasType","isEmpty$1","is$2","isTag","lastChild","shallowAs","mutate","matchNodeName","matchNodeNames","regex","isTextNode","isListNode","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isTextBlock","getTextBlockElements","blockElements","isBogusBr","previousSibling","keepBookmarks","isChildOfBody","isChildOf","shouldIndentOnTab","getForcedRootBlock","getForcedRootBlockAttrs","createTextBlock","contentNode","textBlock","hasContentNode","getBlockElements","createFragment","blockName","tagName","setAttribs","DOM$2","splitList","li","removeAndKeepBookmarks","bookmarks","newBlock","tmpRng","insertAfter","isDescriptionDetail","isDescriptionTerm","outdentDlItem","dl","indentDlItem","dlIndentation","indentation","dlItems","getNormalizedPoint","normalizeRange","outRng","rangeStart","rangeEnd","getParentList","selectionStart","getClosestListRootElm","isParentListSelected","parentList","selectedBlocks","findSubLists","getSelectedSubLists","getSelectedBlocks","findParentListItemsNodes","listItemsElms","parentLi","getSelectedListItems","getSelectedDlItems","parentTableCell","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","lists","listRoots","fromElements","fireListEvent","joinSegment","joinSegments","segments","appendSegments","head$1","tail","createSegment","listType","createSegments","populateSegments","listAttributes","itemAttributes","normalizeSegment","appendItem","writeShallow","cast","newCast","depth","writeDeep","composeList","entries","isList","hasFirstChildList","hasLastChildList","isIndented","cloneItemContent","createEntry","dirty","indentEntry","cloneListProperties","cleanListProperties","closestSiblingEntry","normalizeEntries","matchingEntry","parseItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","parser","newDepth","parseLists","initialDepth","sourceList","outdentedComposer","normalizedEntries","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","selectionIndentation","isHandled","bookmark","getBookmark","moveToBookmark","indentListSelection","outdentListSelection","flattenListSelection","DOM$1","createBookmark","setupEndPoint","offsetNode","resolveBookmark","restoreEndPoint","nodeIndex","listToggleActionFromListName","listName","isCustomList","listState","activate","nodeChangeHandler","inList","updateListStyle","setStyle","updateListAttrs","updateListWithDetails","removeStyles","getEndPointNode","getSelectedTextBlocks","textBlocks","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","detailStyle","applyList","listItemName","selectedTextBlocks","listBlock","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList$1","newList","toggleMultipleLists","parentIsList","hasListStyleDetail","allLists","toggleSingleList","toggleList","selectedSubLists","normalizeList","normalizeLists","grep","findNextCaretContainer","isForward","nonEmptyBlocks","getNonEmptyElements","walker","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","mergeLiElements","listNode","ul","$","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","rng_1","otherLi_1","removeBlock","parentBlock","backspaceDeleteIntoListCaret","otherLi_2","backspaceDeleteCaret","backspaceDeleteRange","startListParent","backspaceDelete","DELETE","updateList","setStyles","setAttrib","parseAlphabeticBase26","chars","charValue","composeAlphabeticBase26","quotient","fromCharCode","isUppercase","isLowercase","isNumeric","deduceListType","parseStartValue","listStyleType","parseDetail","currentList","getAttrib","queryListCommandState","registerDialog","setupTabKey","metaKeyPressed","listProperties","addContextMenu","Plugin","Resource","grinning","keywords","fitzpatrick_scale","category","grimacing","grin","joy","rofl","partying","smiley","smile","sweat_smile","laughing","innocent","wink","blush","slightly_smiling_face","upside_down_face","relaxed","yum","relieved","heart_eyes","smiling_face_with_three_hearts","kissing_heart","kissing","kissing_smiling_eyes","kissing_closed_eyes","stuck_out_tongue_winking_eye","zany","raised_eyebrow","monocle","stuck_out_tongue_closed_eyes","stuck_out_tongue","money_mouth_face","nerd_face","sunglasses","star_struck","clown_face","cowboy_hat_face","hugs","smirk","no_mouth","neutral_face","expressionless","unamused","roll_eyes","thinking","lying_face","hand_over_mouth","shushing","symbols_over_mouth","exploding_head","flushed","disappointed","worried","angry","rage","pensive","confused","slightly_frowning_face","frowning_face","persevere","confounded","tired_face","weary","pleading","triumph","open_mouth","scream","fearful","cold_sweat","hushed","frowning","anguished","cry","disappointed_relieved","drooling_face","sleepy","sweat","hot","cold","sob","dizzy_face","astonished","zipper_mouth_face","nauseated_face","sneezing_face","vomiting","mask","face_with_thermometer","face_with_head_bandage","woozy","sleeping","zzz","poop","smiling_imp","imp","japanese_ogre","japanese_goblin","skull","ghost","alien","robot","smiley_cat","smile_cat","joy_cat","heart_eyes_cat","smirk_cat","kissing_cat","scream_cat","crying_cat_face","pouting_cat","palms_up","raised_hands","clap","wave","call_me_hand","facepunch","fist","fist_left","fist_right","ok_hand","raised_hand","raised_back_of_hand","open_hands","muscle","pray","foot","leg","handshake","point_up","point_up_2","point_down","point_left","point_right","fu","raised_hand_with_fingers_splayed","love_you","metal","crossed_fingers","vulcan_salute","writing_hand","selfie","nail_care","lips","tooth","tongue","ear","nose","eye","eyes","brain","bust_in_silhouette","busts_in_silhouette","speaking_head","baby","boy","girl","adult","man","woman","blonde_woman","blonde_man","bearded_person","older_adult","older_man","older_woman","man_with_gua_pi_mao","woman_with_headscarf","woman_with_turban","man_with_turban","policewoman","policeman","construction_worker_woman","construction_worker_man","guardswoman","guardsman","female_detective","male_detective","woman_health_worker","man_health_worker","woman_farmer","man_farmer","woman_cook","man_cook","woman_student","man_student","woman_singer","man_singer","woman_teacher","man_teacher","woman_factory_worker","man_factory_worker","woman_technologist","man_technologist","woman_office_worker","man_office_worker","woman_mechanic","man_mechanic","woman_scientist","man_scientist","woman_artist","man_artist","woman_firefighter","man_firefighter","woman_pilot","man_pilot","woman_astronaut","man_astronaut","woman_judge","man_judge","woman_superhero","man_superhero","woman_supervillain","man_supervillain","mrs_claus","santa","sorceress","wizard","woman_elf","man_elf","woman_vampire","man_vampire","woman_zombie","man_zombie","woman_genie","man_genie","mermaid","merman","woman_fairy","man_fairy","angel","pregnant_woman","breastfeeding","princess","prince","bride_with_veil","man_in_tuxedo","running_woman","running_man","walking_woman","walking_man","dancer","man_dancing","dancing_women","dancing_men","couple","two_men_holding_hands","two_women_holding_hands","bowing_woman","bowing_man","man_facepalming","woman_facepalming","woman_shrugging","man_shrugging","tipping_hand_woman","tipping_hand_man","no_good_woman","no_good_man","ok_woman","ok_man","raising_hand_woman","raising_hand_man","pouting_woman","pouting_man","frowning_woman","frowning_man","haircut_woman","haircut_man","massage_woman","massage_man","woman_in_steamy_room","man_in_steamy_room","couple_with_heart_woman_man","couple_with_heart_woman_woman","couple_with_heart_man_man","couplekiss_man_woman","couplekiss_woman_woman","couplekiss_man_man","family_man_woman_boy","family_man_woman_girl","family_man_woman_girl_boy","family_man_woman_boy_boy","family_man_woman_girl_girl","family_woman_woman_boy","family_woman_woman_girl","family_woman_woman_girl_boy","family_woman_woman_boy_boy","family_woman_woman_girl_girl","family_man_man_boy","family_man_man_girl","family_man_man_girl_boy","family_man_man_boy_boy","family_man_man_girl_girl","family_woman_boy","family_woman_girl","family_woman_girl_boy","family_woman_boy_boy","family_woman_girl_girl","family_man_boy","family_man_girl","family_man_girl_boy","family_man_boy_boy","family_man_girl_girl","yarn","thread","coat","labcoat","womans_clothes","tshirt","jeans","necktie","dress","bikini","kimono","lipstick","kiss","footprints","flat_shoe","high_heel","sandal","boot","mans_shoe","athletic_shoe","hiking_boot","socks","gloves","scarf","womans_hat","tophat","billed_hat","rescue_worker_helmet","mortar_board","crown","school_satchel","luggage","pouch","purse","handbag","briefcase","eyeglasses","dark_sunglasses","goggles","ring","closed_umbrella","dog","hamster","rabbit","fox_face","bear","panda_face","koala","tiger","lion","cow","pig","pig_nose","frog","squid","octopus","shrimp","monkey_face","gorilla","see_no_evil","hear_no_evil","speak_no_evil","monkey","chicken","penguin","bird","baby_chick","hatching_chick","hatched_chick","duck","eagle","owl","bat","wolf","boar","horse","unicorn","honeybee","bug","butterfly","snail","beetle","ant","grasshopper","spider","scorpion","crab","snake","lizard","sauropod","turtle","tropical_fish","fish","blowfish","dolphin","shark","whale","whale2","crocodile","leopard","zebra","tiger2","water_buffalo","ox","cow2","deer","dromedary_camel","camel","giraffe","elephant","rhinoceros","goat","ram","sheep","racehorse","pig2","rat","mouse2","rooster","turkey","dove","dog2","poodle","cat2","rabbit2","chipmunk","hedgehog","raccoon","llama","hippopotamus","kangaroo","badger","swan","peacock","parrot","lobster","mosquito","paw_prints","dragon","dragon_face","cactus","christmas_tree","evergreen_tree","deciduous_tree","palm_tree","seedling","herb","shamrock","four_leaf_clover","bamboo","tanabata_tree","leaves","fallen_leaf","maple_leaf","ear_of_rice","hibiscus","sunflower","rose","wilted_flower","tulip","blossom","cherry_blossom","bouquet","mushroom","chestnut","jack_o_lantern","spider_web","earth_americas","earth_africa","earth_asia","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","new_moon","waxing_crescent_moon","first_quarter_moon","waxing_gibbous_moon","new_moon_with_face","full_moon_with_face","first_quarter_moon_with_face","last_quarter_moon_with_face","sun_with_face","crescent_moon","star","star2","dizzy","sparkles","comet","sunny","sun_behind_small_cloud","partly_sunny","sun_behind_large_cloud","sun_behind_rain_cloud","cloud","cloud_with_rain","cloud_with_lightning_and_rain","cloud_with_lightning","zap","boom","snowflake","cloud_with_snow","snowman","snowman_with_snow","wind_face","dash","tornado","fog","open_umbrella","umbrella","droplet","sweat_drops","ocean","green_apple","apple","pear","tangerine","lemon","banana","watermelon","grapes","strawberry","melon","cherries","peach","pineapple","coconut","kiwi_fruit","mango","avocado","broccoli","tomato","eggplant","cucumber","carrot","hot_pepper","potato","corn","leafy_greens","sweet_potato","peanuts","honey_pot","croissant","bread","baguette_bread","bagel","pretzel","cheese","egg","bacon","steak","pancakes","poultry_leg","meat_on_bone","bone","fried_shrimp","fried_egg","hamburger","fries","stuffed_flatbread","hotdog","pizza","sandwich","canned_food","spaghetti","taco","burrito","green_salad","shallow_pan_of_food","ramen","stew","fish_cake","fortune_cookie","sushi","bento","rice_ball","rice","rice_cracker","oden","dango","shaved_ice","ice_cream","icecream","pie","cake","cupcake","moon_cake","birthday","custard","candy","lollipop","chocolate_bar","popcorn","dumpling","doughnut","cookie","milk_glass","beer","beers","clinking_glasses","wine_glass","tumbler_glass","cocktail","tropical_drink","champagne","sake","tea","cup_with_straw","coffee","baby_bottle","salt","spoon","fork_and_knife","plate_with_cutlery","bowl_with_spoon","takeout_box","chopsticks","soccer","basketball","football","baseball","softball","tennis","volleyball","rugby_football","flying_disc","golf","golfing_woman","golfing_man","ping_pong","badminton","goal_net","ice_hockey","field_hockey","lacrosse","cricket","ski","skier","snowboarder","person_fencing","women_wrestling","men_wrestling","woman_cartwheeling","man_cartwheeling","woman_playing_handball","man_playing_handball","ice_skate","curling_stone","skateboard","sled","bow_and_arrow","fishing_pole_and_fish","boxing_glove","martial_arts_uniform","rowing_woman","rowing_man","climbing_woman","climbing_man","swimming_woman","swimming_man","woman_playing_water_polo","man_playing_water_polo","woman_in_lotus_position","man_in_lotus_position","surfing_woman","surfing_man","bath","basketball_woman","basketball_man","weight_lifting_woman","weight_lifting_man","biking_woman","biking_man","mountain_biking_woman","mountain_biking_man","horse_racing","business_suit_levitating","trophy","running_shirt_with_sash","medal_sports","medal_military","reminder_ribbon","rosette","ticket","tickets","performing_arts","art","circus_tent","woman_juggling","man_juggling","microphone","headphones","musical_score","musical_keyboard","drum","saxophone","trumpet","guitar","violin","clapper","video_game","space_invader","dart","game_die","chess_pawn","slot_machine","jigsaw","bowling","red_car","taxi","blue_car","bus","trolleybus","racing_car","police_car","ambulance","fire_engine","minibus","truck","articulated_lorry","tractor","kick_scooter","motorcycle","bike","motor_scooter","rotating_light","oncoming_police_car","oncoming_bus","oncoming_automobile","oncoming_taxi","aerial_tramway","mountain_cableway","suspension_railway","railway_car","train","monorail","bullettrain_side","bullettrain_front","light_rail","mountain_railway","steam_locomotive","train2","metro","tram","station","flying_saucer","helicopter","small_airplane","airplane","flight_departure","flight_arrival","sailboat","motor_boat","speedboat","ferry","passenger_ship","rocket","artificial_satellite","seat","canoe","construction","fuelpump","busstop","vertical_traffic_light","traffic_light","checkered_flag","ferris_wheel","roller_coaster","carousel_horse","building_construction","foggy","tokyo_tower","fountain","rice_scene","mountain","mountain_snow","mount_fuji","volcano","japan","camping","tent","national_park","motorway","railway_track","sunrise","sunrise_over_mountains","desert","beach_umbrella","desert_island","city_sunrise","city_sunset","cityscape","night_with_stars","bridge_at_night","milky_way","stars","sparkler","fireworks","rainbow","houses","european_castle","japanese_castle","stadium","statue_of_liberty","house","house_with_garden","derelict_house","office","department_store","post_office","european_post_office","hospital","bank","hotel","convenience_store","school","love_hotel","wedding","classical_building","church","mosque","synagogue","kaaba","shinto_shrine","watch","iphone","calling","computer","keyboard","desktop_computer","printer","computer_mouse","trackball","joystick","minidisc","floppy_disk","cd","dvd","vhs","camera","camera_flash","video_camera","movie_camera","film_projector","film_strip","telephone_receiver","phone","pager","fax","tv","radio","studio_microphone","level_slider","control_knobs","compass","stopwatch","timer_clock","alarm_clock","mantelpiece_clock","hourglass_flowing_sand","hourglass","satellite","battery","electric_plug","bulb","flashlight","candle","fire_extinguisher","wastebasket","oil_drum","money_with_wings","dollar","yen","euro","pound","moneybag","credit_card","gem","balance_scale","toolbox","wrench","hammer","hammer_and_pick","hammer_and_wrench","pick","nut_and_bolt","gear","brick","chains","magnet","gun","bomb","firecracker","hocho","dagger","crossed_swords","shield","smoking","skull_and_crossbones","coffin","funeral_urn","amphora","crystal_ball","prayer_beads","nazar_amulet","barber","alembic","telescope","microscope","hole","pill","syringe","dna","microbe","petri_dish","test_tube","thermometer","broom","basket","toilet_paper","toilet","shower","bathtub","soap","sponge","lotion_bottle","old_key","couch_and_lamp","sleeping_bed","bed","door","bellhop_bell","teddy_bear","framed_picture","world_map","parasol_on_ground","moyai","shopping","shopping_cart","balloon","flags","ribbon","gift","confetti_ball","tada","dolls","wind_chime","crossed_flags","izakaya_lantern","red_envelope","email","envelope_with_arrow","incoming_envelope","love_letter","postbox","mailbox_closed","mailbox","mailbox_with_mail","mailbox_with_no_mail","package","postal_horn","inbox_tray","outbox_tray","page_with_curl","bookmark_tabs","receipt","bar_chart","chart_with_upwards_trend","chart_with_downwards_trend","page_facing_up","calendar","spiral_calendar","card_index","card_file_box","ballot_box","file_cabinet","clipboard","spiral_notepad","file_folder","open_file_folder","card_index_dividers","newspaper_roll","newspaper","notebook","closed_book","green_book","blue_book","orange_book","notebook_with_decorative_cover","ledger","books","open_book","safety_pin","paperclip","paperclips","scissors","triangular_ruler","straight_ruler","abacus","pushpin","round_pushpin","triangular_flag_on_post","white_flag","black_flag","rainbow_flag","closed_lock_with_key","unlock","lock_with_ink_pen","pen","fountain_pen","black_nib","memo","pencil2","crayon","paintbrush","mag","mag_right","heart","orange_heart","yellow_heart","green_heart","blue_heart","purple_heart","black_heart","broken_heart","heavy_heart_exclamation","two_hearts","revolving_hearts","heartbeat","heartpulse","sparkling_heart","cupid","gift_heart","heart_decoration","peace_symbol","latin_cross","star_and_crescent","om","wheel_of_dharma","star_of_david","six_pointed_star","menorah","yin_yang","orthodox_cross","place_of_worship","ophiuchus","aries","taurus","gemini","cancer","leo","virgo","libra","scorpius","sagittarius","capricorn","aquarius","pisces","atom_symbol","u7a7a","u5272","radioactive","biohazard","mobile_phone_off","vibration_mode","u6709","u7121","u7533","u55b6","u6708","eight_pointed_black_star","vs","white_flower","ideograph_advantage","secret","congratulations","u5408","u6e80","u7981","ab","cl","o2","sos","no_entry","name_badge","no_entry_sign","stop_sign","anger","hotsprings","no_pedestrians","do_not_litter","no_bicycles","underage","no_mobile_phones","exclamation","grey_exclamation","question","grey_question","bangbang","interrobang","100","low_brightness","high_brightness","trident","fleur_de_lis","part_alternation_mark","children_crossing","beginner","recycle","u6307","chart","sparkle","eight_spoked_asterisk","negative_squared_cross_mark","white_check_mark","diamond_shape_with_a_dot_inside","cyclone","loop","globe_with_meridians","atm","sa","passport_control","customs","baggage_claim","left_luggage","wheelchair","no_smoking","wc","parking","potable_water","mens","womens","baby_symbol","restroom","put_litter_in_its_place","cinema","signal_strength","koko","ng","ok","up","cool","new","free","zero","two","three","four","five","six","seven","eight","nine","keycap_ten","asterisk","1234","eject_button","arrow_forward","pause_button","next_track_button","stop_button","record_button","play_or_pause_button","previous_track_button","fast_forward","rewind","twisted_rightwards_arrows","repeat","repeat_one","arrow_backward","arrow_up_small","arrow_down_small","arrow_double_up","arrow_double_down","arrow_right","arrow_left","arrow_up","arrow_down","arrow_upper_right","arrow_lower_right","arrow_lower_left","arrow_upper_left","arrow_up_down","left_right_arrow","arrows_counterclockwise","arrow_right_hook","leftwards_arrow_with_hook","arrow_heading_up","arrow_heading_down","information_source","abcd","capital_abcd","symbols","musical_note","notes","wavy_dash","curly_loop","heavy_check_mark","arrows_clockwise","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","heavy_multiplication_x","infinity","heavy_dollar_sign","currency_exchange","copyright","registered","tm","soon","ballot_box_with_check","radio_button","white_circle","black_circle","red_circle","large_blue_circle","small_orange_diamond","small_blue_diamond","large_orange_diamond","large_blue_diamond","small_red_triangle","black_small_square","white_small_square","black_large_square","white_large_square","small_red_triangle_down","black_medium_square","white_medium_square","black_medium_small_square","white_medium_small_square","black_square_button","white_square_button","speaker","sound","loud_sound","mute","mega","loudspeaker","bell","no_bell","black_joker","mahjong","spades","clubs","hearts","diamonds","flower_playing_cards","thought_balloon","right_anger_bubble","speech_balloon","left_speech_bubble","clock1","clock2","clock3","clock4","clock5","clock6","clock7","clock8","clock9","clock10","clock11","clock12","clock130","clock230","clock330","clock430","clock530","clock630","clock730","clock830","clock930","clock1030","clock1130","clock1230","afghanistan","aland_islands","albania","algeria","american_samoa","andorra","angola","anguilla","antarctica","antigua_barbuda","argentina","armenia","aruba","australia","austria","azerbaijan","bahamas","bahrain","bangladesh","barbados","belarus","belgium","belize","benin","bermuda","bhutan","bolivia","caribbean_netherlands","bosnia_herzegovina","botswana","brazil","british_indian_ocean_territory","british_virgin_islands","brunei","bulgaria","burkina_faso","burundi","cape_verde","cambodia","cameroon","canada","canary_islands","cayman_islands","central_african_republic","chad","chile","cn","christmas_island","cocos_islands","colombia","comoros","congo_brazzaville","congo_kinshasa","cook_islands","costa_rica","croatia","cuba","curacao","cyprus","czech_republic","denmark","djibouti","dominica","dominican_republic","ecuador","egypt","el_salvador","equatorial_guinea","eritrea","estonia","ethiopia","eu","falkland_islands","faroe_islands","fiji","finland","fr","french_guiana","french_polynesia","french_southern_territories","gabon","gambia","georgia","de","ghana","gibraltar","greece","greenland","grenada","guadeloupe","guam","guatemala","guernsey","guinea","guinea_bissau","guyana","haiti","honduras","hong_kong","hungary","iceland","india","indonesia","iran","iraq","ireland","isle_of_man","israel","it","cote_divoire","jamaica","jp","jersey","jordan","kazakhstan","kenya","kiribati","kosovo","kuwait","kyrgyzstan","laos","latvia","lebanon","lesotho","liberia","libya","liechtenstein","lithuania","luxembourg","macau","macedonia","madagascar","malawi","malaysia","maldives","mali","malta","marshall_islands","martinique","mauritania","mauritius","mayotte","mexico","micronesia","moldova","monaco","mongolia","montenegro","montserrat","morocco","mozambique","myanmar","namibia","nauru","nepal","netherlands","new_caledonia","new_zealand","nicaragua","niger","nigeria","niue","norfolk_island","northern_mariana_islands","north_korea","norway","oman","pakistan","palau","palestinian_territories","panama","papua_new_guinea","paraguay","peru","philippines","pitcairn_islands","poland","portugal","puerto_rico","qatar","reunion","romania","ru","rwanda","st_barthelemy","st_helena","st_kitts_nevis","st_lucia","st_pierre_miquelon","st_vincent_grenadines","samoa","san_marino","sao_tome_principe","saudi_arabia","senegal","serbia","seychelles","sierra_leone","singapore","sint_maarten","slovakia","slovenia","solomon_islands","somalia","south_africa","south_georgia_south_sandwich_islands","kr","south_sudan","sri_lanka","sudan","suriname","swaziland","sweden","switzerland","syria","taiwan","tajikistan","tanzania","thailand","timor_leste","togo","tokelau","tonga","trinidad_tobago","tunisia","tr","turkmenistan","turks_caicos_islands","tuvalu","uganda","ukraine","united_arab_emirates","uk","england","scotland","wales","us","us_virgin_islands","uruguay","uzbekistan","vanuatu","vatican_city","venezuela","vietnam","wallis_futuna","western_sahara","yemen","zambia","zimbabwe","united_nations","pirate_flag","applyListFormat","styleValue","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","styleValueToText","isWithinList","tableCellIndex","makeSetupHandler","iconStyle","listStyle","_styles","addControl","_vm","_h","$createElement","_self","staticClass","class","sizeClass","_t","staticRenderFns","eq$2","none$2","each$2","flatten$1","sort$1","detect$6","detect$5","COMMENT","fromDom$1","fromPoint$1","validSectionList","isValidSection","parentName","rowspan","colspan","detailnew","isNew","extended","isLocked","rowdetail","rowdetailnew","elementnew","rowcells","finishRow","finishCol","columnext","colgroup","type$1","isComment","rawParent","prevSibling","children$3","child$3","body$1","getBody$1","ancestors$4","children$2","ancestors$3","clone$2","bindFrom","oot","getRaw$2","copy$2","sourceDom","targetDom","cssText","getAttrValue","getSpan","hasColspan","hasRowspan","getCssValue","firstLayer","filterFirstLayer","tags","isRootOrUpperTable","cells$1","columns$1","columnGroups","columnGroup","rows$1","fromRowsOrColGroups","elems","getSection","getParentSection","fromTable$1","columnGroups$1","fromPastedRows","addCells","gridRow","existingCells","newCells","setCells","addCell","mutateCell","mapCells","getCell","getCellElement","cellLength","extractGridDetails","cols","cloneRow","cloneCell","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getLockedColumnsFromGrid","lockedArr","_val","getAt","warehouse","findItem","filtered","filterItems","generateColumns","rowData","columnsGroup","colgroups","tableOpt","lockedColumns","maxRows","maxColumns","rowCount","currentRow_1","rowCell","occupiedColumnPosition","occupiedRowPosition","rowPosition","columnPosition","newpos","grid$1","fromTable","justCells","justColumns","hasColumns","getColumnAt","Warehouse","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","isWithin","isRectangular","isRect","detailIsWithin","detailA","detailB","getAnyBox","startCoords","finishCoords","sc","fc","getBox$1","intercepts$1","parentCell","innerCell","isContainedBy","c1","c2","deltaColumn","getWarehouse","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","before$4","after$5","before$3","after$4","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","isSpecial","getLanguage","down","copyTo","afterAll","appendAll","setText","universe","look","oneAll","unsafeOne","commonElement","ancestors$2","ps1","ps2","ind","pruned1","pruned2","firstpath","secondpath","sharedOne$1","ancestors$1","universe$3","sharedOne","_universe","ancestors","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve$1","sels","lastSelectedSelector","getEdges","firstSelectedSelector","expandTo","shiftSelection","retrieve","retrieveBox","sectionSelector","firstAncestor","lastAncestor","fA","lA","onMultiple","onSingle","none$1","Selections","lazyRoot","selectedSelector","copy$1","cloneChildren","mutate$1","isValidCell","rowsArr","getBlock","getFallback","decide","inBlock","validInBlock","detailOption","isSingle","deduce","aa","rowInfo","colInfo","rtlEdge","ltrEdge","getTop$1","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","ltr$1","rtl$1","amount","needManualCalc","toNumber","px","getProp","getCalculatedHeight","boxSizing","paddingTop","paddingBottom","borderTop","borderBottom","borders","getCalculatedWidth","paddingLeft","paddingRight","borderLeft","borderRight","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","getPercentSize","relativeParent","setPixelWidth","setPercentageWidth","getHeightValue","normalizePixelSize","getTotalHeight","getRawWidth$1","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth$1","getGenericWidth","setGenericWidth","getPixelTableWidth","getPercentTableWidth$1","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","percentageBasedSizeRegex","pixelBasedSizeRegex","isCol$1","getRaw$1","getRawW","getRawH","justCols","hasRawStyle","isValidColumn","backups","getWidthFrom","columnCells","colFilter","getDeduced","deduced","getRawWidths","getPercentageWidths","minCellWidth","getPixelWidths","getHeightFrom","getPixelHeights","getRawHeights","noneSize","getWidths","getCellDelta","singleColumnWidth","setElementWidth","adjustTableWidth","isRelative","percentageSize","initialWidth","_delta","pixelSize","newNext","chooseSize","fallbackWidth","getTableSize","TableSize","statsStruct","minRow","minCol","maxRow","maxCol","allCells","selectedCells","findSelectedStats","totalColumns","totalRows","endRow","endCol","seenSelected","fillInGaps","stats","needCell","clean","replica","widthDelta","emptyRows","getTableWidthDelta","colWidths","allColsWidth","selectedColsWidth","extract$1","replicaHouse","replicaStats","unselectedCells","transferableAttributes","createCell","createCol","createColgroup","createRow$1","replace$1","pasteReplace","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cloneAppropriateAttributes","validAttributes","attributeName","attribute","cellOperations","formatsToClone","cloneCss","lastNode","gap","paste$1","nodes","getNodeName","getPixelWidth","getPixelHeight","removePxSuffix","addPxSuffix","removeDataStyle","removeStyleAttribute","getRawWidth","isPercentage$1","isPixel","getSelectionStart","getSelectionEnd","selections","unmergable","hasSpan","hasRowOrColSpan","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","firstSelected","lastSelected","noMenu","paste","generators","pasteRows","getSelectionCellFallback","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","getRowsFromSelection","rowsOpt","extractSelected","serializeElements","serializer","serialize","getTextContent","registerEvents","multiCellContext","isTable","pasteCells","only","ColumnContext","neighbours","determine","onOnly","calcLeftEdgeDeltas","onMiddle","calcMiddleDeltas","calcRightEdgeDeltas","measures","recalculateWidthForCells","widths","recalculateWidthForColumns","recalculateHeightForCells","matchRowHeight","sumUp","recalculate","recalculateAndApply","newSizes","adjustWidth","resizing","isLastColumn","clampedStep","clampTableDelta","newWidths","resizeTable","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustAndRedistributeWidths$1","_table","resizeBehaviour","sizes","tablePixelWidth","calcRedestributedWidths","pixelDelta","adjustWidthTo","_info","surround","startIndex","clampDeltaHelper","minCellSize","clampNegativeDelta","clampDelta","calcFixedDeltas","clampedDelta","calcRelativeDeltas","ratio","newThis","_prev","resizer","totalWidth","tableWidth","ratio_1","preserveTable","_minCellSize","maxDelta","_totalWidth","_pixelDelta","_isRelative","isResizable","detached","editable","ResizeWire","validateFor","rawAmount","Size","redistributeToPercent","colType","pc","redistributeToPx","newTotalWidth","redistributeEmpty","newWidthType","redistributeValues","_pc","redistribute$1","newType","floats","roundDown","floored","redistributeToW","redistributeToColumns","redistributeToH","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","nuWidths","hUnit","totalHeight","oldHeights","nuHeights","isPercentSizing","isPixelSizing","isNoneSizing","getPercentTableWidth","getGridSize","typeDefs","reqMessage","unsuppMessage","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","dupe","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","DragMode","DragSink","DragApi","InDrag","compare","dataOption","NoDrag","Movement","noDragState","inDragState","mutation","throttledDrop","runIfActive","handle$2","namespace","dashNamespace","styles$1","resolve$1","Blocker","layerClass","mdown","mup","mmove","mout","MouseDrag","isEditable$1","assumeEditable","isContentEditable","Mutation","BarMutation","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","resizableRows","resizableColumns","resizableCols","colElmOpt","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","rowBar","refreshGrid","warhouse","resizableRowBars","resizableRowPositions","_pos","barIndex","resizableColBars","resizableColPositions","bars","isRowBar","isColBar","resizeBarDragging","BarManager","hoverTable","getResizer","_dataRow","currentRow","_dataCol","currentCol","oldX","startAdjust","findClosestEditableTable","destroy$1","tbl","hideBars","showBars","lazySizing","hdirection","vdirection","beforeResize","afterResize","startDrag","TableResize","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","fireTableSelectionChange","fireTableSelectionClear","fireTableModified","styleModified","structureModified","styleAndStructureModified","defaultTableToolbar","defaultStyles","defaultCellBorderWidths","defaultCellBorderStyles","determineDefaultStyles","isPixelsForced","editorWidth","isResponsiveForced","defaultAttributes","defaultColumnResizingBehaviour","getTableSizingMode","getTableResponseWidth","getTableBorderWidths","getTableBorderStyles","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPercentagesForced","useColumnGroup","getTableHeaderType","defaultValue","validValues","getColumnResizingBehaviour","validModes","givenMode","isPreserveTableColumnResizing","isResizeTableColumnResizing","getCloneElements","cloneElements","hasObjectResizing","objectResizing","getTableBackgroundColorMap","getTableBorderColorMap","cleanupLegacyAttributes","convertToPercentSize","convertToPixelSize","convertToNoneSize","rowElements","enforcePercentage","tableSizing","enforcePixels","enforceNone","syncPixels","computedWidth","createContainer","barResizerPrefix","getResizeHandler","startW","startRawW","selectionRng","lazyResize","lazyWire","lazyResizingBehaviour","afterCornerResize","isRightEdgeResize","percentW","targetPercentW","sz","rawWire","rawTable","scan$1","toEnd","freefallRtl$2","freefallRtl$1","universe$2","freefallRtl","halve","main","isTableHeaderCell","getRowHeaderType","isHeaderRow","isHeaderCells","getRowType$1","findCommonCellType","subType","headerCells","findCommonRowType","rowTypes","hasHeader","hasFooter","hasBody","findTableRowHeaderType","rowType","transformCell","substitution","transformRow","fixedCell","sectionCells","newSection","getTableSectionType","TableSection","setIfNot","insert$1","generateSection","sectionName","newRows","syncRows","gridSection","syncColGroup","colGroup","renderSection","sync","sectionElems","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","columnGroupsSection","clonedCell","getColumn","getRow","findDiff","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","toDetails","seen","updateSeen","toGrid","rowCells","rowDetail","fromWarehouse","toDetailList","findInWarehouse","extractCells","cell$1","lc","postAction","genWrappers","tableSection","newElements","sizing","onPasteByEditor","onMergable","_warehouse","onUnmergable","onCells","onUnlockedCells","isUnlockedTableCell","allUnlocked","onUnlockedMergable","mergeable","onUnlockedUnmergable","merge$2","unmerge","currentCell","currentCellElm","isToReplace","uniqueCells","splitCols","prevCell","splitRows","rowPrevCells","replacement","sub","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","measureHeight","rowLengthA","rowLengthB","generateElements","generator","rowFill","exampleRow","colFill","lockedColFill","colNum","newChild","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","getValidStartAddress","currentStartAddress","gridColLength","adjustedRowAddress","possibleColAddresses","validColAddress","getLockedColumnsWithinBounds","validStartAddress","gridBRows","lockedColumnsWithinBounds","fittedGrid","newLockedColumnsWithinBounds","insertCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","insertRowAt","example","withinSpan","getElementFor","insertColumnAt","deleteColumnsAt","deleteRowsAt","replaceIn","isTarget","notStartRow","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","replaceCell","targetCell","uniqueColumns","uniqueCheck","columnExists","currentDetail","isCol","isColgroup","isRow$1","elementToData","toData","nuCell","nuRow","recent","getOrInit","makeNew","replaceOrInit","getScopeAttribute","merging","getScopeProperty","stringAttributes","baseScope_1","scopes_1","isMixed","Generators","blockList","isList$1","isBlock$1","isEmptyTag$1","universe$1","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","findEditableCursorPosition","elementFromGrid","cursorElement","uniqueRows","rowCompilation","rowExists","opInsertRowsBefore","targetIndex","newGrid","newG","opInsertRowsAfter","opInsertColumnsBefore","extractDetail","opInsertColumnsAfter","opMakeColumnsHeader","initialGrid","currentGrid","opMakeCellsHeader","opUnmakeColumnsHeader","opUnmakeCellsHeader","makeRowsSection","opMakeRowsHeader","opMakeRowsBody","opMakeRowsFooter","opEraseColumns","_comparator","_genWrappers","maxColIndex","opEraseRows","maxRowIndex","opMergeCells","opUnmergeCells","unmerge$1","opPasteCells","pasteDetails","gridify","wh","mergedGrid","gridifyRows","opPasteColsBefore","opPasteColsAfter","opPasteRowsBefore","opPasteRowsAfter","opGetColumnsType","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","opGetCellsType","opGetRowsType","minRowRange","maxRowRange","selectedRows","adjustAndRedistributeWidths","firstColumnIsLocked","lastColumnIsLocked","getColumnsWidth","uniqueCols","colWidth","insertColumnsExtractor","checkLocked","eraseColumnsExtractor","pasteColumnsExtractor","insertRowsBefore","insertRowsAfter","insertColumnsBefore","insertColumnsAfter","eraseColumns","eraseRows","makeColumnsHeader","unmakeColumnsHeader","makeRowsHeader","makeRowsBody","makeRowsFooter","makeCellsHeader","unmakeCellsHeader","mergeCells","unmergeCells","pasteColsBefore","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnsType","getCellsType","getRowsType","TableActions","cellSelection","isTableBody","lastRowGuard","lastColumnGuard","colMutationOp","setSelectionFromAction","firstCell","des","guard","effect","noEvents","deleteRow","deleteColumn","insertRowsBefore$1","insertRowsAfter$1","insertColumnsBefore$1","insertColumnsAfter$1","mergeCells$1","unmergeCells$1","pasteColsBefore$1","pasteColsAfter$1","pasteRowsBefore$1","pasteRowsAfter$1","pasteCells$1","makeCellsHeader$1","unmakeCellsHeader$1","makeColumnsHeader$1","unmakeColumnsHeader$1","makeRowsHeader$1","makeRowsBody$1","makeRowsFooter$1","getTableCellType","getTableColType","getTableRowType","DefaultRenderOptions","colGroups","tableHeaderCell","tableCell","tableColumn","createRow","rowHeaders","columnHeaders","createGroupRow","createRows","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","thead","theadRowHeaders","theadRows","tbody","numRowHeaders","tbodyRows","placeCaretInCell","selectFirstCellInTable","tableElm","fireEvents","isPercentage","colHeaders","addVisual","insertTableWithDataValidation","errorMsg","checkInput","headerRows","headerColumns","getClipboardElements","getClipboard","setClipboardElements","setClipboard","elmsOpt","insertTable","selectionTargets","setClipboardRows","setRows","getClipboardRows","getRows","setClipboardCols","setColumns","getClipboardCols","getColumns","constrainSpan","currentColspan","generateColGroup","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateRows","cellsToCopy","copiedCells","fakeTR","copyCols","fakeColGroups","fakeRows","copyRows","slicedGrid","filteredGrid","slicedDetails","getTDTHOverallStyle","firstChildStyle","checkChildren","currentStyle","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","verticalAlignValues","onSetupToggle","formatValue","checkNode","isListGroup","buildListItems","buildMenuItems","applyTableCellStyle","filterNoneItem","generateMenuItemsCallback","buildColorMenu","colorList","changeRowHeader","currentType","changeColumnHeader","getClassList$1","getItems$2","getAdvancedTab","dialogName","emptyBorderStyle","advTabItems","borderWidth","modifiers","testTruthy","setFormat","DomModifier","ifTruthy","rgbToHex","extractAdvancedStyles","borderwidth","borderstyle","bordercolor","backgroundcolor","getSharedValues","baseData","comparisonData","itemKey","comparisonValue","getAlignment","matchNode","getHAlignment","getVAlignment","extractDataFromSettings","hasAdvTableTab","extractAdvancedStyleData","defaultData","cellspacing","cellpadding","caption","getBorder","advStyle","getCellPaddingCellSpacing","spacing","getRowType","extractDataFromTableElement","optBorderWidth","extractDataFromRowElement","extractDataFromCellElement","colElm","celltype","halign","getSelectedCells","cellA","cellB","updateSimpleProps$1","modifier","colModifier","updateAdvancedProps$1","applyStyleData$1","isSingleCell","cellElm","applyStructureData$1","no_events","applyCellData","oldData","modifiedData","onSubmitCellForm","cellsData","open$2","dialogTabPanel","dialogPanel","getClassList","formChildren","getItems$1","updateSimpleProps","updateAdvancedProps","applyStyleData","isSingleRow","rowElm","applyStructureData","applyRowData","typeModified_1","styleModified_1","onSubmitRowForm","rowsData","insertNewTable","rowColCountItems","alwaysItems","appearanceItems","alignmentItem","classListItem","styleTDTH","applyDataToElement","serializeStyle","onSubmitTableForm","captionElm","captionModified","generalPanel","nonAdvancedForm","advancedForm","getSelectionStartCellOrCaption","getSelectionStartCell","eraseTable","cellOrCaption","setSizingMode","isForcedSizing","getTableFromCell","performActionOnSelection","toggleTableClass","toggleTableCellClass","allHaveClass","formatterAction","toggleCaption","postExecute","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","actOnType","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutCol","mceTableCutRow","mceTableCopyCol","mceTableCopyRow","mceTablePasteColBefore","mceTablePasteColAfter","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","mceTableCellToggleClass","mceTableToggleClass","mceTableToggleCaption","mceTableSizingMode","mceTableCellType","mceTableColType","mceTableRowType","func","mceTableProps","mceTableRowProps","mceTableCellProps","getFormatName","validArgs","registerQueryCommands","lookupOnSelection","Clipboard","clearRows","clearColumns","genericBase","remove_similar","inherit","cellBase","cellFormats","tablecellbackgroundcolor","backgroundColor","tablecellverticalalign","tablecellbordercolor","borderColor","tablecellclass","tableclass","tablecellborderstyle","borderStyle","tablecellborderwidth","CellLocation","walk","isEligible","forwards","after$3","selectNodeContents","selectNodeContentsUsing","searchForPoint","rectForOffset","curDeltaX","inRect","locateOffset","textnode","rangeForOffset","locate$1","foundRect","searchInChildren","locateNode","boundedX","boundedY","COLLAPSE_TO_LEFT","COLLAPSE_TO_RIGHT","getCollapseDirection","createCollapsedNode","collapseDirection","locateInElement","cursorRange","locateInEmpty","caretPositionFromPoint","caretRangeFromPoint","searchTextNodes","searchFromPoint","availableSearch","beforeSpecial","preprocessRelative","preprocessExact","doSetNativeRange","removeAllRanges","addRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setBaseAndExtent","setExact","setRelative","toNative","getDomRange","setToElement","selectNodeContents$1","rngGetter","getAtPoint","forward","go$1","backward","getCellFirstCursorPosition","rootElements","handle$1","body_1","isRoot_1","Response","Situs","convertToRange","makeSitus","selectRange","cellSel","annotations","updateSelection","newSels","clearBeforeUpdate","traverse","backtrack","_direction","sidestep","advance","successors","ruleOpt","succ","left$1","right$1","Walkers","hone","isLeaf","seekLeft$1","seekRight$1","seekLeft","seekRight","failedUp","failedDown","bridge","beforeBounds","afterBounds","isRow","verify","beforeOffset","afterOffset","failure","afterCell","beforeCell","_sharedRow","onSuccess","onFailedUp","onFailedDown","BeforeAfter","inParent","indexInParent","gatherer","cand","gather","handleBr","findBr","handleParent","br","adjacent","tryBr","analysis","_message","getTop","getBottom","getPartialBox","getRangedRect","toCaret","getElemBox","getBoxAt","getEntireBox","JUMP_SIZE","NUM_RETRIES","retry","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","adjustUp","higherCaret","upMovement","adjuster","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","situsFromPoint","guess","newCaret","ieTryDown","ieTryUp","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","findSpot","brNeighbour","fromSitus","tryCursor","situs","tryAgain","tryAt","otherRetry","ieRetry","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","findCell","MouseSelection","clearstate","applySelection","singleCell","isNonEditableCell","isCellClosestContentEditable","selectContents","isKey","keycode","isUp","isDown","isNavigation","isBackward","by","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","getScrollY","rc","clearToNavigate","realEvent","update$1","removeClasses","byClass","addSelectionClass","removeSelectionClasses","byAttr","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","hasInternalTarget","CellSelection","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","ns","wrappedEvent","isLeftMouse","isLeftButtonPressed","dragStart","mouseDown","mouseOver","mouseUp","getDoubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","doubleTap","getSelectionTargets","changeHandlers","selectionDetails","isCaption","isDisabledForSelection","findTargets","startCellOrCaption","endTable","getExtractedDetails","onAny","onFirst","onLast","unmergeable","resetTargets","setupHandler","onSetupWithToggle","isDisabledFromLocked","lockedDisable","onSetupTable","onSetupCellOrRow","onSetupColumn","onSetupPasteable","getClipboardData","onSetupPasteableColumn","onSetupMergeable","_targets","onSetupUnmergeable","onSetupTableWithCaption","onSetupTableHeaders","onSetupTableRowHeaders","onSetupTableColumnHeaders","addButtons","tableClassList","tableCellClassList","addToolbars","addContextToolbar","addMenuItems","insertTableAction","tableProperties","deleteTable","addTempAttr","Plugin$1","assumeExternalTargets","externalTargets","hasContextToolbar","getLinkList","getDefaultLinkTarget","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","allowUnsafeLinkTarget","useQuickLink","getDefaultLinkProtocol","sanitizeList","sanitizeWith","extracter","sanitize","createUi","ListOptions","isLink","getHref","collectNodesInRange","cloneContents","hasProtocol","applyRelTargetRules","isUnsafe","rels","addTargetRules","removeTargetRules","inArray","newRels","trimCaretContainers","getAnchorElement","selectedElm","isImageFigure","getAnchorText","anchorElm","hasLinks","hasLinksInSelection","isOnlyTextSelected","inlineTextElements","getTextInlineElements","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","newRel","updateLink","createLink","linkImageFigure","createHTML","linkDomMutation","attachState","unlinkSelection","startAnchorElm","endAnchorElm","unlinkDomMutation","unlinkImageFigure","unwrapOptions","cls","fig","findTextByValue","catalog","persistentText","hasPersistentText","findCatalog","catalogs","linkCatalog","persistentData","getTitleFromUrlChange","getTextFromUrlChange","onUrlChange","onCatalogChange","DialogChanges","delayedConfirm","tryEmailTransform","suggestMailTo","tryProtocolTransform","defaultLinkProtocol","suggestProtocol","DialogConfirms","anchorNodes","AnchorListOptions","ClassListOptions","parseJson","getLinks","extractor","convertURL","linkList","send","optItems","noneItem","LinkListOptions","getRels","isTargetBlank_1","enforceSafe","safeRelExtractor","sanitizer","RelOptions","fallbacks","getTargets","TargetOptions","nonEmptyAttr","extractFromAnchor","onlyText","linkClass","collect","linkNode","links","optNode","titleEnabled","DialogInfo","handleSubmit","getChangedValue","changedData","pData","collectData","getInitialData","defaultTarget","makeDialog","urlInput","titleText","dialogDelta","appendClickRemove","initMouseEvent","getLink","getSelectedLink","hasOnlyAltModifier","altKey","metaKey","gotoLink","targetEl","scrollIntoView","openDialog","gotoSelectedLink","setupGotoLinks","toggler","toggleActiveState","toggleEnabledState","toggleUnlinkState","hasLinks$1","addShortcut","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","getLinkText","addContextForm","insertEmoticon","DEFAULT_ID","getEmoticonDatabase","getEmoticonDatabaseUrl","pluginUrl","getEmoticonDatabaseId","getAppendedEmoticons","getEmotionsImageUrl","ALL_CATEGORY","categoryNameMap","people","animals_and_nature","food_and_drink","activity","travel_and_places","user","translateCategory","categories","getUserDefinedEmoticons","userDefinedEmoticons","initDatabase","databaseUrl","databaseId","emojiImagesUrl","getEmoji","lib","processEmojis","emojis","cats","userEmojis","listCategory","listAll","listCategories","waitForLoad","hasLoaded","interval","emojiMatches","emoji","lowerCasePattern","emojisFrom","reachedLimit","patternName","currentTab","dialogApi","dialogData","updateFilter","searchField","resultsField","getInitialState","actionData","_err","addAttributeFilter","addAutocompleter","autocompleteApi","typeOf$1","isEquatableType","compareFn","contramap","eqa","tripleEq","eqString","eqArray","eqSortedArray","eqRecord","kx","ky","q","eqAny","tx","ty","isString$1","isArray$1","indexOf$2","contains$3","map$3","each$k","filter$4","findUntil$1","findIndex$2","hasOwnProperty$1","each$j","bifilter","filter$3","equal$1","toArray$1","each$i","indexOf$1","reduce","iteratee","accumulator","trim$4","lTrim","rTrim","isEmpty$3","ie$1","platform$2","platform$1","browser$4","webkit","fileApi","windowsPhone","Env","gecko","iOS","transparentSrc","caretAfter","documentMode","ceFalse","cacheSuffix","experimentalShadowDom","canHaveCSP","desktop","whiteSpaceRegExp$2","trim$3","is$3","makeMap$4","delim","create$9","sp","scn","createNS","onCreate","extend$6","exts","ext","walk$3","resolve$3","explode$4","_addCacheSuffix","hasOwn","fromDom$2","recurse","isComment$1","isElement$6","isText$8","isDocument$2","isDocumentFragment$1","parents$1","filterSelf","prevSiblings","nextSiblings","childNodesCount","getHead","getStyleContainer","wrap$3","intoView","alignToTop","scrollIntoViewIfNeeded","isNodeType","isRestrictedNode","getPrototypeOf","isElement$5","lowercasedNames","matchStyleValues","computed","cssValue","attrName","hasAttributeValue","attrValue","isBogus$2","isBogusAll$1","isTable$3","isTextareaOrInput","isText$7","isDocument$1","isBr$5","isImg","isContentEditableTrue$4","isContentEditableFalse$b","isTableCell$5","isMedia$2","clone$3","browser$3","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","hasChild","castOffsetParent","module$1","par$1","asyncValues","asyncValue","par","futures","unite","requestAnimationFramePromise","support","Expr","isXML","tokenize","compile","select$1","outermostContext","sortInput","hasDuplicate","setDocument","document$1","documentIsHTML","rbuggyQSA","rbuggyMatches","ancestor$3","sibling$2","promiseObj","requestAnimationFrameFunc","vendors","featurefill","wrappedSetTimeout","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","debounce","Delay","setEditorInterval","StyleSheetLoader","documentOrShadowRoot","idCount","loadedStates","edos","maxLoadTime","_setReferrerPolicy","referrerPolicy","addStyle","removeStyle","styleContainer","getOrCreateState","passed","failed","urlWithSuffix","onload","onerror","wait","testCallback","waitCallback","now","waitForWebKitLinkLoaded","styleSheets","styleSheet","ownerNode","linkElem","contentCssCors","loadF","loadAll","urls","unloadAll","WeakMap","forElement","referenceElement","rootDom","sl","DomTreeWalker","prev2","findSibling","findPreviousNode","startName","siblingName","blocks","tableCells","tableSections","headings","listItems$1","wsElements","lazyLookup","isHeading","isBlock$2","isTable$2","isInline$1","isBr$4","isTextBlock$2","isTableSection","isTableCell$4","isWsPreserveElement","isZwsp$1","removeZwsp","ZWSP$1","isZwsp","trim$2","isElement$4","isText$6","isCaretContainerBlock$1","isCaretContainerInline","isCaretContainer$2","hasContent","insertInline$1","textNode","endsWithCaretContainer$1","splitText","startsWithCaretContainer$1","isBeforeInline","isAtStart","isAfterInline","isAtEnd","createBogusBr","insertBlock$1","blockNode","trimBogusBr","brs","getElementsByTagName","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","isContentEditableTrue$3","isContentEditableFalse$a","isBr$3","isText$5","isInvalidTextElement","isAtomicInline","isTable$1","isCaretContainer$1","isCaretCandidate$3","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic$1","isEditableCaretCandidate$1","whiteSpaceRegExp$1","isWhitespaceText","hasWhitespacePreserveParent","rootElement","isNamedAnchor","isContent$1","isBookmark","isBogus$1","isBogusAll","isEmptyNode","skipBogus","brCount","isEmpty$2","isSpan","isInlineContent","surroundedByInlineContent","prevIsInline","nextIsInline","isBookmarkNode$2","isKeepTextNode","isKeepElement","trimNode","currentChildren","makeMap$3","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","128","130","131","132","133","134","135","136","137","138","139","140","142","145","146","147","148","149","150","151","152","153","154","155","156","158","159","baseEntities","'","reverseEntities","nativeDecode","buildEntitiesLookup","radix","entity","namedEntities","encodeRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","decode","Entities","mapCache","dummyObj","makeMap$2","each$h","extend$5","explode$3","inArray$2","split$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","attributesOrder","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","patternElements","customElementsMap","specialElements","createLookupTable","extendWith","schemaItems","verify_html","valid_elements","validStyles","valid_styles","invalidStyles","invalid_styles","validClasses","valid_classes","whiteSpaceElementsMap","selfClosingElementsMap","shortEndedElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","blockElementsMap","textInlineElementsMap","patternToRegExp","addValidElements","validElements","ei","ai","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","validElementsArr","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","valid_children","extended_valid_elements","dd","dt","th","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getBoolAttrs","getShortEndedElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","getWhiteSpaceElements","getSpecialElements","isValidChild","attrPatterns","getCustomElements","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","styleMap","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","isNativeEvent","hasIsDefaultPrevented","needsNormalizing","originalEvent","normalize$3","fallbackTarget","srcElement","cancelBubble","isImmediatePropagationStopped","eventExpandoPrefix","mouseEventRe","addEvent","attachEvent","removeEvent","detachEvent","isMouseEvent","fix","eventDoc","bindOnReady","eventUtils","domLoaded","isDocReady","readyState","readyHandler","EventUtils","expando","hasMouseEnterLeave","hasFocusIn","callbackList","fakeName","nativeHandler","defaultNativeHandler","executeHandlers","namesList","mouseEnterLeave","currentTarget","ci","eventMap","parentWindow","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","push_native","push$1","slice$1","booleans","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr$1","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","seed","nid","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","checkNonElements","doneName","xml","oldCache","outerCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","hasCompare","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","duplicates","detectDuplicates","sortStable","createPseudo","excess","unquoted","nodeNameSelector","operator","what","ofType","useCache","pseudo","matched","elemLang","selectedIndex","even","odd","lt","gt","nth","filters","parseOnly","soFar","preFilters","token","compiled","rquickExpr","Event$1","skipUniques","isDefined","isWindow","createFragment$1","fragDoc","frag","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","makeArray","hasClass","lastParent","newWrapper","numericCssMap","booleanMap","propFix","for","cssFix","attrHooks","cssHooks","DomQueryConstructor","inArray$1","whiteSpaceRegExp","each$g","grep$2","hook","removeAttr","dashed","prependTo","replaceWith","wrapInner","classState","existingClassName","object","sibling$1","firstSibling","wrappedResult","parentsUntil","nextUntil","prevUntil","overrideDefaults","each$f","grep$1","simpleSelectorRe","setupAttrHooks","keepValues","keep_values","keepUrlHook","$elm","updateInternalStyleAttr","findNodeIndex","normalized","lastNodeType","DOMUtils","addedStyles","counter","stdMode","boxModel","boundEvents","ownEvents","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","clone_1","root_element","getViewPort","argWin","getPos$1","update_styles","stylesArg","getSize","selectorVal","_findSib","getPrev","setHTML","canHaveHTML","parentElm","newElm","outHtml","keepChildren","$node","removeAllAttribs","removeAttributeNode","styleElm","loadCSS","uniqueId","getOuterHTML","outerHTML","setOuterHTML","reference","referenceNode","oldElm","replaceChild","attrNode","findCommonAncestor","pe","rgbVal","isNonEmptyElement","bogusVal","splitElm","replacementElm","beforeFragment","afterFragment","rv","getContentEditableParent","dumpRng","DOM$a","each$e","QUEUED","LOADING","LOADED","FAILED","ScriptLoader","scriptLoadedCallbacks","queueLoadedCallbacks","loading","loadScript","cleanup","isDone","markDone","loadQueue","loadScripts","scripts","failures","execCallbacks","loadingScripts","notifyCallbacks","isRaw","isTokenised","currentCode","getLanguageData","setCode","newCode","getCode","langData","translation","getLangData","textstr","removeContext","substitued","$1","$2","isRtl$1","hasCode","I18n","AddOnManager","_listeners","runListeners","matchedListeners","dependencies","requireLangPack","languages","languageLoad","waitFor","language","wrappedLanguages","addOn","addOnConstructor","createUrl","baseUrl","resource","addComponents","pluginName","loadDependencies","addOnUrl","deps","newUrl","urlString","PluginManager","ThemeManager","read$4","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","findMarkers","isAnnotation","findAll","nodesAlready","setup$n","_registry","changeCallbacks","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","onNodeChange","setup$m","identifyParserNode","addNodeFilter","spans","persistent","deep$1","TextWalker","TextSeeker","isBlockBoundary","newOffset","round$2","isEqual","rect1","rect2","isValidOverflow","overflowY","isAbove$1","halfHeight","isBelow$1","containsXY","clamp$2","getSelectedNode","getNode$1","safeOffset","getNodeUnsafe","extendingChars","isExtendingChar","isElement$3","isCaretCandidate$2","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$2","nodeIndex$1","resolveIndex$1","createRange$1","isWhiteSpace$1","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","nbsp$1","clientRect","getBoundingClientRectWebKitText","ec","so","eo","newRng","getBoundingClientRect$1","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","addUniqueAndValidRect","addCharacterOffset","beforeNode","CaretPosition","toRange","fromRangeStart","fromRangeEnd","pos1","pos2","isTextPosition","isElementPosition","HDirection","trimEmptyTextNode$1","insertFragment","rangeInsertNode","isText$3","isBogus","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","parentsUntil$1","outputOffset","resolvePathItem","findTextPosition","dataLen","targetOffset","resolve$2","isContentEditableFalse$9","getNormalizedTextOffset","trimmedOffset","getPoint","getLocation","isFakeCaret","moveEndPoint$1","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","getBookmark$2","getUndoBookmark","DOM$9","defaultPreviewStyles","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre$1","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","isAutomaticUploadsEnabled","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","contentCss","getFontCss","fontCss","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","getEventRoot","getServiceMessage","getTheme","shouldValidate","isInlineBoundariesEnabled","getFormats","getPreviewStyles","canFormatEmptyLines","getCustomUiSelector","getThemeUrl","hasHiddenInput","shouldPatchSubmit","isEncodingXml","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","hasForcedRootBlock","getCustomUndoRedoLevels","shouldDisableNodeChange","isReadOnly$1","hasContentCssCors","getPlugins","getExternalPlugins$1","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","getIframeTitle","isText$2","removeNode$1","trimCount","trimmedText","deleteZwspChars","deleteData","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","browser$2","isContentEditableFalse$8","isMedia$1","isTableCell$3","inlineFakeCaretSelector","getAbsoluteClientRect","scrollX","scrollY","rootRect","trimInlineCaretContainers","fakeCaretTargetNodes","FakeCaret","cursorInterval","lastVisualCaret","rootBlock","caretBlock","isInlineFakeCaretTarget","startBlink","caretState","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$7","isMedia","isBlockLike","isCaretContainer","isCaretContainerBlock","isCaretCandidate$1","isForwards","isBackwards","skipCaretContainers","findNode$1","predicateFn","isCefOrCaretContainer","getParentBlock$2","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","leanLeft","leanRight","location_1","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","isContentEditableFalse$6","isBr$1","isCaretCandidate","isAtomic","isEditableCaretCandidate","getParents$3","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition$1","Forwards","startPos","innerNode","rootContentEditableFalseElm","CaretWalker","Backwards","walkToPositionIn","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID$1","isCaretNode","getParentCaretContainer","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","addBogus","resolveCaretPositionBookmark","insertZwsp","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","appendData","resolvePaths","resolveId","endPos","spos","epos","resolveIndex","getBookmark$1","isBookmarkNode$1","expected","actual","isNbsp","isWhiteSpace","isContent","isNode","isInlineBlock","moveStart","isWhiteSpaceNode$1","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","allowSpaces","isEmptyTextNode$1","replaceVars","vars","isEq$5","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$2","isVariableFormatName","hasVariableValues","isVariableValue","fieldValues","areSimilarFormats","otherFormatName","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","isMixedFormat","shouldExpandToSelector","getParents$1","isWhiteSpaceNode","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","textOffset","spaceResult","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","block_expand","isSelfOrParentBookmark","expandRng","includeTrailingSpace","startPoint","endPoint","walk$2","firstNode","collectSiblings","findEndPoint","walkBoundary","siblings_1","getSelectedNodes","hasMultipleRanges","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","getCellsFromEditor","getSel","getClosestTable","getStartNode","getEndNode","getFirstChildren","getLastChildren$1","hasAllContentsSelected","moveEndPoint","hasAnyRanges","runOnRanges","fakeSelectionNodes","fakeNodeRng","fillBookmark","isZeroWidth","wrapName","applyWordGrab","makeAnnotation","eDoc","decorate","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","hasFakeSelection","Annotator","annotationChanged","BookmarkManager","getContentEditableRoot$1","isXYWithinRange","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","fireFormatApply","fireFormatRemove","VK","PAGE_UP","PAGE_DOWN","END","HOME","modifierPressed","isContentEditableFalse$5","ControlSelection","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","elementSelectionAttr","editableDoc","rootDocument","resizeHandles","nw","ne","sw","isImage","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTargets","firstElementChild","createGhostElement","setSizeProp","setGhostElmSize","ghostElm","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","showResizeRect","unbindResizeHandleEvents","targetWidth","targetHeight","hideResizeRect","updateResizeRect","startElm","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","handleMSControlSelect_1","delayedSelect","throttledUpdateResizeRect","composing","hasCeProperty","findParent$1","findClosestIeRange","createTextRange","moveToElementText","moveToPoint","moveOutOfContentEditableFalse","pointDoc","isEq$4","rng1","findParent","hasParent$1","hasParentWithName","isTableCell$2","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","RangeUtils","normalizedRng","compareRanges","getCaretRangeFromPoint","documentFocusInHandler","excludeFromDescend","fireScrollIntoViewEvent","scrollEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","createMarker","elementMarker","withMarker","preserveWith","applyWithMarker","withScrollEvents","startElement","endElement","scrollToMarker","intoWindowIfNeeded","viewportBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollElementIntoView","scroller","scrollRangeIntoView","hasFocus$1","getStart$2","browser$1","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","bookmarkToNativeRng","newBookmark","storeNative","isEditorUIElement$1","FocusManager","isEditorUIElement","isManualNodeChange","selectionChange","registerPageMouseUp","throttledStore","mouseUpPage","registerFocusOut","registerMouseUp","registerEditorEvents","DOM$8","isEditorContentAreaElement","isUIElement","customSelector","getActiveElement","registerEvents$1","focusedEditor","blurredEditor","activeEditor","unregisterDocumentEvents","setup$l","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection$1","caretPos","focusBody","hasElementFocus","hasIframeFocus","hasInlineFocus","rawBody","hasUiFocus","hasEditorOrUiFocus","focusEditor","quirks","refreshContentEditable","bookmarkRng","contentEditableHost","activateEditor","skipFocus","getEndpointElement","real","skipEmptyTextNodes","commonAncestorContainer","endElm","processRanges","typeLookup","walk$1","isEmptyTextNode","AstNode","selfAttrs","cloneAttrs","selfAttr","shortEnded","refNode","extractBase64DataUris","dataImageUri","uris","imageId","restoreDataUris","parseDataUri$1","decodeURIComponent","safeSvgDataUrlElements","filteredClobberElements","isValidPrefixAttrName","blockSvgDataUris","allowSvgDataUrls","allowed","isInvalidUri","allow_html_data_urls","findMatchingEndTagIndex","startTagRegExp","endTagRegExp","shortEndedElements","startMatch","findCommentEndIndex","endMatch","isConditionalComment","lcHtml","endIfIndex","endCommentRegexp","checkBogusAttribute","regExp","attrString","SaxParser","fix_self_closing","comment","cdata","pi","doctype","parseInternal","base64Extract","endRegExp","attrList","textData","isInternalElement","isShortEnded","elementRule","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","anyAttributesRequired","filteredUrlAttrs","scriptUriRegExp","parsingMode","processEndTag","processText","processComment","allow_conditional_comments","processAttr","processMalformedComment","startTag","parseAttribute","val2","val3","attrRule","trimRegExp","fillAttrsMap","isNameOrId","unescape","tokenRegExp","attrRegExp","selfClosing","self_closing_elements","removeInternalElements","remove_internals","fixSelfClosing","processHtml","bogusValue","isValidCdataSection","preserve_cdata","findEndTag","trimHtml","tempAttrs","trimContentRegExp","trimInternal","bogusAllRegExp","getTempAttrs","endTagIndex","trimExternal","trimEmptyContents","emptyRegExp","setupArgs$3","getInner","getContentFromBody","defaultedArgs","updatedArgs","getContentInternal","each$d","ElementUtils","attribs","compareObjects","obj1","obj2","makeMap$1","Writer","indent","indentBefore","indent_before","indentAfter","indent_after","entity_encoding","htmlOutput","element_format","HtmlSerializer","writer","8","7","10","11","sortedAttrs","nonInheritableStyles","Set","nonInheritableStylesArr","shorthandStyleProps","getStyleProps","isNonInheritableStyle","hasInheritableStyles","getLonghandStyleProps","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","parentValue","nodeStyleProp","propExists","longhandProps","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","getLastChildren","rawNode","removeTrailingBr","allBrs","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","dropLast","parentsAndSelf","navigateIgnoreEmptyTextNodes","getClosestBlock$1","isAtBeforeAfterBlockBoundary","fromBlock","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","parentBlocks","isBeforeBr$1","isAfterBr","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","needsToBeNbsp","isNbspAt","hasNbsp","normalizeNbspMiddle","normalizeNbspAtStart","firstPos","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","lastPos","normalizeNbsps","normalizeNbspsInEditor","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","newNode","removeNode","insertData","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","startPosition","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition","findCaretPosOutsideElmAfterDelete","setSelection$1","eqRawNode","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement$2","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","isRootFromElement","getTableCells","getTableDetailsFromRange","getTable","isStartInTable","isEndInTable","isSameTable","isMultiTable","tableCellRng","tableSelection","deleteAction","singleCellTable","fullTable","partialTable","multiTable","getClosestCell$1","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","isSingleCellTable","getCellRng","endCell","getCellRangeFromStartTable","getCellRangeFromEndTable","getTableSelectionFromCellRng","getTableSelections","sameTableSelection","startTableSelection","endTableSelection","getCellIndex","isSingleCellTableContentSelected","optCellRng","unselectCells","otherContentRng","handleSingleTable","handleMultiTable","startTableSelectedCells","endTableSelectedCells","getActionFromRange","cleanCells","getOutsideBlock","handleEmptyBlock","startInTable","emptyBlock","setCursorInCell","emptySingleTableCells","outsideDetails","outsideBlock","deleteContents","emptyMultiTableCells","startTableCells","endTableCells","betweenRng","deleteCellContents","lastBlock","additionalCleanupNodes","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange$2","getParentCell","deleteBetweenCells","fromCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","fromPos","deleteCaret$3","backspaceDelete$9","normalizeBlockSelectionRange","newEndPos","hasOnlyOneChild$1","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","nonEmptyElements","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","caretWalker","newCaretPos","findLastOf","insertMiddle","insertBefore$1","insertAfter$1","insertAtCaret$1","liTarget","liElms","BEGINNING","isAt","trimOrPadLeftRight","isTableCell$1","isTableCellContentSelected","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","textInlineElements","root_1","elementUtils_1","styleConflict","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","nextRng","getContentEditableFalseParent","parentEditableFalseElm","findNextCaretRng","deleteSelectedContent","insertHtmlAtCaret","bookmarkHtml","caretElement","parserArgs","_selectionOverrides","showBlockCaretContainer","findMatchingNodes","nodeFilters","attributeFilters","attrMatches","name_2","defaultFormat$1","isTreeNode","moveSelection","setEditorHtml","noSelection","setContentString","padd","forcedRootBlockName","no_selection","isRootContent","setContentTree","getNodeFilters","getAttributeFilters","setupArgs$2","setContentInternal","isEq$3","matchesUnInheritedFormatSelector","matchParents","similar","matchName$1","matchItems","onmatch","expectedValue","isEmptyValue","match$2","matchAll","matchedFormatNames","checkedMap","rawElm","defaultBlock","matchAllOnNode","formatNames","matchSimilar","ZWSP","CARET_ID","importNode","getEmptyCaretContainers","isCaretContainerEmpty","findFirstTextNode","createCaretContainer","fill","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","cleanFormatNode","validFormats","matchedFormats","uniqueFormats","fmtName","clonedFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","cleanedFormatNode","caretTextNode","disableCaretContainer","setup$k","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","postProcessHooks","each$c","addPostProcessHook","hooks","postProcess$1","hasPreSibling","pre","isPre","joinPre","pre1","pre2","each$b","isElementNode$1","findElementSibling","mergeSiblingsNodes","elementUtils","tmpSibling","mergeSiblings","merge_siblings","clearChildStyles","clear_child_styles","processChildElements","unwrapEmptySpan","hasStyle","applyStyle","removeResult","MCE_ATTR_RE","each$a","isEq$2","isTableCellOrRow","isChildOfInlineParent","lastIdx","normalizeTableSelection","childNode","wrapWithSiblings","matchName","isColorFormatAndAnchor","rootBlockElm","forcedRootBlock","list_block","forced_root_block_attrs","removeFormatInternal","compareNode","stylesModified","preserve_attributes","attrsToPreserve","valueOut","removeFormat$1","newName","findFormatRoot","formatRoot","removeFormatFromClone","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","removeNodeFormat","lastContentEditable","textDecorations","textDecoration","removeRngStyle","ceFalseOverride","each$9","mergeTextDecorationsAndColor","processTextDecorationsAndColor","mergeBackgroundColorAndFontSize","mergeSubSup","mergeWithChildren","mergeWithParents","merge_with_parents","each$8","isElementNode","canFormatBR","validBRParentElements","figcaption","summary","hasCaretNodeSibling","applyFormat$1","setElementFormat","onformat","styleVal","applyNodeStyle","createWrapElement","wrapElm","applyRngStyle","nodeSpecific","currentWrapElm","getChildCount","mergeStyles","childElement","childCount","curSelNode","firstFormat","forced_root_block","fake","formatItem","hasVars","setup$j","registeredFormatListeners","updateAndFireChangeCallbacks","nodeOrRange","fallbackElement","matchingNode","isMatchingNode","matchingFormat","isUnableToMatch","registeredCallbacks","runIfChanged","node_1","withSimilar","withoutSimilar","withVars","addListeners","formatChangeItems","toAppendTo","formatChangedInternal","tableModel","tableRow","cellPosition","fillout","y2","x2","cellExists","skipCellsX","findElementPos","extractRows","sx","sy","ey","subTable","createDomTable","tableElement","tableBody","modelRowsToDomRows","toDom","subsection","findParentListContainer","getFullySelectedListWrappers","_li","listCont","listStyles","_style","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","fullTableModel","sectionedTableModel","getSelectionFragment","read$3","trimLeadingCollapsibleText","isCollapsibleWhitespace","getInnerText","bin","shouldTrim","getContextNodeName","parentBlockOpt","contextNodeName","shouldTrimSpaces","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","setupArgs$1","getSelectedContentInternal","KEEP","INSERT","vDown","vUp","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","getOuterHtml","insertAt","removeAt","applyDiff","fragments","currentFragments","lazyTempDocument","implementation","createHTMLDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$1","isUnlocked","locks","setTyping","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange$1","addUndoLevel$1","currentLevel","lastLevel","bm","customUndoRedoLevels","setDirty","clear$1","extra$1","callback1","callback2","redo$1","undo$1","hasUndo$1","hasRedo$1","transact$1","beforeChange","ignore$1","addVisualInternal","matchedElm","value_1","cls_1","makePlainAdaptor","hasUndo","hasRedo","getModel","makeRtcAdaptor","rtcEditor","defaultVars","_undoManager","_locks","_node","_similar","_rfl","_details","getRawModel","makeNoopAdaptor","nul","isRtc","plugins","getRtcSetup","rtcPlugin","setup$i","editorCast","rtcInstance","rtc","isRemote","getRtcInstanceWithFallback","getRtcInstanceWithError","addUndoLevel","matchFormat","matchAllFormats","matchNodeFormat","canApplyFormat","closestFormat","toggleFormat","getContent$2","setContent$2","getSelectedContent","addVisual$1","getContent$1","walkPastBookmark","outerElm","oldLength","normalizeTextIfRequired","mergeAndNormalizeText","outerNode","normalizer","innerTextNode","rngSetContent","prevText","nextText","setupArgs","cleanContent","contextBlock","contextArgs","setContent$1","eventArgs","createContextualFragment","deleteFromCallbackMap","newCallbacks","SelectorChanged","selectorChangedData","currentSelectors","selectorChangedWithUnbind","matchedSelectors","isNativeIeSelection","isAttachedToDom","isValidRange","EditorSelection","selectedRange","explicitRange","getRng$1","getEnd$1","bookmarkManager","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","ieRange","setNode","getSelectedBlocks$1","anchorRange","focusRange","selectorChanged","getScrollContainer","scrollContainer","placeCaretAt","controlSelection","removeAttrs","addFontToSpansFilter","domParser","fontSizes","face","addStrikeToSpanFilter","addFilters","convert_fonts_to_spans","font_size_legacy_values","inline_styles","blobUriToBlob","rejectWithError","xhr_1","XMLHttpRequest","responseType","parseDataUri","uriParts","buildBlob","uriToBlob","count$1","imageToBlobInfo","blobCache","blobInfo","getByUri","dataUri","getByData","getAllImages","ImageScanner","uploadStatus","cachedPromises","images","isUploaded","promises","imageInfo","newPromise","paddEmptyNode","brPreferred","padd_empty_with_br","isPaddedWithNbsp","hasOnlyChild","isPadded","whitespaceElements","isLineBreakNode","isBogusImage","isInternalImageSource","isValidDataImg","images_dataimg_filter","imgElem_1","registerBase64ImageFilter","blob_cache","processImage","inputSrc","blobUri","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","addNoOpener","allow_unsafe_link_target","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","each$7","explode$2","extend$4","DomParser","matchedNodes","matchedAttributes","root_name","fixInvalidChildren","nonSplitableElements","textBlockElements","removeOrUnwrapInvalidNode","originalNodeParent","children_1","newParent","tempNode","filterNode","currentNode","fi","fl","invalidChildren","getRootBlockName","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","isInWhiteSpacePreservedElement","addRootBlocks","rootBlockNode","createNode","removeWhitespaceBefore","textVal","textNodeNext","cloneAndExcludeBlocks","parent_2","attrFiltersLen","htmlParser","internalName","hasChildren","trimTrailingBr","brNode1","brNode2","preProcess","oldDoc","clonedNode","impl","doc_1","shouldFireEvent","hasEventListeners","postProcess","outArgs","getHtmlFromNode","parseHtml","serializeNode","htmlSerializer","toHtml","DomSerializerImpl","addRules","setRules","DomSerializer","domSerializer","defaultFormat","DOM$7","restoreOriginalStyles","orgDisplay","safeDestroy","clearDomReferences","contentAreaContainer","formElement","restoreForm","_mceOldSubmit","formEventDelegate","editorUpload","save","is_removing","unbindAllNativeEvents","automatic","destroyed","_beforeUnload","theme","sectionResult","deviceDetection","legacyMobilePlugins","defaultTouchSettings","table_grid","object_resizing","normalizePlugins","pluginNames","trimmedPlugins","filterLegacyMobilePlugins","extractSections","sectionSettings","hasSection","isSectionTheme","getSectionConfig","getDefaultSettings","documentBaseUrl","baseDefaults","toolbar_mode","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_urls","remove_script_host","visual","hidden_input","getDefaultMobileSettings","mobileSettings","defaultMobileSettings","toolbar_sticky","defaultPhoneSettings","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","combinePlugins","forcedPlugins","getPlatformPlugins","isMobileDevice","desktopPlugins","mobilePlugins","processPlugins","defaultOverrideSettings","forced_plugins","mobileConfig","platformPlugins","combinedPlugins","isOnMobile","combineSettings","defaultSettings","defaultDeviceSettings","extendedSettings","getEditorSettings","getFiltered","getParamObject","CreateIconManager","iconPack","IconManager","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","isInsideElementContentArea","bodyElm","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","unimplemented","NotificationManager","getImplementation","getTopNotification","addNotification","closeNotification","otherNotification","fireEvent","getNotifications","serviceMessage","WindowManagerImpl","getParams","setParams","WindowManager","dialogs","funcBind","fireOpenEvent","fireCloseEvent","addDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","windowManagerImpl","displayNotification","notificationManager","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","pluginInitError","initError","isContentCssSkinName","getContentCssUrls","transformToUrls","getFontCssUrls","cssLinks","contentCssFile","appendContentCssFromSettings","UploadStatus","PENDING","UPLOADED","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","isPending","markPending","markUploaded","removeFailed","rnd","uuid","BlobCache","mimeToExt","mime","mimes","filename","toBlobInfo","findFirst","cachedBlobInfo","removeByUri","Uploader","pendingPromises","pathJoin","path1","path2","defaultHandler","xhr","withCredentials","credentials","upload","onprogress","json","responseText","basePath","FormData","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","closeNotification_1","failureOptions","isDefaultHandler","pendingUploadBlobInfo","uploadBlobs","blobInfos","createUploader","ImageUploader","uploader","showNotification","UploadChangeHandler","lastChangedLevel","fireIfChanged","EditorUpload","imageScanner","urlFilters","changeHandler","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","replaceImageUriInView","uploadImages","scanForImages","imageInfos","imagesToRemove","filteredResult","uploadInfo","uploadUri","uploadImagesAuto","isValidDataUriImage","imgElm","dataImgFilter","addFilter","resultItem","replaceBlobUris","source_view","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","textAlign","aligncenter","marginLeft","marginRight","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontsize","lineheight","lineHeight","fontsize_class","blockquote","subscript","superscript","_fmt","_itemName","removeformat","FormatRegistry","each$6","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","ancestorName","parentRequired","siblingElm","parseSelectorItem","$0","$3","$4","parseSelector","previewFrag","parentFontSize","previewCss","previewStyles","removeVars","previewOpt","previewElm","numValue","setup$h","Formatter","formatChangeState","shouldIgnoreCommand","isFirstTypedCharacter","addNonTypingUndoLevel","isDirty","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","isForcedRootBlockFalse","setup$g","updatePlaceholder","showPlaceholder","isPlaceholderShown","strongRtl","hasStrongRtl","isInlineTarget","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","isBeforeRoot","isTextBlockOrListItem","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","normalizedFirstPos","normalizedLastPos","normalizedFromPos","nextPos","blockPosition","blockBoundary","getBlockPosition","isDifferentBlocks","hasSameParent","parent1","parent2","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$8","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$1","backspaceDelete$7","_forward","isContentEditableTrue$2","isContentEditableFalse$4","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","trimEmptyTextNode","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","deleteBoundaryText","getNextPosFn","isBeforeFn","nextCaretPosition","backspaceDelete$6","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","deleteElement$1","hideFakeCaret","getAncestorCe","selectedNode","deleteOffscreenSelection","hasCefAncestor","paddEmptyElement","backspaceDelete$5","deleteCaret$2","backspaceDelete$4","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","readLocation","getName","outside","isEq","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation$1","BreakType","hasSelectionModifyApi","modify","moveByWord","VDirection","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","lastDist","newDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","isAtFirstLine","isAtLastLine","getFirstLinePositions","getLastLinePositions","getNodeClientRects","toArrayWithNode","customEventRootDelegates","beforeUnloadDelegate","walkUntil$1","isAboveFn","isBeflowFn","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","positionsUntil","isBelowFn","getClientRect","isAboveLine","isLine","isContentEditableFalse$3","findNode","distanceToRectLeft","distanceToRectRight","isInsideX","isInsideY","findClosestClientRect","oldClientRect","oldDistance","newDistance","walkUntil","includeChildren","findLineNodeRects","targetNodeRect","checkPosFn","lineRects","getFakeCaretTargets","caretInfo","closestFakeCaret","fakeTargetNodeRects","targetNodeRects","closestNodeRect","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","rangeIsInContainerBlock","moveVertically","caretClientRect","walkerFn","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","moveToLineEndPoint$3","setCaretPosition","setSelected","renderCaretLocation","findLocation","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","renderInsideInlineCaret","inlines","_inline","move$2","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope","backspaceDeleteCollapsed","toPosition","backspaceDelete$3","getParentInlines","hasOnlyOneChild","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret$1","backspaceDelete$2","deleteElement","deleteCaret","isNearMedia","backspaceDelete$1","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentUnit","indentValue","nativeCommand","deleteCommand","forwardDeleteCommand","setup$f","debounceLongpress","isEqualNode","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","rootNodeName","restoreSelection","findBlockCaretContainer","removeIeControlRect","blockCaretContainer","handleBlockContainer","isContentEditableFalse$2","moveToCeFalseHorizontally","moveToCeFalseVertically","exitPreBlock","getVisualCaretPosition$1","getHorizontalRange","getVerticalRange","moveH$2","newRange","moveV$3","moveToLineEndPoint$1","isCefPosition","rangeBefore","insertElement","insertBr","insertBlock","insertEmptyLine","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","rootBlockAttrs","moveV$2","defaultPatterns","matchesEvent","match$1","moveH$1","moveV$1","moveToLineEndPoint","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","lineInfo","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","getClosestAbovePosition","getClosestBelowPosition","renderBlock","navigateVertically","mover","moveH","moveV","executeKeydownOverride$3","executeKeydownOverride$2","executeKeyupOverride","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot$1","editableRoot","getParentBlock","getParentBlockName","isListItemParentBlock","hasFirstChild","hasParent","isListBlock","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","insert$3","createNewBlock","newBlockName","trimZwsp","isEmptyAnchor","isTableCell","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","getEditableRoot","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","wrapSelfAndSiblingsInDefaultBlock","addBrToBlockIfNeeded","insert$2","parentBlockName","isAfterLastNodeInContainer","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","hasRightSideContent","moveSelectionToBr","brElm","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","anchorLocation","shouldInsertBr","shouldBlockNewLine$1","newLineAction","shouldBlockNewLine","_shiftKey","isBrMode","requiredState","brMode","inListBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre","inBrContext","canInsertIntoEditableRoot","rootEditable","predicates","isMatch","handleEnterKeyEvent","executeKeydownOverride$1","setupIeInput","keypressThrotter","isComposing","executeKeyupAction","isPageUpDown","setNodeChangeBlocker","blocked","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","insertSpaceOrNbspAtSelection","executeKeydownOverride","registerKeyboardOverrides","NodeChange","lastPath","nativeRng","fakeRng","isSameElementPath","currentPath","preventSummaryToggle","filterDetails","isTextBlockNode","normalizeSelection","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","isContentEditableFalse$1","isContentEditableTrue$1","isDraggable","isValidDropTarget","dragElement","cloneElement","cloneElm","createGhost","clonedElm","appendGhostToBody","moveGhost","overflowX","removeElement","isLeftMouseButtonPressed","applyRelPos","relX","ceElm","elmPos","dragging","relY","throttledPlaceCaretAt","targetPos","getRawTarget","targetClone_1","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","blockIeDrop","realTarget","blockUnsupportedFileDrop","preventFileDrop","preventFileDropIfUIElement","editorRoot","eventNames","renderFocusCaret","getContentEditableRoot","SelectionOverrides","fakeCaret","realSelectionId","isFakeSelectionElement","isFakeSelectionTargetElement","isNearFakeSelectionElement","getRealSelectionElement","setRange","getRange","contentEditableRoot","removeElementSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","setElementSelection","fakeCaretInfo","normalizeShortEndedElementSelection","isPasteBin","isRangeInCaretContainer","clipboardData","realSelectionElement","clearData","outerText","isWithinCaretContainer","setupOffscreenSelection","targetClone","origTargetClone","$realSelectionContainer","selectElement","nodeElm","afterNode","Quirks","isGecko","isWebKit","mceInternalUrlPrefix","mceInternalDataType","setEditorCommandState","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","queryCommandSupported","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","documentElementEditingFocus","removeHrOnBackspace","Range","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","template","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","selection_1","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","setupRtc","DOM$6","appendStyle","getRootName","removeUndefined","mkParserSettings","mkSerializerSettings","boolean_attributes","move_caret_before_on_enter_elements","non_empty_elements","short_ended_elements","text_inline_elements","whitespace_elements","createParser","autoFocus","auto_focus","moveSelectionToFirstCaretPosition","initEditor","bindPendingEventDelegates","execCallback","getStyleSheetLoader$1","makeStylesheetLoadingPromises","framedFonts","loadContentCss","removeCss","contentCssText_1","allStylesheets","content_style","preInit","browser_spellcheck","gecko_spellcheck","spellcheck","directionality","protect","loadInitialContent","startContent","initEditorWithInitialContent","initContentBody","skipWrite","orgVisibility","iframeHTML","hex_colors","force_hex_style_colors","annotator","_nodeChangeDispatcher","setupRtcThunk","setProgressState","_rtcMode","DOM$5","relaxDomain","ifr","domain","hostname","bodyUuid","domainRelaxUrl","createIframeElement","customAttrs","frameBorder","allowTransparency","getIframeHtml","getURI","bodyId","bodyClass","createIframe","iframeTranslatedTitle","isDomainRelaxed","boxInfo","hidden","DOM$4","initPlugin","initializedPlugins","plugin","pluginInstance","trimLegacyPrefix","initPlugins","initIcons","iconPackName","currentIcons","loadIcons","svgData","addIcon","initTheme","renderFromLoadedTheme","renderFromThemeFunc","iframeHeight","createThemeFalseResult","renderThemeFalseIframe","renderThemeFalse","renderThemeUi","augmentEditorUiApi","uiApiFacade","renderInfo","DOM$3","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","url_1","loadTheme","themeUrl","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","urlMeta","loadPlugins","depPlugin","url_2","getStyleSheetLoader","resetContent","triggerSave","set_dirty","legacyPropNames","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","getComputedFontProp","getFontProp","getFontSize","getFontFamily","findFirstCaretElement","getCaretElement","atStartOfNode","bindRange","mapRange","mapper","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","lineHeightQuery","specifiedStyle","computedStyle","lineHeightAction","processValue","insertAtCaret","each$5","EditorCommands","setupCommands","skip_focus","customCommand","addCommands","commandList","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","selectionBookmark","_command","queryCommandEnabled","listParent","editingHost","alignStates","Undo","Redo","internalContentEditableAttr","setContentEditable","switchOffContentEditableTrue","switchOnContentEditableTrue","removeFakeSelection","restoreFakeSelection","toggleReadOnly","registerFilters","registerReadOnlyContentFilters","isClickEvent","getAnchorHrefOpt","processReadonlyEvents","registerReadOnlySelectionBlockers","nativeEvents","EventDispatcher","bindings","toggleEvent","isNative","beforeFire","wrappedCallback","currentName","bindingName","filteredHandlers","getEventDispatcher","_eventDispatcher","toggleNativeEvent","Observable","dispatcherArgs","getEventTarget","eventRoot","isListening","bindEventDelegate","delegates","eventRootElm","editors","EditorObservable","_pendingNativeEvents","defaultModes","switchToMode","activeMode","availableModes","oldMode","deactivate","editorReadOnly","registerMode","design","each$4","explode$1","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","parseShortcut","charCode","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","cmdFunc","normalizeCommandFunc","createShortcut","addSidebar","each$3","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","extend$3","Editor","loadedCSS","isNotDirty","documentBaseURL","base_url","_setBaseUrl","baseURI","referrer_policy","language_load","editorCommands","cache_suffix","modeInstance","callbackLookup","initialContent","oldState","urlconverter_callback","_scanForImages","extend$2","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","extendClass","initializing","min$1","max$1","relativePosition","targetW","targetH","relChars","findBestRelativePosition","constrainRect","intersect","x1","y1","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","fromClientRect","Rect","awaiter","resolveCb","rejectCb","tasks","resultFns","loadErrMsg","runErrMsg","task","waiter","extend$1","Class","_super","mixins","mixin","Mixins","dummy","createMethod","Methods","Properties","Statics","Defaults","member","localStorage","Color","rgb2hsv","hsvToRgb","toRgb","toHsv","hexCode","JSONUtils","JSONP","XHR","ready","async","success_scope","error_scope","overrideMimeType","content_type","crossDomain","setRequestHeader","requestheaders","JSONRequest","sendRPC","ecb","scb","xhrArgs","removeItem","configurable","enumerable","LocalStorage","publicApi","geom","TreeWalker","Serializer","Selection","isMac","exportToModuleLoaders","exportToWindowGlobal","tinyMCE","editorContent","_m","$event","validateStep1","directives","rawName","formStep1","expression","validationErrors","$$selectedVal","$set","domProps","_l","goToStep2","validateStep2","selectedEmailTemplate","newsletterName","emailSenderDetails","emailAddress","formStep2","attachments","attachment","getAttachment","attachmentPath","fileName","previewEmail","goToStep3","startOver","validateStep3","submitForm","backToStep2","emailContent","$refs","popupPreview"],"mappings":"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CED,KAAMimG,GACNptF,KAAM,eACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,YACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,eACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,aACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,QACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,SACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,MACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,SACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,OACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,iBACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,SACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,WACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,cACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,YACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,aACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,cACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,OACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,YACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,YACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,QACN5Y,MAAO,WAET,CACED,KAAMimG,GACNptF,KAAM,QACN5Y,MAAO,YAGPkmG,GAAad,GAAW,IACxBe,GAAY,SAAUC,GAExB,IADA,IAAIC,EAAS,GACJplG,EAAI,EAAGA,EAAImlG,EAASjlG,OAAQF,GAAK,EACxColG,EAAOz/F,KAAK,CACVgS,KAAMwtF,EAASnlG,EAAI,GACnBjB,MAAO,IAAM2kG,GAASyB,EAASnlG,IAAIjB,MACnCD,KAAM,eAGV,OAAOsmG,GAELC,GAAiB,SAAUrgB,EAAQsgB,GACrC,OAAOtgB,EAAO4Q,SAAS,aAAc0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B,GAAoB,SAAUnqG,GAChC,OAAOiqG,GAASjqG,IAGdoqG,GAAQ,SAAU1gI,EAAOgtC,EAAKxL,GAChC,IAAIm/F,EAA+B,kBAAV3gI,EAAqBohC,WAAWphC,GAASA,EAMlE,OALI2gI,EAAcn/F,EAChBm/F,EAAcn/F,EACLm/F,EAAc3zF,IACvB2zF,EAAc3zF,GAET2zF,GAELC,GAAW,WACb,MAAO,CACL,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGAC,GAAc,CAChB,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,EACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,EACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,IAEEC,GAAW,SAAUC,EAASC,GAIhC,IAHA,IAEI/1H,EAFA0gG,EAAM,GACNs1B,EAAM,IAAIzhI,MAAM,IAEXyB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAI+M,EAAI,EAAGA,EAAI,EAAGA,IACrB29F,EAAI39F,GAAKgzH,EAAQhzH,EAAQ,EAAJ/M,GAEvB,IAAS+M,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B/C,EAAM,EACN,IAAK,IAAIwB,EAAI,EAAGA,EAAI,EAAGA,IACrBxB,GAAO81H,EAAQ/yH,EAAQ,EAAJvB,GAA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AK0kF,SAAU,CAE1B,GADA15D,EAAUpW,EAAK+tT,GACX33S,EACF,OAAOA,EAET,IAAKjC,EAASnU,EAAKyM,WAAY0H,GAAUA,IAAW/oB,KAAK0kF,SAAU37D,EAASA,EAAO1H,WAEjF,GADA2J,EAAUjC,EAAO45S,GACb33S,EACF,OAAOA,KAMjBs3S,EAAc3mU,UAAU8mU,iBAAmB,SAAU7tT,EAAM8tT,EAAWC,EAAa90S,GACjF,IAAI7C,EAASjC,EAAQoT,EACrB,GAAIvnB,EAAM,CAER,GADAoW,EAAUpW,EAAK+tT,GACX3iU,KAAK0kF,UAAY15D,IAAYhrB,KAAK0kF,SACpC,OAEF,GAAI15D,EAAS,CACX,IAAK6C,EACH,IAAKsO,EAAQnR,EAAQ03S,GAAYvmS,EAAOA,EAAQA,EAAMumS,GACpD,IAAKvmS,EAAMumS,GACT,OAAOvmS,EAIb,OAAOnR,EAGT,GADAjC,EAASnU,EAAKyM,WACV0H,GAAUA,IAAW/oB,KAAK0kF,SAC5B,OAAO37D,IAINu5S,EAnEW,GAsEhBM,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,GAAa,CACf,KACA,MAEEC,GAAgB,CAClB,QACA,QACA,SAEEpjH,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEEqjH,GAAW,CACb,KACA,KACA,KACA,KACA,KACA,MAEEC,GAAc,CAChB,KACA,KACA,MAEElpH,GAAQ,CACV,KACA,KACA,MAEEmpH,GAAa,CACf,MACA,SACA,WACA,SAEEC,GAAa,SAAU3zQ,GACzB,IAAIH,EACJ,OAAO,SAAUx6C,GAEf,OA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","file":"js/chunk-4f7a1d46.b9182f37.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.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType$1 = 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$1 = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType$1('string');\n var isObject = isType$1('object');\n var isArray = isType$1('array');\n var isNull = eq$1(null);\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq$1(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n var isArrayOf = function (value, pred) {\n if (isArray(value)) {\n for (var i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n var noop = function () {\n };\n var noarg = function (f) {\n return function () {\n return f();\n };\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant$1 = function (value) {\n return function () {\n return value;\n };\n };\n var identity$1 = function (x) {\n return x;\n };\n var tripleEquals = function (a, b) {\n return a === b;\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$1(false);\n var always = constant$1(true);\n\n var global$h = 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 __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2)\n for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar)\n ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n }\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var call = function (thunk) {\n return thunk();\n };\n var id = identity$1;\n var me = {\n fold: function (n, _s) {\n return n();\n },\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$1(null),\n getOrUndefined: constant$1(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: function () {\n return none();\n },\n toArray: function () {\n return [];\n },\n toString: constant$1('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant$1(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 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 };\n return me;\n };\n var from$1 = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from$1\n };\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n var contains$2 = 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$2 = 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$1 = 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$2 = 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$1 = 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$3 = 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$2 = 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, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each$1(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n var find$5 = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex$1 = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind$3 = function (xs, f) {\n return flatten(map$2(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$2(a1, function (x) {\n return !contains$2(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var pure$2 = function (x) {\n return [x];\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get$f = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get$f(xs, 0);\n };\n var last$2 = function (xs) {\n return get$f(xs, xs.length - 1);\n };\n var from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var value$3 = function (o) {\n var or = function (_opt) {\n return value$3(o);\n };\n var orThunk = function (_f) {\n return value$3(o);\n };\n var map = function (f) {\n return value$3(f(o));\n };\n var mapError = function (_f) {\n return value$3(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n isValue: always,\n isError: never,\n getOr: constant$1(o),\n getOrThunk: constant$1(o),\n getOrDie: constant$1(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error$1 = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = identity$1;\n var orThunk = function (f) {\n return f();\n };\n var map = function (_f) {\n return error$1(message);\n };\n var mapError = function (f) {\n return error$1(f(message));\n };\n var bind = function (_f) {\n return error$1(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n isValue: never,\n isError: always,\n getOr: identity$1,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error$1(err);\n }, value$3);\n };\n var Result = {\n value: value$3,\n error: error$1,\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$1 = function (res, onError, onValue) {\n return res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n };\n var partition$2 = function (results) {\n var values = [];\n var errors = [];\n each$1(results, function (obj) {\n fold$1(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$2 = 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$1 = function (res) {\n return fold$1(res, Result.error, Result.value);\n };\n var fromResult$1 = function (res) {\n return res.fold(serror, svalue);\n };\n var SimpleResult = {\n fromResult: fromResult$1,\n toResult: toResult$1,\n svalue: svalue,\n partition: partition$2,\n serror: serror,\n bind: bind$2,\n bindError: bindError,\n map: map$1,\n mapError: mapError,\n fold: fold$1\n };\n\n var field$2 = function (key, newKey, presence, prop) {\n return {\n tag: 'field',\n key: key,\n newKey: newKey,\n presence: presence,\n prop: prop\n };\n };\n var customField$1 = function (newKey, instantiator) {\n return {\n tag: 'custom',\n newKey: newKey,\n instantiator: instantiator\n };\n };\n var fold = function (value, ifField, ifCustom) {\n switch (value.tag) {\n case 'field':\n return ifField(value.key, value.newKey, value.presence, value.prop);\n case 'custom':\n return ifCustom(value.newKey, value.instantiator);\n }\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$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(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var find$4 = function (obj, pred) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n if (pred(x, i, obj)) {\n return Optional.some(x);\n }\n }\n return Optional.none();\n };\n var values = function (obj) {\n return mapToArray(obj, identity$1);\n };\n var get$e = function (obj, key) {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has$2 = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var deep = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (has$2(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$1 = baseMerge(shallow$1);\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 required$2 = function () {\n return {\n tag: 'required',\n process: {}\n };\n };\n var defaultedThunk = function (fallbackThunk) {\n return {\n tag: 'defaultedThunk',\n process: fallbackThunk\n };\n };\n var defaulted$1 = function (fallback) {\n return defaultedThunk(constant$1(fallback));\n };\n var asOption = function () {\n return {\n tag: 'option',\n process: {}\n };\n };\n var mergeWithThunk = function (baseThunk) {\n return {\n tag: 'mergeWithThunk',\n process: baseThunk\n };\n };\n var mergeWith = function (base) {\n return mergeWithThunk(constant$1(base));\n };\n\n var mergeValues$1 = function (values, base) {\n return values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge$1.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: constant$1('... (only showing first ten failures)')\n }]) : errors;\n return map$2(es, function (e) {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n var nu$d = function (path, getErrorInfo) {\n return SimpleResult.serror([{\n path: path,\n getErrorInfo: getErrorInfo\n }]);\n };\n var missingRequired = function (path, key, obj) {\n return nu$d(path, function () {\n return 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj);\n });\n };\n var missingKey = function (path, key) {\n return nu$d(path, function () {\n return 'Choice schema did not contain choice key: \"' + key + '\"';\n });\n };\n var missingBranch = function (path, branches, branch) {\n return nu$d(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$d(path, function () {\n return 'There are unsupported fields: [' + unsupported.join(', ') + '] specified';\n });\n };\n var custom = function (path, err) {\n return nu$d(path, constant$1(err));\n };\n\n var value$2 = function (validator) {\n var extract = function (path, val) {\n return SimpleResult.bindError(validator(val), function (err) {\n return custom(path, err);\n });\n };\n var toString = constant$1('val');\n return {\n extract: extract,\n toString: toString\n };\n };\n var anyValue$1 = value$2(SimpleResult.svalue);\n\n var requiredAccess = function (path, obj, key, bundle) {\n return get$e(obj, key).fold(function () {\n return missingRequired(path, key, obj);\n }, bundle);\n };\n var fallbackAccess = function (obj, key, fallback, bundle) {\n var v = get$e(obj, key).getOrThunk(function () {\n return fallback(obj);\n });\n return bundle(v);\n };\n var optionAccess = function (obj, key, bundle) {\n return bundle(get$e(obj, key));\n };\n var optionDefaultedAccess = function (obj, key, fallback, bundle) {\n var opt = get$e(obj, key).map(function (val) {\n return val === true ? fallback(obj) : val;\n });\n return bundle(opt);\n };\n var extractField = function (field, path, obj, key, prop) {\n var bundle = function (av) {\n return prop.extract(path.concat([key]), av);\n };\n var bundleAsOption = function (optValue) {\n return optValue.fold(function () {\n return SimpleResult.svalue(Optional.none());\n }, function (ov) {\n var result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\n });\n };\n switch (field.tag) {\n case 'required':\n return requiredAccess(path, obj, key, bundle);\n case 'defaultedThunk':\n return fallbackAccess(obj, key, field.process, bundle);\n case 'option':\n return optionAccess(obj, key, bundleAsOption);\n case 'defaultedOptionThunk':\n return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n case 'mergeWithThunk': {\n return fallbackAccess(obj, key, constant$1({}), function (v) {\n var result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n var extractFields = function (path, obj, fields) {\n var success = {};\n var errors = [];\n for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) {\n var field = fields_1[_i];\n fold(field, function (key, newKey, presence, prop) {\n var result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, function (err) {\n errors.push.apply(errors, err);\n }, function (res) {\n success[newKey] = res;\n });\n }, function (newKey, instantiator) {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n var valueThunk = function (getDelegate) {\n var extract = function (path, val) {\n return getDelegate().extract(path, val);\n };\n var toString = function () {\n return getDelegate().toString();\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var getSetKeys = function (obj) {\n return keys(filter$1(obj, isNonNullable));\n };\n var objOfOnly = function (fields) {\n var delegate = objOf(fields);\n var fieldNames = foldr(fields, function (acc, value) {\n return fold(value, function (key) {\n var _a;\n return deepMerge(acc, (_a = {}, _a[key] = true, _a));\n }, constant$1(acc));\n }, {});\n var extract = function (path, o) {\n var keys = isBoolean(o) ? [] : getSetKeys(o);\n var extra = filter$2(keys, function (k) {\n return !hasNonNullableKey(fieldNames, k);\n });\n return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra);\n };\n return {\n extract: extract,\n toString: delegate.toString\n };\n };\n var objOf = function (values) {\n var extract = function (path, o) {\n return extractFields(path, o, values);\n };\n var toString = function () {\n var fieldStrings = map$2(values, function (value) {\n return fold(value, function (key, _okey, _presence, prop) {\n return key + ' -> ' + prop.toString();\n }, function (newKey, _instantiator) {\n return 'state(' + newKey + ')';\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, array) {\n var results = map$2(array, function (a, i) {\n return prop.extract(path.concat(['[' + i + ']']), 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, 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, 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$2(props, function (prop) {\n return prop.toString();\n }).join(', ') + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var setOf$1 = function (validator, prop) {\n var validateKeys = function (path, keys) {\n return arrOf(value$2(validator)).extract(path, keys);\n };\n var extract = function (path, 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$2(validKeys, function (vk) {\n return field$2(vk, vk, required$2(), prop);\n });\n return objOf(schema).extract(path, o);\n });\n };\n var toString = function () {\n return 'setOf(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var thunk = function (_desc, processor) {\n var getP = cached(processor);\n var extract = function (path, val) {\n return getP().extract(path, val);\n };\n var toString = function () {\n return getP().toString();\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var arrOfObj = compose(arrOf, objOf);\n\n var anyValue = constant$1(anyValue$1);\n var typedValue = function (validator, expectedType) {\n return value$2(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 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 default:\n return false;\n }\n };\n var postMessageable = value$2(function (a) {\n if (isPostMessageable(a)) {\n return SimpleResult.svalue(a);\n } else {\n return SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n }\n });\n\n var chooseFrom = function (path, input, branches, ch) {\n var fields = get$e(branches, ch);\n return fields.fold(function () {\n return missingBranch(path, branches, ch);\n }, function (vp) {\n return vp.extract(path.concat(['branch: ' + ch]), input);\n });\n };\n var choose$2 = function (key, branches) {\n var extract = function (path, input) {\n var choice = get$e(input, key);\n return choice.fold(function () {\n return missingKey(path, key);\n }, function (chosen) {\n return chooseFrom(path, 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 arrOfVal = function () {\n return arrOf(anyValue$1);\n };\n var valueOf = function (validator) {\n return value$2(function (v) {\n return validator(v).fold(SimpleResult.serror, SimpleResult.svalue);\n });\n };\n var setOf = function (validator, prop) {\n return setOf$1(function (v) {\n return SimpleResult.fromResult(validator(v));\n }, prop);\n };\n var extractValue = function (label, prop, obj) {\n var res = prop.extract([label], 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(extractValue(label, prop, obj));\n };\n var getOrDie = function (extraction) {\n return extraction.fold(function (errInfo) {\n throw new Error(formatError(errInfo));\n }, identity$1);\n };\n var asRawOrDie$1 = 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 choose$1 = function (key, branches) {\n return choose$2(key, map(branches, objOf));\n };\n var thunkOf = function (desc, schema) {\n return thunk(desc, schema);\n };\n\n var field$1 = field$2;\n var customField = customField$1;\n var validateEnum = function (values) {\n return valueOf(function (value) {\n return contains$2(values, value) ? Result.value(value) : Result.error('Unsupported value: \"' + value + '\", choose one of \"' + values.join(', ') + '\".');\n });\n };\n var required$1 = function (key) {\n return field$1(key, key, required$2(), anyValue());\n };\n var requiredOf = function (key, schema) {\n return field$1(key, key, required$2(), schema);\n };\n var requiredNumber = function (key) {\n return requiredOf(key, number);\n };\n var requiredString = function (key) {\n return requiredOf(key, string);\n };\n var requiredStringEnum = function (key, values) {\n return field$1(key, key, required$2(), validateEnum(values));\n };\n var requiredBoolean = function (key) {\n return requiredOf(key, boolean);\n };\n var requiredFunction = function (key) {\n return requiredOf(key, functionProcessor);\n };\n var forbid = function (key, message) {\n return field$1(key, key, asOption(), value$2(function (_v) {\n return SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message);\n }));\n };\n var requiredObjOf = function (key, objSchema) {\n return field$1(key, key, required$2(), objOf(objSchema));\n };\n var requiredArrayOfObj = function (key, objFields) {\n return field$1(key, key, required$2(), arrOfObj(objFields));\n };\n var requiredArrayOf = function (key, schema) {\n return field$1(key, key, required$2(), arrOf(schema));\n };\n var option = function (key) {\n return field$1(key, key, asOption(), anyValue());\n };\n var optionOf = function (key, schema) {\n return field$1(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 = function (key, fallback) {\n return field$1(key, key, defaulted$1(fallback), anyValue());\n };\n var defaultedOf = function (key, fallback, schema) {\n return field$1(key, key, defaulted$1(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\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$2 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml$2,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant$1(isiPad),\n isiPhone: constant$1(isiPhone),\n isTablet: constant$1(isTablet),\n isPhone: constant$1(isPhone),\n isTouch: constant$1(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant$1(iOSwebview),\n isDesktop: constant$1(isDesktop)\n };\n };\n\n 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$3 = 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$c(group(1), group(2));\n };\n var detect$4 = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$3();\n }\n return find$3(versionRegexes, cleanedAgent);\n };\n var unknown$3 = function () {\n return nu$c(0, 0);\n };\n var nu$c = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$c,\n detect: detect$4,\n unknown: unknown$3\n };\n\n var detectBrowser$1 = function (browsers, userAgentData) {\n return findMap(userAgentData.brands, function (uaBrand) {\n var lcBrand = uaBrand.brand.toLowerCase();\n return find$5(browsers, function (browser) {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(function (info) {\n return {\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n };\n });\n });\n };\n\n var detect$3 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find$5(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$3(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$3(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\n var addToEnd = function (str, suffix) {\n return str + suffix;\n };\n var removeFromStart = function (str, numChars) {\n return str.substring(numChars);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var removeLeading = function (str, prefix) {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n var ensureTrailing = function (str, suffix) {\n return endsWith(str, suffix) ? str : addToEnd(str, suffix);\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$1 = blank(/^\\s+|\\s+$/g);\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n var isEmpty = function (s) {\n return !isNotEmpty(s);\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$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 brand: 'Chromium',\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$1(browsers),\n oses: constant$1(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$2 = function () {\n return nu$b({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$b = 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$2,\n nu: nu$b,\n edge: constant$1(edge),\n chrome: constant$1(chrome),\n ie: constant$1(ie),\n opera: constant$1(opera),\n firefox: constant$1(firefox),\n safari: constant$1(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$1 = function () {\n return nu$a({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$a = 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$1,\n nu: nu$a,\n windows: constant$1(windows),\n ios: constant$1(ios),\n android: constant$1(android),\n linux: constant$1(linux),\n osx: constant$1(osx),\n solaris: constant$1(solaris),\n freebsd: constant$1(freebsd),\n chromeos: constant$1(chromeos)\n };\n\n var detect$2 = function (userAgent, userAgentDataOpt, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = userAgentDataOpt.bind(function (userAgentData) {\n return detectBrowser$1(browsers, userAgentData);\n }).orThunk(function () {\n return detectBrowser(browsers, userAgent);\n }).fold(Browser.unknown, Browser.nu);\n var os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);\n });\n var detect$1 = function () {\n return platform();\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var is$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$3 = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$2(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq = 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 = function (e1, e2) {\n return detect$1().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n var generate$7 = 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$1(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$7 };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n var partition$1 = function (results) {\n var errors = [];\n var values = [];\n each$1(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 var r = {};\n each(obj, function (v, k) {\n if (!contains$2(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n var wrap$2 = function (key, value) {\n var _a;\n return _a = {}, _a[key] = value, _a;\n };\n var wrapAll$1 = function (keyvalues) {\n var r = {};\n each$1(keyvalues, function (kv) {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n var exclude = function (obj, fields) {\n return exclude$1(obj, fields);\n };\n var wrap$1 = function (key, value) {\n return wrap$2(key, value);\n };\n var wrapAll = function (keyvalues) {\n return wrapAll$1(keyvalues);\n };\n var mergeValues = function (values, base) {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.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$1(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : never;\n };\n var ancestor$2 = function (scope, transform, isRoot) {\n var element = scope.dom;\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n var transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n var closest$4 = function (scope, transform, isRoot) {\n var current = transform(scope);\n var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Optional.none() : ancestor$2(scope, transform, stop);\n });\n };\n\n var isSource = function (component, simulatedEvent) {\n return eq(component.element, simulatedEvent.event.target);\n };\n\n var defaultEventHandler = {\n can: always,\n abort: never,\n run: noop\n };\n var nu$9 = 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 __assign(__assign({}, defaultEventHandler), parts);\n };\n var all$2 = 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$2 = function (handler) {\n return isFunction(handler) ? {\n can: always,\n abort: never,\n run: handler\n } : handler;\n };\n var fuse$1 = function (handlers) {\n var can = all$2(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$1(handlers, function (handler) {\n handler.run.apply(undefined, args);\n });\n };\n return {\n can: can,\n abort: abort,\n run: run\n };\n };\n\n var constant = constant$1;\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 transitioncancel = constant('transitioncancel');\n var transitionend = constant('transitionend');\n var transitionstart = constant('transitionstart');\n var selectstart = constant('selectstart');\n\n var prefixName = function (name) {\n return constant$1('alloy.' + name);\n };\n var alloy = { tap: prefixName('tap') };\n var focus$4 = prefixName('focus');\n var postBlur = prefixName('blur.post');\n var postPaste = prefixName('paste.post');\n var receive = prefixName('receive');\n var execute$5 = prefixName('execute');\n var focusItem = prefixName('focus.item');\n var tap = alloy.tap;\n var longpress = prefixName('longpress');\n var sandboxClose = prefixName('sandbox.close');\n var typeaheadCancel = prefixName('typeahead.cancel');\n var systemInit = prefixName('system.init');\n var documentTouchmove = prefixName('system.touchmove');\n var documentTouchend = prefixName('system.touchend');\n var windowScroll = prefixName('system.scroll');\n var windowResize = prefixName('system.resize');\n var attachedToDom = prefixName('system.attached');\n var detachedFromDom = prefixName('system.detached');\n var dismissRequested = prefixName('system.dismissRequested');\n var repositionRequested = prefixName('system.repositionRequested');\n var focusShifted = prefixName('focusmanager.shifted');\n var slotVisibility = prefixName('slotcontainer.visibility');\n var changeTab = prefixName('change.tab');\n var dismissTab = prefixName('dismiss.tab');\n var highlight$1 = prefixName('highlight');\n var dehighlight$1 = prefixName('dehighlight');\n\n var emit = function (component, event) {\n dispatchWith(component, component.element, event, {});\n };\n var emitWith = function (component, event, properties) {\n dispatchWith(component, component.element, event, properties);\n };\n var emitExecute = function (component) {\n emit(component, execute$5());\n };\n var dispatch = function (component, target, event) {\n dispatchWith(component, target, event, {});\n };\n var dispatchWith = function (component, target, event, properties) {\n var data = __assign({ target: target }, properties);\n component.getSystem().triggerEvent(event, target, data);\n };\n var dispatchEvent = function (component, target, event, simulatedEvent) {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n };\n\n var derive$2 = function (configs) {\n return wrapAll(configs);\n };\n var abort = function (name, predicate) {\n return {\n key: name,\n value: nu$9({ abort: predicate })\n };\n };\n var can = function (name, predicate) {\n return {\n key: name,\n value: nu$9({ can: predicate })\n };\n };\n var preventDefault = function (name) {\n return {\n key: name,\n value: nu$9({\n run: function (component, simulatedEvent) {\n simulatedEvent.event.prevent();\n }\n })\n };\n };\n var run$1 = function (name, handler) {\n return {\n key: name,\n value: nu$9({ run: handler })\n };\n };\n var runActionExtra = function (name, action, extra) {\n return {\n key: name,\n value: nu$9({\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$1(name, handler);\n };\n };\n var runOnSourceName = function (name) {\n return function (handler) {\n return {\n key: name,\n value: nu$9({\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$1(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$1(name, function (component, simulatedEvent) {\n var ev = simulatedEvent.event;\n var target = component.getSystem().getByDom(ev.target).getOrThunk(function () {\n var closest = closest$4(ev.target, function (el) {\n return component.getSystem().getByDom(el).toOptional();\n }, never);\n return closest.getOr(component);\n });\n f(component, target, simulatedEvent);\n });\n };\n var cutter = function (name) {\n return run$1(name, function (component, simulatedEvent) {\n simulatedEvent.cut();\n });\n };\n var stopper = function (name) {\n return run$1(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$1 = runOnName(execute$5());\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name$2 = 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 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement$2 = isType(ELEMENT);\n var isText$1 = isType(TEXT);\n var isDocument = isType(DOCUMENT);\n var isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n\n var owner$4 = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner$4(dos);\n };\n var documentElement = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parentNode = function (element) {\n return parent(element);\n };\n var offsetParent = function (element) {\n return Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var children = function (element) {\n return map$2(element.dom.childNodes, SugarElement.fromDom);\n };\n var child$2 = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child$2(element, 0);\n };\n var spot = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n var leaf = function (element, offset) {\n var cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported$1 = constant$1(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getContentContainer = function (dos) {\n return isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n };\n var isInShadowRoot = function (e) {\n return getShadowRoot(e).isSome();\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported$1() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement$2(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var before$2 = 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$2 = 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$2(v, element);\n });\n }, function (v) {\n before$2(v, element);\n });\n };\n var prepend$1 = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append$2(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append$2 = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var appendAt = function (parent, element, index) {\n child$2(parent, index).fold(function () {\n append$2(parent, element);\n }, function (v) {\n before$2(v, element);\n });\n };\n\n var before$1 = function (marker, elements) {\n each$1(elements, function (x) {\n before$2(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each$1(elements, function (x) {\n append$2(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each$1(children(element), function (rogue) {\n remove$7(rogue);\n });\n };\n var remove$7 = 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$7(wrapper);\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n var get$d = function (element) {\n return element.dom.innerHTML;\n };\n var set$8 = function (element, content) {\n var owner = owner$4(element);\n var docDom = owner.dom;\n var fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append$2(element, fragment);\n };\n var getOuter$2 = function (element) {\n var container = SugarElement.fromTag('div');\n var clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$2(container, clone);\n return get$d(container);\n };\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set$7 = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll$1 = function (element, attrs) {\n var dom = element.dom;\n each(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$c = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$c(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$6 = function (element, key) {\n element.dom.removeAttribute(key);\n };\n\n var clone$1 = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n\n var getHtml = function (element) {\n if (isShadowRoot(element)) {\n return '#shadow-root';\n } else {\n var clone = shallow(element);\n return getOuter$2(clone);\n }\n };\n\n var element = function (elem) {\n return getHtml(elem);\n };\n\n var isRecursive = function (component, originator, target) {\n return eq(originator, component.element) && !eq(originator, target);\n };\n var events$i = derive$2([can(focus$4(), function (component, simulatedEvent) {\n var event = simulatedEvent.event;\n var originator = event.originator;\n var target = event.target;\n if (isRecursive(component, originator, target)) {\n console.warn(focus$4() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus$4() + ' event handlers');\n return false;\n } else {\n return true;\n }\n })]);\n\n var DefaultEvents = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$i\n });\n\n var unique = 0;\n var generate$6 = 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$1 = constant$1('alloy-id-');\n var idAttr$1 = constant$1('data-alloy-id');\n\n var prefix = prefix$1();\n var idAttr = idAttr$1();\n var write = function (label, elem) {\n var id = generate$6(prefix + label);\n writeOnly(elem, id);\n return id;\n };\n var writeOnly = function (elem, uid) {\n Object.defineProperty(elem.dom, idAttr, {\n value: uid,\n writable: true\n });\n };\n var read$1 = function (elem) {\n var id = isElement$2(elem) ? elem.dom[idAttr] : null;\n return Optional.from(id);\n };\n var generate$5 = function (prefix) {\n return generate$6(prefix);\n };\n\n var make$8 = identity$1;\n\n var NoContextApi = function (getComp) {\n var getMessage = function (event) {\n return 'The component must be in a context to execute: ' + event + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : '');\n };\n var fail = function (event) {\n return function () {\n throw new Error(getMessage(event));\n };\n };\n var warn = function (event) {\n return function () {\n console.warn(getMessage(event));\n };\n };\n return {\n debugInfo: constant$1('fake'),\n triggerEvent: warn('triggerEvent'),\n triggerFocus: warn('triggerFocus'),\n triggerEscape: warn('triggerEscape'),\n broadcast: warn('broadcast'),\n broadcastOn: warn('broadcastOn'),\n broadcastEvent: warn('broadcastEvent'),\n build: fail('build'),\n addToWorld: fail('addToWorld'),\n removeFromWorld: fail('removeFromWorld'),\n addToGui: fail('addToGui'),\n removeFromGui: fail('removeFromGui'),\n getByUid: fail('getByUid'),\n getByDom: fail('getByDom'),\n isConnected: never\n };\n };\n var singleton$1 = 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$2(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$6('alloy-premade');\n var premade$1 = function (comp) {\n return wrap$1(premadeTag, comp);\n };\n var getPremade = function (spec) {\n return get$e(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, __spreadArray([\n component.getApis(),\n component\n ], rest));\n }, f);\n };\n\n var NoState = {\n init: function () {\n return nu$8({ readState: constant$1('No State required') });\n }\n };\n var nu$8 = function (spec) {\n return spec;\n };\n\n var generateFrom$1 = function (spec, all) {\n var schema = map$2(all, function (a) {\n return optionObjOf(a.name(), [\n required$1('config'),\n defaulted('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 }, identity$1);\n return {\n list: all,\n data: map(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 constant$1(output);\n })\n };\n };\n var getBehaviours$3 = function (bData) {\n return bData.list;\n };\n var getData$2 = function (bData) {\n return bData.data;\n };\n\n var byInnerKey = function (data, tuple) {\n var r = {};\n each(data, function (detail, key) {\n each(detail, function (value, indexKey) {\n var chain = get$e(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n var nu$7 = function (s) {\n return {\n classes: isUndefined(s.classes) ? [] : s.classes,\n attributes: isUndefined(s.attributes) ? {} : s.attributes,\n styles: isUndefined(s.styles) ? {} : s.styles\n };\n };\n var merge = 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$2 = function (info, baseMod, behaviours, base) {\n var modsByBehaviour = __assign({}, baseMod);\n each$1(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$7({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n var sortKeys = function (label, keyName, array, order) {\n try {\n var sorted = sort(array, function (a, b) {\n var aKey = a[keyName];\n var bKey = b[keyName];\n var aIndex = order.indexOf(aKey);\n var bIndex = order.indexOf(bKey);\n if (aIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (bIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n return Result.value(sorted);\n } catch (err) {\n return Result.error([err]);\n }\n };\n\n var uncurried = function (handler, purpose) {\n return {\n handler: handler,\n purpose: purpose\n };\n };\n var curried = function (handler, purpose) {\n return {\n cHandler: handler,\n purpose: purpose\n };\n };\n var curryArgs = function (descHandler, extraArgs) {\n return curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n };\n var getCurried = function (descHandler) {\n return descHandler.cHandler;\n };\n\n var behaviourTuple = function (name, handler) {\n return {\n name: name,\n handler: handler\n };\n };\n var nameToHandlers = function (behaviours, info) {\n var r = {};\n each$1(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$2(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$2(tuples, function (c) {\n return c.name;\n }), null, 2)]);\n };\n var fuse = 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$2(sortedTuples, function (tuple) {\n return tuple.handler;\n });\n return fuse$1(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(tuples, eventOrder, eventName);\n return combined.map(function (handler) {\n var assembled = assemble(handler);\n var purpose = tuples.length > 1 ? filter$2(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 _a$2;\n var baseBehaviour = 'alloy.base.behaviour';\n var schema$z = objOf([\n field$1('dom', 'dom', required$2(), objOf([\n required$1('tag'),\n defaulted('styles', {}),\n defaulted('classes', []),\n defaulted('attributes', {}),\n option('value'),\n option('innerHtml')\n ])),\n required$1('components'),\n required$1('uid'),\n defaulted('events', {}),\n defaulted('apis', {}),\n field$1('eventOrder', 'eventOrder', mergeWith((_a$2 = {}, _a$2[execute$5()] = [\n 'disabling',\n baseBehaviour,\n 'toggling',\n 'typeaheadevents'\n ], _a$2[focus$4()] = [\n baseBehaviour,\n 'focusing',\n 'keying'\n ], _a$2[systemInit()] = [\n baseBehaviour,\n 'disabling',\n 'toggling',\n 'representing'\n ], _a$2[input()] = [\n baseBehaviour,\n 'representing',\n 'streaming',\n 'invalidating'\n ], _a$2[detachedFromDom()] = [\n baseBehaviour,\n 'representing',\n 'item-events',\n 'tooltipping'\n ], _a$2[mousedown()] = [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ], _a$2[touchstart()] = [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ], _a$2[mouseover()] = [\n 'item-type-events',\n 'tooltipping'\n ], _a$2[receive()] = [\n 'receiving',\n 'reflecting',\n 'tooltipping'\n ], _a$2)), anyValue()),\n option('domModification')\n ]);\n var toInfo = function (spec) {\n return asRaw('custom.definition', schema$z, spec);\n };\n var toDefinition = function (detail) {\n return __assign(__assign({}, detail.dom), {\n uid: detail.uid,\n domChildren: map$2(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$7({});\n }, nu$7);\n };\n var toEvents = function (info) {\n return info.events;\n };\n\n var read = function (element, attr) {\n var value = get$c(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$4 = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set$7(element, attr, nu.join(' '));\n return true;\n };\n var remove$5 = function (element, attr, id) {\n var nu = filter$2(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set$7(element, attr, nu.join(' '));\n } else {\n remove$6(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$b = function (element) {\n return read(element, 'class');\n };\n var add$3 = function (element, clazz) {\n return add$4(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$5(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$3(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom.classList : get$b(element);\n if (classList.length === 0) {\n remove$6(element, 'class');\n }\n };\n var remove$3 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has = function (element, clazz) {\n return supports(element) && element.dom.classList.contains(clazz);\n };\n\n var add$1 = function (element, classes) {\n each$1(classes, function (x) {\n add$2(element, x);\n });\n };\n var remove$2 = function (element, classes) {\n each$1(classes, function (x) {\n remove$3(element, x);\n });\n };\n var hasAll = function (element, classes) {\n return forall(classes, function (clazz) {\n return has(element, clazz);\n });\n };\n\n var is = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lhs.exists(function (left) {\n return comparator(left, rhs);\n });\n };\n var equals = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n };\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var sequence = function (arr) {\n var r = [];\n for (var i = 0; i < arr.length; i++) {\n var x = arr[i];\n if (x.isSome()) {\n r.push(x.getOrDie());\n } else {\n return Optional.none();\n }\n }\n return Optional.some(r);\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n };\n var mapFrom = function (a, f) {\n return a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var inBody = function (element) {\n var dom = isText$1(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var body = function () {\n return getBody(SugarElement.fromDom(document));\n };\n var getBody = function (doc) {\n var b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(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$6 = function (element, property, value) {\n var dom = element.dom;\n internalSet(dom, property, value);\n };\n var setAll = function (element, css) {\n var dom = element.dom;\n each(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var setOptions = function (element, css) {\n var dom = element.dom;\n each(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$a = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom;\n if (isSupported(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n var isValidValue = function (tag, property, value) {\n var element = SugarElement.fromTag(tag);\n set$6(element, property, value);\n var style = getRaw(element, property);\n return style.isSome();\n };\n var remove$1 = function (element, property) {\n var dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim$1), '')) {\n remove$6(element, 'style');\n }\n };\n var reflow = function (e) {\n return e.dom.offsetWidth;\n };\n\n var get$9 = function (element) {\n return element.dom.value;\n };\n var set$5 = function (element, value) {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom.value = value;\n };\n\n var renderToDom = function (definition) {\n var subject = SugarElement.fromTag(definition.tag);\n setAll$1(subject, definition.attributes);\n add$1(subject, definition.classes);\n setAll(subject, definition.styles);\n definition.innerHtml.each(function (html) {\n return set$8(subject, html);\n });\n var children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(function (value) {\n set$5(subject, value);\n });\n if (!definition.uid) {\n debugger;\n }\n writeOnly(subject, definition.uid);\n return subject;\n };\n\n var getBehaviours$2 = function (spec) {\n var behaviours = get$e(spec, 'behaviours').getOr({});\n var keys$1 = filter$2(keys(behaviours), function (k) {\n return behaviours[k] !== undefined;\n });\n return map$2(keys$1, function (k) {\n return behaviours[k].me;\n });\n };\n var generateFrom = function (spec, all) {\n return generateFrom$1(spec, all);\n };\n var generate$4 = function (spec) {\n var all = getBehaviours$2(spec);\n return generateFrom(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$2(bData, baseModification, bList, definition) : infoModification;\n return merge(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$2 = function (spec) {\n var getMe = function () {\n return me;\n };\n var systemApi = Cell(singleton$1);\n var info = getOrDie(toInfo(spec));\n var bBlob = generate$4(spec);\n var bList = getBehaviours$3(bBlob);\n var bData = getData$2(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$3(children$1, function (child) {\n return systemApi.get().getByDom(child).fold(function () {\n return [];\n }, pure$2);\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 uid: spec.uid,\n getSystem: systemApi.get,\n config: config,\n hasConfigured: hasConfigured,\n spec: spec,\n readState: readState,\n getApis: getApis,\n connect: connect,\n disconnect: disconnect,\n element: item,\n syncComponents: syncComponents,\n components: subcomponents.get,\n events: events\n };\n return me;\n };\n\n var buildSubcomponents = function (spec) {\n var components = get$e(spec, 'components').getOr([]);\n return map$2(components, build$1);\n };\n var buildFromSpec = function (userSpec) {\n var _a = make$8(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$2(completeSpec));\n };\n var text = function (textContent) {\n var element = SugarElement.fromText(textContent);\n return external$2({ element: element });\n };\n var external$2 = function (spec) {\n var extSpec = asRawOrDie$1('external.component', objOfOnly([\n required$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 var uid = extSpec.uid.getOrThunk(function () {\n return generate$5('external');\n });\n writeOnly(extSpec.element, uid);\n var me = {\n uid: uid,\n getSystem: systemApi.get,\n config: Optional.none,\n hasConfigured: never,\n connect: connect,\n disconnect: disconnect,\n getApis: function () {\n return {};\n },\n element: extSpec.element,\n spec: spec,\n readState: constant$1('No state'),\n syncComponents: noop,\n components: constant$1([]),\n events: {}\n };\n return premade$1(me);\n };\n var uids = generate$5;\n var isSketchSpec$1 = function (spec) {\n return has$2(spec, 'uid');\n };\n var build$1 = function (spec) {\n return getPremade(spec).getOrThunk(function () {\n var userSpecWithUid = isSketchSpec$1(spec) ? spec : __assign({ uid: uids('') }, spec);\n return buildFromSpec(userSpecWithUid).getOrDie();\n });\n };\n var premade = premade$1;\n\n var Dimension = function (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom;\n if (isSupported(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$a(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$a(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$2 = 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$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n var setMax$1 = 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$2.max(element, value, inclusions);\n set$6(element, 'max-height', absMax + 'px');\n };\n\n var r$1 = function (left, top) {\n var translate = function (x, y) {\n return r$1(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r$1;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute$3 = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport$1 = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n var api$1 = Dimension('width', function (element) {\n return element.dom.offsetWidth;\n });\n var set$4 = function (element, h) {\n return api$1.set(element, h);\n };\n var get$7 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n var setMax = 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$6(element, 'max-width', absMax + 'px');\n };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: target,\n x: x,\n y: y,\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: raw\n };\n };\n var fromRawEvent$1 = function (rawEvent) {\n var target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(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 capture$1 = 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$6 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n\n var get$5 = function (_win) {\n var win = _win === undefined ? window : _win;\n return Optional.from(win['visualViewport']);\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 getBounds$3 = function (_win) {\n var win = _win === undefined ? window : _win;\n var doc = win.document;\n var scroll = get$6(SugarElement.fromDom(doc));\n return get$5(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds$1(scroll.left, scroll.top, width, height);\n }, function (visualViewport) {\n return bounds$1(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$1([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n var paths = walkUp(navigation, d);\n return Optional.some(paths);\n };\n\n var view = function (doc) {\n var _a;\n var element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n var owner$3 = function (element) {\n return owner$4(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$3\n });\n\n var find$2 = function (element) {\n var doc = SugarElement.fromDom(document);\n var scroll = get$6(doc);\n var path = pathTo(element, Navigation);\n return path.fold(curry(absolute$3, element), function (frames) {\n var offset = viewport$1(element);\n var r = foldr(frames, function (b, a) {\n var loc = viewport$1(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n });\n };\n\n 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 = 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$1 = function (element) {\n var xy = absolute$3(element);\n var w = getOuter(element);\n var h = getOuter$1(element);\n return bounds(xy.left, xy.top, w, h);\n };\n var absolute$2 = function (element) {\n var position = find$2(element);\n var width = getOuter(element);\n var height = getOuter$1(element);\n return bounds(position.left, position.top, width, height);\n };\n var win = function () {\n return getBounds$3(window);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n }\n\n var ancestor$1 = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n var closest$3 = 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 child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(SugarElement.fromDom(node));\n };\n var result = find$5(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n var descendant$1 = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Optional.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n var closest$2 = function (scope, predicate, isRoot) {\n return closest$3(scope, predicate, isRoot).isSome();\n };\n\n var ancestor = function (scope, selector, isRoot) {\n return ancestor$1(scope, function (e) {\n return is$1(e, selector);\n }, isRoot);\n };\n var child = function (scope, selector) {\n return child$1(scope, function (e) {\n return is$1(e, selector);\n });\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, scope, selector, isRoot);\n };\n\n var find$1 = function (queryElem) {\n var dependent = closest$3(queryElem, function (elem) {\n if (!isElement$2(elem)) {\n return false;\n }\n var id = get$c(elem, 'id');\n return id !== undefined && id.indexOf('aria-owns') > -1;\n });\n return dependent.bind(function (dep) {\n var id = get$c(dep, 'id');\n var dos = getRootNode(dep);\n return descendant(dos, '[aria-owns=\"' + id + '\"]');\n });\n };\n var manager = function () {\n var ariaId = generate$6('aria-owns');\n var link = function (elem) {\n set$7(elem, 'aria-owns', ariaId);\n };\n var unlink = function (elem) {\n remove$6(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$1(queryElem).exists(function (owner) {\n return isPartOf$1(component, owner);\n });\n };\n var isPartOf$1 = function (component, queryElem) {\n return closest$2(queryElem, function (el) {\n return eq(el, component.element);\n }, never) || isAriaPartOf(component, queryElem);\n };\n\n var unknown = 'unknown';\n var EventConfiguration;\n (function (EventConfiguration) {\n EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';\n EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';\n EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';\n }(EventConfiguration || (EventConfiguration = {})));\n 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$2([\n 'mousemove',\n 'mouseover',\n 'mouseout',\n systemInit()\n ], eventName)) {\n return;\n }\n console.log(eventName, {\n event: eventName,\n time: finishTime - startTime,\n target: initialTarget.dom,\n sequence: map$2(sequence, function (s) {\n if (!contains$2([\n 'cut',\n 'stopped',\n 'response'\n ], s.outcome)) {\n return s.outcome;\n } else {\n return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';\n }\n })\n });\n }\n };\n };\n var processEvent = function (eventName, initialTarget, f) {\n var status = get$e(eventConfig.get(), eventName).orThunk(function () {\n var patterns = keys(eventConfig.get());\n return findMap(patterns, function (p) {\n return eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none();\n });\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n var logger = makeEventLogger(eventName, initialTarget);\n var output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n var path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n var getTrace = function () {\n var err = new Error();\n if (err.stack !== undefined) {\n var lines = err.stack.split('\\n');\n return find$5(lines, function (line) {\n return line.indexOf('alloy') > 0 && !exists(path, function (p) {\n return line.indexOf(p) > -1;\n });\n }).getOr(unknown);\n } else {\n return unknown;\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$1(ignoreEvent);\n\n var menuFields = constant$1([\n required$1('menu'),\n required$1('selectedMenu')\n ]);\n var itemFields = constant$1([\n required$1('item'),\n required$1('selectedItem')\n ]);\n constant$1(objOf(itemFields().concat(menuFields())));\n var itemSchema$3 = constant$1(objOf(itemFields()));\n\n var _initSize = requiredObjOf('initSize', [\n required$1('numColumns'),\n required$1('numRows')\n ]);\n var itemMarkers = function () {\n return requiredOf('markers', itemSchema$3());\n };\n var tieredMenuMarkers = function () {\n return requiredObjOf('markers', [required$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n };\n var markers$1 = function (required) {\n return requiredObjOf('markers', map$2(required, required$1));\n };\n var onPresenceHandler = function (label, fieldName, presence) {\n getTrace();\n return field$1(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$1(noop));\n };\n var onKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none));\n };\n var onStrictHandler = function (fieldName) {\n return onPresenceHandler('onHandler', fieldName, required$2());\n };\n var onStrictKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, required$2());\n };\n var output$1 = function (name, value) {\n return customField(name, constant$1(value));\n };\n var snapshot = function (name) {\n return customField(name, identity$1);\n };\n var initSize = constant$1(_initSize);\n\n var nu$6 = function (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit) {\n if (alwaysFit === void 0) {\n alwaysFit = false;\n }\n return {\n x: x,\n y: y,\n bubble: bubble,\n direction: direction,\n placement: placement,\n restriction: boundsRestriction,\n label: labelPrefix + '-' + placement,\n alwaysFit: alwaysFit\n };\n };\n\n var adt$a = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n var cata$2 = 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$3 = adt$a.southeast;\n var southwest$3 = adt$a.southwest;\n var northeast$3 = adt$a.northeast;\n var northwest$3 = adt$a.northwest;\n var south$3 = adt$a.south;\n var north$3 = adt$a.north;\n var east$3 = adt$a.east;\n var west$3 = adt$a.west;\n\n var cycleBy = function (value, delta, min, max) {\n var r = value + delta;\n if (r > max) {\n return min;\n } else if (r < min) {\n return max;\n } else {\n return r;\n }\n };\n var clamp$1 = function (value, min, max) {\n return Math.min(Math.max(value, min), max);\n };\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$e(restrictions, dir).map(function (restriction) {\n return getRestriction(anchor, restriction);\n });\n });\n };\n var adjustBounds = function (bounds$1, restriction, bubbleOffset) {\n var applyRestriction = function (dir, current) {\n return restriction[dir].map(function (pos) {\n var isVerticalAxis = dir === 'top' || dir === 'bottom';\n var offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n var comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min;\n var newPos = comparator(pos, current) + offset;\n return isVerticalAxis ? clamp$1(newPos, bounds$1.y, bounds$1.bottom) : clamp$1(newPos, bounds$1.x, bounds$1.right);\n }).getOr(current);\n };\n var adjustedLeft = applyRestriction('left', bounds$1.x);\n var adjustedTop = applyRestriction('top', bounds$1.y);\n var adjustedRight = applyRestriction('right', bounds$1.right);\n var adjustedBottom = applyRestriction('bottom', bounds$1.bottom);\n return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n var labelPrefix$2 = 'layout';\n var eastX$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 westX$1 = function (anchor, element) {\n return anchor.x + anchor.width - element.width;\n };\n var northY$2 = function (anchor, element) {\n return anchor.y - element.height;\n };\n var southY$2 = function (anchor) {\n return anchor.y + anchor.height;\n };\n var centreY$1 = function (anchor, element) {\n return anchor.y + anchor.height / 2 - element.height / 2;\n };\n var eastEdgeX$1 = function (anchor) {\n return anchor.x + anchor.width;\n };\n var westEdgeX$1 = function (anchor, element) {\n return anchor.x - element.width;\n };\n var southeast$2 = function (anchor, element, bubbles) {\n return nu$6(eastX$1(anchor), southY$2(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n top: 3\n }), labelPrefix$2);\n };\n var southwest$2 = function (anchor, element, bubbles) {\n return nu$6(westX$1(anchor, element), southY$2(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n top: 3\n }), labelPrefix$2);\n };\n var northeast$2 = function (anchor, element, bubbles) {\n return nu$6(eastX$1(anchor), northY$2(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 2\n }), labelPrefix$2);\n };\n var northwest$2 = function (anchor, element, bubbles) {\n return nu$6(westX$1(anchor, element), northY$2(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 2\n }), labelPrefix$2);\n };\n var north$2 = function (anchor, element, bubbles) {\n return nu$6(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), 'north', boundsRestriction(anchor, { bottom: 2 }), labelPrefix$2);\n };\n var south$2 = function (anchor, element, bubbles) {\n return nu$6(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), 'south', boundsRestriction(anchor, { top: 3 }), labelPrefix$2);\n };\n var east$2 = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), 'east', boundsRestriction(anchor, { left: 0 }), labelPrefix$2);\n };\n var west$2 = function (anchor, element, bubbles) {\n return nu$6(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), 'west', boundsRestriction(anchor, { right: 1 }), labelPrefix$2);\n };\n var all$1 = function () {\n return [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n };\n var allRtl$1 = function () {\n return [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n };\n var aboveOrBelow = function () {\n return [\n northeast$2,\n northwest$2,\n southeast$2,\n southwest$2,\n north$2,\n south$2\n ];\n };\n var aboveOrBelowRtl = function () {\n return [\n northwest$2,\n northeast$2,\n southwest$2,\n southeast$2,\n north$2,\n south$2\n ];\n };\n var belowOrAbove = function () {\n return [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2\n ];\n };\n var belowOrAboveRtl = function () {\n return [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2\n ];\n };\n\n var chooseChannels = function (channels, message) {\n return message.universal ? channels : filter$2(channels, function (ch) {\n return contains$2(message.channels, ch);\n });\n };\n var events$h = function (receiveConfig) {\n return derive$2([run$1(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$1(targetChannels, function (ch) {\n var channelInfo = channelMap[ch];\n var channelSchema = channelInfo.schema;\n var data = asRawOrDie$1('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$h\n });\n\n var ReceivingSchema = [requiredOf('channels', setOf(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted('schema', anyValue())\n ])))];\n\n var executeEvent = function (bConfig, bState, executor) {\n return runOnExecute$1(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$8 = 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$1 = 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$1(bName) }).fold(function () {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, function (info) {\n var rest = Array.prototype.slice.call(args, 1);\n return apiFunction.apply(undefined, [\n component,\n info.config,\n info.state\n ].concat(rest));\n });\n };\n return markAsBehaviourApi(f, apiName, apiFunction);\n };\n var revokeBehaviour = function (name) {\n return {\n key: name,\n value: undefined\n };\n };\n var doCreate = function (configSchema, schemaSchema, name, active, apis, extra, state) {\n var getConfig = function (info) {\n return hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n };\n var wrappedApis = map(apis, function (apiF, apiName) {\n return wrapApi(name, apiF, apiName);\n });\n var wrappedExtra = map(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$1(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me: me,\n configAsRaw: cached(function () {\n return asRawOrDie$1(name + '-config', configSchema, spec);\n }),\n initialConfig: spec,\n state: state\n }\n };\n },\n schema: constant$1(schemaSchema),\n exhibit: function (info, base) {\n return lift2(getConfig(info), get$e(active, 'exhibit'), function (behaviourInfo, exhibitor) {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n }).getOrThunk(function () {\n return nu$7({});\n });\n },\n name: constant$1(name),\n handlers: function (info) {\n return getConfig(info).map(function (behaviourInfo) {\n var getEvents = get$e(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(capabilities);\n };\n var simpleSchema = objOfOnly([\n required$1('fields'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n var create$7 = function (data) {\n var value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data);\n return create$8(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n var modeSchema = objOfOnly([\n required$1('branchKey'),\n required$1('branches'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n var createModes = function (data) {\n var value = asRawOrDie$1('Creating behaviour: ' + data.name, modeSchema, data);\n return createModes$1(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n };\n var revoke = constant$1(undefined);\n\n var Receiving = create$7({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n var exhibit$6 = function (base, posConfig) {\n return nu$7({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n };\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6\n });\n\n var getDocument = function () {\n return SugarElement.fromDom(document);\n };\n\n var focus$3 = function (element) {\n return element.dom.focus();\n };\n var blur$1 = function (element) {\n return element.dom.blur();\n };\n var hasFocus = function (element) {\n var root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom.contains(e.dom);\n });\n };\n\n var preserve$1 = function (f, container) {\n var dos = getRootNode(container);\n var refocus = active(dos).bind(function (focused) {\n var hasFocus = function (elem) {\n return eq(focused, elem);\n };\n return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus);\n });\n var result = f(container);\n refocus.each(function (oldFocus) {\n active(dos).filter(function (newFocus) {\n return eq(newFocus, oldFocus);\n }).fold(function () {\n focus$3(oldFocus);\n }, noop);\n });\n return result;\n };\n\n var NuPositionCss = function (position, left, top, right, bottom) {\n var toPx = function (num) {\n return num + 'px';\n };\n return {\n position: position,\n left: left.map(toPx),\n top: top.map(toPx),\n right: right.map(toPx),\n bottom: bottom.map(toPx)\n };\n };\n var toOptions = function (position) {\n return __assign(__assign({}, position), { position: Optional.some(position.position) });\n };\n var applyPositionCss = function (element, position) {\n setOptions(element, toOptions(position));\n };\n\n var adt$9 = Adt.generate([\n { none: [] },\n {\n relative: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n },\n {\n fixed: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n }\n ]);\n var positionWithDirection = function (posName, decision, x, y, width, height) {\n var decisionRect = decision.rect;\n var decisionX = decisionRect.x - x;\n var decisionY = decisionRect.y - y;\n var decisionWidth = decisionRect.width;\n var decisionHeight = decisionRect.height;\n var decisionRight = width - (decisionX + decisionWidth);\n var decisionBottom = height - (decisionY + decisionHeight);\n var left = Optional.some(decisionX);\n var top = Optional.some(decisionY);\n var right = Optional.some(decisionRight);\n var bottom = Optional.some(decisionBottom);\n var none = Optional.none();\n return cata$2(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 var decisionRect = decision.rect;\n return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n }, function (x, y, width, height) {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, function (x, y, width, height) {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n };\n var toBox = function (origin, element) {\n var rel = curry(find$2, element);\n var position = origin.fold(rel, rel, function () {\n var scroll = get$6();\n return find$2(element).translate(-scroll.left, -scroll.top);\n });\n var width = getOuter(element);\n var height = getOuter$1(element);\n return bounds(position.left, position.top, width, height);\n };\n var viewport = function (origin, getBounds) {\n return getBounds.fold(function () {\n return origin.fold(win, win, bounds);\n }, function (b) {\n return origin.fold(b, b, function () {\n var bounds$1 = b();\n var pos = translate$2(origin, bounds$1.x, bounds$1.y);\n return bounds(pos.left, pos.top, bounds$1.width, bounds$1.height);\n });\n });\n };\n var translate$2 = function (origin, x, y) {\n var pos = SugarPosition(x, y);\n var removeScroll = function () {\n var outerScroll = get$6();\n return pos.translate(-outerScroll.left, -outerScroll.top);\n };\n return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n };\n var cata$1 = function (subject, onNone, onRelative, onFixed) {\n return subject.fold(onNone, onRelative, onFixed);\n };\n adt$9.none;\n var relative$1 = adt$9.relative;\n var fixed$1 = adt$9.fixed;\n\n var anchor = function (anchorBox, origin) {\n return {\n anchorBox: anchorBox,\n origin: origin\n };\n };\n var box = function (anchorBox, origin) {\n return anchor(anchorBox, origin);\n };\n\n var placementAttribute = 'data-alloy-placement';\n var setPlacement$1 = function (element, placement) {\n set$7(element, placementAttribute, placement);\n };\n var getPlacement = function (element) {\n return getOpt(element, placementAttribute);\n };\n var reset$2 = function (element) {\n return remove$6(element, placementAttribute);\n };\n\n var adt$8 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'visibleW',\n 'visibleH',\n 'isVisible'\n ]\n }\n ]);\n var determinePosition = function (box, bounds) {\n var boundsX = bounds.x, boundsY = bounds.y, boundsRight = bounds.right, boundsBottom = bounds.bottom;\n var x = box.x, y = box.y, right = box.right, bottom = box.bottom, width = box.width, height = box.height;\n var xInBounds = x >= boundsX && x <= boundsRight;\n var yInBounds = y >= boundsY && y <= boundsBottom;\n var originInBounds = xInBounds && yInBounds;\n var rightInBounds = right <= boundsRight && right >= boundsX;\n var bottomInBounds = bottom <= boundsBottom && bottom >= boundsY;\n var sizeInBounds = rightInBounds && bottomInBounds;\n var visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX);\n var visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY);\n return {\n originInBounds: originInBounds,\n sizeInBounds: sizeInBounds,\n visibleW: visibleW,\n visibleH: visibleH\n };\n };\n var calcReposition = function (box, bounds$1) {\n var boundsX = bounds$1.x, boundsY = bounds$1.y, boundsRight = bounds$1.right, boundsBottom = bounds$1.bottom;\n var x = box.x, y = box.y, width = box.width, height = box.height;\n var maxX = Math.max(boundsX, boundsRight - width);\n var maxY = Math.max(boundsY, boundsBottom - height);\n var restrictedX = clamp$1(x, boundsX, maxX);\n var restrictedY = clamp$1(y, boundsY, maxY);\n var restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX;\n var restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY;\n return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n };\n var calcMaxSizes = function (direction, box, bounds) {\n var upAvailable = constant$1(box.bottom - bounds.y);\n var downAvailable = constant$1(bounds.bottom - box.y);\n var maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n var westAvailable = constant$1(box.right - bounds.x);\n var eastAvailable = constant$1(bounds.right - box.x);\n var maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n return {\n maxWidth: maxWidth,\n maxHeight: maxHeight\n };\n };\n var attempt = function (candidate, width, height, bounds$1) {\n var bubble = candidate.bubble;\n var bubbleOffset = bubble.offset;\n var adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset);\n var newX = candidate.x + bubbleOffset.left;\n var newY = candidate.y + bubbleOffset.top;\n var box = bounds(newX, newY, width, height);\n var _a = determinePosition(box, adjustedBounds), originInBounds = _a.originInBounds, sizeInBounds = _a.sizeInBounds, visibleW = _a.visibleW, visibleH = _a.visibleH;\n var fits = originInBounds && sizeInBounds;\n var fittedBox = fits ? box : calcReposition(box, adjustedBounds);\n var isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n var _b = calcMaxSizes(candidate.direction, fittedBox, bounds$1), maxWidth = _b.maxWidth, maxHeight = _b.maxHeight;\n var reposition = {\n rect: fittedBox,\n maxHeight: maxHeight,\n maxWidth: maxWidth,\n direction: candidate.direction,\n placement: candidate.placement,\n classes: {\n on: bubble.classesOn,\n off: bubble.classesOff\n },\n layout: candidate.label,\n testY: newY\n };\n return fits || candidate.alwaysFit ? adt$8.fit(reposition) : adt$8.nofit(reposition, visibleW, visibleH, isPartlyVisible);\n };\n var attempts = function (element, candidates, anchorBox, elementBox, bubbles, bounds) {\n var panelWidth = elementBox.width;\n var panelHeight = elementBox.height;\n var attemptBestFit = function (layout, reposition, visibleW, visibleH, isVisible) {\n var next = layout(anchorBox, elementBox, bubbles, element, bounds);\n var attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(constant$1(attemptLayout), function (newReposition, newVisibleW, newVisibleH, newIsVisible) {\n var improved = isVisible === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible && newIsVisible;\n return improved ? attemptLayout : adt$8.nofit(reposition, visibleW, visibleH, isVisible);\n });\n };\n var abc = foldl(candidates, function (b, a) {\n var bestNext = curry(attemptBestFit, a);\n return b.fold(constant$1(b), bestNext);\n }, adt$8.nofit({\n rect: anchorBox,\n maxHeight: elementBox.height,\n maxWidth: elementBox.width,\n direction: southeast$3(),\n placement: 'southeast',\n classes: {\n on: [],\n off: []\n },\n layout: 'none',\n testY: anchorBox.y\n }, -1, -1, false));\n return abc.fold(identity$1, identity$1);\n };\n\n var singleton = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var get = function () {\n return subject.get();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n get: get,\n set: set\n };\n };\n var destroyable = function () {\n return singleton(function (s) {\n return s.destroy();\n });\n };\n var unbindable = function () {\n return singleton(function (s) {\n return s.unbind();\n });\n };\n var value$1 = function () {\n var subject = singleton(noop);\n var on = function (f) {\n return subject.get().each(f);\n };\n return __assign(__assign({}, subject), { on: on });\n };\n\n var filter = always;\n var bind = function (element, event, handler) {\n return bind$1(element, event, filter, handler);\n };\n var capture = function (element, event, handler) {\n return capture$1(element, event, filter, handler);\n };\n var fromRawEvent = fromRawEvent$1;\n\n var properties = [\n 'top',\n 'bottom',\n 'right',\n 'left'\n ];\n var timerAttr = 'data-alloy-transition-timer';\n var isTransitioning$1 = function (element, transition) {\n return hasAll(element, transition.classes);\n };\n var shouldApplyTransitionCss = function (transition, decision, lastPlacement) {\n return lastPlacement.exists(function (placer) {\n var mode = transition.mode;\n return mode === 'all' ? true : placer[mode] !== decision[mode];\n });\n };\n var hasChanges = function (position, intermediate) {\n var round = function (value) {\n return parseFloat(value).toPrecision(3);\n };\n return find$4(intermediate, function (value, key) {\n var newValue = position[key].map(round);\n var val = value.map(round);\n return !equals(newValue, val);\n }).isSome();\n };\n var getTransitionDuration = function (element) {\n var get = function (name) {\n var style = get$a(element, name);\n var times = isString(style) ? style.split(/\\s*,\\s*/) : [];\n return filter$2(times, isNotEmpty);\n };\n var parse = function (value) {\n if (isString(value) && /^[\\d.]+/.test(value)) {\n var num = parseFloat(value);\n return endsWith(value, 'ms') ? num : num * 1000;\n } else {\n return 0;\n }\n };\n var delay = get('transition-delay');\n var duration = get('transition-duration');\n return foldl(duration, function (acc, dur, i) {\n var time = parse(delay[i]) + parse(dur);\n return Math.max(acc, time);\n }, 0);\n };\n var setupTransitionListeners = function (element, transition) {\n var transitionEnd = unbindable();\n var transitionCancel = unbindable();\n var timer;\n var isSourceTransition = function (e) {\n var _a;\n var pseudoElement = (_a = e.raw.pseudoElement) !== null && _a !== void 0 ? _a : '';\n return eq(e.target, element) && isEmpty(pseudoElement) && contains$2(properties, e.raw.propertyName);\n };\n var transitionDone = function (e) {\n if (isNullable(e) || isSourceTransition(e)) {\n transitionEnd.clear();\n transitionCancel.clear();\n var type = e === null || e === void 0 ? void 0 : e.raw.type;\n if (isNullable(type) || type === transitionend()) {\n clearTimeout(timer);\n remove$6(element, timerAttr);\n remove$2(element, transition.classes);\n }\n }\n };\n var transitionStarted = function () {\n transitionEnd.set(bind(element, transitionend(), transitionDone));\n transitionCancel.set(bind(element, transitioncancel(), transitionDone));\n };\n if ('ontransitionstart' in element.dom) {\n var transitionStart_1 = bind(element, transitionstart(), function (e) {\n if (isSourceTransition(e)) {\n transitionStart_1.unbind();\n transitionStarted();\n }\n });\n } else {\n transitionStarted();\n }\n var duration = getTransitionDuration(element);\n requestAnimationFrame(function () {\n timer = setTimeout(transitionDone, duration + 17);\n set$7(element, timerAttr, timer);\n });\n };\n var startTransitioning = function (element, transition) {\n add$1(element, transition.classes);\n getOpt(element, timerAttr).each(function (timerId) {\n clearTimeout(parseInt(timerId, 10));\n remove$6(element, timerAttr);\n });\n setupTransitionListeners(element, transition);\n };\n var applyTransitionCss = function (element, origin, position, transition, decision, lastPlacement) {\n var shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n if (shouldTransition || isTransitioning$1(element, transition)) {\n set$6(element, 'position', position.position);\n var rect = toBox(origin, element);\n var intermediatePosition_1 = reposition(origin, __assign(__assign({}, decision), { rect: rect }));\n var intermediateCssOptions = mapToObject(properties, function (prop) {\n return intermediatePosition_1[prop];\n });\n if (hasChanges(position, intermediateCssOptions)) {\n setOptions(element, intermediateCssOptions);\n if (shouldTransition) {\n startTransitioning(element, transition);\n }\n reflow(element);\n }\n } else {\n remove$2(element, transition.classes);\n }\n };\n\n var elementSize = function (p) {\n return {\n width: getOuter(p),\n height: getOuter$1(p)\n };\n };\n var layout = function (anchorBox, element, bubbles, options) {\n remove$1(element, 'max-height');\n remove$1(element, 'max-width');\n var elementBox = elementSize(element);\n return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n var setClasses = function (element, decision) {\n var classInfo = decision.classes;\n remove$2(element, classInfo.off);\n add$1(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$2 = function (element, decision, options) {\n var positionCss = reposition(options.origin, decision);\n options.transition.each(function (transition) {\n applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement);\n });\n applyPositionCss(element, positionCss);\n };\n var setPlacement = function (element, decision) {\n setPlacement$1(element, decision.placement);\n };\n\n var setMaxHeight = function (element, maxHeight) {\n setMax$1(element, Math.floor(maxHeight));\n };\n var anchored = constant$1(function (element, available) {\n setMaxHeight(element, available);\n setAll(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n var expandable$1 = constant$1(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, lastPlacement, getBounds, overrideOptions, transition) {\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(origin, getBounds),\n origin: origin,\n preference: layouts,\n maxHeightFunction: maxHeightFunction,\n maxWidthFunction: maxWidthFunction,\n lastPlacement: lastPlacement,\n transition: transition\n };\n return go(anchorBox, element, bubble, options);\n };\n var go = function (anchorBox, element, bubble, options) {\n var decision = layout(anchorBox, element, bubble, options);\n position$2(element, decision, options);\n setPlacement(element, decision);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n return {\n layout: decision.layout,\n placement: decision.placement\n };\n };\n\n var allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'inset'\n ];\n var nu$5 = function (xOffset, yOffset, classes, insetModifier) {\n if (insetModifier === void 0) {\n insetModifier = 1;\n }\n var insetXOffset = xOffset * insetModifier;\n var insetYOffset = yOffset * insetModifier;\n var getClasses = function (prop) {\n return get$e(classes, prop).getOr([]);\n };\n var make = function (xDelta, yDelta, alignmentsOn) {\n var alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: SugarPosition(xDelta, yDelta),\n classesOn: bind$3(alignmentsOn, getClasses),\n classesOff: bind$3(alignmentsOff, getClasses)\n };\n };\n return {\n southeast: function () {\n return make(-xOffset, yOffset, [\n 'top',\n 'alignLeft'\n ]);\n },\n southwest: function () {\n return make(xOffset, yOffset, [\n 'top',\n 'alignRight'\n ]);\n },\n south: function () {\n return make(-xOffset / 2, yOffset, [\n 'top',\n 'alignCentre'\n ]);\n },\n northeast: function () {\n return make(-xOffset, -yOffset, [\n 'bottom',\n 'alignLeft'\n ]);\n },\n northwest: function () {\n return make(xOffset, -yOffset, [\n 'bottom',\n 'alignRight'\n ]);\n },\n north: function () {\n return make(-xOffset / 2, -yOffset, [\n 'bottom',\n 'alignCentre'\n ]);\n },\n east: function () {\n return make(xOffset, -yOffset / 2, [\n 'valignCentre',\n 'left'\n ]);\n },\n west: function () {\n return make(-xOffset, -yOffset / 2, [\n 'valignCentre',\n 'right'\n ]);\n },\n insetNortheast: function () {\n return make(insetXOffset, insetYOffset, [\n 'top',\n 'alignLeft',\n 'inset'\n ]);\n },\n insetNorthwest: function () {\n return make(-insetXOffset, insetYOffset, [\n 'top',\n 'alignRight',\n 'inset'\n ]);\n },\n insetNorth: function () {\n return make(-insetXOffset / 2, insetYOffset, [\n 'top',\n 'alignCentre',\n 'inset'\n ]);\n },\n insetSoutheast: function () {\n return make(insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignLeft',\n 'inset'\n ]);\n },\n insetSouthwest: function () {\n return make(-insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignRight',\n 'inset'\n ]);\n },\n insetSouth: function () {\n return make(-insetXOffset / 2, -insetYOffset, [\n 'bottom',\n 'alignCentre',\n 'inset'\n ]);\n },\n insetEast: function () {\n return make(-insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'right',\n 'inset'\n ]);\n },\n insetWest: function () {\n return make(insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'left',\n 'inset'\n ]);\n }\n };\n };\n var fallback = function () {\n return nu$5(0, 0, {});\n };\n\n var nu$4 = identity$1;\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$a(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$2(current) && get$c(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop;\n });\n };\n\n var schema$y = function () {\n return optionObjOf('layouts', [\n required$1('onLtr'),\n required$1('onRtl'),\n option('onBottomLtr'),\n option('onBottomRtl')\n ]);\n };\n var get$4 = 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$4 = function (component, anchorInfo, origin) {\n var hotspot = anchorInfo.hotspot;\n var anchorBox = toBox(origin, hotspot.element);\n var layouts = get$4(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n return Optional.some(nu$4({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n }));\n };\n var HotspotAnchor = [\n required$1('hotspot'),\n option('bubble'),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$4)\n ];\n\n var placement$3 = function (component, anchorInfo, origin) {\n var pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n var anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n var layouts = get$4(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n return Optional.some(nu$4({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n }));\n };\n var MakeshiftAnchor = [\n required$1('x'),\n required$1('y'),\n defaulted('height', 0),\n defaulted('width', 0),\n defaulted('bubble', fallback()),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$3)\n ];\n\n var adt$7 = 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$1, function (point, scrollLeft, scrollTop) {\n return point.translate(-scrollLeft, -scrollTop);\n });\n };\n var toAbsolute = function (pos) {\n return pos.fold(identity$1, identity$1);\n };\n var sum = function (points) {\n return foldl(points, function (b, a) {\n return b.translate(a.left, a.top);\n }, SugarPosition(0, 0));\n };\n var sumAsFixed = function (positions) {\n var points = map$2(positions, toFixed);\n return sum(points);\n };\n var sumAsAbsolute = function (positions) {\n var points = map$2(positions, toAbsolute);\n return sum(points);\n };\n var screen = adt$7.screen;\n var absolute$1 = adt$7.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$4(frame);\n var compOwner = owner$4(component.element);\n return eq(frameOwner, compOwner);\n };\n return Optional.from(win.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute$3);\n };\n var getRootPoint = function (component, origin, anchorInfo) {\n var doc = owner$4(component.element);\n var outerScroll = get$6(doc);\n var offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$1(offset, outerScroll.left, outerScroll.top);\n };\n\n var getBox = function (left, top, width, height) {\n var point = screen(SugarPosition(left, top));\n return Optional.some(pointed(point, width, height));\n };\n var calcNewAnchor = function (optBox, rootPoint, anchorInfo, origin, elem) {\n return optBox.map(function (box) {\n var points = [\n rootPoint,\n box.point\n ];\n var topLeft = cata$1(origin, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsFixed(points);\n });\n var anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n var layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n var layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n var layouts = get$4(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n return nu$4({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n });\n });\n };\n\n var placement$2 = function (component, anchorInfo, origin) {\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.filter(inBody).bind(function (target) {\n var rect = target.dom.getBoundingClientRect();\n var nodeBox = getBox(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 required$1('node'),\n required$1('root'),\n option('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$2)\n ];\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n\n var create$6 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$6 };\n\n var adt$6 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart$1 = function (situ) {\n return situ.fold(identity$1, identity$1, identity$1);\n };\n var before = adt$6.before;\n var on$1 = adt$6.on;\n var after$1 = adt$6.after;\n var Situ = {\n before: before,\n on: on$1,\n after: after$1,\n cata: cata,\n getStart: getStart$1\n };\n\n var adt$5 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt$5.domRange;\n var relative = adt$5.relative;\n var exact = adt$5.exact;\n var getWin = function (selection) {\n var start = getStart(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom);\n }, function (e, o) {\n rng.setStart(e.dom, o);\n }, function (e) {\n rng.setStartAfter(e.dom);\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom);\n }, function (e, o) {\n rng.setEnd(e.dom, o);\n }, function (e) {\n rng.setEndAfter(e.dom);\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n };\n };\n var getFirstRect$1 = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n var getBounds$2 = function (rng) {\n var rect = rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n var adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant$1(rng),\n rtl: Optional.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Optional.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Optional.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$4.ltr;\n adt$4.rtl;\n\n var NodeValue = function (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api = NodeValue(isText$1, '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\n var getEnd = function (element) {\n return name$2(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$2(elementsWithCursorPosition, name$2(elem));\n };\n\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n var descendants = function (scope, selector) {\n return all$3(selector, scope);\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner$4(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 = 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 getNativeSelection = function (win) {\n return Optional.from(win.getSelection());\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n var doGetExact = function (selection) {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n var anchor = SugarElement.fromDom(selection.anchorNode);\n var focus_1 = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus_1, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus_1, selection.focusOffset)) : readRange(selection);\n }\n };\n var getExact = function (win) {\n return getNativeSelection(win).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var getFirstRect = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n var getBounds$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getBounds$2(rng);\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 var children$1 = children(element);\n if (children$1.length === 0) {\n return point$1(element, offset);\n } else if (offset < children$1.length) {\n return point$1(children$1[offset], 0);\n } else {\n var last = children$1[children$1.length - 1];\n var len = isText$1(last) ? get$3(last).length : children(last).length;\n return point$1(last, len);\n }\n };\n\n var descendOnce = function (element, offset) {\n return isText$1(element) ? point$1(element, offset) : descendOnce$1(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(sel.start, sel.soffset);\n var modFinish = descendOnce(sel.finish, sel.foffset);\n return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n });\n };\n var placement$1 = 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 = getBounds$1(win, SimSelection.exactFromRange(sel)).orThunk(function () {\n var x = SugarElement.fromText(zeroWidth);\n before$2(sel.start, x);\n var rect = getFirstRect(win, SimSelection.exact(x, 0, x, 1));\n remove$7(x);\n return rect;\n });\n return optRect.bind(function (rawRect) {\n return getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height);\n });\n });\n var targetElement = getAnchorSelection(win, anchorInfo).bind(function (sel) {\n return isElement$2(sel.start) ? Optional.some(sel.start) : parentNode(sel.start);\n });\n var elem = targetElement.getOr(component.element);\n return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option('getSelection'),\n required$1('root'),\n option('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$1)\n ];\n\n var labelPrefix$1 = 'link-layout';\n var eastX = function (anchor) {\n return anchor.x + anchor.width;\n };\n var westX = 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$1 = function (anchor, element, bubbles) {\n return nu$6(eastX(anchor), southY$1(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), labelPrefix$1);\n };\n var southwest$1 = function (anchor, element, bubbles) {\n return nu$6(westX(anchor, element), southY$1(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 1,\n top: 2\n }), labelPrefix$1);\n };\n var northeast$1 = function (anchor, element, bubbles) {\n return nu$6(eastX(anchor), northY$1(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 0,\n bottom: 3\n }), labelPrefix$1);\n };\n var northwest$1 = function (anchor, element, bubbles) {\n return nu$6(westX(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 1,\n bottom: 3\n }), labelPrefix$1);\n };\n var all = function () {\n return [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1\n ];\n };\n var allRtl = function () {\n return [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1\n ];\n };\n\n var placement = function (component, submenuInfo, origin) {\n var anchorBox = toBox(origin, submenuInfo.item.element);\n var layouts = get$4(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n return Optional.some(nu$4({\n anchorBox: anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n }));\n };\n var SubmenuAnchor = [\n required$1('item'),\n schema$y(),\n defaulted('overrides', {}),\n output$1('placement', placement)\n ];\n\n var AnchorSchema = choose$1('type', {\n selection: SelectionAnchor,\n node: NodeAnchor,\n hotspot: HotspotAnchor,\n submenu: SubmenuAnchor,\n makeshift: MakeshiftAnchor\n });\n\n var TransitionSchema = [\n requiredArrayOf('classes', string),\n defaultedStringEnum('mode', 'all', [\n 'all',\n 'layout',\n 'placement'\n ])\n ];\n var PositionSchema = [\n defaulted('useFixed', never),\n option('getBounds')\n ];\n var PlacementSchema = [\n requiredOf('anchor', AnchorSchema),\n optionObjOf('transition', TransitionSchema)\n ];\n\n var getFixedOrigin = function () {\n var html = document.documentElement;\n return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n };\n var getRelativeOrigin = function (component) {\n var position = absolute$3(component.element);\n var bounds = component.element.dom.getBoundingClientRect();\n return relative$1(position.left, position.top, bounds.width, bounds.height);\n };\n var place = function (component, origin, anchoring, getBounds, placee, lastPlace, transition) {\n var anchor = box(anchoring.anchorBox, origin);\n return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, getBounds, anchoring.overrides, transition);\n };\n var position$1 = function (component, posConfig, posState, placee, placementSpec) {\n positionWithin(component, posConfig, posState, placee, placementSpec, Optional.none());\n };\n var positionWithin = function (component, posConfig, posState, placee, placementSpec, boxElement) {\n var boundsBox = boxElement.map(box$1);\n return positionWithinBounds(component, posConfig, posState, placee, placementSpec, boundsBox);\n };\n var positionWithinBounds = function (component, posConfig, posState, placee, placementSpec, bounds) {\n var placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec);\n var anchorage = placeeDetail.anchor;\n var element = placee.element;\n var placeeState = posState.get(placee.uid);\n preserve$1(function () {\n set$6(element, 'position', 'fixed');\n var oldVisibility = getRaw(element, 'visibility');\n set$6(element, 'visibility', 'hidden');\n var origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n var placer = anchorage.placement;\n var getBounds = bounds.map(constant$1).or(posConfig.getBounds);\n placer(component, anchorage, origin).each(function (anchoring) {\n var doPlace = anchoring.placer.getOr(place);\n var newState = doPlace(component, origin, anchoring, getBounds, placee, placeeState, placeeDetail.transition);\n posState.set(placee.uid, newState);\n });\n oldVisibility.fold(function () {\n remove$1(element, 'visibility');\n }, function (vis) {\n set$6(element, 'visibility', vis);\n });\n if (getRaw(element, 'left').isNone() && getRaw(element, 'top').isNone() && getRaw(element, 'right').isNone() && getRaw(element, 'bottom').isNone() && is(getRaw(element, 'position'), 'fixed')) {\n remove$1(element, 'position');\n }\n }, element);\n };\n var getMode = function (component, pConfig, _pState) {\n return pConfig.useFixed() ? 'fixed' : 'absolute';\n };\n var reset$1 = function (component, pConfig, posState, placee) {\n var element = placee.element;\n each$1([\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], function (prop) {\n return remove$1(element, prop);\n });\n reset$2(element);\n posState.clear(placee.uid);\n };\n\n var PositionApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n position: position$1,\n positionWithin: positionWithin,\n positionWithinBounds: positionWithinBounds,\n getMode: getMode,\n reset: reset$1\n });\n\n var init$g = function () {\n var state = {};\n var set = function (id, data) {\n state[id] = data;\n };\n var get = function (id) {\n return get$e(state, id);\n };\n var clear = function (id) {\n if (isNonNullable(id)) {\n delete state[id];\n } else {\n state = {};\n }\n };\n return nu$8({\n readState: function () {\n return state;\n },\n clear: clear,\n set: set,\n get: get\n });\n };\n\n var PositioningState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$g\n });\n\n var Positioning = create$7({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis,\n state: PositioningState\n });\n\n var fireDetaching = function (component) {\n emit(component, detachedFromDom());\n var children = component.components();\n each$1(children, fireDetaching);\n };\n var fireAttaching = function (component) {\n var children = component.components();\n each$1(children, fireAttaching);\n emit(component, attachedToDom());\n };\n var attach$1 = function (parent, child) {\n append$2(parent.element, child.element);\n };\n var detachChildren$1 = function (component) {\n each$1(component.components(), function (childComp) {\n return remove$7(childComp.element);\n });\n empty(component.element);\n component.syncComponents();\n };\n var replaceChildren = function (component, newChildren) {\n var subs = component.components();\n detachChildren$1(component);\n var deleted = difference(subs, newChildren);\n each$1(deleted, function (comp) {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each$1(newChildren, function (childComp) {\n if (!childComp.getSystem().isConnected()) {\n component.getSystem().addToWorld(childComp);\n attach$1(component, childComp);\n if (inBody(component.element)) {\n fireAttaching(childComp);\n }\n } else {\n attach$1(component, childComp);\n }\n component.syncComponents();\n });\n };\n\n var attach = function (parent, child) {\n attachWith(parent, child, append$2);\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$7(component.element);\n component.getSystem().removeFromWorld(component);\n };\n var detach = function (component) {\n var parent$1 = parent(component.element).bind(function (p) {\n return component.getSystem().getByDom(p).toOptional();\n });\n doDetach(component);\n parent$1.each(function (p) {\n p.syncComponents();\n });\n };\n var detachChildren = function (component) {\n var subs = component.components();\n each$1(subs, doDetach);\n empty(component.element);\n component.syncComponents();\n };\n var attachSystem = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, append$2);\n };\n var attachSystemAfter = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, after$2);\n };\n var attachSystemWith = function (element, guiSystem, inserter) {\n inserter(element, guiSystem.element);\n var children$1 = children(guiSystem.element);\n each$1(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$1(children$1, function (child) {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove$7(guiSystem.element);\n };\n\n var rebuild = function (sandbox, sConfig, sState, data) {\n sState.get().each(function (_data) {\n detachChildren(sandbox);\n });\n var point = sConfig.getAttachPoint(sandbox);\n attach(point, sandbox);\n var built = sandbox.getSystem().build(data);\n attach(sandbox, built);\n sState.set(built);\n return built;\n };\n var open$1 = 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$1(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n var close$1 = function (sandbox, sConfig, sState) {\n sState.get().each(function (data) {\n detachChildren(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n var isOpen$1 = function (_sandbox, _sConfig, sState) {\n return sState.isOpen();\n };\n var isPartOf = function (sandbox, sConfig, sState, queryElem) {\n return isOpen$1(sandbox, sConfig, sState) && sState.get().exists(function (data) {\n return sConfig.isPartOf(sandbox, data, queryElem);\n });\n };\n var getState$2 = 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$6(sandbox.element, attr);\n }, function (v) {\n set$7(sandbox.element, attr, v);\n });\n set$6(sandbox.element, cssKey, newValue);\n };\n var restore = function (sandbox, cssKey, attr) {\n getOpt(sandbox.element, attr).fold(function () {\n return remove$1(sandbox.element, cssKey);\n }, function (oldValue) {\n return set$6(sandbox.element, cssKey, oldValue);\n });\n };\n var cloak = function (sandbox, sConfig, _sState) {\n var sink = sConfig.getAttachPoint(sandbox);\n set$6(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$1(sandbox.element, 'position');\n }\n restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n };\n\n var SandboxApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n cloak: cloak,\n decloak: decloak,\n open: open$1,\n openWhileCloaked: openWhileCloaked,\n close: close$1,\n isOpen: isOpen$1,\n isPartOf: isPartOf,\n getState: getState$2,\n setContent: setContent\n });\n\n var events$g = function (sandboxConfig, sandboxState) {\n return derive$2([run$1(sandboxClose(), function (sandbox, _simulatedEvent) {\n close$1(sandbox, sandboxConfig, sandboxState);\n })]);\n };\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$g\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n required$1('isPartOf'),\n required$1('getAttachPoint'),\n defaulted('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n var init$f = function () {\n var contents = value$1();\n var readState = constant$1('not-implemented');\n return nu$8({\n readState: readState,\n isOpen: contents.isSet,\n clear: contents.clear,\n set: contents.set,\n get: contents.get\n });\n };\n\n var SandboxState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$f\n });\n\n var Sandboxing = create$7({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n var dismissPopups = constant$1('dismiss.popups');\n var repositionPopups = constant$1('reposition.popups');\n var mouseReleased = constant$1('mouse.released');\n\n var schema$x = objOfOnly([\n defaulted('isExtraPart', never),\n optionObjOf('fireEventInstead', [defaulted('event', dismissRequested())])\n ]);\n var receivingChannel$1 = function (rawSpec) {\n var _a;\n var detail = asRawOrDie$1('Dismissal', schema$x, rawSpec);\n return _a = {}, _a[dismissPopups()] = {\n schema: objOfOnly([required$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$w = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted('event', repositionRequested())]),\n requiredFunction('doReposition')\n ]);\n var receivingChannel = function (rawSpec) {\n var _a;\n var detail = asRawOrDie$1('Reposition', schema$w, 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$5 = function (component, repConfig, repState) {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n var onUnload$2 = function (component, repConfig, repState) {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n var setValue$3 = function (component, repConfig, repState, data) {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n var getValue$3 = 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$5,\n onUnload: onUnload$2,\n setValue: setValue$3,\n getValue: getValue$3,\n getState: getState$1\n });\n\n var events$f = function (repConfig, repState) {\n var es = repConfig.resetOnDom ? [\n runOnAttached(function (comp, _se) {\n onLoad$5(comp, repConfig, repState);\n }),\n runOnDetached(function (comp, _se) {\n onUnload$2(comp, repConfig, repState);\n })\n ] : [loadEvent(repConfig, repState, onLoad$5)];\n return derive$2(es);\n };\n\n var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n var memory$1 = 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$8({\n set: data.set,\n get: data.get,\n isNotSet: isNotSet,\n clear: clear,\n readState: readState\n });\n };\n var manual = function () {\n var readState = noop;\n return nu$8({ 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$e(dataByValue.get(), itemString).orThunk(function () {\n return get$e(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$1(items, function (item) {\n newDataByValue[item.value] = item;\n get$e(item, 'meta').each(function (meta) {\n get$e(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$8({\n readState: readState,\n lookup: lookup,\n update: update,\n clear: clear\n });\n };\n var init$e = function (spec) {\n return spec.store.manager.state(spec);\n };\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory$1,\n dataset: dataset,\n manual: manual,\n init: init$e\n });\n\n var setValue$2 = 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$2 = function (component, repConfig, repState) {\n var store = repConfig.store;\n var key = store.getDataKey(component);\n return repState.lookup(key).getOrThunk(function () {\n return store.getFallbackEntry(key);\n });\n };\n var onLoad$4 = function (component, repConfig, repState) {\n var store = repConfig.store;\n store.initialValue.each(function (data) {\n setValue$2(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 required$1('getFallbackEntry'),\n required$1('getDataKey'),\n required$1('setValue'),\n output$1('manager', {\n setValue: setValue$2,\n getValue: getValue$2,\n onLoad: onLoad$4,\n onUnload: onUnload$1,\n state: dataset\n })\n ];\n\n var getValue$1 = function (component, repConfig, _repState) {\n return repConfig.store.getValue(component);\n };\n var setValue$1 = function (component, repConfig, _repState, data) {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n var onLoad$3 = function (component, repConfig, _repState) {\n repConfig.store.initialValue.each(function (data) {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n required$1('getValue'),\n defaulted('setValue', noop),\n option('initialValue'),\n output$1('manager', {\n setValue: setValue$1,\n getValue: getValue$1,\n onLoad: onLoad$3,\n onUnload: noop,\n state: NoState.init\n })\n ];\n\n var setValue = function (component, repConfig, repState, data) {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n var getValue = function (component, repConfig, repState) {\n return repState.get();\n };\n var onLoad$2 = 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 = function (component, repConfig, repState) {\n repState.clear();\n };\n var MemoryStore = [\n option('initialValue'),\n output$1('manager', {\n setValue: setValue,\n getValue: getValue,\n onLoad: onLoad$2,\n onUnload: onUnload,\n state: memory$1\n })\n ];\n\n var RepresentSchema = [\n defaultedOf('store', { mode: 'memory' }, choose$1('mode', {\n memory: MemoryStore,\n manual: ManualStore,\n dataset: DatasetStore\n })),\n onHandler('onSetValue'),\n defaulted('resetOnDom', false)\n ];\n\n var Representing = create$7({\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 = function (name, forbidden) {\n return defaultedObjOf(name, {}, map$2(forbidden, function (f) {\n return forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name);\n }).concat([customField('dump', identity$1)]));\n };\n var get$2 = 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,\n augment: augment,\n get: get$2\n };\n\n var _placeholder = 'placeholder';\n var adt$3 = 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$2(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$3.single(true, constant$1(compSpec));\n }\n return get$e(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$3.single(false, constant$1(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$e(value, 'components').getOr([]);\n var substituted = bind$3(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$1);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n var substituteAll = function (owner, detail, components, placeholders) {\n return bind$3(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$1(label),\n required: required,\n used: used,\n replace: replace\n };\n };\n var substitutePlaces = function (owner, detail, components, placeholders) {\n var ps = map(placeholders, function (ph, name) {\n return oneReplace(name, ph);\n });\n var outcome = substituteAll(owner, detail, components, ps);\n each(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$2 = adt$3.single;\n var multiple = adt$3.multiple;\n var placeholder = constant$1(_placeholder);\n\n var adt$2 = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n var fFactory = defaulted('factory', { sketch: identity$1 });\n var fSchema = defaulted('schema', []);\n var fName = required$1('name');\n var fPname = field$1('pname', 'pname', defaultedThunk(function (typeSpec) {\n return '';\n }), anyValue());\n var fGroupSchema = customField('schema', function () {\n return [option('preprocess')];\n });\n var fDefaults = defaulted('defaults', constant$1({}));\n var fOverrides = defaulted('overrides', constant$1({}));\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 required$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n var asNamedPart = function (part) {\n return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n };\n var name$1 = function (part) {\n var get = function (data) {\n return data.name;\n };\n return part.fold(get, get, get, get);\n };\n var asCommon = function (part) {\n return part.fold(identity$1, identity$1, identity$1, identity$1);\n };\n var convert = function (adtConstructor, partSchema) {\n return function (spec) {\n var data = asRawOrDie$1('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n };\n var required = convert(adt$2.required, requiredSpec);\n var external$1 = convert(adt$2.external, externalSpec);\n var optional = convert(adt$2.optional, optionalSpec);\n var group = convert(adt$2.group, groupSpec);\n var original = constant$1('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 = 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$1(parts, function (part) {\n part.fold(function (data) {\n internals[data.pname] = single$2(true, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine(detail, data, partSpec, partValidated));\n });\n }, function (data) {\n var partSpec = detail.parts[data.name];\n externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n }, function (data) {\n internals[data.pname] = single$2(false, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine(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$2(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$1(internals),\n externals: constant$1(externals)\n };\n };\n\n var generate$3 = function (owner, parts) {\n var r = {};\n each$1(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$1('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$1 = 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$3(parts, function (part) {\n return part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(function (data) {\n return requiredObjOf(data.name, data.schema.concat([snapshot(original())]));\n }).toArray();\n });\n };\n var names = function (parts) {\n return map$2(parts, name$1);\n };\n var substitutes = function (owner, detail, parts) {\n return subs(owner, detail, parts);\n };\n var components$1 = function (owner, detail, internals) {\n return substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n };\n var getPart = function (component, detail, partKey) {\n var uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOptional();\n };\n var getPartOrDie = function (component, detail, partKey) {\n return getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n };\n var getParts = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each$1(partKeys, function (pk) {\n r[pk] = constant$1(system.getByUid(uids[pk]));\n });\n return r;\n };\n var getAllParts = function (component, detail) {\n var system = component.getSystem();\n return map(detail.partUids, function (pUid, _k) {\n return constant$1(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$1(partKeys, function (pk) {\n r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n var defaultUids = function (baseUid, partTypes) {\n var partNames = names(partTypes);\n return wrapAll(map$2(partNames, function (pn) {\n return {\n key: pn,\n value: baseUid + '-' + pn\n };\n }));\n };\n var defaultUidsSchema = function (partTypes) {\n return field$1('partUids', 'partUids', mergeWithThunk(function (spec) {\n return defaultUids(spec.uid, partTypes);\n }), anyValue());\n };\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$3,\n generateOne: generateOne$1,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components$1,\n defaultUids: defaultUids,\n defaultUidsSchema: defaultUidsSchema,\n getAllParts: getAllParts,\n getAllPartNames: getAllPartNames,\n getPart: getPart,\n getPartOrDie: getPartOrDie,\n getParts: getParts,\n getPartsOrDie: getPartsOrDie\n });\n\n var base = function (partSchemas, partUidsSchemas) {\n var ps = partSchemas.length > 0 ? [requiredObjOf('parts', partSchemas)] : [];\n return ps.concat([\n required$1('uid'),\n defaulted('dom', {}),\n defaulted('components', []),\n snapshot('originalSpec'),\n defaulted('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n var asRawOrDie = function (label, schema, spec, partSchemas, partUidsSchemas) {\n var baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie$1(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(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n var composite$1 = 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(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n var subs = substitutes(owner, detail, partTypes);\n var components = components$1(owner, detail, subs.internals());\n return factory(detail, components, specWithUid, subs.externals());\n };\n var hasUid = function (spec) {\n return has$2(spec, 'uid');\n };\n var supplyUid = function (spec) {\n return hasUid(spec) ? spec : __assign(__assign({}, spec), { uid: generate$5('uid') });\n };\n\n var isSketchSpec = function (spec) {\n return spec.uid !== undefined;\n };\n var singleSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n var compositeSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n required$1('partFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n var single = function (rawConfig) {\n var config = asRawOrDie$1('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(config.apis, makeApi);\n var extraApis = map(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: config.name,\n configFields: config.configFields,\n sketch: sketch\n }, apis), extraApis);\n };\n var composite = function (rawConfig) {\n var config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n var sketch = function (spec) {\n return composite$1(config.name, config.configFields, config.partFields, config.factory, spec);\n };\n var parts = generate$3(config.name, config.partFields);\n var apis = map(config.apis, makeApi);\n var extraApis = map(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: config.name,\n partFields: config.partFields,\n configFields: config.configFields,\n sketch: sketch,\n parts: parts\n }, apis), extraApis);\n };\n\n var inside = function (target) {\n return name$2(target) === 'input' && get$c(target, 'type') !== 'radio' || name$2(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 = [required$1('find')];\n\n var Composing = create$7({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n var nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n var onLoad$1 = function (component, disableConfig, disableState) {\n var f = disableConfig.disabled() ? disable$1 : enable$1;\n f(component, disableConfig);\n };\n var hasNative = function (component, config) {\n return config.useNative === true && contains$2(nativeDisabled, name$2(component.element));\n };\n var nativeIsDisabled = function (component) {\n return has$1(component.element, 'disabled');\n };\n var nativeDisable = function (component) {\n set$7(component.element, 'disabled', 'disabled');\n };\n var nativeEnable = function (component) {\n remove$6(component.element, 'disabled');\n };\n var ariaIsDisabled = function (component) {\n return get$c(component.element, 'aria-disabled') === 'true';\n };\n var ariaDisable = function (component) {\n set$7(component.element, 'aria-disabled', 'true');\n };\n var ariaEnable = function (component) {\n set$7(component.element, 'aria-disabled', 'false');\n };\n var disable$1 = 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$1 = function (component, disableConfig, _disableState) {\n disableConfig.disableClass.each(function (disableClass) {\n remove$3(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$3 = function (component, disableConfig, disableState, disabled) {\n var f = disabled ? disable$1 : enable$1;\n f(component, disableConfig);\n };\n\n var DisableApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n enable: enable$1,\n disable: disable$1,\n isDisabled: isDisabled,\n onLoad: onLoad$1,\n set: set$3\n });\n\n var exhibit$5 = function (base, disableConfig) {\n return nu$7({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n };\n var events$e = function (disableConfig, disableState) {\n return derive$2([\n abort(execute$5(), function (component, _simulatedEvent) {\n return isDisabled(component, disableConfig);\n }),\n loadEvent(disableConfig, disableState, onLoad$1)\n ]);\n };\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$5,\n events: events$e\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted('useNative', true),\n option('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n var Disabling = create$7({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n var dehighlightAllExcept = function (component, hConfig, hState, skip) {\n var highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n each$1(highlighted, function (h) {\n if (!exists(skip, function (skipComp) {\n return skipComp.element === h;\n })) {\n remove$3(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(function (target) {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n });\n }\n });\n };\n var dehighlightAll = function (component, hConfig, hState) {\n return dehighlightAllExcept(component, hConfig, hState, []);\n };\n var dehighlight = function (component, hConfig, hState, target) {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$3(target.element, hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n }\n };\n var highlight = 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$1());\n }\n };\n var highlightFirst = function (component, hConfig, hState) {\n getFirst(component, hConfig).each(function (firstComp) {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n var highlightLast = function (component, hConfig, hState) {\n getLast(component, hConfig).each(function (lastComp) {\n highlight(component, hConfig, hState, lastComp);\n });\n };\n var highlightAt = function (component, hConfig, hState, index) {\n getByIndex(component, hConfig, hState, index).fold(function (err) {\n throw err;\n }, function (firstComp) {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n var highlightBy = function (component, hConfig, hState, predicate) {\n var candidates = getCandidates(component, hConfig);\n var targetComp = find$5(candidates, predicate);\n targetComp.each(function (c) {\n highlight(component, hConfig, hState, c);\n });\n };\n var isHighlighted = function (component, hConfig, hState, queryTarget) {\n return has(queryTarget.element, hConfig.highlightClass);\n };\n var getHighlighted = function (component, hConfig, _hState) {\n return descendant(component.element, '.' + hConfig.highlightClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOptional();\n });\n };\n var getByIndex = function (component, hConfig, hState, index) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n return Optional.from(items[index]).fold(function () {\n return Result.error(new Error('No element found with index ' + index));\n }, component.getSystem().getByDom);\n };\n var getFirst = function (component, hConfig, _hState) {\n return descendant(component.element, '.' + hConfig.itemClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOptional();\n });\n };\n var getLast = function (component, hConfig, _hState) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n var last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n return last.bind(function (c) {\n return component.getSystem().getByDom(c).toOptional();\n });\n };\n var getDelta$2 = function (component, hConfig, hState, delta) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n var current = findIndex$1(items, function (item) {\n return has(item, hConfig.highlightClass);\n });\n return current.bind(function (selected) {\n var dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOptional();\n });\n };\n var getPrevious = function (component, hConfig, hState) {\n return getDelta$2(component, hConfig, hState, -1);\n };\n var getNext = function (component, hConfig, hState) {\n return getDelta$2(component, hConfig, hState, +1);\n };\n var getCandidates = function (component, hConfig, _hState) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n return cat(map$2(items, function (i) {\n return component.getSystem().getByDom(i).toOptional();\n }));\n };\n\n var HighlightApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dehighlightAll: dehighlightAll,\n dehighlight: dehighlight,\n highlight: highlight,\n highlightFirst: highlightFirst,\n highlightLast: highlightLast,\n highlightAt: highlightAt,\n highlightBy: highlightBy,\n isHighlighted: isHighlighted,\n getHighlighted: getHighlighted,\n getFirst: getFirst,\n getLast: getLast,\n getPrevious: getPrevious,\n getNext: getNext,\n getCandidates: getCandidates\n });\n\n var HighlightSchema = [\n required$1('highlightClass'),\n required$1('itemClass'),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ];\n\n var Highlighting = create$7({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n var BACKSPACE = [8];\n var TAB = [9];\n var ENTER = [13];\n var ESCAPE = [27];\n var SPACE = [32];\n var LEFT = [37];\n var UP = [38];\n var RIGHT = [39];\n var DOWN = [40];\n\n var cyclePrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n var after = reverse(values.slice(index + 1));\n return find$5(before.concat(after), predicate);\n };\n var tryPrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n return find$5(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$5(after.concat(before), predicate);\n };\n var tryNext = function (values, index, predicate) {\n var after = values.slice(index + 1);\n return find$5(after, predicate);\n };\n\n var inSet = function (keys) {\n return function (event) {\n var raw = event.raw;\n return contains$2(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 = function (transitions, event) {\n var transition = find$5(transitions, function (t) {\n return t.matches(event);\n });\n return transition.map(function (t) {\n return t.classification;\n });\n };\n\n var reportFocusShifting = function (component, prevFocus, newFocus) {\n var noChange = prevFocus.exists(function (p) {\n return newFocus.exists(function (n) {\n return eq(n, p);\n });\n });\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus: prevFocus,\n newFocus: newFocus\n });\n }\n };\n var dom$2 = 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('focusManager', dom$2()),\n defaultedOf('focusInside', 'onFocus', valueOf(function (val) {\n return contains$2([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside');\n })),\n output$1('handler', me),\n output$1('state', stateInit),\n output$1('sendFocusIn', optFocusIn)\n ]);\n };\n var processKey = function (component, simulatedEvent, getRules, keyingConfig, keyingState) {\n var rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose(rules, simulatedEvent.event).bind(function (rule) {\n return rule(component, simulatedEvent, keyingConfig, keyingState);\n });\n };\n var toEvents = function (keyingConfig, keyingState) {\n var onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(function (focusIn) {\n return run$1(focus$4(), 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$1(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$1(keyup(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(function (_) {\n simulatedEvent.stop();\n });\n })\n ];\n return derive$2(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$5 = function (cyclicField) {\n var schema = [\n option('onEscape'),\n option('onEnter'),\n defaulted('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted('firstTabstop', 0),\n defaulted('useTabstopAt', always),\n option('visibilitySelector')\n ].concat([cyclicField]);\n var isVisible = function (tabbingConfig, element) {\n var target = tabbingConfig.visibilitySelector.bind(function (sel) {\n return closest$1(element, sel);\n }).getOr(element);\n return get$8(target) > 0;\n };\n var findInitial = function (component, tabbingConfig) {\n var tabstops = descendants(component.element, tabbingConfig.selector);\n var visibles = filter$2(tabstops, function (elem) {\n return isVisible(tabbingConfig, elem);\n });\n return Optional.from(visibles[tabbingConfig.firstTabstop]);\n };\n var findCurrent = function (component, tabbingConfig) {\n return tabbingConfig.focusManager.get(component).bind(function (elem) {\n return closest$1(elem, tabbingConfig.selector);\n });\n };\n var isTabstop = function (tabbingConfig, element) {\n return isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n };\n var focusIn = function (component, tabbingConfig, _tabbingState) {\n findInitial(component, tabbingConfig).each(function (target) {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n var goFromTabstop = function (component, tabstops, stopIndex, tabbingConfig, cycle) {\n return cycle(tabstops, stopIndex, function (elem) {\n return isTabstop(tabbingConfig, elem);\n }).fold(function () {\n return tabbingConfig.cyclic ? Optional.some(true) : Optional.none();\n }, function (target) {\n tabbingConfig.focusManager.set(component, target);\n return Optional.some(true);\n });\n };\n var go = function (component, _simulatedEvent, tabbingConfig, cycle) {\n var tabstops = descendants(component.element, tabbingConfig.selector);\n return findCurrent(component, tabbingConfig).bind(function (tabstop) {\n var optStopIndex = findIndex$1(tabstops, curry(eq, tabstop));\n return optStopIndex.bind(function (stopIndex) {\n return goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle);\n });\n });\n };\n var goBackwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var goForwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var execute = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEnter.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var exit = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEscape.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var getKeydownRules = constant$1([\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$1([]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, function () {\n return Optional.some(focusIn);\n });\n };\n\n var AcyclicType = create$5(customField('cyclic', never));\n\n var CyclicType = create$5(customField('cyclic', always));\n\n var doDefaultExecute = function (component, _simulatedEvent, focused) {\n dispatch(component, focused, execute$5());\n return Optional.some(true);\n };\n var defaultExecute = function (component, simulatedEvent, focused) {\n var isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n var stopEventForFirefox = function (_component, _simulatedEvent) {\n return Optional.some(true);\n };\n\n var schema$v = [\n defaulted('execute', defaultExecute),\n defaulted('useSpace', false),\n defaulted('useEnter', true),\n defaulted('useControlEnter', false),\n defaulted('useDown', false)\n ];\n var execute$4 = function (component, simulatedEvent, executeConfig) {\n return executeConfig.execute(component, simulatedEvent, component.element);\n };\n var getKeydownRules$5 = 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$4)].concat(executeConfig.useControlEnter ? [rule(and([\n isControl,\n inSet(ENTER)\n ]), execute$4)] : []);\n };\n var getKeyupRules$5 = function (component, _simulatedEvent, executeConfig, _executeState) {\n return executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n };\n var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, function () {\n return Optional.none();\n });\n\n var flatgrid$1 = function () {\n var dimensions = value$1();\n var setGridSize = function (numRows, numColumns) {\n dimensions.set({\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$8({\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$d = function (spec) {\n return spec.state(spec);\n };\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid$1,\n init: init$d\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$1 = function (moveLeft, moveRight) {\n var movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n var east$1 = 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$1 = useV;\n var south$1 = useV;\n var move$1 = useV;\n\n var isHidden$1 = function (dom) {\n return dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n };\n var isVisible = function (element) {\n return !isHidden$1(element.dom);\n };\n\n var locate = function (candidates, predicate) {\n return findIndex$1(candidates, predicate).map(function (index) {\n return {\n index: index,\n candidates: candidates\n };\n });\n };\n\n var locateVisible = function (container, current, selector) {\n var predicate = function (x) {\n return eq(x, current);\n };\n var candidates = descendants(container, selector);\n var visible = filter$2(candidates, isVisible);\n return locate(visible, predicate);\n };\n var findIndex = function (elements, target) {\n return findIndex$1(elements, function (elem) {\n return eq(target, elem);\n });\n };\n\n var withGrid = function (values, index, numCols, f) {\n var oldRow = Math.floor(index / numCols);\n var oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(function (address) {\n var newIndex = address.row * numCols + address.column;\n return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n });\n };\n var cycleHorizontal$1 = function (values, index, numRows, numCols, delta) {\n return withGrid(values, index, numCols, function (oldRow, oldColumn) {\n var onLastRow = oldRow === numRows - 1;\n var colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n var newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Optional.some({\n row: oldRow,\n column: newColumn\n });\n });\n };\n var cycleVertical$1 = 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$1(oldColumn, 0, colsInRow - 1);\n return Optional.some({\n row: newRow,\n column: newCol\n });\n });\n };\n var cycleRight$1 = function (values, index, numRows, numCols) {\n return cycleHorizontal$1(values, index, numRows, numCols, +1);\n };\n var cycleLeft$1 = function (values, index, numRows, numCols) {\n return cycleHorizontal$1(values, index, numRows, numCols, -1);\n };\n var cycleUp$1 = function (values, index, numRows, numCols) {\n return cycleVertical$1(values, index, numRows, numCols, -1);\n };\n var cycleDown$1 = function (values, index, numRows, numCols) {\n return cycleVertical$1(values, index, numRows, numCols, +1);\n };\n\n var schema$u = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('captureTab', false),\n initSize()\n ];\n var focusIn$3 = function (component, gridConfig, _gridState) {\n descendant(component.element, gridConfig.selector).each(function (first) {\n gridConfig.focusManager.set(component, first);\n });\n };\n var findCurrent$1 = function (component, gridConfig) {\n return gridConfig.focusManager.get(component).bind(function (elem) {\n return closest$1(elem, gridConfig.selector);\n });\n };\n var execute$3 = function (component, simulatedEvent, gridConfig, _gridState) {\n return findCurrent$1(component, gridConfig).bind(function (focused) {\n return gridConfig.execute(component, simulatedEvent, focused);\n });\n };\n var doMove$2 = function (cycle) {\n return function (element, focused, gridConfig, gridState) {\n return locateVisible(element, focused, gridConfig.selector).bind(function (identified) {\n return cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns));\n });\n };\n };\n var handleTab = function (_component, _simulatedEvent, gridConfig) {\n return gridConfig.captureTab ? Optional.some(true) : Optional.none();\n };\n var doEscape$1 = function (component, simulatedEvent, gridConfig) {\n return gridConfig.onEscape(component, simulatedEvent);\n };\n var moveLeft$3 = doMove$2(cycleLeft$1);\n var moveRight$3 = doMove$2(cycleRight$1);\n var moveNorth$1 = doMove$2(cycleUp$1);\n var moveSouth$1 = doMove$2(cycleDown$1);\n var getKeydownRules$4 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft$3, moveRight$3)),\n rule(inSet(RIGHT), east$1(moveLeft$3, moveRight$3)),\n rule(inSet(UP), north$1(moveNorth$1)),\n rule(inSet(DOWN), south$1(moveSouth$1)),\n rule(and([\n isShift,\n inSet(TAB)\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), handleTab),\n rule(inSet(ESCAPE), doEscape$1),\n rule(inSet(SPACE.concat(ENTER)), execute$3)\n ]);\n var getKeyupRules$4 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, function () {\n return Optional.some(focusIn$3);\n });\n\n var horizontal = function (container, selector, current, delta) {\n var isDisabledButton = function (candidate) {\n return name$2(candidate) === 'button' && get$c(candidate, 'disabled') === 'disabled';\n };\n var tryCycle = function (initial, index, candidates) {\n var newIndex = cycleBy(index, delta, 0, candidates.length - 1);\n if (newIndex === initial) {\n return Optional.none();\n } else {\n return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Optional.from(candidates[newIndex]);\n }\n };\n return locateVisible(container, current, selector).bind(function (identified) {\n var index = identified.index;\n var candidates = identified.candidates;\n return tryCycle(index, index, candidates);\n });\n };\n\n var schema$t = [\n required$1('selector'),\n defaulted('getInitial', Optional.none),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('executeOnMove', false),\n defaulted('allowVertical', true)\n ];\n var findCurrent = function (component, flowConfig) {\n return flowConfig.focusManager.get(component).bind(function (elem) {\n return closest$1(elem, flowConfig.selector);\n });\n };\n var execute$2 = function (component, simulatedEvent, flowConfig) {\n return findCurrent(component, flowConfig).bind(function (focused) {\n return flowConfig.execute(component, simulatedEvent, focused);\n });\n };\n var focusIn$2 = function (component, flowConfig, _state) {\n flowConfig.getInitial(component).orThunk(function () {\n return descendant(component.element, flowConfig.selector);\n }).each(function (first) {\n flowConfig.focusManager.set(component, first);\n });\n };\n var moveLeft$2 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveRight$2 = 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$2(component, simulatedEvent, flowConfig) : Optional.some(true);\n });\n };\n };\n var doEscape = function (component, simulatedEvent, flowConfig) {\n return flowConfig.onEscape(component, simulatedEvent);\n };\n var getKeydownRules$3 = 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$1(moveLeft$2, moveRight$2))),\n rule(inSet(eastMovers), doMove$1(east$1(moveLeft$2, moveRight$2))),\n rule(inSet(ENTER), execute$2),\n rule(inSet(SPACE), execute$2),\n rule(inSet(ESCAPE), doEscape)\n ];\n };\n var getKeyupRules$3 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, function () {\n return Optional.some(focusIn$2);\n });\n\n var toCell = function (matrix, rowIndex, columnIndex) {\n return Optional.from(matrix[rowIndex]).bind(function (row) {\n return Optional.from(row[columnIndex]).map(function (cell) {\n return {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n cell: cell\n };\n });\n });\n };\n var cycleHorizontal = 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 = 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$1(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$1(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n var moveVertical = function (matrix, colIndex, startRow, deltaRow) {\n var nextRowIndex = clamp$1(startRow + deltaRow, 0, matrix.length - 1);\n var colsInNextRow = matrix[nextRowIndex].length;\n var nextColIndex = clamp$1(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n var cycleRight = function (matrix, startRow, startCol) {\n return cycleHorizontal(matrix, startRow, startCol, +1);\n };\n var cycleLeft = function (matrix, startRow, startCol) {\n return cycleHorizontal(matrix, startRow, startCol, -1);\n };\n var cycleUp = function (matrix, startRow, startCol) {\n return cycleVertical(matrix, startCol, startRow, -1);\n };\n var cycleDown = function (matrix, startRow, startCol) {\n return cycleVertical(matrix, startCol, startRow, +1);\n };\n var moveLeft$1 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, -1);\n };\n var moveRight$1 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, +1);\n };\n var moveUp$1 = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, -1);\n };\n var moveDown$1 = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, +1);\n };\n\n var schema$s = [\n requiredObjOf('selectors', [\n required$1('row'),\n required$1('cell')\n ]),\n defaulted('cycles', true),\n defaulted('previousSelector', Optional.none),\n defaulted('execute', defaultExecute)\n ];\n var focusIn$1 = function (component, matrixConfig, _state) {\n var focused = matrixConfig.previousSelector(component).orThunk(function () {\n var selectors = matrixConfig.selectors;\n return descendant(component.element, selectors.cell);\n });\n focused.each(function (cell) {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n var execute$1 = 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$2(rows, function (row) {\n return descendants(row, matrixConfig.selectors.cell);\n });\n };\n var doMove = function (ifCycle, ifMove) {\n return function (element, focused, matrixConfig) {\n var move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$1(focused, matrixConfig.selectors.row).bind(function (inRow) {\n var cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex(cellsInRow, focused).bind(function (colIndex) {\n var allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex(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 = doMove(cycleLeft, moveLeft$1);\n var moveRight = doMove(cycleRight, moveRight$1);\n var moveNorth = doMove(cycleUp, moveUp$1);\n var moveSouth = doMove(cycleDown, moveDown$1);\n var getKeydownRules$2 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft, moveRight)),\n rule(inSet(RIGHT), east$1(moveLeft, moveRight)),\n rule(inSet(UP), north$1(moveNorth)),\n rule(inSet(DOWN), south$1(moveSouth)),\n rule(inSet(SPACE.concat(ENTER)), execute$1)\n ]);\n var getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, function () {\n return Optional.some(focusIn$1);\n });\n\n var schema$r = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n defaulted('moveOnTab', false)\n ];\n var execute = 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 = function (component, menuConfig, _state) {\n descendant(component.element, menuConfig.selector).each(function (first) {\n menuConfig.focusManager.set(component, first);\n });\n };\n var moveUp = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveDown = 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$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n };\n var fireTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n };\n var getKeydownRules$1 = constant$1([\n rule(inSet(UP), move$1(moveUp)),\n rule(inSet(DOWN), move$1(moveDown)),\n rule(and([\n isShift,\n inSet(TAB)\n ]), fireShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), fireTab),\n rule(inSet(ENTER), execute),\n rule(inSet(SPACE), execute)\n ]);\n var getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, function () {\n return Optional.some(focusIn);\n });\n\n var schema$q = [\n onKeyboardHandler('onSpace'),\n onKeyboardHandler('onEnter'),\n onKeyboardHandler('onShiftEnter'),\n onKeyboardHandler('onLeft'),\n onKeyboardHandler('onRight'),\n onKeyboardHandler('onTab'),\n onKeyboardHandler('onShiftTab'),\n onKeyboardHandler('onUp'),\n onKeyboardHandler('onDown'),\n onKeyboardHandler('onEscape'),\n defaulted('stopSpaceKeyup', false),\n option('focusIn')\n ];\n var getKeydownRules = 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 = function (component, simulatedEvent, specialInfo) {\n return specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n };\n var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, 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 = 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,\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({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: function (keyingConfig, keyingState) {\n var handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: function (component, keyConfig, keyState) {\n keyConfig.sendFocusIn(keyConfig).fold(function () {\n component.getSystem().triggerFocus(component.element, component.element);\n }, function (sendFocusIn) {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: function (component, keyConfig, keyState, numRows, numColumns) {\n if (!isFlatgridState(keyState)) {\n console.error('Layout does not support setGridSize');\n } else {\n keyState.setGridSize(numRows, numColumns);\n }\n }\n },\n state: KeyingState\n });\n\n var set$2 = function (component, replaceConfig, replaceState, data) {\n preserve$1(function () {\n var newChildren = map$2(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 = function (component, replaceConfig, replaceState, appendee) {\n insert(component, replaceConfig, append$2, appendee);\n };\n var prepend = function (component, replaceConfig, replaceState, prependee) {\n insert(component, replaceConfig, prepend$1, prependee);\n };\n var remove = function (component, replaceConfig, replaceState, removee) {\n var children = contents(component);\n var foundChild = find$5(children, function (child) {\n return eq(removee.element, child.element);\n });\n foundChild.each(detach);\n };\n var contents = function (component, _replaceConfig) {\n return component.components();\n };\n var replaceAt = function (component, replaceConfig, replaceState, replaceeIndex, replacer) {\n var children = contents(component);\n return Optional.from(children[replaceeIndex]).map(function (replacee) {\n remove(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$1(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,\n prepend: prepend,\n remove: remove,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$2,\n contents: contents\n });\n\n var Replacing = create$7({\n fields: [],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n var events$d = function (name, eventHandlers) {\n var events = derive$2(eventHandlers);\n return create$7({\n fields: [required$1('enabled')],\n name: name,\n active: { events: constant$1(events) }\n });\n };\n var config = function (name, eventHandlers) {\n var me = events$d(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me: me,\n configAsRaw: constant$1({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n var focus$2 = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n focus$3(component.element);\n focusConfig.onFocus(component);\n }\n };\n var blur = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n blur$1(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,\n isFocused: isFocused\n });\n\n var exhibit$4 = function (base, focusConfig) {\n var mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$7(mod);\n };\n var events$c = function (focusConfig) {\n return derive$2([run$1(focus$4(), function (component, simulatedEvent) {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), function (_, simulatedEvent) {\n simulatedEvent.event.prevent();\n })] : []));\n };\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4,\n events: events$c\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted('stopMousedown', false),\n defaulted('ignore', false)\n ];\n\n var Focusing = create$7({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n var SetupBehaviourCellState = function (initialState) {\n var init = function () {\n var cell = Cell(initialState);\n var get = function () {\n return cell.get();\n };\n var set = function (newState) {\n return cell.set(newState);\n };\n var clear = function () {\n return cell.set(initialState);\n };\n var readState = function () {\n return cell.get();\n };\n return {\n get: get,\n set: set,\n clear: clear,\n readState: readState\n };\n };\n return { init: init };\n };\n\n var updateAriaState = function (component, toggleConfig, toggleState) {\n var ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n var updateClass = function (component, toggleConfig, toggleState) {\n toggleConfig.toggleClass.each(function (toggleClass) {\n if (toggleState.get()) {\n add$2(component.element, toggleClass);\n } else {\n remove$3(component.element, toggleClass);\n }\n });\n };\n var toggle$2 = function (component, toggleConfig, toggleState) {\n set$1(component, toggleConfig, toggleState, !toggleState.get());\n };\n var on = 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$1 = function (component, toggleConfig, toggleState, state) {\n var action = state ? on : off;\n action(component, toggleConfig, toggleState);\n };\n var isOn = function (component, toggleConfig, toggleState) {\n return toggleState.get();\n };\n var onLoad = function (component, toggleConfig, toggleState) {\n set$1(component, toggleConfig, toggleState, toggleConfig.selected);\n };\n\n var ToggleApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad,\n toggle: toggle$2,\n isOn: isOn,\n on: on,\n off: off,\n set: set$1\n });\n\n var exhibit$3 = function () {\n return nu$7({});\n };\n var events$b = function (toggleConfig, toggleState) {\n var execute = executeEvent(toggleConfig, toggleState, toggle$2);\n var load = loadEvent(toggleConfig, toggleState, onLoad);\n return derive$2(flatten([\n toggleConfig.toggleOnExecute ? [execute] : [],\n [load]\n ]));\n };\n\n var ActiveToggle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$b\n });\n\n var updatePressed = function (component, ariaInfo, status) {\n set$7(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$7(component.element, 'aria-selected', status);\n };\n var updateChecked = function (component, ariaInfo, status) {\n set$7(component.element, 'aria-checked', status);\n };\n var updateExpanded = function (component, ariaInfo, status) {\n set$7(component.element, 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted('selected', false),\n option('toggleClass'),\n defaulted('toggleOnExecute', true),\n defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n pressed: [\n defaulted('syncWithExpanded', false),\n output$1('update', updatePressed)\n ],\n checked: [output$1('update', updateChecked)],\n expanded: [output$1('update', updateExpanded)],\n selected: [output$1('update', updateSelected)],\n none: [output$1('update', noop)]\n }))\n ];\n\n var Toggling = create$7({\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$1(click(), onClick),\n run$1(tap(), onClick),\n cutter(touchstart()),\n cutter(mousedown())\n ];\n };\n var events$a = function (optAction) {\n var executeHandler = function (action) {\n return runOnExecute$1(function (component, simulatedEvent) {\n action(component);\n simulatedEvent.stop();\n });\n };\n return derive$2(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$1 = function (item) {\n emitWith(item, focusEvent, { item: item });\n };\n var hover = constant$1(hoverEvent);\n var focus$1 = constant$1(focusEvent);\n\n var builder$2 = 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$1(component);\n }\n }),\n Keying.config({ mode: 'execution' }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n config('item-type-events', __spreadArray(__spreadArray([], pointerEvents()), [\n run$1(mouseover(), onHover),\n run$1(focusItem(), Focusing.focus)\n ]))\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n };\n };\n var schema$p = [\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('hasSubmenu', false),\n option('toggling'),\n SketchBehaviours.field('itemBehaviours', [\n Toggling,\n Focusing,\n Keying,\n Representing\n ]),\n defaulted('ignoreFocus', false),\n defaulted('domModification', {}),\n output$1('builder', builder$2),\n defaulted('eventOrder', {})\n ];\n\n var builder$1 = function (detail) {\n return {\n dom: detail.dom,\n components: detail.components,\n events: derive$2([stopper(focusItem())])\n };\n };\n var schema$o = [\n required$1('dom'),\n required$1('components'),\n output$1('builder', builder$1)\n ];\n\n var owner$2 = constant$1('item-widget');\n var parts$h = constant$1([required({\n name: 'widget',\n overrides: function (detail) {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_component) {\n return detail.data;\n },\n setValue: noop\n }\n })])\n };\n }\n })]);\n\n var builder = function (detail) {\n var subs = substitutes(owner$2(), detail, parts$h());\n var components = components$1(owner$2(), detail, subs.internals());\n var focusWidget = function (component) {\n return getPart(component, detail, 'widget').map(function (widget) {\n Keying.focusIn(widget);\n return widget;\n });\n };\n var onHorizontalArrow = function (component, simulatedEvent) {\n return inside(simulatedEvent.event.target) ? Optional.none() : function () {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }();\n };\n return {\n dom: detail.dom,\n components: components,\n domModification: detail.domModification,\n events: derive$2([\n runOnExecute$1(function (component, simulatedEvent) {\n focusWidget(component).each(function (_widget) {\n simulatedEvent.stop();\n });\n }),\n run$1(mouseover(), onHover),\n run$1(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$1(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? function (component) {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: function (component, simulatedEvent) {\n if (!Focusing.isFocused(component) && !detail.autofocus) {\n Focusing.focus(component);\n return Optional.some(true);\n } else if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }\n })\n ])\n };\n };\n var schema$n = [\n required$1('uid'),\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('autofocus', false),\n defaulted('ignoreFocus', false),\n SketchBehaviours.field('widgetBehaviours', [\n Representing,\n Focusing,\n Keying\n ]),\n defaulted('domModification', {}),\n defaultUidsSchema(parts$h()),\n output$1('builder', builder)\n ];\n\n var itemSchema$2 = choose$1('type', {\n widget: schema$n,\n item: schema$p,\n separator: schema$o\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$g = constant$1([group({\n factory: {\n sketch: function (spec) {\n var itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: function (detail, u) {\n return has$2(u, 'uid') ? u : __assign(__assign({}, u), { uid: generate$5('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$m = constant$1([\n required$1('value'),\n required$1('items'),\n required$1('dom'),\n required$1('components'),\n defaulted('eventOrder', {}),\n field('menuBehaviours', [\n Highlighting,\n Representing,\n Composing,\n Keying\n ]),\n defaultedOf('movement', {\n mode: 'menu',\n moveOnTab: true\n }, choose$1('mode', {\n grid: [\n initSize(),\n output$1('config', configureGrid)\n ],\n matrix: [\n output$1('config', configureMatrix),\n required$1('rowSelector')\n ],\n menu: [\n defaulted('moveOnTab', true),\n output$1('config', configureMenu)\n ]\n })),\n itemMarkers(),\n defaulted('fakeFocus', false),\n defaulted('focusManager', dom$2()),\n onHandler('onHighlight')\n ]);\n\n var focus = constant$1('alloy.menu-focus');\n\n var make$7 = function (detail, components, _spec, _externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.menuBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedItem,\n itemClass: detail.markers.item,\n onHighlight: detail.onHighlight\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n }),\n Composing.config({ find: Optional.some }),\n Keying.config(detail.movement.config(detail, detail.movement))\n ]),\n events: derive$2([\n run$1(focus$1(), 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(), {\n menu: menu,\n item: item\n });\n });\n }),\n run$1(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({\n name: 'Menu',\n configFields: schema$m(),\n partFields: parts$g(),\n factory: make$7\n });\n\n var transpose$1 = 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$e(byMenu, finish).bind(function (triggerItem) {\n return get$e(items, triggerItem).bind(function (triggerMenu) {\n var rest = trace(items, byItem, byMenu, triggerMenu);\n return Optional.some([triggerMenu].concat(rest));\n });\n }).getOr([]);\n };\n var generate$2 = function (menus, expansions) {\n var items = {};\n each(menus, function (menuItems, menu) {\n each$1(menuItems, function (item) {\n items[item] = menu;\n });\n });\n var byItem = expansions;\n var byMenu = transpose$1(expansions);\n var menuPaths = map(byMenu, function (_triggerItem, submenu) {\n return [submenu].concat(trace(items, byItem, byMenu, submenu));\n });\n return map(items, function (menu) {\n return get$e(menuPaths, menu).getOr([menu]);\n });\n };\n\n var init$c = function () {\n var expansions = Cell({});\n var menus = Cell({});\n var paths = Cell({});\n var primary = value$1();\n var directory = Cell({});\n var clear = function () {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.clear();\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(sPrimary);\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n var sPaths = generate$2(dir, sExpansions);\n paths.set(sPaths);\n };\n var getTriggeringItem = function (menuValue) {\n return find$4(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$2(lookupItem(itemValue).toArray(), function (menuValue) {\n return getPreparedMenu(menuValue).isSome();\n });\n return get$e(paths.get(), itemValue).bind(function (path) {\n var revPath = reverse(extraPath.concat(path));\n var triggers = bind$3(revPath, function (menuValue, menuIndex) {\n return getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(function () {\n return is(primary.get(), menuValue) ? [] : [Optional.none()];\n }, function (data) {\n return [Optional.some(data)];\n });\n });\n return sequence(triggers);\n });\n };\n var expand = function (itemValue) {\n return get$e(expansions.get(), itemValue).map(function (menu) {\n var current = get$e(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n };\n var collapse = function (itemValue) {\n return get$e(paths.get(), itemValue).bind(function (path) {\n return path.length > 1 ? Optional.some(path.slice(1)) : Optional.none();\n });\n };\n var refresh = function (itemValue) {\n return get$e(paths.get(), itemValue);\n };\n var getPreparedMenu = function (menuValue) {\n return lookupMenu(menuValue).bind(extractPreparedMenu);\n };\n var lookupMenu = function (menuValue) {\n return get$e(menus.get(), menuValue);\n };\n var lookupItem = function (itemValue) {\n return get$e(expansions.get(), itemValue);\n };\n var otherMenus = function (path) {\n var menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n var getPrimary = function () {\n return primary.get().bind(getPreparedMenu);\n };\n var getMenus = function () {\n return menus.get();\n };\n return {\n setMenuBuilt: setMenuBuilt,\n setContents: setContents,\n expand: expand,\n refresh: refresh,\n collapse: collapse,\n lookupMenu: lookupMenu,\n lookupItem: lookupItem,\n otherMenus: otherMenus,\n getPrimary: getPrimary,\n getMenus: getMenus,\n clear: clear,\n isClear: isClear,\n getTriggeringPath: getTriggeringPath\n };\n };\n var extractPreparedMenu = function (prep) {\n return prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n };\n var LayeredState = {\n init: init$c,\n extractPreparedMenu: extractPreparedMenu\n };\n\n var make$6 = function (detail, _rawUiSpec) {\n var submenuParentItems = value$1();\n var buildMenus = function (container, primaryName, menus) {\n return map(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$2()\n }));\n };\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n };\n var layeredState = LayeredState.init();\n var setup = function (container) {\n var componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n var directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n var getItemValue = function (item) {\n return Representing.getValue(item).value;\n };\n var getItemByValue = function (_container, menus, itemValue) {\n return findMap(menus, function (menu) {\n if (!menu.getSystem().isConnected()) {\n return Optional.none();\n }\n var candidates = Highlighting.getCandidates(menu);\n return find$5(candidates, function (c) {\n return getItemValue(c) === itemValue;\n });\n });\n };\n var toDirectory = function (_container) {\n return map(detail.data.menus, function (data, _menuName) {\n return bind$3(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$2(menuValues, function (mv) {\n return state.lookupMenu(mv).bind(function (prep) {\n return prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n });\n }));\n };\n var closeOthers = function (container, state, path) {\n var others = getMenus(state, state.otherMenus(path));\n each$1(others, function (o) {\n remove$2(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$2(items, function (i) {\n return get$c(i, 'aria-haspopup') === 'true';\n });\n each$1(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(r);\n return r;\n });\n };\n var updateAriaExpansions = function (container, path) {\n var parentItems = getSubmenuParents(container);\n each(parentItems, function (v, k) {\n var expanded = contains$2(path, k);\n set$7(v.element, 'aria-expanded', expanded);\n });\n };\n var updateMenuPath = function (container, state, path) {\n return Optional.from(path[0]).bind(function (latestMenuName) {\n return state.lookupMenu(latestMenuName).bind(function (menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n return Optional.none();\n } else {\n var activeMenu = menuPrep.menu;\n var rest = getMenus(state, path.slice(1));\n each$1(rest, function (r) {\n add$2(r.element, detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n remove$2(activeMenu.element, [detail.markers.backgroundMenu]);\n setActiveMenu(container, activeMenu);\n closeOthers(container, state, path);\n return Optional.some(activeMenu);\n }\n });\n });\n };\n var ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n var buildIfRequired = function (container, menuName, menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n var menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n var expandRight = function (container, item, decision) {\n if (decision === void 0) {\n decision = ExpandHighlightDecision.HighlightSubmenu;\n }\n if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) {\n return Optional.some(item);\n } else {\n var value = getItemValue(item);\n return layeredState.expand(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return Optional.from(path[0]).bind(function (menuName) {\n return layeredState.lookupMenu(menuName).bind(function (activeMenuPrep) {\n var activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n detail.onOpenSubmenu(container, item, activeMenu, reverse(path));\n if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n Highlighting.highlightFirst(activeMenu);\n return updateMenuPath(container, layeredState, path);\n } else {\n Highlighting.dehighlightAll(activeMenu);\n return Optional.some(item);\n }\n });\n });\n });\n }\n };\n var collapseLeft = function (container, item) {\n var value = getItemValue(item);\n return layeredState.collapse(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(function (activeMenu) {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n var updateView = function (container, item) {\n var value = getItemValue(item);\n return layeredState.refresh(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n var onRight = function (container, item) {\n return inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n };\n var onLeft = function (container, item) {\n return inside(item.element) ? Optional.none() : collapseLeft(container, item);\n };\n var onEscape = function (container, item) {\n return collapseLeft(container, item).orThunk(function () {\n return detail.onEscape(container, item).map(function () {\n return container;\n });\n });\n };\n var keyOnItem = function (f) {\n return function (container, simulatedEvent) {\n return closest$1(simulatedEvent.getSource(), '.' + detail.markers.item).bind(function (target) {\n return container.getSystem().getByDom(target).toOptional().bind(function (item) {\n return f(container, item).map(always);\n });\n });\n };\n };\n var events = derive$2([\n run$1(focus(), 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$1(function (component, simulatedEvent) {\n var target = simulatedEvent.event.target;\n component.getSystem().getByDom(target).each(function (item) {\n var itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(function () {\n detail.onExecute(component, item);\n }, noop);\n });\n }),\n runOnAttached(function (container, _simulatedEvent) {\n setup(container).each(function (primary) {\n Replacing.append(container, premade(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightImmediately) {\n setActiveMenu(container, primary);\n }\n });\n })\n ].concat(detail.navigateOnHover ? [run$1(hover(), function (sandbox, simulatedEvent) {\n var item = simulatedEvent.event.item;\n updateView(sandbox, item);\n expandRight(sandbox, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(sandbox, item);\n })] : []));\n var getActiveItem = function (container) {\n return Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n };\n var collapseMenuApi = function (container) {\n getActiveItem(container).each(function (currentItem) {\n collapseLeft(container, currentItem);\n });\n };\n var highlightPrimary = function (container) {\n layeredState.getPrimary().each(function (primary) {\n setActiveMenu(container, primary);\n });\n };\n var extractMenuFromContainer = function (container) {\n return Optional.from(container.components()[0]).filter(function (comp) {\n return get$c(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$2(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$1 = constant$1('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 = function (text) {\n return {\n value: generate$6(collapseItem$1()),\n meta: { text: text }\n };\n };\n var tieredMenu = single({\n name: 'TieredMenu',\n configFields: [\n onStrictKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape'),\n onStrictHandler('onOpenMenu'),\n onStrictHandler('onOpenSubmenu'),\n onHandler('onRepositionMenu'),\n onHandler('onCollapseMenu'),\n defaulted('highlightImmediately', true),\n requiredObjOf('data', [\n required$1('primary'),\n required$1('menus'),\n required$1('expansions')\n ]),\n defaulted('fakeFocus', false),\n onHandler('onHighlight'),\n onHandler('onHover'),\n tieredMenuMarkers(),\n required$1('dom'),\n defaulted('navigateOnHover', true),\n defaulted('stayInDom', false),\n field('tmenuBehaviours', [\n Keying,\n Highlighting,\n Composing,\n Replacing\n ]),\n defaulted('eventOrder', {})\n ],\n apis: {\n collapseMenu: 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$6,\n extraApis: {\n tieredData: tieredData,\n singleData: singleData,\n collapseItem: collapseItem\n }\n });\n\n var makeMenu = function (detail, menuSandbox, placementSpec, menuSpec, getBounds) {\n var lazySink = function () {\n return detail.lazySink(menuSandbox);\n };\n var layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: function () {\n return belowOrAbove();\n },\n onRtl: function () {\n return belowOrAboveRtl();\n }\n }\n } : {};\n var isFirstTierSubmenu = function (triggeringPaths) {\n return triggeringPaths.length === 2;\n };\n var getSubmenuLayouts = function (triggeringPaths) {\n return isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n };\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightImmediately: menuSpec.menu.highlightImmediately,\n onEscape: function () {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(function (handler) {\n return handler(menuSandbox);\n });\n return Optional.some(true);\n },\n onExecute: function () {\n return Optional.some(true);\n },\n onOpenMenu: function (tmenu, menu) {\n Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds());\n },\n onOpenSubmenu: function (tmenu, item, submenu, triggeringPaths) {\n var sink = lazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: __assign({\n type: 'submenu',\n item: item\n }, getSubmenuLayouts(triggeringPaths))\n });\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds());\n each$1(submenuTriggers, function (st) {\n var submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, st.triggeredMenu, {\n anchor: __assign({\n type: 'submenu',\n item: st.triggeringItem\n }, submenuLayouts)\n });\n });\n }\n });\n };\n var factory$m = function (detail, spec) {\n var isPartOfRelated = function (sandbox, queryElem) {\n var related = detail.getRelated(sandbox);\n return related.exists(function (rel) {\n return isPartOf$1(rel, queryElem);\n });\n };\n var setContent = function (sandbox, thing) {\n Sandboxing.setContent(sandbox, thing);\n };\n var showAt = function (sandbox, thing, placementSpec) {\n showWithin(sandbox, thing, placementSpec, Optional.none());\n };\n var showWithin = function (sandbox, thing, placementSpec, boxElement) {\n showWithinBounds(sandbox, thing, placementSpec, function () {\n return boxElement.map(function (elem) {\n return box$1(elem);\n });\n });\n };\n var showWithinBounds = function (sandbox, thing, placementSpec, getBounds) {\n var sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, function () {\n return Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds());\n });\n Representing.setValue(sandbox, Optional.some({\n mode: 'position',\n config: placementSpec,\n getBounds: getBounds\n }));\n };\n var showMenuAt = function (sandbox, placementSpec, menuSpec) {\n showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n };\n var showMenuWithinBounds = function (sandbox, placementSpec, menuSpec, getBounds) {\n var menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Optional.some({\n mode: 'menu',\n menu: menu\n }));\n };\n var hide = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Optional.none());\n Sandboxing.close(sandbox);\n }\n };\n var getContent = function (sandbox) {\n return Sandboxing.getState(sandbox);\n };\n var reposition = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(function (state) {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n break;\n case 'position':\n var sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, sandbox, state.config, 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$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: function (sandbox) {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: function (sandbox) {\n detail.onShow(sandbox);\n },\n onClose: function (sandbox) {\n detail.onHide(sandbox);\n }\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: Optional.none()\n }\n }),\n Receiving.config({\n channels: __assign(__assign({}, receivingChannel$1(__assign({ isExtraPart: spec.isExtraPart }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel(__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({\n name: 'InlineView',\n configFields: [\n required$1('lazySink'),\n onHandler('onShow'),\n onHandler('onHide'),\n optionFunction('onEscape'),\n field('inlineBehaviours', [\n Sandboxing,\n Representing,\n Receiving\n ]),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n optionObjOf('fireRepositionEventInstead', [defaulted('event', repositionRequested())]),\n defaulted('getRelated', Optional.none),\n defaulted('isExtraPart', never),\n defaulted('eventOrder', Optional.none)\n ],\n factory: factory$m,\n apis: {\n showAt: 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 labelPrefix = 'layout-inset';\n var westEdgeX = 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 eastEdgeX = function (anchor, element) {\n return anchor.x + anchor.width - element.width;\n };\n var northY = function (anchor) {\n return anchor.y;\n };\n var southY = function (anchor, element) {\n return anchor.y + anchor.height - element.height;\n };\n var centreY = function (anchor, element) {\n return anchor.y + anchor.height / 2 - element.height / 2;\n };\n var southwest = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX(anchor, element), southY(anchor, element), bubbles.insetSouthwest(), northwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), labelPrefix);\n };\n var southeast = function (anchor, element, bubbles) {\n return nu$6(westEdgeX(anchor), southY(anchor, element), bubbles.insetSoutheast(), northeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), labelPrefix);\n };\n var northwest = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX(anchor, element), northY(anchor), bubbles.insetNorthwest(), southwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), labelPrefix);\n };\n var northeast = function (anchor, element, bubbles) {\n return nu$6(westEdgeX(anchor), northY(anchor), bubbles.insetNortheast(), southeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), labelPrefix);\n };\n var north = function (anchor, element, bubbles) {\n return nu$6(middleX(anchor, element), northY(anchor), bubbles.insetNorth(), south$3(), 'north', boundsRestriction(anchor, { top: 2 }), labelPrefix);\n };\n var south = function (anchor, element, bubbles) {\n return nu$6(middleX(anchor, element), southY(anchor, element), bubbles.insetSouth(), north$3(), 'south', boundsRestriction(anchor, { bottom: 3 }), labelPrefix);\n };\n var east = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), 'east', boundsRestriction(anchor, { right: 0 }), labelPrefix);\n };\n var west = function (anchor, element, bubbles) {\n return nu$6(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), 'west', boundsRestriction(anchor, { left: 1 }), labelPrefix);\n };\n var lookupPreserveLayout = function (lastPlacement) {\n switch (lastPlacement) {\n case 'north':\n return north;\n case 'northeast':\n return northeast;\n case 'northwest':\n return northwest;\n case 'south':\n return south;\n case 'southeast':\n return southeast;\n case 'southwest':\n return southwest;\n case 'east':\n return east;\n case 'west':\n return west;\n }\n };\n var preserve = function (anchor, element, bubbles, placee, bounds) {\n var layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n var lookupFlippedLayout = function (lastPlacement) {\n switch (lastPlacement) {\n case 'north':\n return south;\n case 'northeast':\n return southeast;\n case 'northwest':\n return southwest;\n case 'south':\n return north;\n case 'southeast':\n return northeast;\n case 'southwest':\n return northwest;\n case 'east':\n return west;\n case 'west':\n return east;\n }\n };\n var flip$2 = function (anchor, element, bubbles, placee, bounds) {\n var layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n\n var global$g = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var factory$l = function (detail) {\n var events = events$a(detail.action);\n var tag = detail.dom.tag;\n var lookupAttr = function (attr) {\n return get$e(detail.dom, 'attributes').bind(function (attrs) {\n return get$e(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({\n name: 'Button',\n factory: factory$l,\n configFields: [\n defaulted('uid', undefined),\n required$1('dom'),\n defaulted('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option('action'),\n option('role'),\n defaulted('eventOrder', {})\n ]\n });\n\n var record = function (spec) {\n var uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$5('memento');\n var get = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).getOrDie();\n };\n var getOpt = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).toOptional();\n };\n var asSpec = function () {\n return __assign(__assign({}, spec), { uid: uid });\n };\n return {\n get: get,\n getOpt: getOpt,\n asSpec: asSpec\n };\n };\n\n var global$f = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var rtlTransform = {\n 'indent': true,\n 'outdent': true,\n 'table-insert-column-after': true,\n 'table-insert-column-before': true,\n 'paste-column-after': true,\n 'paste-column-before': true,\n 'unordered-list': true,\n 'list-bull-circle': true,\n 'list-bull-default': true,\n 'list-bull-square': true\n };\n var defaultIconName = 'temporary-placeholder';\n var defaultIcon = function (icons) {\n return function () {\n return get$e(icons, defaultIconName).getOr('!not found!');\n };\n };\n var getIconName = function (name, icons) {\n var lcName = name.toLowerCase();\n if (global$f.isRtl()) {\n var rtlName = ensureTrailing(lcName, '-rtl');\n return has$2(icons, rtlName) ? rtlName : lcName;\n } else {\n return lcName;\n }\n };\n var lookupIcon = function (name, icons) {\n return get$e(icons, getIconName(name, icons));\n };\n var get$1 = function (name, iconProvider) {\n var icons = iconProvider();\n return lookupIcon(name, icons).getOrThunk(defaultIcon(icons));\n };\n var getOr = function (name, iconProvider, fallbackIcon) {\n var icons = iconProvider();\n return lookupIcon(name, icons).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n };\n var needsRtlTransform = function (iconName) {\n return global$f.isRtl() ? has$2(rtlTransform, iconName) : false;\n };\n var addFocusableBehaviour = function () {\n return config('add-focusable', [runOnAttached(function (comp) {\n child(comp.element, 'svg').each(function (svg) {\n return set$7(svg, 'focusable', 'false');\n });\n })]);\n };\n var renderIcon$2 = function (spec, iconName, icons, fallbackIcon) {\n var _a, _b;\n var rtlIconClasses = needsRtlTransform(iconName) ? ['tox-icon--flip'] : [];\n var iconHtml = get$e(icons, getIconName(iconName, icons)).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n return {\n dom: {\n tag: spec.tag,\n attributes: (_a = spec.attributes) !== null && _a !== void 0 ? _a : {},\n classes: spec.classes.concat(rtlIconClasses),\n innerHtml: iconHtml\n },\n behaviours: derive$1(__spreadArray(__spreadArray([], (_b = spec.behaviours) !== null && _b !== void 0 ? _b : []), [addFocusableBehaviour()]))\n };\n };\n var render$3 = function (iconName, spec, iconProvider, fallbackIcon) {\n if (fallbackIcon === void 0) {\n fallbackIcon = Optional.none();\n }\n return renderIcon$2(spec, iconName, iconProvider(), fallbackIcon);\n };\n var renderFirst = function (iconNames, spec, iconProvider) {\n var icons = iconProvider();\n var iconName = find$5(iconNames, function (name) {\n return has$2(icons, getIconName(name, icons));\n });\n return renderIcon$2(spec, iconName.getOr(defaultIconName), icons, Optional.none());\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$k = function (detail) {\n var memBannerText = record({\n dom: {\n tag: 'p',\n innerHtml: detail.translationProvider(detail.text)\n },\n behaviours: derive$1([Replacing.config({})])\n });\n var renderPercentBar = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n attributes: { style: 'width: ' + percent + '%' }\n }\n };\n };\n var renderPercentText = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: percent + '%'\n }\n };\n };\n var memBannerProgress = record({\n dom: {\n tag: 'div',\n classes: detail.progress ? [\n 'tox-progress-bar',\n 'tox-progress-indicator'\n ] : ['tox-progress-bar']\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(0)]\n },\n renderPercentText(0)\n ],\n behaviours: derive$1([Replacing.config({})])\n });\n var updateProgress = function (comp, percent) {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(function (progress) {\n Replacing.set(progress, [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(percent)]\n },\n renderPercentText(percent)\n ]);\n });\n }\n };\n var updateText = function (comp, text$1) {\n if (comp.getSystem().isConnected()) {\n var banner = memBannerText.get(comp);\n Replacing.set(banner, [text(text$1)]);\n }\n };\n var apis = {\n updateProgress: updateProgress,\n updateText: updateText\n };\n var iconChoices = flatten([\n detail.icon.toArray(),\n detail.level.toArray(),\n detail.level.bind(function (level) {\n return Optional.from(notificationIconMap[level]);\n }).toArray()\n ]);\n var memButton = record(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-notification__dismiss',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ]\n },\n components: [render$3('close', {\n tag: 'div',\n classes: ['tox-icon'],\n attributes: { 'aria-label': detail.translationProvider('Close') }\n }, detail.iconProvider)],\n action: function (comp) {\n detail.onAction(comp);\n }\n }));\n var notificationIconSpec = renderFirst(iconChoices, {\n tag: 'div',\n classes: ['tox-notification__icon']\n }, detail.iconProvider);\n var notificationBodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n };\n var components = [\n notificationIconSpec,\n notificationBodySpec\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: detail.level.map(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$1(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({\n name: 'Notification',\n factory: factory$k,\n configFields: [\n option('level'),\n required$1('progress'),\n required$1('icon'),\n required$1('onAction'),\n required$1('text'),\n required$1('iconProvider'),\n required$1('translationProvider'),\n defaultedBoolean('closeButton', true)\n ],\n apis: {\n updateProgress: 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 sharedBackstage = extras.backstage.shared;\n var getLayoutDirection = function (rel) {\n switch (rel) {\n case 'bc-bc':\n return south;\n case 'tc-tc':\n return north;\n case 'tc-bc':\n return north$2;\n case 'bc-tc':\n default:\n return south$2;\n }\n };\n var prePositionNotifications = function (notifications) {\n each$1(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$1(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$2([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: Optional.from(settings.icon),\n closeButton: !hideCloseButton,\n onAction: close,\n iconProvider: sharedBackstage.providers.icons,\n translationProvider: sharedBackstage.providers.translate\n }));\n var notificationWrapper = build$1(InlineView.sketch(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container']\n },\n lazySink: sharedBackstage.getSink,\n fireDismissalEventInstead: {}\n }, sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} })));\n uiMothership.add(notificationWrapper);\n if (settings.timeout > 0) {\n global$g.setTimeout(function () {\n close();\n }, settings.timeout);\n }\n return {\n close: close,\n moveTo: function (x, y) {\n InlineView.showAt(notificationWrapper, premade(notification), {\n anchor: {\n type: 'makeshift',\n x: x,\n y: y\n }\n });\n },\n moveRel: function (element, rel) {\n if (rel !== 'banner') {\n var layoutDirection_1 = getLayoutDirection(rel);\n var nodeAnchor = {\n type: 'node',\n root: body(),\n node: Optional.some(SugarElement.fromDom(element)),\n layouts: {\n onRtl: function () {\n return [layoutDirection_1];\n },\n onLtr: function () {\n return [layoutDirection_1];\n }\n }\n };\n InlineView.showAt(notificationWrapper, premade(notification), { anchor: nodeAnchor });\n } else {\n InlineView.showAt(notificationWrapper, premade(notification), { anchor: sharedBackstage.anchors.banner() });\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 (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNull(timer)) {\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n cancel();\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var global$e = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n var isBoundary = function (dom, node) {\n return dom.isBlock(node) || contains$2([\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$e(dom, function (node) {\n return isBoundary(dom, node);\n });\n return Optional.from(search.backwards(node, offset, process, rootNode));\n };\n\n var autocompleteSelector = '[data-mce-autocompleter]';\n var create$4 = function (editor, range) {\n return detect(SugarElement.fromDom(editor.selection.getNode())).getOrThunk(function () {\n var wrapper = SugarElement.fromHtml('', editor.getDoc());\n append$2(wrapper, SugarElement.fromDom(range.extractContents()));\n range.insertNode(wrapper.dom);\n parent(wrapper).each(function (elm) {\n return elm.dom.normalize();\n });\n last$1(wrapper).map(function (last) {\n editor.selection.setCursorLocation(last.dom, getEnd(last));\n });\n return wrapper;\n });\n };\n var detect = function (elm) {\n return closest$1(elm, autocompleteSelector);\n };\n\n var isValidTextRange = function (rng) {\n return rng.collapsed && rng.startContainer.nodeType === 3;\n };\n var getText = function (rng) {\n return rng.toString().replace(/\\u00A0/g, ' ').replace(/\\uFEFF/g, '');\n };\n var isWhitespace = function (chr) {\n return chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n\n var stripTriggerChar = function (text, triggerCh) {\n return text.substring(triggerCh.length);\n };\n var findChar = function (text, index, ch) {\n var i;\n for (i = index - 1; i >= 0; i--) {\n var char = text.charAt(i);\n if (isWhitespace(char)) {\n return Optional.none();\n }\n if (char === ch) {\n break;\n }\n }\n return Optional.some(i);\n };\n var findStart = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n if (!isValidTextRange(initRange)) {\n return Optional.none();\n }\n var findTriggerChIndex = function (element, offset, text) {\n return findChar(text, offset, ch).getOr(offset);\n };\n var root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerChIndex, root).bind(function (spot) {\n var range = initRange.cloneRange();\n range.setStart(spot.container, spot.offset);\n range.setEnd(initRange.endContainer, initRange.endOffset);\n if (range.collapsed) {\n return Optional.none();\n }\n var text = getText(range);\n var triggerCharIndex = text.lastIndexOf(ch);\n if (triggerCharIndex !== 0 || stripTriggerChar(text, ch).length < minChars) {\n return Optional.none();\n } else {\n return Optional.some({\n text: stripTriggerChar(text, ch),\n range: range,\n triggerChar: ch\n });\n }\n });\n };\n var getContext = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n return detect(SugarElement.fromDom(initRange.startContainer)).fold(function () {\n return findStart(dom, initRange, ch, minChars);\n }, function (elm) {\n var range = dom.createRng();\n range.selectNode(elm.dom);\n var text = getText(range);\n return Optional.some({\n range: range,\n text: stripTriggerChar(text, ch),\n triggerChar: ch\n });\n });\n };\n\n var setup$e = 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(SugarElement.fromDom(e.element)).isNone()) {\n api.cancelIfNecessary();\n }\n });\n };\n var AutocompleterEditorEvents = { setup: setup$e };\n\n var global$d = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var point = function (container, offset) {\n return {\n container: container,\n offset: offset\n };\n };\n\n var isText = function (node) {\n return node.nodeType === TEXT;\n };\n var isElement$1 = function (node) {\n return node.nodeType === ELEMENT;\n };\n var toLast = function (node) {\n if (isText(node)) {\n return point(node, node.data.length);\n } else {\n var children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point(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(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$2 = 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$2(database.lookupByChar(context.triggerChar), function (autocompleter) {\n return context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(function () {\n return isStartOfWord(editor.dom);\n })(context.range, startText, context.text);\n });\n if (autocompleters.length === 0) {\n return Optional.none();\n }\n var lookupData = global$d.all(map$2(autocompleters, function (ac) {\n var fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(function (results) {\n return {\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction,\n highlightOn: ac.highlightOn\n };\n });\n }));\n return Optional.some({\n lookupData: lookupData,\n context: context\n });\n };\n\n var separatorMenuItemSchema = objOf([\n requiredString('type'),\n optionString('text')\n ]);\n var createSeparatorMenuItem = function (spec) {\n return asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n };\n\n var autocompleterItemSchema = objOf([\n defaulted('type', 'autocompleteitem'),\n defaulted('active', false),\n defaulted('disabled', false),\n defaulted('meta', {}),\n requiredString('value'),\n optionString('text'),\n optionString('icon')\n ]);\n var autocompleterSchema = objOf([\n requiredString('type'),\n requiredString('ch'),\n defaultedNumber('minChars', 1),\n defaulted('columns', 1),\n defaultedNumber('maxResults', 10),\n optionFunction('matches'),\n requiredFunction('fetch'),\n requiredFunction('onAction'),\n defaultedArrayOf('highlightOn', [], string)\n ]);\n var createSeparatorItem = function (spec) {\n return asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n };\n var createAutocompleterItem = function (spec) {\n return asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n };\n var createAutocompleter = function (spec) {\n return asRaw('Autocompleter', autocompleterSchema, spec);\n };\n\n var baseToolbarButtonFields = [\n defaultedBoolean('disabled', false),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n var toolbarButtonSchema = objOf([\n requiredString('type'),\n requiredFunction('onAction')\n ].concat(baseToolbarButtonFields));\n var createToolbarButton = function (spec) {\n return asRaw('toolbarbutton', toolbarButtonSchema, spec);\n };\n\n var baseToolbarToggleButtonFields = [defaultedBoolean('active', false)].concat(baseToolbarButtonFields);\n var toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n requiredString('type'),\n requiredFunction('onAction')\n ]));\n var createToggleButton = function (spec) {\n return asRaw('ToggleButton', toggleButtonSchema, spec);\n };\n\n var contextBarFields = [\n defaultedFunction('predicate', never),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\n ])\n ];\n\n var contextButtonFields = baseToolbarButtonFields.concat([\n defaulted('type', 'contextformbutton'),\n defaulted('primary', false),\n requiredFunction('onAction'),\n customField('original', identity$1)\n ]);\n var contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaulted('type', 'contextformbutton'),\n defaulted('primary', false),\n requiredFunction('onAction'),\n customField('original', identity$1)\n ]);\n var launchButtonFields = baseToolbarButtonFields.concat([defaulted('type', 'contextformbutton')]);\n var launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaulted('type', 'contextformtogglebutton')]);\n var toggleOrNormal = choose$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n var contextFormSchema = objOf([\n defaulted('type', 'contextform'),\n defaultedFunction('initValue', constant$1('')),\n optionString('label'),\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n var createContextForm = function (spec) {\n return asRaw('ContextForm', contextFormSchema, spec);\n };\n\n var contextToolbarSchema = objOf([\n defaulted('type', 'contexttoolbar'),\n requiredString('items')\n ].concat(contextBarFields));\n var createContextToolbar = function (spec) {\n return asRaw('ContextToolbar', contextToolbarSchema, spec);\n };\n\n var stringArray = function (a) {\n var all = {};\n each$1(a, function (key) {\n all[key] = {};\n });\n return keys(all);\n };\n\n var register$b = function (editor) {\n var popups = editor.ui.registry.getAll().popups;\n var dataset = map(popups, function (popup) {\n return createAutocompleter(popup).fold(function (err) {\n throw new Error(formatError(err));\n }, identity$1);\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$2(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 containerClass = 'tox-collection__item-container';\n var containerColumnClass = 'tox-collection__item-container--column';\n var containerRowClass = 'tox-collection__item-container--row';\n var containerAlignRightClass = 'tox-collection__item-container--align-right';\n var containerAlignLeftClass = 'tox-collection__item-container--align-left';\n var containerValignTopClass = 'tox-collection__item-container--valign-top';\n var containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n var containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n var classForPreset = function (presets) {\n return get$e(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 = 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 = [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(presets)\n };\n };\n\n var chunk = function (rowDom, numColumns) {\n return function (items) {\n var chunks = chunk$1(items, numColumns);\n return map$2(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({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity$1\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({\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$1(items, function (item, i) {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has$2(item.dom, 'innerHtml')) {\n currentSplit.push(item);\n }\n } else {\n currentSplit.push(item);\n }\n });\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n return map$2(allSplits, 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({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(items);\n } else {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n }\n })]\n };\n };\n var forHorizontalCollection = function (initItems, _hasIcons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts.items({\n preprocess: function (items) {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n })]\n };\n };\n\n var menuHasIcons = function (xs) {\n return exists(xs, function (item) {\n return 'icon' in item && item.icon !== undefined;\n });\n };\n var handleError = function (error) {\n console.error(formatError(error));\n console.log(error);\n return Optional.none();\n };\n var createHorizontalPartialMenuWithAlloyItems = function (value, _hasIcons, items, _columns, _presets) {\n var structure = forHorizontalCollection(items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n };\n var createPartialMenuWithAlloyItems = function (value, hasIcons, items, columns, presets) {\n if (presets === 'color') {\n var structure = forSwatch(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 'auto') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 1) {\n var structure = forCollection(1, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'listpreview' && columns !== 'auto') {\n var structure = forToolbar(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n return {\n value: value,\n dom: dom$1(hasIcons, columns, presets),\n components: components,\n items: items\n };\n };\n\n var cardImageFields = [\n requiredString('type'),\n requiredString('src'),\n optionString('alt'),\n defaultedArrayOf('classes', [], string)\n ];\n var cardImageSchema = objOf(cardImageFields);\n\n var cardTextFields = [\n requiredString('type'),\n requiredString('text'),\n optionString('name'),\n defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n ];\n var cardTextSchema = objOf(cardTextFields);\n\n var itemSchema$1 = valueThunk(function () {\n return choose$2('type', {\n cardimage: cardImageSchema,\n cardtext: cardTextSchema,\n cardcontainer: cardContainerSchema\n });\n });\n var cardContainerSchema = objOf([\n requiredString('type'),\n defaultedString('direction', 'horizontal'),\n defaultedString('align', 'left'),\n defaultedString('valign', 'middle'),\n requiredArrayOf('items', itemSchema$1)\n ]);\n\n var commonMenuItemFields = [\n defaultedBoolean('disabled', false),\n optionString('text'),\n optionString('shortcut'),\n field$1('value', 'value', defaultedThunk(function () {\n return generate$6('menuitem-value');\n }), anyValue()),\n defaulted('meta', {})\n ];\n\n var cardMenuItemSchema = objOf([\n requiredString('type'),\n optionString('label'),\n requiredArrayOf('items', itemSchema$1),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedFunction('onAction', noop)\n ].concat(commonMenuItemFields));\n var createCardMenuItem = function (spec) {\n return asRaw('cardmenuitem', cardMenuItemSchema, spec);\n };\n\n var choiceMenuItemSchema = objOf([\n requiredString('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 baseFields = [\n requiredString('type'),\n requiredString('fancytype'),\n defaultedFunction('onAction', noop)\n ];\n var insertTableFields = [defaulted('initData', {})].concat(baseFields);\n var colorSwatchFields = [defaultedObjOf('initData', {}, [\n defaultedBoolean('allowCustomColors', true),\n optionArrayOf('colors', anyValue())\n ])].concat(baseFields);\n var fancyMenuItemSchema = choose$1('fancytype', {\n inserttable: insertTableFields,\n colorswatch: colorSwatchFields\n });\n var createFancyMenuItem = function (spec) {\n return asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n };\n\n var menuItemSchema = objOf([\n requiredString('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 requiredString('type'),\n requiredFunction('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 requiredString('type'),\n optionString('icon'),\n defaultedBoolean('active', false),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n requiredFunction('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$1(descendants$1, function (c) {\n var thisTop = c.dom.getBoundingClientRect().top;\n var cTop = descendants$1[0].dom.getBoundingClientRect().top;\n return Math.abs(thisTop - cTop) > margin;\n }).getOr(descendants$1.length);\n return Optional.some({\n numColumns: columnLength,\n numRows: Math.ceil(descendants$1.length / columnLength)\n });\n } else {\n return Optional.none();\n }\n };\n\n var namedEvents = function (name, handlers) {\n return derive$1([config(name, handlers)]);\n };\n var unnamedEvents = function (handlers) {\n return namedEvents(generate$6('unnamed-events'), handlers);\n };\n var SimpleBehaviours = {\n namedEvents: namedEvents,\n unnamedEvents: unnamedEvents\n };\n\n var ExclusivityChannel = generate$6('tooltip.exclusive');\n var ShowTooltipEvent = generate$6('tooltip.show');\n var HideTooltipEvent = generate$6('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$9 = 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$2(tooltipConfig.mode === 'normal' ? [\n run$1(mouseover(), function (_) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), function (_) {\n emit(comp, HideTooltipEvent);\n })\n ] : []),\n behaviours: derive$1([Replacing.config({})])\n });\n state.setTooltip(popup);\n attach(sink, popup);\n tooltipConfig.onShow(comp, popup);\n Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) });\n }\n };\n return derive$2(flatten([\n [\n run$1(ShowTooltipEvent, function (comp) {\n state.resetTimer(function () {\n show(comp);\n }, tooltipConfig.delay);\n }),\n run$1(HideTooltipEvent, function (comp) {\n state.resetTimer(function () {\n hide(comp);\n }, tooltipConfig.delay);\n }),\n run$1(receive(), function (comp, message) {\n var receivingData = message;\n if (!receivingData.universal) {\n if (contains$2(receivingData.channels, ExclusivityChannel)) {\n hide(comp);\n }\n }\n }),\n runOnDetached(function (comp) {\n hide(comp);\n })\n ],\n tooltipConfig.mode === 'normal' ? [\n run$1(focusin(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(postBlur(), function (comp) {\n emit(comp, HideTooltipEvent);\n }),\n run$1(mouseover(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ] : [\n run$1(highlight$1(), function (comp, _se) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(dehighlight$1(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ]\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$9\n });\n\n var TooltippingSchema = [\n required$1('lazySink'),\n required$1('tooltipDom'),\n defaulted('exclusive', true),\n defaulted('tooltipComponents', []),\n defaulted('delay', 300),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight'\n ]),\n defaulted('anchor', function (comp) {\n return {\n type: 'hotspot',\n hotspot: comp,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n }\n };\n }),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n var init$b = function () {\n var timer = value$1();\n var popup = value$1();\n var clearTimer = function () {\n timer.on(clearTimeout);\n };\n var resetTimer = function (f, delay) {\n clearTimer();\n timer.set(setTimeout(f, delay));\n };\n var readState = constant$1('not-implemented');\n return nu$8({\n getTooltip: popup.get,\n isShowing: popup.isSet,\n setTooltip: popup.set,\n clearTooltip: popup.clear,\n clearTimer: clearTimer,\n resetTimer: resetTimer,\n readState: readState\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$b\n });\n\n var Tooltipping = create$7({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n var escape = function (text) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n };\n\n var global$c = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$b = 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$b.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$c.DOM.getStyle(editor.getElement(), 'width'));\n };\n var getMinWidthSetting = function (editor) {\n return Optional.from(editor.getParam('min_width')).filter(isNumber);\n };\n var getMinHeightSetting = function (editor) {\n return Optional.from(editor.getParam('min_height')).filter(isNumber);\n };\n var getMaxWidthSetting = function (editor) {\n return Optional.from(editor.getParam('max_width')).filter(isNumber);\n };\n var getMaxHeightSetting = function (editor) {\n return Optional.from(editor.getParam('max_height')).filter(isNumber);\n };\n var getUserStyleFormats = function (editor) {\n return Optional.from(editor.getParam('style_formats')).filter(isArray);\n };\n var isMergeStyleFormats = function (editor) {\n return editor.getParam('style_formats_merge', false, 'boolean');\n };\n var getLineHeightFormats = function (editor) {\n return editor.getParam('lineheight_formats', '1 1.1 1.2 1.3 1.4 1.5 2', 'string').split(' ');\n };\n var getContentLanguages = function (editor) {\n return editor.getParam('content_langs', undefined, 'array');\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$2(9, function (num) {\n return editor.getParam('toolbar' + (num + 1), false, 'string');\n });\n var toolbarArray = filter$2(toolbars, function (toolbar) {\n return typeof toolbar === 'string';\n });\n return toolbarArray.length > 0 ? Optional.some(toolbarArray) : Optional.none();\n };\n var isMultipleToolbars = function (editor) {\n return getMultipleToolbarsSetting(editor).fold(function () {\n var toolbar = editor.getParam('toolbar', [], 'string[]');\n return toolbar.length > 0;\n }, always);\n };\n var ToolbarMode;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode || (ToolbarMode = {})));\n var getToolbarMode = function (editor) {\n return editor.getParam('toolbar_mode', '', 'string');\n };\n var ToolbarLocation;\n (function (ToolbarLocation) {\n ToolbarLocation['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation || (ToolbarLocation = {})));\n var getToolbarGroups = function (editor) {\n return editor.getParam('toolbar_groups', {}, 'object');\n };\n var getToolbarLocation = function (editor) {\n return editor.getParam('toolbar_location', ToolbarLocation.auto, 'string');\n };\n var isToolbarLocationBottom = function (editor) {\n return getToolbarLocation(editor) === ToolbarLocation.bottom;\n };\n var fixedContainerSelector = function (editor) {\n return editor.getParam('fixed_toolbar_container', '', 'string');\n };\n var fixedToolbarContainerTarget = function (editor) {\n return editor.getParam('fixed_toolbar_container_target');\n };\n var isToolbarPersist = function (editor) {\n return editor.getParam('toolbar_persist', false, 'boolean');\n };\n var fixedContainerTarget = function (editor) {\n if (!editor.inline) {\n return Optional.none();\n }\n var selector = fixedContainerSelector(editor);\n if (selector.length > 0) {\n return descendant(body(), selector);\n }\n var element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n var useFixedContainer = function (editor) {\n return editor.inline && fixedContainerTarget(editor).isSome();\n };\n var getUiContainer = function (editor) {\n var fixedContainer = fixedContainerTarget(editor);\n return fixedContainer.getOrThunk(function () {\n return getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement())));\n });\n };\n var isDistractionFree = function (editor) {\n return editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n };\n var isStickyToolbar = function (editor) {\n var isStickyToolbar = editor.getParam('toolbar_sticky', false, 'boolean');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n var getStickyToolbarOffset = function (editor) {\n return editor.getParam('toolbar_sticky_offset', 0, 'number');\n };\n var isDraggableModal$1 = 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(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([requiredBoolean('readonly')]);\n var broadcastReadonly = function (uiComponents, readonly) {\n var outerContainer = uiComponents.outerContainer;\n var target = outerContainer.element;\n if (readonly) {\n uiComponents.mothership.broadcastOn([dismissPopups()], { target: target });\n uiComponents.uiMothership.broadcastOn([dismissPopups()], { target: target });\n }\n uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n };\n var setupReadonlyModeSwitch = function (editor, uiComponents) {\n editor.on('init', function () {\n if (editor.mode.isReadOnly()) {\n broadcastReadonly(uiComponents, true);\n }\n });\n editor.on('SwitchMode', function () {\n return broadcastReadonly(uiComponents, editor.mode.isReadOnly());\n });\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n };\n var receivingConfig = function () {\n var _a;\n return Receiving.config({\n channels: (_a = {}, _a[ReadOnlyChannel] = {\n schema: ReadOnlyDataSchema,\n onReceive: function (comp, data) {\n Disabling.set(comp, data.readonly);\n }\n }, _a)\n });\n };\n\n var item = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n };\n var button = function (disabled) {\n return Disabling.config({ disabled: disabled });\n };\n var splitButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n };\n var toolbarButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n };\n var DisablingConfigs = {\n item: item,\n button: button,\n splitButton: splitButton,\n toolbarButton: toolbarButton\n };\n\n var runWithApi = function (info, comp) {\n var api = info.getApi(comp);\n return function (f) {\n f(api);\n };\n };\n var onControlAttached = function (info, editorOffCell) {\n return runOnAttached(function (comp) {\n var run = runWithApi(info, comp);\n run(function (api) {\n var onDestroy = info.onSetup(api);\n if (isFunction(onDestroy)) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n };\n var onControlDetached = function (getApi, editorOffCell) {\n return runOnDetached(function (comp) {\n return runWithApi(getApi, comp)(editorOffCell.get());\n });\n };\n\n var _a$1;\n var onMenuItemExecute = function (info, itemResponse) {\n return runOnExecute$1(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 = (_a$1 = {}, _a$1[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ], _a$1);\n\n var componentRenderPipeline = cat;\n var renderCommonItem = function (spec, structure, itemResponse, providersbackstage) {\n var editorOffCell = Cell(noop);\n return {\n type: 'item',\n dom: structure.dom,\n components: componentRenderPipeline(structure.optComponents),\n data: spec.data,\n eventOrder: menuItemEventOrder,\n hasSubmenu: spec.triggersSubmenu,\n itemBehaviours: derive$1([\n config('item-events', [\n onMenuItemExecute(spec, itemResponse),\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n DisablingConfigs.item(function () {\n return spec.disabled || providersbackstage.isDisabled();\n }),\n receivingConfig(),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n var buildData = function (source) {\n return {\n value: source.value,\n meta: __assign({ text: source.text.getOr('') }, source.meta)\n };\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.Env');\n\n var convertText = function (source) {\n var mac = {\n alt: '⌥',\n ctrl: '⌃',\n shift: '⇧',\n meta: '⌘',\n access: '⌃⌥'\n };\n var other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n var replace = global$a.mac ? mac : other;\n var shortcut = source.split('+');\n var updated = map$2(shortcut, function (segment) {\n var search = segment.toLowerCase().trim();\n return has$2(replace, search) ? replace[search] : segment;\n });\n return global$a.mac ? updated.join('') : updated.join('+');\n };\n\n var renderIcon$1 = function (name, icons, classes) {\n if (classes === void 0) {\n classes = [iconClass];\n }\n return render$3(name, {\n tag: 'div',\n classes: classes\n }, icons);\n };\n var renderText = function (text$1) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text(global$f.translate(text$1))]\n };\n };\n var renderHtml = function (html, classes) {\n return {\n dom: {\n tag: 'div',\n classes: classes,\n innerHtml: html\n }\n };\n };\n var renderStyledText = function (style, text$1) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [{\n dom: {\n tag: style.tag,\n styles: style.styles\n },\n components: [text(global$f.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 renderIcon$1('checkmark', icons, [checkmarkClass]);\n };\n var renderSubmenuCaret = function (icons) {\n return renderIcon$1('chevron-right', icons, [caretClass]);\n };\n var renderDownwardsCaret = function (icons) {\n return renderIcon$1('chevron-down', icons, [caretClass]);\n };\n var renderContainer = function (container, components) {\n var directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n var alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n var getValignClass = function () {\n switch (container.valign) {\n case 'top':\n return containerValignTopClass;\n case 'middle':\n return containerValignMiddleClass;\n case 'bottom':\n return containerValignBottomClass;\n }\n };\n return {\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n directionClass,\n alignClass,\n getValignClass()\n ]\n },\n components: components\n };\n };\n var renderImage = function (src, classes, alt) {\n return {\n dom: {\n tag: 'img',\n classes: classes,\n attributes: {\n src: src,\n alt: alt.getOr('')\n }\n }\n };\n };\n\n var renderColorStructure = function (item, providerBackstage, fallbackIcon) {\n var colorPickerCommand = 'custom';\n var removeColorCommand = 'remove';\n var itemText = item.ariaLabel;\n var itemValue = item.value;\n var iconSvg = item.iconContent.map(function (name) {\n return getOr(name, providerBackstage.icons, fallbackIcon);\n });\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: __spreadArray(__spreadArray([], baseDom.classes), ['tox-swatches__picker-btn']),\n innerHtml: icon\n });\n } else if (itemValue === removeColorCommand) {\n return __assign(__assign({}, baseDom), {\n classes: __spreadArray(__spreadArray([], baseDom.classes), ['tox-swatch--remove']),\n innerHtml: icon\n });\n } else {\n return __assign(__assign({}, baseDom), {\n attributes: __assign(__assign({}, baseDom.attributes), { 'data-mce-color': itemValue }),\n styles: { 'background-color': itemValue }\n });\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n var renderItemDomStructure = function (ariaLabel) {\n var domTitle = ariaLabel.map(function (label) {\n return { attributes: { title: global$f.translate(label) } };\n }).getOr({});\n return __assign({\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ]\n }, domTitle);\n };\n var renderNormalItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {\n var iconSpec = {\n tag: 'div',\n classes: [iconClass]\n };\n var renderIcon = function (iconName) {\n return render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n };\n var renderEmptyIcon = function () {\n return Optional.some({ dom: iconSpec });\n };\n var leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none();\n var checkmark = info.checkMark;\n var textRender = Optional.from(info.meta).fold(function () {\n return renderText;\n }, function (meta) {\n return has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText;\n });\n var content = info.htmlContent.fold(function () {\n return info.textContent.map(textRender);\n }, function (html) {\n return Optional.some(renderHtml(html, [textClass]));\n });\n var menuItem = {\n dom: renderItemDomStructure(info.ariaLabel),\n optComponents: [\n leftIcon,\n content,\n info.shortcutContent.map(renderShortcut),\n checkmark,\n info.caret\n ]\n };\n return menuItem;\n };\n var renderItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {\n if (fallbackIcon === void 0) {\n fallbackIcon = Optional.none();\n }\n if (info.presets === 'color') {\n return renderColorStructure(info, providersBackstage, fallbackIcon);\n } else {\n return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n }\n };\n\n var tooltipBehaviour = function (meta, sharedBackstage) {\n return get$e(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 type: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable$1 }\n };\n },\n mode: 'follow-highlight',\n onShow: function (component, _tooltip) {\n tooltipWorker(function (elm) {\n Tooltipping.setComponents(component, [external$2({ element: SugarElement.fromDom(elm) })]);\n });\n }\n })];\n }).getOr([]);\n };\n var encodeText = function (text) {\n return global$c.DOM.encode(text);\n };\n var replaceText = function (text, matchText) {\n var translated = global$f.translate(text);\n var encoded = encodeText(translated);\n if (matchText.length > 0) {\n var escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, function (match) {\n return '' + match + '';\n });\n } else {\n return encoded;\n }\n };\n var renderAutocompleteItem = function (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var structure = renderItemStructure({\n presets: presets,\n textContent: Optional.none(),\n htmlContent: useText ? spec.text.map(function (text) {\n return replaceText(text, matchText);\n }) : Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: Optional.none(),\n checkMark: Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, sharedBackstage.providers, renderIcons, spec.icon);\n return renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: constant$1({}),\n onAction: function (_api) {\n return onItemValueHandler(spec.value, spec.meta);\n },\n onSetup: constant$1(noop),\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n var render$2 = function (items, extras) {\n return map$2(items, function (item) {\n switch (item.type) {\n case 'cardcontainer':\n return renderContainer(item, render$2(item.items, extras));\n case 'cardimage':\n return renderImage(item.src, item.classes, item.alt);\n case 'cardtext':\n var shouldHighlight = item.name.exists(function (name) {\n return contains$2(extras.cardText.highlightOn, name);\n });\n var matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n return renderHtml(replaceText(item.text, matchText), item.classes);\n }\n });\n };\n var renderCardMenuItem = function (spec, itemResponse, sharedBackstage, extras) {\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n Disabling.set(component, state);\n each$1(descendants(component.element, '*'), function (elm) {\n component.getSystem().getByDom(elm).each(function (comp) {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, state);\n }\n });\n });\n }\n };\n };\n var structure = {\n dom: renderItemDomStructure(spec.label),\n optComponents: [Optional.some({\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n containerRowClass\n ]\n },\n components: render$2(spec.items, extras)\n })]\n };\n return renderCommonItem({\n data: buildData(__assign({ text: Optional.none() }, spec)),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: Optional.from(extras.itemBehaviours).getOr([])\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n var renderChoiceItem = function (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: presets,\n textContent: useText ? spec.text : Optional.none(),\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: useText ? spec.shortcut : Optional.none(),\n checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, providersBackstage, renderIcons);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: function (_api) {\n return onItemValueHandler(spec.value);\n },\n onSetup: function (api) {\n api.setActive(isSelected);\n return noop;\n },\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var parts$f = generate$3(owner$2(), parts$h());\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 normalizeHex = function (hex) {\n return removeLeading(hex, '#').toUpperCase();\n };\n var fromString$1 = function (hex) {\n return isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n };\n var getLongForm = function (hex) {\n var hexString = hex.value.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n return { value: hexString };\n };\n var extractValues = function (hex) {\n var longForm = getLongForm(hex);\n var splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n var toHex = function (component) {\n var hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n var fromRgba = function (rgbaColour) {\n var value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n var min = Math.min;\n var max = Math.max;\n var round$1 = 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$1(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$1(255 * (r + match));\n g = round$1(255 * (g + match));\n b = round$1(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n var fromHex = function (hexColour) {\n var result = extractValues(hexColour);\n var red = parseInt(result[1], 16);\n var green = parseInt(result[2], 16);\n var blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n var fromStringValues = function (red, green, blue, alpha) {\n var r = parseInt(red, 10);\n var g = parseInt(green, 10);\n var b = parseInt(blue, 10);\n var a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n var fromString = function (rgbaString) {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n var rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n var rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n var toString = function (rgba) {\n return 'rgba(' + rgba.red + ',' + rgba.green + ',' + rgba.blue + ',' + rgba.alpha + ')';\n };\n var red = rgbaColour(255, 0, 0, 1);\n\n var fireSkinLoaded$1 = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireSkinLoadError$1 = 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 hsvColour = function (hue, saturation, value) {\n return {\n hue: hue,\n saturation: saturation,\n value: value\n };\n };\n var fromRgb = function (rgbaColour) {\n var h = 0;\n var s = 0;\n var v = 0;\n var r = rgbaColour.red / 255;\n var g = rgbaColour.green / 255;\n var b = rgbaColour.blue / 255;\n var minRGB = Math.min(r, Math.min(g, b));\n var maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n var d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n var hexToHsv = function (hex) {\n return fromRgb(fromHex(hex));\n };\n var hsvToHex = function (hsv) {\n return fromRgba(fromHsv(hsv));\n };\n var anyToHex = function (color) {\n return fromString$1(color).orThunk(function () {\n return fromString(color).map(fromRgba);\n }).getOrThunk(function () {\n var canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n var canvasContext = canvas.getContext('2d');\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.fillStyle = '#FFFFFF';\n canvasContext.fillStyle = color;\n canvasContext.fillRect(0, 0, 1, 1);\n var rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n var r = rgba[0];\n var g = rgba[1];\n var b = rgba[2];\n var a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\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 for (var i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: '#' + anyToHex(colorMap[i]).value,\n type: 'choiceitem'\n });\n }\n return colors;\n };\n var getColorCols$2 = function (editor, defaultCols) {\n return editor.getParam('color_cols', defaultCols, 'number');\n };\n var hasCustomColors$1 = 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$2 = function (editor) {\n var unmapped = getColorMap(editor);\n return unmapped !== undefined ? mapColors(unmapped) : defaultColors;\n };\n var getCurrentColors = function () {\n return map$2(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$2(editor);\n var defaultCols = calcCols(colors.length);\n return getColorCols$2(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$1 = function (colors, hasCustom) {\n return function (callback) {\n callback(getColors$1(colors, hasCustom));\n };\n };\n var setIconColor = function (splitButtonApi, name, newColor) {\n var id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n splitButtonApi.setIconFill(id, newColor);\n };\n var registerTextColorButton = function (editor, name, format, tooltip, lastColor) {\n editor.ui.registry.addSplitButton(name, {\n tooltip: tooltip,\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: function (value) {\n var optCurrentRgb = Optional.from(getCurrentColor(editor, format));\n return optCurrentRgb.bind(function (currentRgb) {\n return fromString(currentRgb).map(function (rgba) {\n var currentHex = fromRgba(rgba).value;\n return contains$1(value.toLowerCase(), currentHex);\n });\n }).getOr(false);\n },\n columns: getColorCols$1(editor),\n fetch: getFetch$1(getColors$2(editor), hasCustomColors$1(editor)),\n onAction: function (_splitButtonApi) {\n if (lastColor.get() !== null) {\n applyColor(editor, format, lastColor.get(), noop);\n }\n },\n onItemAction: function (_splitButtonApi, value) {\n applyColor(editor, format, value, function (newColor) {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name: name,\n color: newColor\n });\n });\n },\n onSetup: function (splitButtonApi) {\n if (lastColor.get() !== null) {\n setIconColor(splitButtonApi, name, lastColor.get());\n }\n var handler = function (e) {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n }\n };\n editor.on('TextColorChange', handler);\n return function () {\n editor.off('TextColorChange', handler);\n };\n }\n });\n };\n var registerTextColorMenuItem = function (editor, name, format, text) {\n editor.ui.registry.addNestedMenuItem(name, {\n text: text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n onAction: function (data) {\n applyColor(editor, format, data.value, noop);\n }\n }];\n }\n });\n };\n var colorPickerDialog = function (editor) {\n return function (callback, value) {\n var isValid = false;\n var onSubmit = function (api) {\n var data = api.getData();\n var hex = data.colorpicker;\n if (isValid) {\n callback(Optional.from(hex));\n api.close();\n } else {\n editor.windowManager.alert(editor.translate([\n 'Invalid hex color code: {0}',\n hex\n ]));\n }\n };\n var onAction = function (_api, details) {\n if (details.name === 'hex-valid') {\n isValid = details.value;\n }\n };\n var initialData = { colorpicker: value };\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: initialData,\n onAction: onAction,\n onSubmit: onSubmit,\n onClose: noop,\n onCancel: function () {\n callback(Optional.none());\n }\n });\n };\n };\n var register$a = 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$2(items, function (item) {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, function (d) {\n return Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(item.value), itemResponse, providersBackstage, menuHasIcons(items)));\n });\n } else {\n return Optional.none();\n }\n }));\n };\n\n var deriveMenuMovement = function (columns, presets) {\n var menuMarkers = markers(presets);\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: true\n };\n } else if (columns === 'auto') {\n return {\n mode: 'grid',\n selector: '.' + menuMarkers.item,\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n var rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass\n };\n }\n };\n var deriveCollectionMovement = function (columns, presets) {\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: false,\n selector: '.tox-collection__item'\n };\n } else if (columns === 'auto') {\n return {\n mode: 'flatgrid',\n selector: '.' + 'tox-collection__item',\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n return {\n mode: 'matrix',\n selectors: {\n row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',\n cell: presets === 'color' ? '.' + colorClass : '.' + selectableClass\n }\n };\n }\n };\n\n var renderColorSwatchItem = function (spec, backstage) {\n var items = getColorItems(spec, backstage);\n var columns = backstage.colorinput.getColorCols();\n var presets = 'color';\n var menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, function (value) {\n spec.onAction({ value: value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, backstage.shared.providers);\n var widgetSpec = __assign(__assign({}, menuSpec), {\n markers: markers(presets),\n movement: deriveMenuMovement(columns, presets)\n });\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget(Menu.sketch(widgetSpec))]\n };\n };\n var getColorItems = function (spec, backstage) {\n var useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n return spec.initData.colors.fold(function () {\n return getColors$1(backstage.colorinput.getColors(), useCustomColors);\n }, function (colors) {\n return colors.concat(getAdditionalColors(useCustomColors));\n });\n };\n\n var cellOverEvent = generate$6('cell-over');\n var cellExecuteEvent = generate$6('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$1(mouseover(), Focusing.focus),\n run$1(execute$5(), emitExecute),\n run$1(click(), onClick),\n run$1(tap(), onClick)\n ]),\n Toggling.config({\n toggleClass: 'tox-insert-table-picker__selected',\n toggleOnExecute: false\n }),\n Focusing.config({ onFocus: emitCellOver })\n ])\n });\n };\n 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$3(cells, function (cellRow) {\n return map$2(cellRow, premade);\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$6('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$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget({\n dom: {\n tag: 'div',\n classes: ['tox-insert-table-picker']\n },\n components: makeComponents(cells).concat(memLabel.asSpec()),\n behaviours: derive$1([\n config('insert-table-picker', [\n runWithTarget(cellOverEvent, function (c, t, e) {\n var row = e.event.row;\n var col = e.event.col;\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row, col)]);\n }),\n runWithTarget(cellExecuteEvent, function (c, _, e) {\n spec.onAction({\n numRows: e.event.row + 1,\n numColumns: e.event.col + 1\n });\n emit(c, sandboxClose());\n })\n ]),\n Keying.config({\n initSize: {\n numRows: numRows,\n numColumns: numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n var fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n var renderFancyMenuItem = function (spec, backstage) {\n return get$e(fancyMenuItems, spec.fancytype).map(function (render) {\n return render(spec, backstage);\n });\n };\n\n var renderNestedItem = function (spec, itemResponse, providersBackstage, renderIcons, downwardsCaret) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n if (downwardsCaret === void 0) {\n downwardsCaret = false;\n }\n var caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.some(caret),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n data: buildData(spec),\n getApi: getApi,\n disabled: spec.disabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n var renderNormalItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.none(),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n data: buildData(spec),\n getApi: getApi,\n disabled: spec.disabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n var renderSeparatorItem = function (spec) {\n var innerHtml = spec.text.fold(function () {\n return {};\n }, function (text) {\n return { innerHtml: text };\n });\n return {\n type: 'separator',\n dom: __assign({\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n }, innerHtml),\n components: []\n };\n };\n\n var renderToggleMenuItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n checkMark: Optional.some(renderCheckmark(providersBackstage.icons)),\n caret: Optional.none(),\n shortcutContent: spec.shortcut,\n presets: 'normal',\n meta: spec.meta\n }, providersBackstage, renderIcons);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var autocomplete = renderAutocompleteItem;\n var separator$3 = renderSeparatorItem;\n var normal = renderNormalItem;\n var nested = renderNestedItem;\n var toggle$1 = renderToggleMenuItem;\n var fancy = renderFancyMenuItem;\n var card = renderCardMenuItem;\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n var createMenuItemFromBridge = function (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) {\n var providersBackstage = backstage.shared.providers;\n var parseForHorizontalMenu = function (menuitem) {\n return !isHorizontalMenu ? menuitem : __assign(__assign({}, menuitem), {\n shortcut: Optional.none(),\n icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n });\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, function (d) {\n return Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, function (d) {\n return Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu));\n });\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, function (d) {\n return Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, function (d) {\n return Optional.some(separator$3(d));\n });\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, function (d) {\n return fancy(parseForHorizontalMenu(d), backstage);\n });\n default: {\n console.error('Unknown item in general menu', item);\n return Optional.none();\n }\n }\n };\n var createAutocompleteItems = function (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) {\n var renderText = columns === 1;\n var renderIcons = !renderText || menuHasIcons(items);\n return cat(map$2(items, function (item) {\n switch (item.type) {\n case 'separator':\n return createSeparatorItem(item).fold(handleError, function (d) {\n return Optional.some(separator$3(d));\n });\n case 'cardmenuitem':\n return createCardMenuItem(item).fold(handleError, function (d) {\n return Optional.some(card(__assign(__assign({}, d), {\n onAction: function (api) {\n d.onAction(api);\n onItemValueHandler(d.value, d.meta);\n }\n }), itemResponse, sharedBackstage, {\n itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage),\n cardText: {\n matchText: matchText,\n highlightOn: highlightOn\n }\n }));\n });\n case 'autocompleteitem':\n default:\n return createAutocompleterItem(item).fold(handleError, function (d) {\n return Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons));\n });\n }\n }));\n };\n var createPartialMenu = function (value, items, itemResponse, backstage, isHorizontalMenu) {\n var hasIcons = menuHasIcons(items);\n var alloyItems = cat(map$2(items, function (item) {\n var itemHasIcon = function (i) {\n return isHorizontalMenu ? !has$2(i, '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$2();\n var movement = deriveMenuMovement(columns, presets);\n var menuMarkers = markers(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$9 = function (editor, sharedBackstage) {\n var activeAutocompleter = value$1();\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$1(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(lastElement.getOr(SugarElement.fromDom(editor.selection.getNode()))).each(unwrap);\n hideIfNecessary();\n activeAutocompleter.clear();\n processingAction.set(false);\n }\n };\n var getAutocompleters = cached(function () {\n return register$b(editor);\n });\n var getCombinedItems = function (triggerChar, matches) {\n var columns = findMap(matches, function (m) {\n return Optional.from(m.columns);\n }).getOr(1);\n return bind$3(matches, function (match) {\n var choices = match.items;\n return createAutocompleteItems(choices, match.matchText, function (itemValue, itemMeta) {\n var nr = editor.selection.getRng();\n getContext(editor.dom, nr, triggerChar).fold(function () {\n return console.error('Lost context. Cursor probably moved');\n }, function (_a) {\n var range = _a.range;\n var autocompleterApi = {\n hide: function () {\n cancelIfNecessary();\n },\n reload: function (fetchOptions) {\n hideIfNecessary();\n load(fetchOptions);\n }\n };\n processingAction.set(true);\n match.onAction(autocompleterApi, range, itemValue, itemMeta);\n processingAction.set(false);\n });\n }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match.highlightOn);\n });\n };\n var commenceIfNecessary = function (context) {\n if (!isActive()) {\n var wrapper = create$4(editor, context.range);\n activeAutocompleter.set({\n triggerChar: context.triggerChar,\n element: wrapper,\n matchLength: context.text.length\n });\n processingAction.set(false);\n }\n };\n var display = function (ac, context, lookupData, items) {\n ac.matchLength = context.text.length;\n var columns = findMap(lookupData, function (ld) {\n return Optional.from(ld.columns);\n }).getOr(1);\n InlineView.showAt(autocompleter, Menu.sketch(createMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, 'normal'), columns, FocusMode.ContentFocus, 'normal')), {\n anchor: {\n type: 'node',\n root: SugarElement.fromDom(editor.getBody()),\n node: Optional.from(ac.element)\n }\n });\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$2(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(function (e) {\n if (e.which === 27) {\n return;\n }\n load();\n }, 50);\n var autocompleterUiApi = {\n onKeypress: onKeypress,\n cancelIfNecessary: cancelIfNecessary,\n isMenuOpen: isMenuOpen,\n isActive: isActive,\n isProcessingAction: processingAction.get,\n getView: function () {\n return InlineView.getContent(autocompleter);\n }\n };\n if (editor.hasPlugin('rtc') === false) {\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n }\n };\n var Autocompleter = { register: register$9 };\n\n var closest = function (scope, selector, isRoot) {\n return closest$1(scope, selector, isRoot).isSome();\n };\n\n var DelayedFunction = function (fun, delay) {\n var ref = null;\n var schedule = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n ref = setTimeout(function () {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n var cancel = function () {\n if (ref !== null) {\n clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel: cancel,\n schedule: schedule\n };\n };\n\n var SIGNIFICANT_MOVE = 5;\n var LONGPRESS_DELAY = 400;\n var getTouch = function (event) {\n var raw = event.raw;\n if (raw.touches === undefined || raw.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(raw.touches[0]);\n };\n var isFarEnough = function (touch, data) {\n var distX = Math.abs(touch.clientX - data.x);\n var distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n var monitor = function (settings) {\n var startData = value$1();\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(data);\n });\n return Optional.none();\n };\n var handleTouchmove = function (event) {\n longpress$1.cancel();\n getTouch(event).each(function (touch) {\n startData.on(function (data) {\n if (isFarEnough(touch, data)) {\n startData.clear();\n }\n });\n });\n return Optional.none();\n };\n var handleTouchend = function (event) {\n longpress$1.cancel();\n var isSame = function (data) {\n return eq(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([\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$e(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$2([\n 'input',\n 'textarea'\n ], name$2(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n };\n var isFirefox = function () {\n return detect$1().browser.isFirefox();\n };\n var settingsSchema = objOfOnly([\n requiredFunction('triggerEvent'),\n defaulted('stopBackspace', true)\n ]);\n var bindFocus = function (container, handler) {\n if (isFirefox()) {\n return capture(container, 'focus', handler);\n } else {\n return bind(container, 'focusin', handler);\n }\n };\n var bindBlur = function (container, handler) {\n if (isFirefox()) {\n return capture(container, 'blur', handler);\n } else {\n return bind(container, 'focusout', handler);\n }\n };\n var setup$d = function (container, rawSettings) {\n var settings = asRawOrDie$1('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$2(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'transitioncancel',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), function (type) {\n return bind(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 = value$1();\n var onPaste = bind(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(setTimeout(function () {\n settings.triggerEvent(postPaste(), event);\n }, 0));\n });\n var onKeydown = bind(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 = value$1();\n var onFocusOut = bindBlur(container, function (event) {\n var stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(setTimeout(function () {\n settings.triggerEvent(postBlur(), event);\n }, 0));\n });\n var unbind = function () {\n each$1(simpleEvents, function (e) {\n e.unbind();\n });\n onKeydown.unbind();\n onFocusIn.unbind();\n onFocusOut.unbind();\n onPaste.unbind();\n pasteTimeout.on(clearTimeout);\n focusoutTimeout.on(clearTimeout);\n };\n return { unbind: unbind };\n };\n\n var derive = function (rawEvent, rawTarget) {\n var source = get$e(rawEvent, 'target').getOr(rawTarget);\n return Cell(source);\n };\n\n var fromSource = function (event, source) {\n var stopper = Cell(false);\n var cutter = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n var cut = function () {\n cutter.set(true);\n };\n return {\n stop: stop,\n cut: cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event: event,\n setSource: source.set,\n getSource: source.get\n };\n };\n var fromExternal = function (event) {\n var stopper = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n return {\n stop: stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: never,\n event: event,\n setSource: die('Cannot set source of a broadcasted event'),\n getSource: die('Cannot get source of a broadcasted event')\n };\n };\n\n var adt$1 = 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$1.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$1.stopped();\n } else if (simulatedEvent.isCut()) {\n logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n } else {\n return parent(handlerInfo.element).fold(function () {\n logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n }, function (parent) {\n logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.resume(parent);\n });\n }\n });\n };\n var doTriggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, source, logger) {\n return doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, function (parent) {\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger);\n }, never);\n };\n var triggerHandler = function (lookup, eventType, rawEvent, target, logger) {\n var source = derive(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$1(listeners, function (listener) {\n var descHandler = listener.descHandler;\n var handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n var triggerUntilStopped = function (lookup, eventType, rawEvent, logger) {\n return triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n };\n var triggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, logger) {\n var source = derive(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n var eventHandler = function (element, descHandler) {\n return {\n element: element,\n descHandler: descHandler\n };\n };\n var broadcastHandler = function (id, handler) {\n return {\n id: id,\n descHandler: handler\n };\n };\n var EventRegistry = function () {\n var registry = {};\n var registerId = function (extraArgs, id, events) {\n each(events, function (v, k) {\n var handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n var findHandler = function (handlers, elem) {\n return read$1(elem).fold(function () {\n return Optional.none();\n }, function (id) {\n return handlers.bind(function (h) {\n return get$e(h, id);\n }).map(function (descHandler) {\n return eventHandler(elem, descHandler);\n });\n });\n };\n var filterByType = function (type) {\n return get$e(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$e(registry, type);\n return closest$4(target, function (elem) {\n return findHandler(handlers, elem);\n }, isAboveRoot);\n };\n var unregisterId = function (id) {\n each(registry, function (handlersById, _eventName) {\n if (has$2(handlersById, id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId: registerId,\n unregisterId: unregisterId,\n filterByType: filterByType,\n find: find\n };\n };\n\n var Registry = function () {\n var events = EventRegistry();\n var components = {};\n var readOrTag = function (component) {\n var elem = component.element;\n return read$1(elem).getOrThunk(function () {\n return write('uid-', component.element);\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$e(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$j = 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$2(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n var Container = single({\n name: 'Container',\n factory: factory$j,\n configFields: [\n defaulted('components', []),\n field('containerBehaviours', []),\n defaulted('events', {}),\n defaulted('domModification', {}),\n defaulted('eventOrder', {})\n ]\n });\n\n var takeover = function (root) {\n var isAboveRoot = function (el) {\n return parent(root.element).fold(always, function (parent) {\n return eq(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$d(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$1('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$3(target);\n }, function (_alloyId) {\n monitorEvent(focus$4(), target, function (logger) {\n triggerHandler(lookup, focus$4(), {\n originator: originator,\n kill: noop,\n prevent: noop,\n target: target\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: function (comp, simulatedEvent) {\n systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n },\n getByUid: function (uid) {\n return getByUid(uid);\n },\n getByDom: function (elem) {\n return getByDom(elem);\n },\n build: build$1,\n addToGui: function (c) {\n add(c);\n },\n removeFromGui: function (c) {\n remove(c);\n },\n addToWorld: function (c) {\n addToWorld(c);\n },\n removeFromWorld: function (c) {\n removeFromWorld(c);\n },\n broadcast: function (message) {\n broadcast$1(message);\n },\n broadcastOn: function (channels, message) {\n broadcastOn(channels, message);\n },\n broadcastEvent: function (eventName, event) {\n broadcastEvent(eventName, event);\n },\n isConnected: always\n };\n var addToWorld = function (component) {\n component.connect(systemApi);\n if (!isText$1(component.element)) {\n registry.register(component);\n each$1(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n }\n };\n var removeFromWorld = function (component) {\n if (!isText$1(component.element)) {\n each$1(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n var add = function (component) {\n attach(root, component);\n };\n var remove = function (component) {\n detach(component);\n };\n var destroy = function () {\n domEvents.unbind();\n remove$7(root.element);\n };\n var broadcastData = function (data) {\n var receivers = registry.filter(receive());\n each$1(receivers, function (receiver) {\n var descHandler = receiver.descHandler;\n var handler = getCurried(descHandler);\n handler(data);\n });\n };\n var broadcast$1 = function (message) {\n broadcastData({\n universal: true,\n data: message\n });\n };\n var broadcastOn = function (channels, message) {\n broadcastData({\n universal: false,\n channels: channels,\n data: message\n });\n };\n var broadcastEvent = function (eventName, event) {\n var listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n var getByUid = function (uid) {\n return registry.getById(uid).fold(function () {\n return Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.'));\n }, Result.value);\n };\n var getByDom = function (elem) {\n var uid = read$1(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root: root,\n element: root.element,\n destroy: destroy,\n add: add,\n remove: remove,\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$2(spec.items, backstage.interpreter)\n };\n };\n\n var schema$l = constant$1([\n defaulted('prefix', 'form-field'),\n field('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n var parts$e = constant$1([\n optional({\n schema: [required$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: [required$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: function (spec) {\n var excludeFactory = exclude(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [required$1('factory')],\n name: 'field'\n })\n ]);\n\n var factory$i = 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$2([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$6(detail.prefix);\n ps.label().each(function (label) {\n set$7(label.element, 'for', id);\n set$7(field.element, 'id', id);\n });\n ps['aria-descriptor']().each(function (descriptor) {\n var descriptorId = generate$6(detail.prefix);\n set$7(descriptor.element, 'id', descriptorId);\n set$7(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({\n name: 'FormField',\n configFields: schema$l(),\n partFields: parts$e(),\n factory: factory$i,\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$2 = function (base, tabConfig) {\n return nu$7({\n attributes: wrapAll([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n };\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$2\n });\n\n var TabstopSchema = [defaulted('tabAttr', 'data-alloy-tabstop')];\n\n var Tabstopping = create$7({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var renderFormFieldWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n var spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n var renderFormField = function (pLabel, pField) {\n return renderFormFieldWith(pLabel, pField, [], []);\n };\n var renderFormFieldSpecWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n return {\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n };\n };\n var renderFormFieldDom = function () {\n return renderFormFieldDomWith([]);\n };\n var renderFormFieldDomWith = function (extraClasses) {\n return {\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n };\n };\n var renderLabel$2 = 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$6('form-component-change');\n var formCloseEvent = generate$6('form-close');\n var formCancelEvent = generate$6('form-cancel');\n var formActionEvent = generate$6('form-action');\n var formSubmitEvent = generate$6('form-submit');\n var formBlockEvent = generate$6('form-block');\n var formUnblockEvent = generate$6('form-unblock');\n var formTabChangeEvent = generate$6('form-tabchange');\n var formResizeEvent = generate$6('form-resize');\n\n var renderCollection = function (spec, providersBackstage) {\n var _a;\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var runOnItem = function (f) {\n return function (comp, se) {\n closest$1(se.event.target, '[data-collection-item-value]').each(function (target) {\n f(comp, se, target, get$c(target, 'data-collection-item-value'));\n });\n };\n };\n var setContents = function (comp, items) {\n var htmlLines = map$2(items, function (item) {\n var itemText = global$f.translate(item.text);\n var textContent = spec.columns === 1 ? '
' + itemText + '
' : '';\n var iconContent = '
' + item.icon + '
';\n var mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n var ariaLabel = itemText.replace(/\\_| \\- |\\-/g, function (match) {\n return mapItemName[match];\n });\n var disabledClass = providersBackstage.isDisabled() ? ' tox-collection__item--state-disabled' : '';\n return '
' + iconContent + textContent + '
';\n });\n var chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n var html = map$2(chunks, function (ch) {\n return '
' + ch.join('') + '
';\n });\n set$8(comp.element, html.join(''));\n };\n var onClick = runOnItem(function (comp, se, tgt, itemValue) {\n se.stop();\n if (!providersBackstage.isDisabled()) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }\n });\n var collectionEvents = [\n run$1(mouseover(), runOnItem(function (comp, se, tgt) {\n focus$3(tgt);\n })),\n run$1(click(), onClick),\n run$1(tap(), onClick),\n run$1(focusin(), runOnItem(function (comp, se, tgt) {\n descendant(comp.element, '.' + activeClass).each(function (currentActive) {\n remove$3(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run$1(focusout(), runOnItem(function (comp) {\n descendant(comp.element, '.' + activeClass).each(function (currentActive) {\n remove$3(currentActive, activeClass);\n });\n })),\n runOnExecute$1(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$2(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$1 },\n behaviours: derive$1([\n Disabling.config({\n disabled: providersBackstage.isDisabled,\n onDisabled: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$7(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n remove$3(childElm, 'tox-collection__item--state-disabled');\n remove$6(childElm, 'aria-disabled');\n });\n }\n }),\n receivingConfig(),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: []\n },\n onSetValue: function (comp, items) {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(function (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n }\n emit(comp, formResizeEvent);\n }\n }),\n Tabstopping.config({}),\n Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n config('collection-events', collectionEvents)\n ]),\n eventOrder: (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ], _a)\n });\n var extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n var schema$k = constant$1([\n option('data'),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('tag', 'input'),\n defaulted('inputClasses', []),\n onHandler('onSetValue'),\n defaulted('styles', {}),\n defaulted('eventOrder', {}),\n field('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted('selectOnFocus', true)\n ]);\n 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$9(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$9(input.element);\n },\n setValue: function (input, data) {\n var current = get$9(input.element);\n if (current !== data) {\n set$5(input.element, data);\n }\n }\n }),\n onSetValue: detail.onSetValue\n })]));\n };\n var dom = 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$h = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: dom(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n };\n };\n var Input = single({\n name: 'Input',\n configFields: schema$k(),\n factory: factory$h\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$2 = module.exports.boltExport;\n\n var nu$3 = function (baseFn) {\n var data = Optional.none();\n var callbacks = [];\n var map = function (f) {\n return nu$3(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each$1(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure$1 = function (a) {\n return nu$3(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$3,\n pure: pure$1\n };\n\n var errorReporter = function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n };\n var make$5 = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make$5(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make$5(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make$5(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$5(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$2 = function (baseFn) {\n return make$5(function () {\n return new Promise$2(baseFn);\n });\n };\n var pure = function (a) {\n return make$5(function () {\n return Promise$2.resolve(a);\n });\n };\n var Future = {\n nu: nu$2,\n pure: pure\n };\n\n var ariaElements = [\n 'input',\n 'textarea'\n ];\n var isAriaElement = function (elem) {\n var name = name$2(elem);\n return contains$2(ariaElements, name);\n };\n var markValid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element);\n remove$3(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element)) {\n set$7(component.element, 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set$8(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$7(component.element, 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set$8(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 = 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(elem, invalidConfig.invalidClass);\n };\n\n var InvalidateApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n markValid: markValid,\n markInvalid: markInvalid,\n query: query,\n run: run,\n isInvalid: isInvalid\n });\n\n var events$8 = function (invalidConfig, invalidState) {\n return invalidConfig.validator.map(function (validatorInfo) {\n return derive$2([run$1(validatorInfo.onEvent, function (component) {\n run(component, invalidConfig, invalidState).get(identity$1);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(function (component) {\n run(component, invalidConfig, invalidState).get(noop);\n })] : []));\n }).getOr({});\n };\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\n });\n\n var InvalidateSchema = [\n required$1('invalidClass'),\n defaulted('getRoot', Optional.none),\n optionObjOf('notify', [\n defaulted('aria', 'alert'),\n defaulted('getContainer', Optional.none),\n defaulted('validHtml', ''),\n onHandler('onValid'),\n onHandler('onInvalid'),\n onHandler('onValidate')\n ]),\n optionObjOf('validator', [\n required$1('validate'),\n defaulted('onEvent', 'input'),\n defaulted('validateOnLoad', true)\n ])\n ];\n\n var Invalidating = create$7({\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 = [requiredOf('others', setOf(Result.value, anyValue()))];\n\n var init$a = 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$e(coupled, name).getOrThunk(function () {\n var builder = get$e(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$1({});\n return nu$8({\n readState: readState,\n getOrCreate: getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n var Coupling = create$7({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n var suffix = constant$1('sink');\n var partType$1 = constant$1(optional({\n name: suffix(),\n overrides: constant$1({\n dom: { tag: 'div' },\n behaviours: derive$1([Positioning.config({ useFixed: always })]),\n events: derive$2([\n cutter(keydown()),\n cutter(mousedown()),\n cutter(click())\n ])\n })\n }));\n\n 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 type = 'hotspot';\n var overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(function () {\n return {\n type: type,\n hotspot: hotspot,\n overrides: overrides\n };\n }, function (layouts) {\n return {\n type: type,\n hotspot: hotspot,\n overrides: overrides,\n layouts: layouts\n };\n });\n };\n var fetch = function (detail, mapFetch, component) {\n var fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n var openF = function (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) {\n var futureData = fetch(detail, mapFetch, component);\n var getLazySink = getSink(component, detail);\n return futureData.map(function (tdata) {\n return tdata.bind(function (data) {\n return Optional.from(tieredMenu.sketch(__assign(__assign({}, externals.menu()), {\n uid: generate$5(''),\n data: data,\n highlightImmediately: highlightOnOpen === HighlightOnOpen.HighlightFirst,\n onOpenMenu: function (tmenu, menu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, menu, { anchor: anchor });\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: function (tmenu, item, submenu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item: item\n }\n });\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, primaryMenu, { anchor: anchor });\n each$1(submenuTriggers, function (st) {\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem\n }\n });\n });\n },\n onEscape: function () {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n })));\n });\n });\n };\n var open = 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 = 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 : open;\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$6(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$1 = 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$1(data, queryElem) || isPartOf$1(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$1({ isExtraPart: never })), receivingChannel({ 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('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n };\n\n var schema$j = constant$1([\n required$1('dom'),\n required$1('fetch'),\n onHandler('onOpen'),\n onKeyboardHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n field('dropdownBehaviours', [\n Toggling,\n Coupling,\n Keying,\n Focusing\n ]),\n required$1('toggleClass'),\n defaulted('eventOrder', {}),\n option('lazySink'),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n option('role')\n ].concat(sandboxFields()));\n var parts$d = constant$1([\n external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: function (detail) {\n return { onExecute: detail.onExecute };\n }\n }),\n partType$1()\n ]);\n\n var factory$g = function (detail, components, _spec, externals) {\n var _a;\n var lookupAttr = function (attr) {\n return get$e(detail.dom, 'attributes').bind(function (attrs) {\n return get$e(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, identity$1, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var apis = {\n expand: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, identity$1, comp, externals, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, identity$1, 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, identity$1, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n }\n },\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n var triggerExecute = function (comp, _se) {\n emitExecute(comp);\n return Optional.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.dropdownBehaviours, [\n Toggling.config({\n toggleClass: detail.toggleClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n return makeSandbox$1(detail, hotspot, {\n onOpen: function () {\n return Toggling.on(hotspot);\n },\n onClose: function () {\n return Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: function (comp, _se) {\n if (Dropdown.isOpen(comp)) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Optional.some(true);\n },\n onEscape: function (comp, _se) {\n if (Dropdown.isOpen(comp)) {\n Dropdown.close(comp);\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n }\n }),\n Focusing.config({})\n ]),\n events: events$a(Optional.some(action)),\n eventOrder: __assign(__assign({}, detail.eventOrder), (_a = {}, _a[execute$5()] = [\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({\n name: 'Dropdown',\n configFields: schema$j(),\n partFields: parts$d(),\n factory: factory$g,\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$1 = function () {\n return nu$7({\n styles: {\n '-webkit-user-select': 'none',\n 'user-select': 'none',\n '-ms-user-select': 'none',\n '-moz-user-select': '-moz-none'\n },\n attributes: { unselectable: 'on' }\n });\n };\n var events$7 = function () {\n return derive$2([abort(selectstart(), always)]);\n };\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$7,\n exhibit: exhibit$1\n });\n\n var Unselecting = create$7({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n var renderPanelButton = function (spec, sharedBackstage) {\n return Dropdown.sketch({\n dom: spec.dom,\n components: spec.components,\n toggleClass: 'mce-active',\n dropdownBehaviours: derive$1([\n DisablingConfigs.button(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, function (value) {\n spec.onItemAction(comp, value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })));\n });\n },\n parts: { menu: part(false, 1, spec.presets) }\n });\n };\n\n var colorInputChangeEvent = generate$6('color-input-change');\n var colorSwatchChangeEvent = generate$6('color-swatch-change');\n var colorPickerCancelEvent = generate$6('color-picker-cancel');\n var renderColorInput = function (spec, sharedBackstage, colorInputBackstage) {\n var pField = FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n onSetValue: function (c) {\n return Invalidating.run(c).get(noop);\n },\n inputBehaviours: derive$1([\n Disabling.config({ disabled: sharedBackstage.providers.isDisabled }),\n receivingConfig(),\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: function (comp) {\n return parent(comp.element);\n },\n notify: {\n onValid: function (comp) {\n var val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: function (input) {\n var inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n var span = SugarElement.fromTag('span');\n set$6(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$2(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$2,\n southeast$2,\n south$2\n ];\n },\n onLtr: function () {\n return [\n southeast$2,\n southwest$2,\n south$2\n ];\n }\n },\n components: [],\n fetch: getFetch$1(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$1(colorInputChangeEvent, function (comp, se) {\n memColorButton.getOpt(comp).each(function (colorButton) {\n set$6(colorButton.element, 'background-color', se.event.color);\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run$1(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$1(colorPickerCancelEvent, function (comp, _se) {\n FormField.getField(comp).each(function (_field) {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n var labelPart = optional({\n schema: [required$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$2([\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$1({ dom: { styles: { position: 'absolute' } } }),\n overrides: function (detail) {\n return {\n events: derive$2([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n var spectrumPart = required({\n schema: [customField('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$2([\n run$1(touchstart(), setValueFrom),\n run$1(touchmove(), setValueFrom),\n run$1(mousedown(), setValueFrom),\n run$1(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$1(_sliderChangeEvent);\n var isTouchEvent$1 = function (evt) {\n return evt.type.indexOf('touch') !== -1;\n };\n var getEventSource = function (simulatedEvent) {\n var evt = simulatedEvent.event.raw;\n if (isTouchEvent$1(evt)) {\n var touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(function (t) {\n return SugarPosition(t.clientX, t.clientY);\n }) : Optional.none();\n } else {\n var mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(function (me) {\n return SugarPosition(me.clientX, me.clientY);\n }) : Optional.none();\n }\n };\n\n var t = 'top', r = '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 = function (detail, max, min) {\n return max(detail) - min(detail);\n };\n var xRange = function (detail) {\n return range(detail, maxX, minX);\n };\n var yRange = function (detail) {\n return range(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);\n };\n var hasTEdge = function (detail) {\n return hasEdge(detail, t);\n };\n var hasBEdge = function (detail) {\n return hasEdge(detail, b);\n };\n var currentValue = function (detail) {\n return detail.model.value.get();\n };\n\n var xValue = function (x) {\n return { x: x };\n };\n var yValue = function (y) {\n return { y: y };\n };\n var xyValue = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var fireSliderChange$3 = function (component, value) {\n emitWith(component, sliderChangeEvent(), { value: value });\n };\n var setToTLEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n var setToTEdge = function (edge, detail) {\n fireSliderChange$3(edge, yValue(min1Y(detail)));\n };\n var setToTEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n var setToTREdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n var setToREdge = function (edge, detail) {\n fireSliderChange$3(edge, xValue(max1X(detail)));\n };\n var setToREdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail)));\n };\n var setToBREdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n var setToBEdge = function (edge, detail) {\n fireSliderChange$3(edge, yValue(max1Y(detail)));\n };\n var setToBEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n var setToBLEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n var setToLEdge = function (edge, detail) {\n fireSliderChange$3(edge, xValue(min1X(detail)));\n };\n var setToLEdgeXY = function (edge, detail) {\n fireSliderChange$3(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$2 = 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 = 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(component);\n return getBoundsProperty(bounds, left);\n };\n var getMaxXBounds = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, right);\n };\n var getMinYBounds = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, top);\n };\n var getMaxYBounds = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, bottom);\n };\n var getXScreenRange = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, width);\n };\n var getYScreenRange = function (component) {\n var bounds = getBounds(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(component);\n var spectrumBounds = getBounds(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(component);\n var spectrumBounds = getBounds(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$2 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$2 = function (x) {\n return { x: x };\n };\n var findValueOfOffset$1 = 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$2 = function (spectrum, detail, value) {\n var xValue = findValueOfOffset$1(spectrum, detail, value);\n var sliderVal = sliderValue$2(xValue);\n fireSliderChange$2(spectrum, sliderVal);\n return xValue;\n };\n var setToMin$2 = function (spectrum, detail) {\n var min = minX(detail);\n fireSliderChange$2(spectrum, sliderValue$2(min));\n };\n var setToMax$2 = function (spectrum, detail) {\n var max = maxX(detail);\n fireSliderChange$2(spectrum, sliderValue$2(max));\n };\n var moveBy$2 = 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$2(spectrum, sliderValue$2(xValue));\n return Optional.some(xValue);\n };\n var handleMovement$2 = function (direction) {\n return function (spectrum, detail) {\n return moveBy$2(direction, spectrum, detail).map(always);\n };\n };\n var getValueFromEvent$2 = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.left;\n });\n };\n var findOffsetOfValue$1 = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getXScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Optional.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Optional.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n var findPositionOfValue$1 = 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$2 = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var thumbRadius = get$7(thumb.element) / 2;\n set$6(thumb.element, 'left', pos - thumbRadius + 'px');\n };\n var onLeft$2 = handleMovement$2(-1);\n var onRight$2 = handleMovement$2(1);\n var onUp$2 = Optional.none;\n var onDown$2 = Optional.none;\n var edgeActions$2 = {\n 'top-left': Optional.none(),\n 'top': Optional.none(),\n 'top-right': Optional.none(),\n 'right': Optional.some(setToREdge),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.none(),\n 'bottom-left': Optional.none(),\n 'left': Optional.some(setToLEdge)\n };\n\n var HorizontalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$2,\n setToMin: setToMin$2,\n setToMax: setToMax$2,\n findValueOfOffset: findValueOfOffset$1,\n getValueFromEvent: getValueFromEvent$2,\n findPositionOfValue: findPositionOfValue$1,\n setPositionFromValue: setPositionFromValue$2,\n onLeft: onLeft$2,\n onRight: onRight$2,\n onUp: onUp$2,\n onDown: onDown$2,\n edgeActions: edgeActions$2\n });\n\n var fireSliderChange$1 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$1 = function (y) {\n return { y: y };\n };\n var findValueOfOffset = 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(spectrum, detail, value);\n var sliderVal = sliderValue$1(yValue);\n fireSliderChange$1(spectrum, sliderVal);\n return yValue;\n };\n var setToMin$1 = function (spectrum, detail) {\n var min = minY(detail);\n fireSliderChange$1(spectrum, sliderValue$1(min));\n };\n var setToMax$1 = function (spectrum, detail) {\n var max = maxY(detail);\n fireSliderChange$1(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$1(spectrum, sliderValue$1(yValue));\n return Optional.some(yValue);\n };\n var handleMovement$1 = function (direction) {\n return function (spectrum, detail) {\n return moveBy$1(direction, spectrum, detail).map(always);\n };\n };\n var getValueFromEvent$1 = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.top;\n });\n };\n var findOffsetOfValue = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getYScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Optional.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Optional.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n var findPositionOfValue = function (slider, spectrum, value, minEdge, maxEdge, detail) {\n var offset = findOffsetOfValue(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(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n var thumbRadius = get$8(thumb.element) / 2;\n set$6(thumb.element, 'top', pos - thumbRadius + 'px');\n };\n var onLeft$1 = Optional.none;\n var onRight$1 = Optional.none;\n var onUp$1 = handleMovement$1(-1);\n var onDown$1 = handleMovement$1(1);\n var edgeActions$1 = {\n 'top-left': Optional.none(),\n 'top': Optional.some(setToTEdge),\n 'top-right': Optional.none(),\n 'right': Optional.none(),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.some(setToBEdge),\n 'bottom-left': Optional.none(),\n 'left': Optional.none()\n };\n\n var VerticalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$1,\n setToMin: setToMin$1,\n setToMax: setToMax$1,\n findValueOfOffset: findValueOfOffset,\n getValueFromEvent: getValueFromEvent$1,\n findPositionOfValue: findPositionOfValue,\n setPositionFromValue: setPositionFromValue$1,\n onLeft: onLeft$1,\n onRight: onRight$1,\n onUp: onUp$1,\n onDown: onDown$1,\n edgeActions: edgeActions$1\n });\n\n var fireSliderChange = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var setValueFrom = function (spectrum, detail, value) {\n var xValue = findValueOfOffset$1(spectrum, detail, value.left);\n var yValue = findValueOfOffset(spectrum, detail, value.top);\n var val = sliderValue(xValue, yValue);\n fireSliderChange(spectrum, val);\n return val;\n };\n var moveBy = 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(spectrum, sliderValue(xValue, yValue));\n return Optional.some(xValue);\n };\n var handleMovement = function (direction, isVerticalMovement) {\n return function (spectrum, detail) {\n return moveBy(direction, isVerticalMovement, spectrum, detail).map(always);\n };\n };\n var setToMin = function (spectrum, detail) {\n var mX = minX(detail);\n var mY = minY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n var setToMax = function (spectrum, detail) {\n var mX = maxX(detail);\n var mY = maxY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n var getValueFromEvent = function (simulatedEvent) {\n return getEventSource(simulatedEvent);\n };\n var setPositionFromValue = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var yPos = findPositionOfValue(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$8(thumb.element) / 2;\n set$6(thumb.element, 'left', xPos - thumbXRadius + 'px');\n set$6(thumb.element, 'top', yPos - thumbYRadius + 'px');\n };\n var onLeft = handleMovement(-1, false);\n var onRight = handleMovement(1, false);\n var onUp = handleMovement(-1, true);\n var onDown = handleMovement(1, true);\n var edgeActions = {\n 'top-left': Optional.some(setToTLEdgeXY),\n 'top': Optional.some(setToTEdgeXY),\n 'top-right': Optional.some(setToTREdgeXY),\n 'right': Optional.some(setToREdgeXY),\n 'bottom-right': Optional.some(setToBREdgeXY),\n 'bottom': Optional.some(setToBEdgeXY),\n 'bottom-left': Optional.some(setToBLEdgeXY),\n 'left': Optional.some(setToLEdgeXY)\n };\n\n var TwoDModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom,\n setToMin: setToMin,\n setToMax: setToMax,\n getValueFromEvent: getValueFromEvent,\n setPositionFromValue: setPositionFromValue,\n onLeft: onLeft,\n onRight: onRight,\n onUp: onUp,\n onDown: onDown,\n edgeActions: edgeActions\n });\n\n var SliderSchema = [\n defaulted('stepSize', 1),\n defaulted('onChange', noop),\n defaulted('onChoose', noop),\n defaulted('onInit', noop),\n defaulted('onDragStart', noop),\n defaulted('onDragEnd', noop),\n defaulted('snapToGrid', false),\n defaulted('rounded', true),\n option('snapStart'),\n requiredOf('model', choose$1('mode', {\n x: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n customField('value', function (spec) {\n return Cell(spec.mode.minX);\n }),\n required$1('getInitialValue'),\n output$1('manager', HorizontalModel)\n ],\n y: [\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', function (spec) {\n return Cell(spec.mode.minY);\n }),\n required$1('getInitialValue'),\n output$1('manager', VerticalModel)\n ],\n xy: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', function (spec) {\n return Cell({\n x: spec.mode.minX,\n y: spec.mode.minY\n });\n }),\n required$1('getInitialValue'),\n output$1('manager', TwoDModel)\n ]\n })),\n field('sliderBehaviours', [\n Keying,\n Representing\n ]),\n customField('mouseIsDown', function () {\n return Cell(false);\n })\n ];\n\n var sketch$2 = function (detail, components, _spec, _externals) {\n var _a;\n var getThumb = function (component) {\n return getPartOrDie(component, detail, 'thumb');\n };\n var getSpectrum = function (component) {\n return getPartOrDie(component, detail, 'spectrum');\n };\n var getLeftEdge = function (component) {\n return getPart(component, detail, 'left-edge');\n };\n var getRightEdge = function (component) {\n return getPart(component, detail, 'right-edge');\n };\n var getTopEdge = function (component) {\n return getPart(component, detail, 'top-edge');\n };\n var getBottomEdge = function (component) {\n return getPart(component, detail, 'bottom-edge');\n };\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var refresh = function (slider, thumb) {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge: getLeftEdge,\n getRightEdge: getRightEdge,\n getTopEdge: getTopEdge,\n getBottomEdge: getBottomEdge,\n getSpectrum: getSpectrum\n });\n };\n var setValue = function (slider, newValue) {\n modelDetail.value.set(newValue);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n };\n var changeValue = function (slider, newValue) {\n setValue(slider, newValue);\n var thumb = getThumb(slider);\n detail.onChange(slider, thumb, newValue);\n return Optional.some(true);\n };\n var resetToMin = function (slider) {\n model.setToMin(slider, detail);\n };\n var resetToMax = function (slider) {\n model.setToMax(slider, detail);\n };\n var choose = function (slider) {\n var fireOnChoose = function () {\n getPart(slider, detail, 'thumb').each(function (thumb) {\n var value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n var wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n var onDragStart = function (slider, simulatedEvent) {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n var onDragEnd = function (slider, simulatedEvent) {\n simulatedEvent.stop();\n detail.onDragEnd(slider, getThumb(slider));\n choose(slider);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: function (slider) {\n return getPart(slider, detail, 'spectrum').map(Keying.focusIn).map(always);\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_) {\n return modelDetail.value.get();\n }\n }\n }),\n Receiving.config({ channels: (_a = {}, _a[mouseReleased()] = { onReceive: choose }, _a) })\n ]),\n events: derive$2([\n run$1(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$1(touchstart(), onDragStart),\n run$1(touchend(), onDragEnd),\n run$1(mousedown(), onDragStart),\n run$1(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin: resetToMin,\n resetToMax: resetToMax,\n setValue: setValue,\n refresh: refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n var Slider = composite({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch$2,\n apis: {\n setValue: function (apis, slider, value) {\n apis.setValue(slider, value);\n },\n resetToMin: function (apis, slider) {\n apis.resetToMin(slider);\n },\n resetToMax: function (apis, slider) {\n apis.resetToMax(slider);\n },\n refresh: function (apis, slider) {\n apis.refresh(slider);\n }\n }\n });\n\n var fieldsUpdate = generate$6('rgb-hex-update');\n var sliderUpdate = generate$6('slider-update');\n var paletteUpdate = generate$6('palette-update');\n\n var sliderFactory = function (translate, getClass) {\n var spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n var thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-thumb')],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider')],\n attributes: { role: 'presentation' }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant$1({ y: 0 })\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: function (slider, _thumb, value) {\n emitWith(slider, sliderUpdate, { value: value });\n }\n });\n };\n\n var owner$1 = 'form';\n var schema$i = [field('formBehaviours', [Representing])];\n var getPartName$1 = function (name) {\n return '';\n };\n var sketch$1 = function (fSpec) {\n var parts = function () {\n var record = [];\n var field = function (name, config) {\n record.push(name);\n return generateOne$1(owner$1, getPartName$1(name), config);\n };\n return {\n field: field,\n record: constant$1(record)\n };\n }();\n var spec = fSpec(parts);\n var partNames = parts.record();\n var fieldParts = map$2(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName$1(n)\n });\n });\n return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n };\n var toResult = 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(resPs, function (resPThunk, pName) {\n return resPThunk().bind(function (v) {\n var opt = Composing.getCurrent(v);\n return toResult(opt, new Error('Cannot find a current component to extract the value from for form part \\'' + pName + '\\': ' + element(v.element)));\n }).map(Representing.getValue);\n });\n },\n setValue: function (form, values) {\n each(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$6('valid-input');\n var invalidInput = generate$6('invalid-input');\n var validatingInput = generate$6('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$6(preview.element, 'background-color', '#' + hex.value);\n });\n };\n var factory = function () {\n var state = {\n red: Cell(Optional.some(255)),\n green: Cell(Optional.some(255)),\n blue: Cell(Optional.some(255)),\n hex: Cell(Optional.some('ffffff'))\n };\n var copyHexToRgb = function (form, hex) {\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n var get = function (prop) {\n return state[prop].get();\n };\n var set = function (prop, value) {\n state[prop].set(value);\n };\n var getValueRgb = function () {\n return get('red').bind(function (red) {\n return get('green').bind(function (green) {\n return get('blue').map(function (blue) {\n return rgbaColour(red, green, blue, 1);\n });\n });\n });\n };\n var setValueRgb = function (rgb) {\n var red = rgb.red;\n var green = rgb.green;\n var blue = rgb.blue;\n set('red', Optional.some(red));\n set('green', Optional.some(green));\n set('blue', Optional.some(blue));\n };\n var onInvalidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event;\n if (data.type !== 'hex') {\n set(data.type, Optional.none());\n } else {\n onInvalidHexx(form);\n }\n };\n var onValidHex = function (form, value) {\n onValidHexx(form);\n var hex = hexColour(value);\n set('hex', Optional.some(value));\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate, { hex: hex });\n updatePreview(form, hex);\n };\n var onValidRgb = function (form, prop, value) {\n var val = parseInt(value, 10);\n set(prop, Optional.some(val));\n getValueRgb().each(function (rgb) {\n var hex = copyRgbToHex(form, rgb);\n emitWith(form, fieldsUpdate, { hex: hex });\n updatePreview(form, hex);\n });\n };\n var isHexInputEvent = function (data) {\n return data.type === 'hex';\n };\n var onValidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event;\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value);\n } else {\n onValidRgb(form, data.type, data.value);\n }\n };\n var formPartStrings = function (key) {\n return {\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n };\n };\n var redStrings = formPartStrings('red');\n var greenStrings = formPartStrings('green');\n var blueStrings = formPartStrings('blue');\n var hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'form',\n classes: [getClass('rgb-form')],\n attributes: { 'aria-label': translate('aria.color.picker') }\n },\n components: [\n parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n memPreview.asSpec()\n ],\n formBehaviours: derive$1([\n Invalidating.config({ invalidClass: getClass('form-invalid') }),\n config('rgb-form-events', [\n run$1(validInput, onValidInput),\n run$1(invalidInput, onInvalidInput),\n run$1(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({\n factory: factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: function (apis, form, hex) {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n var paletteFactory = function (_translate, getClass) {\n var spectrumPart = Slider.parts.spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n var thumbPart = Slider.parts.thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: '
'\n }\n });\n var setColour = function (canvas, rgba) {\n var width = canvas.width, height = canvas.height;\n var ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n var grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = grdWhite;\n ctx.fillRect(0, 0, width, height);\n var grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n ctx.fillStyle = grdBlack;\n ctx.fillRect(0, 0, width, height);\n };\n var setPaletteHue = function (slider, hue) {\n var canvas = slider.components()[0].element.dom;\n var hsv = hsvColour(hue, 100, 100);\n var rgba = fromHsv(hsv);\n setColour(canvas, toString(rgba));\n };\n var setPaletteThumb = function (slider, hex) {\n var hsv = fromRgb(fromHex(hex));\n Slider.setValue(slider, {\n x: hsv.saturation,\n y: 100 - hsv.value\n });\n };\n var factory = function (_detail) {\n var getInitialValue = constant$1({\n x: 0,\n y: 0\n });\n var onChange = function (slider, _thumb, value) {\n emitWith(slider, paletteUpdate, { value: value });\n };\n var onInit = function (_slider, _thumb, spectrum, _value) {\n setColour(spectrum.element.dom, toString(red));\n };\n var sliderBehaviours = derive$1([\n Composing.config({ find: Optional.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue: getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange: onChange,\n onInit: onInit,\n sliderBehaviours: sliderBehaviours\n });\n };\n var saturationBrightnessPaletteSketcher = single({\n factory: factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setHue: function (_apis, slider, hue) {\n setPaletteHue(slider, hue);\n },\n setThumb: function (_apis, slider, hex) {\n setPaletteThumb(slider, hex);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n var makeFactory = function (translate, getClass) {\n var factory = function (detail) {\n var rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);\n var sbPalette = paletteFactory(translate, getClass);\n var hueSliderToDegrees = function (hue) {\n return (100 - hue) / 100 * 360;\n };\n var hueDegreesToSlider = function (hue) {\n return 100 - hue / 360 * 100;\n };\n var state = {\n paletteRgba: Cell(red),\n paletteHue: Cell(0)\n };\n var memSlider = record(sliderFactory(translate, getClass));\n var memPalette = record(sbPalette.sketch({}));\n var memRgb = record(rgbForm.sketch({}));\n var updatePalette = function (anyInSystem, _hex, hue) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n sbPalette.setHue(palette, hue);\n });\n };\n var updateFields = function (anyInSystem, hex) {\n memRgb.getOpt(anyInSystem).each(function (form) {\n rgbForm.updateHex(form, hex);\n });\n };\n var updateSlider = function (anyInSystem, _hex, hue) {\n memSlider.getOpt(anyInSystem).each(function (slider) {\n Slider.setValue(slider, { y: hueDegreesToSlider(hue) });\n });\n };\n var updatePaletteThumb = function (anyInSystem, hex) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n sbPalette.setThumb(palette, hex);\n });\n };\n var updateState = function (hex, hue) {\n var rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n state.paletteHue.set(hue);\n };\n var runUpdates = function (anyInSystem, hex, hue, updates) {\n updateState(hex, hue);\n each$1(updates, function (update) {\n update(anyInSystem, hex, hue);\n });\n };\n var onPaletteUpdate = function () {\n var updates = [updateFields];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event.value;\n var oldHue = state.paletteHue.get();\n var newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n var newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, oldHue, updates);\n };\n };\n var onSliderUpdate = function () {\n var updates = [\n updatePalette,\n updateFields\n ];\n return function (form, simulatedEvent) {\n var hue = hueSliderToDegrees(simulatedEvent.event.value.y);\n var oldRgb = state.paletteRgba.get();\n var oldHsv = fromRgb(oldRgb);\n var newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n var newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, hue, updates);\n };\n };\n var onFieldsUpdate = function () {\n var updates = [\n updatePalette,\n updateSlider,\n updatePaletteThumb\n ];\n return function (form, simulatedEvent) {\n var hex = simulatedEvent.event.hex;\n var hsv = hexToHsv(hex);\n runUpdates(form, hex, hsv.hue, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n memSlider.asSpec(),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run$1(fieldsUpdate, onFieldsUpdate()),\n run$1(paletteUpdate, onPaletteUpdate()),\n run$1(sliderUpdate, onSliderUpdate())\n ]),\n Composing.config({\n find: function (comp) {\n return memRgb.getOpt(comp);\n }\n }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n var colourPickerSketcher = single({\n name: 'ColourPicker',\n configFields: [\n required$1('dom'),\n defaulted('onValidHex', noop),\n defaulted('onInvalidHex', noop)\n ],\n factory: factory\n });\n return colourPickerSketcher;\n };\n\n var self$1 = function () {\n return Composing.config({ find: Optional.some });\n };\n var memento$1 = 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$2(comp.element, index).bind(function (element) {\n return comp.getSystem().getByDom(element).toOptional();\n });\n }\n });\n };\n var ComposingConfigs = {\n self: self$1,\n memento: memento$1,\n childAt: childAt\n };\n\n var english = {\n 'colorcustom.rgb.red.label': 'R',\n 'colorcustom.rgb.red.description': 'Red component',\n 'colorcustom.rgb.green.label': 'G',\n 'colorcustom.rgb.green.description': 'Green component',\n 'colorcustom.rgb.blue.label': 'B',\n 'colorcustom.rgb.blue.description': 'Blue component',\n 'colorcustom.rgb.hex.label': '#',\n 'colorcustom.rgb.hex.description': 'Hex color code',\n 'colorcustom.rgb.range': 'Range 0 to 255',\n 'colorcustom.sb.saturation': 'Saturation',\n 'colorcustom.sb.brightness': 'Brightness',\n 'colorcustom.sb.picker': 'Saturation and Brightness Picker',\n 'colorcustom.sb.palette': 'Saturation and Brightness Palette',\n 'colorcustom.sb.instructions': 'Use arrow keys to select saturation and brightness, on x and y axes',\n 'colorcustom.hue.hue': 'Hue',\n 'colorcustom.hue.slider': 'Hue Slider',\n 'colorcustom.hue.palette': 'Hue Palette',\n 'colorcustom.hue.instructions': 'Use arrow keys to select a hue',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n var getEnglishText = function (key) {\n return english[key];\n };\n var translate$1 = function (key) {\n return getEnglishText(key);\n };\n var renderColorPicker = function (_spec) {\n var getClass = function (key) {\n return 'tox-' + key;\n };\n var colourPickerFactory = makeFactory(translate$1, getClass);\n var onValidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n var onInvalidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n var memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex: onValidHex,\n onInvalidHex: onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n var optHex = optRgbForm.bind(function (rgbForm) {\n var formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(function (hex) {\n return '#' + hex;\n }).getOr('');\n },\n setValue: function (comp, newValue) {\n var pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n var m = pattern.exec(newValue);\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(function () {\n console.log('Can not find form');\n }, function (rgbForm) {\n Representing.setValue(rgbForm, { hex: Optional.from(m[1]).getOr('') });\n Form.getField(rgbForm, 'hex').each(function (hexField) {\n emit(hexField, input());\n });\n });\n }\n }\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n var isOldCustomEditor = function (spec) {\n return has$2(spec, 'init');\n };\n var renderCustomEditor = function (spec) {\n var editorApi = value$1();\n var memReplaced = record({ dom: { tag: spec.tag } });\n var initialValue = value$1();\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('custom-editor-events', [runOnAttached(function (component) {\n memReplaced.getOpt(component).each(function (ta) {\n (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$7.load(spec.scriptId, spec.scriptUrl).then(function (init) {\n return init(ta.element.dom, spec.settings);\n })).then(function (ea) {\n initialValue.on(function (cvalue) {\n ea.setValue(cvalue);\n });\n initialValue.clear();\n editorApi.set(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(value);\n }, function (ed) {\n return ed.setValue(value);\n });\n }\n }\n }),\n ComposingConfigs.self()\n ]),\n components: [memReplaced.asSpec()]\n };\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var processors = objOf([\n defaulted('preprocess', identity$1),\n defaulted('postprocess', identity$1)\n ]);\n var memento = function (mem, rawProcessors) {\n var ps = asRawOrDie$1('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$9, set$5);\n };\n var domHtml = function (optInitialValue) {\n return withElement(optInitialValue, get$d, set$8);\n };\n var memory = function (initialValue) {\n return Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialValue\n }\n });\n };\n var RepresentingConfigs = {\n memento: memento,\n withElement: withElement,\n withComp: withComp,\n domValue: domValue,\n domHtml: domHtml,\n memory: memory\n };\n\n var defaultImageFileTypes = 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp';\n var filterByExtension = function (files, providersBackstage) {\n var allowedImageFileTypes = global$6.explode(providersBackstage.getSetting('images_file_types', defaultImageFileTypes, 'string'));\n var isFileInAllowedTypes = function (file) {\n return exists(allowedImageFileTypes, function (type) {\n return endsWith(file.name.toLowerCase(), '.' + type.toLowerCase());\n });\n };\n return filter$2(from(files), isFileInAllowedTypes);\n };\n var renderDropZone = function (spec, providersBackstage) {\n var stopper = function (_, se) {\n se.stop();\n };\n var sequence = function (actions) {\n return function (comp, se) {\n each$1(actions, function (a) {\n a(comp, se);\n });\n };\n };\n var onDrop = function (comp, se) {\n if (!Disabling.isDisabled(comp)) {\n var transferEvent = se.event.raw;\n handleFiles(comp, transferEvent.dataTransfer.files);\n }\n };\n var onSelect = function (component, simulatedEvent) {\n var input = simulatedEvent.event.raw.target;\n handleFiles(component, input.files);\n };\n var handleFiles = function (component, files) {\n Representing.setValue(component, filterByExtension(files, providersBackstage));\n emitWith(component, formChangeEvent, { name: spec.name });\n };\n var memInput = record({\n dom: {\n tag: 'input',\n attributes: {\n type: 'file',\n accept: 'image/*'\n },\n styles: { display: 'none' }\n },\n behaviours: derive$1([config('input-file-events', [\n cutter(click()),\n cutter(tap())\n ])])\n });\n var renderField = function (s) {\n return {\n uid: s.uid,\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n RepresentingConfigs.memory([]),\n ComposingConfigs.self(),\n Disabling.config({}),\n Toggling.config({\n toggleClass: 'dragenter',\n toggleOnExecute: false\n }),\n config('dropzone-events', [\n run$1('dragenter', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragleave', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragover', stopper),\n run$1('drop', sequence([\n stopper,\n onDrop\n ])),\n run$1(change(), onSelect)\n ])\n ]),\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dropzone'],\n styles: {}\n },\n components: [\n {\n dom: {\n tag: 'p',\n innerHtml: providersBackstage.translate('Drop an image here')\n }\n },\n Button.sketch({\n dom: {\n tag: 'button',\n innerHtml: providersBackstage.translate('Browse for an image'),\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [memInput.asSpec()],\n action: function (comp) {\n var inputComp = memInput.get(comp);\n inputComp.element.dom.click();\n },\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig()\n ])\n })\n ]\n }]\n };\n };\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(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$2(spec.items, backstage.interpreter)\n };\n };\n\n var beforeObject = generate$6('alloy-fake-before-tabstop');\n var afterObject = generate$6('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 = function (container, targetComp) {\n var target = targetComp.element;\n if (has(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n var isPseudoStop = function (element) {\n return closest(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), never);\n };\n\n var platformNeedsSandboxing = !(detect$1().browser.isIE() || detect$1().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$7(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$7(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$2(label, providersBackstage);\n });\n var factory = function (newSpec) {\n return craft({\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes: attributes\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n RepresentingConfigs.withComp(Optional.none(), sourcing.getValue, sourcing.setValue)\n ])\n });\n };\n var pField = FormField.parts.field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n var create$3 = function (width, height) {\n return resize$3(document.createElement('canvas'), width, height);\n };\n var clone = function (canvas) {\n var tCanvas = create$3(canvas.width, canvas.height);\n var ctx = get2dContext(tCanvas);\n ctx.drawImage(canvas, 0, 0);\n return tCanvas;\n };\n var get2dContext = function (canvas) {\n return canvas.getContext('2d');\n };\n var resize$3 = function (canvas, width, height) {\n canvas.width = width;\n canvas.height = height;\n return canvas;\n };\n\n var getWidth$1 = function (image) {\n return image.naturalWidth || image.width;\n };\n var getHeight$1 = function (image) {\n return image.naturalHeight || image.height;\n };\n\n var promise = function () {\n var Promise = function (fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('not a function');\n }\n this._state = null;\n this._value = null;\n this._deferreds = [];\n doResolve(fn, bind(resolve, this), bind(reject, this));\n };\n var anyWindow = window;\n var asap = Promise.immediateFn || typeof anyWindow.setImmediate === 'function' && anyWindow.setImmediate || function (fn) {\n return setTimeout(fn, 1);\n };\n var bind = function (fn, thisArg) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fn.apply(thisArg, args);\n };\n };\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n };\n function handle(deferred) {\n var me = this;\n if (this._state === null) {\n this._deferreds.push(deferred);\n return;\n }\n asap(function () {\n var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (me._state ? deferred.resolve : deferred.reject)(me._value);\n return;\n }\n var ret;\n try {\n ret = cb(me._value);\n } catch (e) {\n deferred.reject(e);\n return;\n }\n deferred.resolve(ret);\n });\n }\n function resolve(newValue) {\n try {\n if (newValue === this) {\n throw new TypeError('A promise cannot be resolved with itself.');\n }\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (typeof then === 'function') {\n doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n return;\n }\n }\n this._state = true;\n this._value = newValue;\n finale.call(this);\n } catch (e) {\n reject.call(this, e);\n }\n }\n function reject(newValue) {\n this._state = false;\n this._value = newValue;\n finale.call(this);\n }\n function finale() {\n for (var _i = 0, _a = this._deferreds; _i < _a.length; _i++) {\n var deferred = _a[_i];\n handle.call(this, deferred);\n }\n this._deferreds = [];\n }\n function Handler(onFulfilled, onRejected, resolve, reject) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n }\n var doResolve = function (fn, onFulfilled, onRejected) {\n var done = false;\n try {\n fn(function (value) {\n if (done) {\n return;\n }\n done = true;\n onFulfilled(value);\n }, function (reason) {\n if (done) {\n return;\n }\n done = true;\n onRejected(reason);\n });\n } catch (ex) {\n if (done) {\n return;\n }\n done = true;\n onRejected(ex);\n }\n };\n Promise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var me = this;\n return new Promise(function (resolve, reject) {\n handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n });\n };\n Promise.all = function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\n var remaining = args.length;\n var res = function (i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n };\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (reason) {\n return new Promise(function (resolve, reject) {\n reject(reason);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n value.then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var Promise$1 = window.Promise ? window.Promise : promise();\n\n var blobToImage = function (blob) {\n return new Promise$1(function (resolve, reject) {\n var blobUrl = URL.createObjectURL(blob);\n var image = new Image();\n var removeListeners = function () {\n image.removeEventListener('load', loaded);\n image.removeEventListener('error', error);\n };\n var loaded = function () {\n removeListeners();\n resolve(image);\n };\n var error = function () {\n removeListeners();\n reject('Unable to load data of type ' + blob.type + ': ' + blobUrl);\n };\n image.addEventListener('load', loaded);\n image.addEventListener('error', error);\n image.src = blobUrl;\n if (image.complete) {\n setTimeout(loaded, 0);\n }\n });\n };\n var dataUriToBlobSync = function (uri) {\n var data = uri.split(',');\n var matches = /data:([^;]+)/.exec(data[0]);\n if (!matches) {\n return Optional.none();\n }\n var mimetype = matches[1];\n var base64 = data[1];\n var sliceSize = 1024;\n var byteCharacters = atob(base64);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n var bytes = new Array(end - begin);\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n return Optional.some(new Blob(byteArrays, { type: mimetype }));\n };\n var dataUriToBlob = function (uri) {\n return new Promise$1(function (resolve, reject) {\n dataUriToBlobSync(uri).fold(function () {\n reject('uri is not base64: ' + uri);\n }, resolve);\n });\n };\n var canvasToBlob = function (canvas, type, quality) {\n type = type || 'image/png';\n if (isFunction(HTMLCanvasElement.prototype.toBlob)) {\n return new Promise$1(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n } else {\n reject();\n }\n }, type, quality);\n });\n } else {\n return dataUriToBlob(canvas.toDataURL(type, quality));\n }\n };\n var canvasToDataURL = function (canvas, type, quality) {\n type = type || 'image/png';\n return canvas.toDataURL(type, quality);\n };\n var blobToCanvas = function (blob) {\n return blobToImage(blob).then(function (image) {\n revokeImageUrl(image);\n var canvas = create$3(getWidth$1(image), getHeight$1(image));\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0);\n return canvas;\n });\n };\n var blobToDataUri = function (blob) {\n return new Promise$1(function (resolve) {\n var reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n var revokeImageUrl = function (image) {\n URL.revokeObjectURL(image.src);\n };\n\n var create$2 = function (getCanvas, blob, uri) {\n var initialType = blob.type;\n var getType = constant$1(initialType);\n var toBlob = function () {\n return Promise$1.resolve(blob);\n };\n var toDataURL = constant$1(uri);\n var toBase64 = function () {\n return uri.split(',')[1];\n };\n var toAdjustedBlob = function (type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToBlob(canvas, type, quality);\n });\n };\n var toAdjustedDataURL = function (type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToDataURL(canvas, type, quality);\n });\n };\n var toAdjustedBase64 = function (type, quality) {\n return toAdjustedDataURL(type, quality).then(function (dataurl) {\n return dataurl.split(',')[1];\n });\n };\n var toCanvas = function () {\n return getCanvas.then(clone);\n };\n return {\n getType: getType,\n toBlob: toBlob,\n toDataURL: toDataURL,\n toBase64: toBase64,\n toAdjustedBlob: toAdjustedBlob,\n toAdjustedDataURL: toAdjustedDataURL,\n toAdjustedBase64: toAdjustedBase64,\n toCanvas: toCanvas\n };\n };\n var fromBlob = function (blob) {\n return blobToDataUri(blob).then(function (uri) {\n return create$2(blobToCanvas(blob), blob, uri);\n });\n };\n var fromCanvas = function (canvas, type) {\n return canvasToBlob(canvas, type).then(function (blob) {\n return create$2(Promise$1.resolve(canvas), blob, canvas.toDataURL());\n });\n };\n\n var blobToImageResult = function (blob) {\n return fromBlob(blob);\n };\n\n var clamp = function (value, min, max) {\n var parsedValue = typeof value === 'string' ? parseFloat(value) : value;\n if (parsedValue > max) {\n parsedValue = max;\n } else if (parsedValue < min) {\n parsedValue = min;\n }\n return parsedValue;\n };\n var identity = function () {\n return [\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ];\n };\n var DELTA_INDEX = [\n 0,\n 0.01,\n 0.02,\n 0.04,\n 0.05,\n 0.06,\n 0.07,\n 0.08,\n 0.1,\n 0.11,\n 0.12,\n 0.14,\n 0.15,\n 0.16,\n 0.17,\n 0.18,\n 0.2,\n 0.21,\n 0.22,\n 0.24,\n 0.25,\n 0.27,\n 0.28,\n 0.3,\n 0.32,\n 0.34,\n 0.36,\n 0.38,\n 0.4,\n 0.42,\n 0.44,\n 0.46,\n 0.48,\n 0.5,\n 0.53,\n 0.56,\n 0.59,\n 0.62,\n 0.65,\n 0.68,\n 0.71,\n 0.74,\n 0.77,\n 0.8,\n 0.83,\n 0.86,\n 0.89,\n 0.92,\n 0.95,\n 0.98,\n 1,\n 1.06,\n 1.12,\n 1.18,\n 1.24,\n 1.3,\n 1.36,\n 1.42,\n 1.48,\n 1.54,\n 1.6,\n 1.66,\n 1.72,\n 1.78,\n 1.84,\n 1.9,\n 1.96,\n 2,\n 2.12,\n 2.25,\n 2.37,\n 2.5,\n 2.62,\n 2.75,\n 2.87,\n 3,\n 3.2,\n 3.4,\n 3.6,\n 3.8,\n 4,\n 4.3,\n 4.7,\n 4.9,\n 5,\n 5.5,\n 6,\n 6.5,\n 6.8,\n 7,\n 7.3,\n 7.5,\n 7.8,\n 8,\n 8.4,\n 8.7,\n 9,\n 9.4,\n 9.6,\n 9.8,\n 10\n ];\n var multiply = function (matrix1, matrix2) {\n var col = [];\n var out = new Array(25);\n var val;\n for (var i = 0; i < 5; i++) {\n for (var j = 0; j < 5; j++) {\n col[j] = matrix2[j + i * 5];\n }\n for (var j = 0; j < 5; j++) {\n val = 0;\n for (var k = 0; k < 5; k++) {\n val += matrix1[j + k * 5] * col[k];\n }\n out[j + i * 5] = val;\n }\n }\n return out;\n };\n var adjustContrast = function (matrix, value) {\n var x;\n value = clamp(value, -1, 1);\n value *= 100;\n if (value < 0) {\n x = 127 + value / 100 * 127;\n } else {\n x = value % 1;\n if (x === 0) {\n x = DELTA_INDEX[value];\n } else {\n x = DELTA_INDEX[Math.floor(value)] * (1 - x) + DELTA_INDEX[Math.floor(value) + 1] * x;\n }\n x = x * 127 + 127;\n }\n return multiply(matrix, [\n x / 127,\n 0,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n x / 127,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n x / 127,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n var adjustBrightness = function (matrix, value) {\n value = clamp(255 * value, -255, 255);\n return multiply(matrix, [\n 1,\n 0,\n 0,\n 0,\n value,\n 0,\n 1,\n 0,\n 0,\n value,\n 0,\n 0,\n 1,\n 0,\n value,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n var adjustColors = function (matrix, adjustR, adjustG, adjustB) {\n adjustR = clamp(adjustR, 0, 2);\n adjustG = clamp(adjustG, 0, 2);\n adjustB = clamp(adjustB, 0, 2);\n return multiply(matrix, [\n adjustR,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustG,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustB,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n\n var colorFilter = function (ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyColorFilter(canvas, ir.getType(), matrix);\n });\n };\n var applyColorFilter = function (canvas, type, matrix) {\n var context = get2dContext(canvas);\n var applyMatrix = function (pixelsData, m) {\n var r, g, b, a;\n var data = pixelsData.data, m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5], m6 = m[6], m7 = m[7], m8 = m[8], m9 = m[9], m10 = m[10], m11 = m[11], m12 = m[12], m13 = m[13], m14 = m[14], m15 = m[15], m16 = m[16], m17 = m[17], m18 = m[18], m19 = m[19];\n for (var i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n data[i] = r * m0 + g * m1 + b * m2 + a * m3 + m4;\n data[i + 1] = r * m5 + g * m6 + b * m7 + a * m8 + m9;\n data[i + 2] = r * m10 + g * m11 + b * m12 + a * m13 + m14;\n data[i + 3] = r * m15 + g * m16 + b * m17 + a * m18 + m19;\n }\n return pixelsData;\n };\n var pixels = applyMatrix(context.getImageData(0, 0, canvas.width, canvas.height), matrix);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n var convoluteFilter = function (ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyConvoluteFilter(canvas, ir.getType(), matrix);\n });\n };\n var applyConvoluteFilter = function (canvas, type, matrix) {\n var context = get2dContext(canvas);\n var applyMatrix = function (pIn, pOut, aMatrix) {\n var clamp = function (value, min, max) {\n if (value > max) {\n value = max;\n } else if (value < min) {\n value = min;\n }\n return value;\n };\n var side = Math.round(Math.sqrt(aMatrix.length));\n var halfSide = Math.floor(side / 2);\n var rgba = pIn.data;\n var drgba = pOut.data;\n var w = pIn.width;\n var h = pIn.height;\n for (var y = 0; y < h; y++) {\n for (var x = 0; x < w; x++) {\n var r = 0;\n var g = 0;\n var b = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scx = clamp(x + cx - halfSide, 0, w - 1);\n var scy = clamp(y + cy - halfSide, 0, h - 1);\n var innerOffset = (scy * w + scx) * 4;\n var wt = aMatrix[cy * side + cx];\n r += rgba[innerOffset] * wt;\n g += rgba[innerOffset + 1] * wt;\n b += rgba[innerOffset + 2] * wt;\n }\n }\n var offset = (y * w + x) * 4;\n drgba[offset] = clamp(r, 0, 255);\n drgba[offset + 1] = clamp(g, 0, 255);\n drgba[offset + 2] = clamp(b, 0, 255);\n }\n }\n return pOut;\n };\n var pixelsIn = context.getImageData(0, 0, canvas.width, canvas.height);\n var pixelsOut = context.getImageData(0, 0, canvas.width, canvas.height);\n pixelsOut = applyMatrix(pixelsIn, pixelsOut, matrix);\n context.putImageData(pixelsOut, 0, 0);\n return fromCanvas(canvas, type);\n };\n var functionColorFilter = function (colorFn) {\n var filterImpl = function (canvas, type, value) {\n var context = get2dContext(canvas);\n var lookup = new Array(256);\n var applyLookup = function (pixelsData, lookupData) {\n var data = pixelsData.data;\n for (var i = 0; i < data.length; i += 4) {\n data[i] = lookupData[data[i]];\n data[i + 1] = lookupData[data[i + 1]];\n data[i + 2] = lookupData[data[i + 2]];\n }\n return pixelsData;\n };\n for (var i = 0; i < lookup.length; i++) {\n lookup[i] = colorFn(i, value);\n }\n var pixels = applyLookup(context.getImageData(0, 0, canvas.width, canvas.height), lookup);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n return function (ir, value) {\n return ir.toCanvas().then(function (canvas) {\n return filterImpl(canvas, ir.getType(), value);\n });\n };\n };\n var complexAdjustableColorFilter = function (matrixAdjustFn) {\n return function (ir, adjust) {\n return colorFilter(ir, matrixAdjustFn(identity(), adjust));\n };\n };\n var basicColorFilter = function (matrix) {\n return function (ir) {\n return colorFilter(ir, matrix);\n };\n };\n var basicConvolutionFilter = function (kernel) {\n return function (ir) {\n return convoluteFilter(ir, kernel);\n };\n };\n var invert$1 = 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$1 = complexAdjustableColorFilter(adjustBrightness);\n var contrast$1 = complexAdjustableColorFilter(adjustContrast);\n var colorize$1 = function (ir, adjustR, adjustG, adjustB) {\n return colorFilter(ir, adjustColors(identity(), adjustR, adjustG, adjustB));\n };\n var sharpen$1 = basicConvolutionFilter([\n 0,\n -1,\n 0,\n -1,\n 5,\n -1,\n 0,\n -1,\n 0\n ]);\n var gamma$1 = functionColorFilter(function (color, value) {\n return Math.pow(color / 255, 1 - value) * 255;\n });\n\n var scale = function (image, dW, dH) {\n var sW = getWidth$1(image);\n var sH = getHeight$1(image);\n var wRatio = dW / sW;\n var hRatio = dH / sH;\n var scaleCapped = false;\n if (wRatio < 0.5 || wRatio > 2) {\n wRatio = wRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n if (hRatio < 0.5 || hRatio > 2) {\n hRatio = hRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n var scaled = _scale(image, wRatio, hRatio);\n return !scaleCapped ? scaled : scaled.then(function (tCanvas) {\n return scale(tCanvas, dW, dH);\n });\n };\n var _scale = function (image, wRatio, hRatio) {\n return new Promise$1(function (resolve) {\n var sW = getWidth$1(image);\n var sH = getHeight$1(image);\n var dW = Math.floor(sW * wRatio);\n var dH = Math.floor(sH * hRatio);\n var canvas = create$3(dW, dH);\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0, sW, sH, 0, 0, dW, dH);\n resolve(canvas);\n });\n };\n\n var ceilWithPrecision = function (num, precision) {\n if (precision === void 0) {\n precision = 2;\n }\n var mul = Math.pow(10, precision);\n var upper = Math.round(num * mul);\n return Math.ceil(upper / mul);\n };\n var rotate$1 = function (ir, angle) {\n return ir.toCanvas().then(function (canvas) {\n return applyRotate(canvas, ir.getType(), angle);\n });\n };\n var applyRotate = function (image, type, angle) {\n var degrees = angle < 0 ? 360 + angle : angle;\n var rad = degrees * Math.PI / 180;\n var width = image.width;\n var height = image.height;\n var sin = Math.sin(rad);\n var cos = Math.cos(rad);\n var newWidth = ceilWithPrecision(Math.abs(width * cos) + Math.abs(height * sin));\n var newHeight = ceilWithPrecision(Math.abs(width * sin) + Math.abs(height * cos));\n var canvas = create$3(newWidth, newHeight);\n var context = get2dContext(canvas);\n context.translate(newWidth / 2, newHeight / 2);\n context.rotate(rad);\n context.drawImage(image, -width / 2, -height / 2);\n return fromCanvas(canvas, type);\n };\n var flip$1 = function (ir, axis) {\n return ir.toCanvas().then(function (canvas) {\n return applyFlip(canvas, ir.getType(), axis);\n });\n };\n var applyFlip = function (image, type, axis) {\n var canvas = create$3(image.width, image.height);\n var context = get2dContext(canvas);\n if (axis === 'v') {\n context.scale(1, -1);\n context.drawImage(image, 0, -canvas.height);\n } else {\n context.scale(-1, 1);\n context.drawImage(image, -canvas.width, 0);\n }\n return fromCanvas(canvas, type);\n };\n var crop$1 = function (ir, x, y, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return applyCrop(canvas, ir.getType(), x, y, w, h);\n });\n };\n var applyCrop = function (image, type, x, y, w, h) {\n var canvas = create$3(w, h);\n var context = get2dContext(canvas);\n context.drawImage(image, -x, -y);\n return fromCanvas(canvas, type);\n };\n var resize$2 = function (ir, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return scale(canvas, w, h).then(function (newCanvas) {\n return fromCanvas(newCanvas, ir.getType());\n });\n });\n };\n\n var invert = function (ir) {\n return invert$1(ir);\n };\n var sharpen = function (ir) {\n return sharpen$1(ir);\n };\n var gamma = function (ir, value) {\n return gamma$1(ir, value);\n };\n var colorize = function (ir, adjustR, adjustG, adjustB) {\n return colorize$1(ir, adjustR, adjustG, adjustB);\n };\n var brightness = function (ir, adjust) {\n return brightness$1(ir, adjust);\n };\n var contrast = function (ir, adjust) {\n return contrast$1(ir, adjust);\n };\n var flip = function (ir, axis) {\n return flip$1(ir, axis);\n };\n var crop = function (ir, x, y, w, h) {\n return crop$1(ir, x, y, w, h);\n };\n var resize$1 = function (ir, w, h) {\n return resize$2(ir, w, h);\n };\n var rotate = function (ir, angle) {\n return rotate$1(ir, angle);\n };\n\n var renderIcon = function (iconName, iconsProvider, behaviours) {\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ],\n behaviours: behaviours\n }, iconsProvider);\n };\n var renderIconFromPack = function (iconName, iconsProvider) {\n return renderIcon(iconName, iconsProvider, []);\n };\n var renderReplacableIconFromPack = function (iconName, iconsProvider) {\n return renderIcon(iconName, iconsProvider, [Replacing.config({})]);\n };\n var renderLabel$1 = function (text, prefix, providersBackstage) {\n return {\n dom: {\n tag: 'span',\n innerHtml: providersBackstage.translate(text),\n classes: [prefix + '__select-label']\n },\n behaviours: derive$1([Replacing.config({})])\n };\n };\n\n var _a;\n var internalToolbarButtonExecute = generate$6('toolbar.button.execute');\n var onToolbarButtonExecute = function (info) {\n return runOnExecute$1(function (comp, _simulatedEvent) {\n runWithApi(info, comp)(function (itemApi) {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n };\n var toolbarButtonEventOrder = (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events'\n ], _a);\n\n var updateMenuText = generate$6('update-menu-text');\n var updateMenuIcon = generate$6('update-menu-icon');\n var renderCommonDropdown = function (spec, prefix, sharedBackstage) {\n var editorOffCell = Cell(noop);\n var optMemDisplayText = spec.text.map(function (text) {\n return record(renderLabel$1(text, prefix, sharedBackstage.providers));\n });\n var optMemDisplayIcon = spec.icon.map(function (iconName) {\n return record(renderReplacableIconFromPack(iconName, sharedBackstage.providers.icons));\n });\n var onLeftOrRightInMenu = function (comp, se) {\n var dropdown = Representing.getValue(comp);\n Focusing.focus(dropdown);\n emitWith(dropdown, 'keydown', { raw: se.event.raw });\n Dropdown.close(dropdown);\n return Optional.some(true);\n };\n var role = spec.role.fold(function () {\n return {};\n }, function (role) {\n return { role: role };\n });\n var tooltipAttributes = spec.tooltip.fold(function () {\n return {};\n }, function (tooltip) {\n var translatedTooltip = sharedBackstage.providers.translate(tooltip);\n return {\n 'title': translatedTooltip,\n 'aria-label': translatedTooltip\n };\n });\n var iconSpec = render$3('chevron-down', {\n tag: 'div',\n classes: [prefix + '__select-chevron']\n }, sharedBackstage.providers.icons);\n var memDropdown = record(Dropdown.sketch(__assign(__assign(__assign({}, spec.uid ? { uid: spec.uid } : {}), role), {\n dom: {\n tag: 'button',\n classes: [\n prefix,\n prefix + '--select'\n ].concat(map$2(spec.classes, function (c) {\n return prefix + '--' + c;\n })),\n attributes: __assign({}, tooltipAttributes)\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(function (mem) {\n return mem.asSpec();\n }),\n optMemDisplayText.map(function (mem) {\n return mem.asSpec();\n }),\n Optional.some(iconSpec)\n ]),\n matchWidth: true,\n useMinWidth: true,\n dropdownBehaviours: derive$1(__spreadArray(__spreadArray([], spec.dropdownBehaviours), [\n DisablingConfigs.button(function () {\n return spec.disabled || sharedBackstage.providers.isDisabled();\n }),\n receivingConfig(),\n Unselecting.config({}),\n Replacing.config({}),\n config('dropdown-events', [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config('menubutton-update-display-text', [\n run$1(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$1(updateMenuIcon, function (comp, se) {\n optMemDisplayIcon.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayIcon) {\n Replacing.set(displayIcon, [renderReplacableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n });\n })\n ])\n ])),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n mousedown: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ]\n }),\n sandboxBehaviours: derive$1([Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n })]),\n lazySink: sharedBackstage.getSink,\n toggleClass: prefix + '--active',\n parts: { menu: part(false, spec.columns, spec.presets) },\n fetch: function (comp) {\n return Future.nu(curry(spec.fetch, comp));\n }\n })));\n return memDropdown.asSpec();\n };\n\n var isMenuItemReference = function (item) {\n return isString(item);\n };\n var isSeparator$1 = function (item) {\n return item.type === 'separator';\n };\n var isExpandingMenuItem = function (item) {\n return has$2(item, 'getSubmenuItems');\n };\n var separator$2 = { 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$1(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc;\n } else if (has$2(menuItems, item.toLowerCase())) {\n return acc.concat([menuItems[item.toLowerCase()]]);\n } else {\n return acc;\n }\n } else {\n return acc.concat([item]);\n }\n }, []);\n if (realItems.length > 0 && isSeparator$1(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$1(item)) {\n return item;\n } else {\n var itemValue = get$e(item, 'value').getOrThunk(function () {\n return generate$6('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 = function (items, itemResponse, backstage, isHorizontalMenu) {\n var primary = generate$6('primary-menu');\n var data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Optional.none();\n }\n var mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, isHorizontalMenu);\n var submenus = map(data.menus, function (menuItems, menuName) {\n return createPartialMenu(menuName, menuItems, itemResponse, backstage, false);\n });\n var menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n var getMenuButtonApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n },\n setActive: function (state) {\n var elm = component.element;\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$7(elm, 'aria-pressed', true);\n } else {\n remove$3(elm, 'tox-tbtn--enabled');\n remove$6(elm, 'aria-pressed');\n }\n },\n isActive: function () {\n return has(component.element, 'tox-tbtn--enabled');\n }\n };\n };\n var renderMenuButton = function (spec, prefix, backstage, role) {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n role: role,\n fetch: function (_comp, callback) {\n spec.fetch(function (items) {\n callback(build(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 = 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$3(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$2(items, function (item) {\n var text = item.text.fold(function () {\n return {};\n }, function (text) {\n return { text: text };\n });\n return __assign(__assign({\n type: item.type,\n active: false\n }, text), {\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n });\n }));\n };\n };\n\n var renderCommonSpec = function (spec, actionOpt, extraBehaviours, dom, components, providersBackstage) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var action = actionOpt.fold(function () {\n return {};\n }, function (action) {\n return { action: action };\n });\n var common = __assign({\n buttonBehaviours: derive$1([\n DisablingConfigs.button(function () {\n return spec.disabled || providersBackstage.isDisabled();\n }),\n receivingConfig(),\n Tabstopping.config({}),\n config('button press', [\n preventDefault('click'),\n preventDefault('mousedown')\n ])\n ].concat(extraBehaviours)),\n eventOrder: {\n click: [\n 'button press',\n 'alloy.base.behaviour'\n ],\n mousedown: [\n 'button press',\n 'alloy.base.behaviour'\n ]\n }\n }, action);\n var domFinal = deepMerge(common, { dom: dom });\n return deepMerge(domFinal, { components: components });\n };\n var renderIconButtonSpec = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var tooltipAttributes = spec.tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n var dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: tooltipAttributes\n };\n var icon = spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n });\n var components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n var renderIconButton = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var iconButtonSpec = renderIconButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours);\n return Button.sketch(iconButtonSpec);\n };\n var renderButtonSpec = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var translatedText = providersBackstage.translate(spec.text);\n var icon = spec.icon ? spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n }) : Optional.none();\n var components = icon.isSome() ? componentRenderPipeline([icon]) : [];\n var innerHtml = icon.isSome() ? {} : { innerHtml: translatedText };\n var classes = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], !spec.primary && !spec.borderless ? [\n 'tox-button',\n 'tox-button--secondary'\n ] : ['tox-button']), icon.isSome() ? ['tox-button--icon'] : []), spec.borderless ? ['tox-button--naked'] : []), extraClasses);\n var dom = __assign(__assign({\n tag: 'button',\n classes: classes\n }, innerHtml), { attributes: { title: translatedText } });\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n var renderButton = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n var getAction = function (name, buttonType) {\n return function (comp) {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name: name,\n value: {}\n });\n } else if (buttonType === 'submit') {\n emit(comp, formSubmitEvent);\n } else if (buttonType === 'cancel') {\n emit(comp, formCancelEvent);\n } else {\n console.error('Unknown button type: ', buttonType);\n }\n };\n };\n var isMenuFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'menu';\n };\n var isNormalFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n };\n var renderFooterButton = function (spec, buttonType, backstage) {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n var getButton = function () {\n return memButton_1;\n };\n var menuButtonSpec = spec;\n var fixedSpec = __assign(__assign({}, spec), {\n onSetup: function (api) {\n api.setDisabled(spec.disabled);\n return noop;\n },\n fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n });\n var memButton_1 = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none()));\n return memButton_1.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n var action = getAction(spec.name, buttonType);\n var buttonSpec = __assign(__assign({}, spec), { borderless: false });\n return renderButton(buttonSpec, action, backstage.shared.providers, []);\n } else {\n console.error('Unknown footer button type: ', buttonType);\n }\n };\n var renderDialogButton = function (spec, providersBackstage) {\n var action = getAction(spec.name, 'custom');\n return renderFormField(Optional.none(), FormField.parts.field(__assign({ factory: Button }, renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n RepresentingConfigs.memory(''),\n ComposingConfigs.self()\n ]))));\n };\n\n var schema$h = constant$1([\n defaulted('field1Name', 'field1'),\n defaulted('field2Name', 'field2'),\n onStrictHandler('onLockedChange'),\n markers$1(['lockClass']),\n defaulted('locked', false),\n SketchBehaviours.field('coupledFieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n 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$1(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$c = constant$1([\n coupledPart('field1', 'field2'),\n coupledPart('field2', 'field1'),\n required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'lock',\n overrides: 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$f = function (detail, components, _spec, _externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Optional.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var _a;\n var parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return _a = {}, _a[detail.field1Name] = Representing.getValue(parts.field1()), _a[detail.field2Name] = Representing.getValue(parts.field2()), _a;\n },\n setValue: function (comp, value) {\n var parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n if (hasNonNullableKey(value, detail.field1Name)) {\n Representing.setValue(parts.field1(), value[detail.field1Name]);\n }\n if (hasNonNullableKey(value, detail.field2Name)) {\n Representing.setValue(parts.field2(), value[detail.field2Name]);\n }\n }\n }\n })\n ]),\n apis: {\n getField1: function (component) {\n return getPart(component, detail, 'field1');\n },\n getField2: function (component) {\n return getPart(component, detail, 'field2');\n },\n getLock: function (component) {\n return getPart(component, detail, 'lock');\n }\n }\n };\n };\n var FormCoupledInputs = composite({\n name: 'FormCoupledInputs',\n configFields: schema$h(),\n partFields: parts$c(),\n factory: factory$f,\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 has$2(inInch, u);\n };\n if (size.unit === unit) {\n return Optional.some(size.value);\n } else if (supported(size.unit) && supported(unit)) {\n if (inInch[size.unit] === inInch[unit]) {\n return Optional.some(size.value);\n } else {\n return Optional.some(size.value / inInch[size.unit] * inInch[unit]);\n }\n } else {\n return Optional.none();\n }\n };\n var noSizeConversion = function (_input) {\n return Optional.none();\n };\n var ratioSizeConversion = function (scale, unit) {\n return function (size) {\n return convertUnit(size, unit).map(function (value) {\n return {\n value: value * scale,\n unit: unit\n };\n });\n };\n };\n var makeRatioConverter = function (currentFieldText, otherFieldText) {\n var cValue = parseSize(currentFieldText).toOptional();\n var oValue = parseSize(otherFieldText).toOptional();\n return lift2(cValue, oValue, function (cSize, oSize) {\n return convertUnit(cSize, oSize.unit).map(function (val) {\n return oSize.value / val;\n }).map(function (r) {\n return ratioSizeConversion(r, oSize.unit);\n }).getOr(noSizeConversion);\n }).getOr(noSizeConversion);\n };\n\n var renderSizeInput = function (spec, providersBackstage) {\n var converter = noSizeConversion;\n var ratioEvent = generate$6('ratio-event');\n var makeIcon = function (iconName) {\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n };\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 makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Tabstopping.config({})\n ])\n });\n var formGroup = function (components) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: components\n };\n };\n var getFieldPart = function (isField1) {\n return FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Tabstopping.config({}),\n config('size-input-events', [\n run$1(focusin(), function (component, _simulatedEvent) {\n emitWith(component, ratioEvent, { isField1: isField1 });\n }),\n run$1(change(), function (component, _simulatedEvent) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n };\n var getLabel = function (label) {\n return {\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n };\n };\n var widthField = FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width')),\n getFieldPart(true)\n ]));\n var heightField = FormCoupledInputs.parts.field2(formGroup([\n FormField.parts.label(getLabel('Height')),\n getFieldPart(false)\n ]));\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(' '),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: function (current, other, _lock) {\n parseSize(Representing.getValue(current)).each(function (size) {\n converter(size).each(function (newSize) {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n receivingConfig(),\n config('size-input-events2', [run$1(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$1(generate$6('undo'));\n var redo = constant$1(generate$6('redo'));\n var zoom = constant$1(generate$6('zoom'));\n var back = constant$1(generate$6('back'));\n var apply = constant$1(generate$6('apply'));\n var swap = constant$1(generate$6('swap'));\n var transform$1 = constant$1(generate$6('transform'));\n var tempTransform = constant$1(generate$6('temp-transform'));\n var transformApply = constant$1(generate$6('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$1,\n tempTransform: tempTransform,\n transformApply: transformApply\n };\n var saveState = constant$1('save-state');\n var disable = constant$1('disable');\n var enable = constant$1('enable');\n var external = {\n formActionEvent: formActionEvent,\n saveState: saveState,\n disable: disable,\n enable: enable\n };\n\n var renderEditPanel = function (imagePanel, providersBackstage) {\n var createButton = function (text, action, disabled, primary) {\n return record(renderButton({\n name: text,\n text: text,\n disabled: disabled,\n primary: primary,\n icon: Optional.none(),\n borderless: false\n }, action, providersBackstage));\n };\n var createIconButton = function (icon, tooltip, action, disabled) {\n return record(renderIconButton({\n name: icon,\n icon: Optional.some(icon),\n tooltip: Optional.some(tooltip),\n disabled: disabled,\n primary: false,\n borderless: false\n }, action, providersBackstage));\n };\n var disableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.disable(component);\n }\n });\n };\n var enableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.enable(component);\n }\n });\n };\n var panelDom = {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools-edit-panel'\n ]\n };\n var noop$1 = noop;\n var emit$1 = function (comp, event, data) {\n emitWith(comp, event, data);\n };\n var emitDisable = function (component) {\n return emit(component, external.disable());\n };\n var emitEnable = function (component) {\n return emit(component, external.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(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$1(external.disable(), function (comp, _se) {\n disableAllComponents(cropPanelComponents, comp);\n }),\n run$1(external.enable(), function (comp, _se) {\n enableAllComponents(cropPanelComponents, comp);\n })\n ])])\n });\n var memSize = record(renderSizeInput({\n name: 'size',\n label: Optional.none(),\n constrain: true,\n disabled: false\n }, providersBackstage));\n var makeResizeTransform = function (width, height) {\n return function (ir) {\n return resize$1(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$1(external.disable(), function (comp, _se) {\n disableAllComponents(resizePanelComponents, comp);\n }),\n run$1(external.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, 'h');\n var verticalFlip = makeValueTransform(flip, 'v');\n var counterclockwiseRotate = makeValueTransform(rotate, -90);\n var clockwiseRotate = makeValueTransform(rotate, 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$1(external.disable(), function (comp, _se) {\n disableAllComponents(flipRotateComponents, comp);\n }),\n run$1(external.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$1({ x: value })\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChoose: onChoose\n }));\n };\n var makeVariableSlider = function (label, transform, min, value, max) {\n var onChoose = function (slider, _thumb, value) {\n var valTransform = makeValueTransform(transform, value.x / 100);\n emitTransform(slider, valTransform);\n };\n return makeSlider(label, onChoose, min, value, max);\n };\n var variableFilterPanelComponents = function (label, transform, min, value, max) {\n return [\n createBackButton(),\n makeVariableSlider(label, transform, min, value, max),\n createApplyButton()\n ];\n };\n var createVariableFilterPanel = function (label, transform, min, value, max) {\n var filterPanelComponents = variableFilterPanelComponents(label, transform, min, value, max);\n return Container.sketch({\n dom: panelDom,\n components: filterPanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-filter-panel-buttons-events', [\n run$1(external.disable(), function (comp, _se) {\n disableAllComponents(filterPanelComponents, comp);\n }),\n run$1(external.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, -100, 0, 100);\n var ContrastPanel = createVariableFilterPanel('Contrast', contrast, -100, 0, 100);\n var GammaPanel = createVariableFilterPanel('Gamma', gamma, -100, 0, 100);\n var makeColorTransform = function (red, green, blue) {\n return function (ir) {\n return colorize(ir, red, green, blue);\n };\n };\n var makeColorSlider = function (label) {\n var onChoose = function (slider, _thumb, _value) {\n var redOpt = memRed.getOpt(slider);\n var blueOpt = memBlue.getOpt(slider);\n var greenOpt = memGreen.getOpt(slider);\n redOpt.each(function (red) {\n blueOpt.each(function (blue) {\n greenOpt.each(function (green) {\n var r = Representing.getValue(red).x / 100;\n var g = Representing.getValue(green).x / 100;\n var b = Representing.getValue(blue).x / 100;\n var transform = makeColorTransform(r, g, b);\n emitTransform(slider, transform);\n });\n });\n });\n };\n return makeSlider(label, onChoose, 0, 100, 200);\n };\n var memRed = makeColorSlider('R');\n var memGreen = makeColorSlider('G');\n var memBlue = makeColorSlider('B');\n var colorizePanelComponents = [\n createBackButton(),\n memRed,\n memGreen,\n memBlue,\n createApplyButton()\n ];\n var ColorizePanel = Container.sketch({\n dom: panelDom,\n components: colorizePanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var getTransformPanelEvent = function (panel, transform, update) {\n return function (button) {\n var swap = function () {\n memContainer.getOpt(button).each(function (container) {\n Replacing.set(container, [panel]);\n update(container);\n });\n };\n emit$1(button, internal.swap(), {\n transform: transform,\n swap: swap\n });\n };\n };\n var cropPanelUpdate = function (_anyInSystem) {\n imagePanel.showCrop();\n };\n var resizePanelUpdate = function (anyInSystem) {\n memSize.getOpt(anyInSystem).each(function (sizeInput) {\n var measurements = imagePanel.getMeasurements();\n var width = measurements.width;\n var height = measurements.height;\n Representing.setValue(sizeInput, {\n width: width,\n height: height\n });\n });\n };\n var sharpenTransform = Optional.some(sharpen);\n var invertTransform = Optional.some(invert);\n var buttonPanelComponents = [\n createIconButton('crop', 'Crop', getTransformPanelEvent(CropPanel, Optional.none(), cropPanelUpdate), false),\n createIconButton('resize', 'Resize', getTransformPanelEvent(ResizePanel, Optional.none(), resizePanelUpdate), false),\n createIconButton('orientation', 'Orientation', getTransformPanelEvent(FlipRotatePanel, Optional.none(), noop$1), false),\n createIconButton('brightness', 'Brightness', getTransformPanelEvent(BrightnessPanel, Optional.none(), noop$1), false),\n createIconButton('sharpen', 'Sharpen', getTransformPanelEvent(FilterPanel, sharpenTransform, noop$1), false),\n createIconButton('contrast', 'Contrast', getTransformPanelEvent(ContrastPanel, Optional.none(), noop$1), false),\n createIconButton('color-levels', 'Color levels', getTransformPanelEvent(ColorizePanel, Optional.none(), noop$1), false),\n createIconButton('gamma', 'Gamma', getTransformPanelEvent(GammaPanel, Optional.none(), noop$1), false),\n createIconButton('invert', 'Invert', getTransformPanelEvent(FilterPanel, invertTransform, noop$1), false)\n ];\n var ButtonPanel = Container.sketch({\n dom: panelDom,\n components: buttonPanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var container = Container.sketch({\n dom: { tag: 'div' },\n components: [ButtonPanel],\n containerBehaviours: derive$1([Replacing.config({})])\n });\n var memContainer = record(container);\n var getApplyButton = function (anyInSystem) {\n return memContainer.getOpt(anyInSystem).map(function (container) {\n var panel = container.components()[0];\n return panel.components()[panel.components().length - 1];\n });\n };\n return {\n memContainer: memContainer,\n getApplyButton: getApplyButton\n };\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var getDocumentSize = function (doc) {\n var max = Math.max;\n var documentElement = doc.documentElement;\n var body = doc.body;\n var scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n var clientWidth = max(documentElement.clientWidth, body.clientWidth);\n var offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n var scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n var clientHeight = max(documentElement.clientHeight, body.clientHeight);\n var offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n };\n var updateWithTouchData = function (e) {\n var keys, i;\n if (e.changedTouches) {\n keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n for (i = 0; i < keys.length; i++) {\n e[keys[i]] = e.changedTouches[0][keys[i]];\n }\n }\n };\n function DragHelper (id, settings) {\n var $eventOverlay;\n var doc = settings.document || document;\n var downButton;\n var startX, startY;\n var handleElement = doc.getElementById(settings.handle || id);\n var start = function (e) {\n var docSize = getDocumentSize(doc);\n var cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n var handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (window.getComputedStyle) {\n cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$4('
').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$4(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$4(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n $eventOverlay.remove();\n if (settings.stop) {\n settings.stop(e);\n }\n };\n var destroy = function () {\n global$4(handleElement).off();\n };\n global$4(handleElement).on('mousedown touchstart', start);\n return { destroy: destroy };\n }\n\n var count = 0;\n var create$1 = function (currentRect, viewPortRect, clampRect, containerElm, action) {\n var dragHelpers;\n var prefix = 'tox-';\n var id = prefix + 'crid-' + count++;\n var handles = [\n {\n name: 'move',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: 0,\n deltaH: 0,\n label: 'Crop Mask'\n },\n {\n name: 'nw',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: -1,\n deltaH: -1,\n label: 'Top Left Crop Handle'\n },\n {\n name: 'ne',\n xMul: 1,\n yMul: 0,\n deltaX: 0,\n deltaY: 1,\n deltaW: 1,\n deltaH: -1,\n label: 'Top Right Crop Handle'\n },\n {\n name: 'sw',\n xMul: 0,\n yMul: 1,\n deltaX: 1,\n deltaY: 0,\n deltaW: -1,\n deltaH: 1,\n label: 'Bottom Left Crop Handle'\n },\n {\n name: 'se',\n xMul: 1,\n yMul: 1,\n deltaX: 0,\n deltaY: 0,\n deltaW: 1,\n deltaH: 1,\n label: 'Bottom Right Crop Handle'\n }\n ];\n var blockers = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ];\n var getAbsoluteRect = function (outerRect, relativeRect) {\n return {\n x: relativeRect.x + outerRect.x,\n y: relativeRect.y + outerRect.y,\n w: relativeRect.w,\n h: relativeRect.h\n };\n };\n var getRelativeRect = function (outerRect, innerRect) {\n return {\n x: innerRect.x - outerRect.x,\n y: innerRect.y - outerRect.y,\n w: innerRect.w,\n h: innerRect.h\n };\n };\n var getInnerRect = function () {\n return getRelativeRect(clampRect, currentRect);\n };\n var moveRect = function (handle, startRect, deltaX, deltaY) {\n var x, y, w, h, rect;\n x = startRect.x;\n y = startRect.y;\n w = startRect.w;\n h = startRect.h;\n x += deltaX * handle.deltaX;\n y += deltaY * handle.deltaY;\n w += deltaX * handle.deltaW;\n h += deltaY * handle.deltaH;\n if (w < 20) {\n w = 20;\n }\n if (h < 20) {\n h = 20;\n }\n rect = currentRect = global$5.clamp({\n x: x,\n y: y,\n w: w,\n h: h\n }, clampRect, handle.name === 'move');\n rect = getRelativeRect(clampRect, rect);\n instance.fire('updateRect', { rect: rect });\n setInnerRect(rect);\n };\n var render = function () {\n var createDragHelper = function (handle) {\n var startRect;\n return DragHelper(id, {\n document: containerElm.ownerDocument,\n handle: id + '-' + handle.name,\n start: function () {\n startRect = currentRect;\n },\n drag: function (e) {\n moveRect(handle, startRect, e.deltaX, e.deltaY);\n }\n });\n };\n global$4('
').appendTo(containerElm);\n global$6.each(blockers, function (blocker) {\n global$4('#' + id, containerElm).append('
');\n });\n global$6.each(handles, function (handle) {\n global$4('#' + id, containerElm).append('
');\n });\n dragHelpers = global$6.map(handles, createDragHelper);\n repaint(currentRect);\n global$4(containerElm).on('focusin focusout', function (e) {\n global$4(e.target).attr('aria-grabbed', e.type === 'focus' ? 'true' : 'false');\n });\n global$4(containerElm).on('keydown', function (e) {\n var activeHandle;\n global$6.each(handles, function (handle) {\n if (e.target.id === id + '-' + handle.name) {\n activeHandle = handle;\n return false;\n }\n });\n var moveAndBlock = function (evt, handle, startRect, deltaX, deltaY) {\n evt.stopPropagation();\n evt.preventDefault();\n moveRect(activeHandle, startRect, deltaX, deltaY);\n };\n switch (e.keyCode) {\n case global$2.LEFT:\n moveAndBlock(e, activeHandle, currentRect, -10, 0);\n break;\n case global$2.RIGHT:\n moveAndBlock(e, activeHandle, currentRect, 10, 0);\n break;\n case global$2.UP:\n moveAndBlock(e, activeHandle, currentRect, 0, -10);\n break;\n case global$2.DOWN:\n moveAndBlock(e, activeHandle, currentRect, 0, 10);\n break;\n case global$2.ENTER:\n case global$2.SPACEBAR:\n e.preventDefault();\n action();\n break;\n }\n });\n };\n var toggleVisibility = function (state) {\n var selectors = global$6.map(handles, function (handle) {\n return '#' + id + '-' + handle.name;\n }).concat(global$6.map(blockers, function (blocker) {\n return '#' + id + '-' + blocker;\n })).join(',');\n if (state) {\n global$4(selectors, containerElm).show();\n } else {\n global$4(selectors, containerElm).hide();\n }\n };\n var repaint = function (rect) {\n var updateElementRect = function (name, rect) {\n if (rect.h < 0) {\n rect.h = 0;\n }\n if (rect.w < 0) {\n rect.w = 0;\n }\n global$4('#' + id + '-' + name, containerElm).css({\n left: rect.x,\n top: rect.y,\n width: rect.w,\n height: rect.h\n });\n };\n global$6.each(handles, function (handle) {\n global$4('#' + id + '-' + handle.name, containerElm).css({\n left: rect.w * handle.xMul + rect.x,\n top: rect.h * handle.yMul + rect.y\n });\n });\n updateElementRect('top', {\n x: viewPortRect.x,\n y: viewPortRect.y,\n w: viewPortRect.w,\n h: rect.y - viewPortRect.y\n });\n updateElementRect('right', {\n x: rect.x + rect.w,\n y: rect.y,\n w: viewPortRect.w - rect.x - rect.w + viewPortRect.x,\n h: rect.h\n });\n updateElementRect('bottom', {\n x: viewPortRect.x,\n y: rect.y + rect.h,\n w: viewPortRect.w,\n h: viewPortRect.h - rect.y - rect.h + viewPortRect.y\n });\n updateElementRect('left', {\n x: viewPortRect.x,\n y: rect.y,\n w: rect.x - viewPortRect.x,\n h: rect.h\n });\n updateElementRect('move', rect);\n };\n var setRect = function (rect) {\n currentRect = rect;\n repaint(currentRect);\n };\n var setViewPortRect = function (rect) {\n viewPortRect = rect;\n repaint(currentRect);\n };\n var setInnerRect = function (rect) {\n setRect(getAbsoluteRect(clampRect, rect));\n };\n var setClampRect = function (rect) {\n clampRect = rect;\n repaint(currentRect);\n };\n var destroy = function () {\n global$6.each(dragHelpers, function (helper) {\n helper.destroy();\n });\n dragHelpers = [];\n };\n render();\n var instance = global$6.extend({\n toggleVisibility: toggleVisibility,\n setClampRect: setClampRect,\n setRect: setRect,\n getInnerRect: getInnerRect,\n setInnerRect: setInnerRect,\n setViewPortRect: setViewPortRect,\n destroy: destroy\n }, global$3);\n return instance;\n };\n var CropRect = { create: create$1 };\n\n var loadImage = function (image) {\n return new global$d(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 = value$1();\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$8(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(img, css);\n memBg.getOpt(panel).each(function (bg) {\n setAll(bg.element, css);\n });\n cropRect.on(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$8(panel.element);\n var width = img.dom.naturalWidth;\n var height = img.dom.naturalHeight;\n var zoom = Math.min(panelW / width, panelH / height);\n if (zoom >= 1) {\n zoomState.set(1);\n } else {\n zoomState.set(zoom);\n }\n });\n };\n var updateSrc = function (anyInSystem, url) {\n var img = SugarElement.fromTag('img');\n set$7(img, 'src', url);\n return loadImage(img.dom).then(function () {\n if (anyInSystem.getSystem().isConnected()) {\n memContainer.getOpt(anyInSystem).map(function (panel) {\n var aImg = external$2({ element: img });\n Replacing.replaceAt(panel, 1, Optional.some(aImg));\n var lastViewRect = viewRectState.get();\n var viewRect = {\n x: 0,\n y: 0,\n w: img.dom.naturalWidth,\n h: img.dom.naturalHeight\n };\n viewRectState.set(viewRect);\n var rect = global$5.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 });\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.on(function (cRect) {\n cRect.toggleVisibility(true);\n });\n };\n var hideCrop = function () {\n cropRect.on(function (cRect) {\n cRect.toggleVisibility(false);\n });\n };\n var getRect = function () {\n return rectState.get();\n };\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image']\n },\n components: [\n memBg.asSpec(),\n {\n dom: {\n tag: 'img',\n attributes: { src: initialUrl }\n }\n },\n {\n dom: { tag: 'div' },\n behaviours: derive$1([config('image-panel-crop-events', [runOnAttached(function (comp) {\n memContainer.getOpt(comp).each(function (container) {\n var el = container.element.dom;\n var cRect = CropRect.create({\n x: 10,\n y: 10,\n w: 100,\n h: 100\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, el, noop);\n cRect.toggleVisibility(false);\n cRect.on('updateRect', function (e) {\n var rect = e.rect;\n var zoom = zoomState.get();\n var newRect = {\n x: Math.round(rect.x / zoom),\n y: Math.round(rect.y / zoom),\n w: Math.round(rect.w / zoom),\n h: Math.round(rect.h / zoom)\n };\n rectState.set(newRect);\n });\n cropRect.set(cRect);\n });\n })])])\n }\n ],\n containerBehaviours: derive$1([\n Replacing.config({}),\n config('image-panel-events', [runOnAttached(function (comp) {\n updateSrc(comp, initialUrl);\n })])\n ])\n });\n var memContainer = record(container);\n var getMeasurements = function () {\n var viewRect = viewRectState.get();\n return {\n width: viewRect.w,\n height: viewRect.h\n };\n };\n return {\n memContainer: memContainer,\n updateSrc: updateSrc,\n zoom: zoom,\n showCrop: showCrop,\n hideCrop: hideCrop,\n getRect: getRect,\n getMeasurements: getMeasurements\n };\n };\n\n var createButton = function (innerHtml, icon, disabled, action, providersBackstage) {\n return renderIconButton({\n name: innerHtml,\n icon: Optional.some(icon),\n disabled: disabled,\n tooltip: Optional.some(innerHtml),\n primary: false,\n borderless: false\n }, action, providersBackstage);\n };\n var setButtonEnabled = function (button, enabled) {\n if (enabled) {\n Disabling.enable(button);\n } else {\n Disabling.disable(button);\n }\n };\n var renderSideBar = function (providersBackstage) {\n var updateButtonUndoStates = function (anyInSystem, undoEnabled, redoEnabled) {\n memUndo.getOpt(anyInSystem).each(function (undo) {\n setButtonEnabled(undo, undoEnabled);\n });\n memRedo.getOpt(anyInSystem).each(function (redo) {\n setButtonEnabled(redo, redoEnabled);\n });\n };\n var memUndo = record(createButton('Undo', 'undo', true, function (button) {\n emitWith(button, internal.undo(), { direction: 1 });\n }, providersBackstage));\n var memRedo = record(createButton('Redo', 'redo', true, function (button) {\n emitWith(button, internal.redo(), { direction: 1 });\n }, providersBackstage));\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools__sidebar'\n ]\n },\n components: [\n memUndo.asSpec(),\n memRedo.asSpec(),\n createButton('Zoom in', 'zoom-in', false, function (button) {\n emitWith(button, internal.zoom(), { direction: 1 });\n }, providersBackstage),\n createButton('Zoom out', 'zoom-out', false, function (button) {\n emitWith(button, internal.zoom(), { direction: -1 });\n }, providersBackstage)\n ]\n });\n return {\n container: container,\n updateButtonUndoStates: updateButtonUndoStates\n };\n };\n\n function UndoStack () {\n var data = [];\n var index = -1;\n var add = function (state) {\n var removed = data.splice(++index);\n data.push(state);\n return {\n state: state,\n removed: removed\n };\n };\n var undo = function () {\n if (canUndo()) {\n return data[--index];\n }\n };\n var redo = function () {\n if (canRedo()) {\n return data[++index];\n }\n };\n var canUndo = function () {\n return index > 0;\n };\n var canRedo = function () {\n return index !== -1 && index < data.length - 1;\n };\n return {\n data: data,\n add: add,\n undo: undo,\n redo: redo,\n canUndo: canUndo,\n canRedo: canRedo\n };\n }\n\n var makeState = function (initialState) {\n var blobState = Cell(initialState);\n var tempState = value$1();\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().getOrThunk(blobState.get);\n };\n var updateTempState = function (blob) {\n var newTempState = createState(blob);\n destroyTempState();\n tempState.set(newTempState);\n return newTempState.url;\n };\n var createState = function (blob) {\n return {\n blob: blob,\n url: URL.createObjectURL(blob)\n };\n };\n var destroyState = function (state) {\n URL.revokeObjectURL(state.url);\n };\n var destroyStates = function (states) {\n global$6.each(states, destroyState);\n };\n var destroyTempState = function () {\n tempState.on(destroyState);\n tempState.clear();\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(newState);\n return newState.url;\n };\n var applyTempState = function (postApply) {\n return tempState.get().fold(noop, function (temp) {\n addBlobState(temp.blob);\n postApply();\n });\n };\n var undo = function () {\n var currentState = undoStack.undo();\n setBlobState(currentState);\n return currentState.url;\n };\n var redo = function () {\n var currentState = undoStack.redo();\n setBlobState(currentState);\n return currentState.url;\n };\n var getHistoryStates = function () {\n var undoEnabled = undoStack.canUndo();\n var redoEnabled = undoStack.canRedo();\n return {\n undoEnabled: undoEnabled,\n redoEnabled: redoEnabled\n };\n };\n return {\n getBlobState: getBlobState,\n setBlobState: setBlobState,\n addBlobState: addBlobState,\n getTempState: getTempState,\n updateTempState: updateTempState,\n addTempState: addTempState,\n applyTempState: applyTempState,\n destroyTempState: destroyTempState,\n undo: undo,\n redo: redo,\n getHistoryStates: getHistoryStates\n };\n };\n\n var renderImageTools = function (detail, providersBackstage) {\n var state = makeState(detail.currentState);\n var zoom = function (anyInSystem, simulatedEvent) {\n var direction = simulatedEvent.event.direction;\n imagePanel.zoom(anyInSystem, direction);\n };\n var updateButtonUndoStates = function (anyInSystem) {\n var historyStates = state.getHistoryStates();\n sideBar.updateButtonUndoStates(anyInSystem, historyStates.undoEnabled, historyStates.redoEnabled);\n emitWith(anyInSystem, external.formActionEvent, {\n name: external.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.formActionEvent, {\n name: external.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.formActionEvent, {\n name: external.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 blobToImageResult(blob).then(filter).then(imageResultToBlob).then(action).then(function (url) {\n return updateSrc(anyInSystem, url);\n }).then(function () {\n updateButtonUndoStates(anyInSystem);\n swap();\n unblock(anyInSystem);\n }).catch(function (err) {\n console.log(err);\n if (anyInSystem.getSystem().isConnected()) {\n unblock(anyInSystem);\n }\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$1(internal.undo(), undo),\n run$1(internal.redo(), redo),\n run$1(internal.zoom(), zoom),\n run$1(internal.back(), back),\n run$1(internal.apply(), apply),\n run$1(internal.transform(), transform),\n run$1(internal.tempTransform(), tempTransform),\n run$1(internal.transformApply(), transformApply),\n run$1(internal.swap(), swap)\n ]),\n ComposingConfigs.self()\n ])\n };\n };\n\n var renderLabel = 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$2(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [label].concat(comps),\n behaviours: derive$1([\n ComposingConfigs.self(),\n Replacing.config({}),\n RepresentingConfigs.domHtml(Optional.none()),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n\n var isSingleListItem = function (item) {\n return !has$2(item, 'items');\n };\n var dataAttribute = 'data-value';\n var fetchItems = function (dropdownComp, name, items, selectedValue) {\n return map$2(items, function (item) {\n if (!isSingleListItem(item)) {\n return {\n type: 'nestedmenuitem',\n text: item.text,\n getSubmenuItems: function () {\n return fetchItems(dropdownComp, name, item.items, selectedValue);\n }\n };\n } else {\n return {\n type: 'togglemenuitem',\n text: item.text,\n value: item.value,\n active: item.value === selectedValue,\n onAction: function () {\n Representing.setValue(dropdownComp, item.value);\n emitWith(dropdownComp, formChangeEvent, { name: name });\n Focusing.focus(dropdownComp);\n }\n };\n }\n });\n };\n var findItemByValue = function (items, value) {\n return findMap(items, function (item) {\n if (!isSingleListItem(item)) {\n return findItemByValue(item.items, value);\n } else {\n return someIf(item.value === value, item);\n }\n });\n };\n var renderListBox = function (spec, backstage) {\n var providersBackstage = backstage.shared.providers;\n var initialItem = head(spec.items).filter(isSingleListItem);\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var pField = FormField.parts.field({\n dom: {},\n factory: {\n sketch: function (sketchSpec) {\n return renderCommonDropdown({\n uid: sketchSpec.uid,\n text: initialItem.map(function (item) {\n return item.text;\n }),\n icon: Optional.none(),\n tooltip: spec.label,\n role: Optional.none(),\n fetch: function (comp, callback) {\n var items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp));\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n },\n onSetup: constant$1(noop),\n getApi: constant$1({}),\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [\n Tabstopping.config({}),\n Representing.config({\n store: {\n mode: 'manual',\n initialValue: initialItem.map(function (item) {\n return item.value;\n }).getOr(''),\n getValue: function (comp) {\n return get$c(comp.element, dataAttribute);\n },\n setValue: function (comp, data) {\n findItemByValue(spec.items, data).each(function (item) {\n set$7(comp.element, dataAttribute, item.value);\n emitWith(comp, updateMenuText, { text: item.text });\n });\n }\n }\n })\n ]\n }, 'tox-listbox', backstage.shared);\n }\n }\n });\n var listBoxWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-listboxfield']\n },\n components: [pField]\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [listBoxWrap]\n ]),\n fieldBehaviours: derive$1([Disabling.config({\n disabled: constant$1(spec.disabled),\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n var renderPanel = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map$2(spec.items, backstage.shared.interpreter)\n };\n };\n\n var factory$e = function (detail, _spec) {\n var options = map$2(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$9(select.element);\n },\n setValue: function (select, newValue) {\n var found = find$5(detail.options, function (opt) {\n return opt.value === newValue;\n });\n if (found.isSome()) {\n set$5(select.element, newValue);\n }\n }\n }, initialValues)\n })\n ])\n };\n };\n var HtmlSelect = single({\n name: 'HtmlSelect',\n configFields: [\n required$1('options'),\n field('selectBehaviours', [\n Focusing,\n Representing\n ]),\n defaulted('selectClasses', []),\n defaulted('selectAttributes', {}),\n option('data')\n ],\n factory: factory$e\n });\n\n var renderSelectBox = function (spec, providersBackstage) {\n var translatedOptions = map$2(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$2(label, providersBackstage);\n });\n var pField = FormField.parts.field({\n dom: {},\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n config('selectbox-change', [run$1(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var chevron = spec.size > 1 ? Optional.none() : Optional.some(render$3('chevron-down', {\n tag: 'div',\n classes: ['tox-selectfield__icon-js']\n }, providersBackstage.icons));\n var selectWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-selectfield']\n },\n components: flatten([\n [pField],\n chevron.toArray()\n ])\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [selectWrap]\n ]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderTable = function (spec, providersBackstage) {\n var renderTh = function (text) {\n return {\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderHeader = function (header) {\n return {\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map$2(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$2(row, renderTd)\n };\n };\n var renderRows = function (rows) {\n return {\n dom: { tag: 'tbody' },\n components: map$2(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$2(label, providersBackstage);\n });\n var baseInputBehaviours = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: function (comp) {\n emit(comp, formSubmitEvent);\n return Optional.some(true);\n }\n }),\n config('textfield-change', [\n run$1(input(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run$1(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$1({}), function (p) {\n return { placeholder: providersBackstage.translate(p) };\n });\n var inputMode = spec.inputMode.fold(constant$1({}), function (mode) {\n return { inputmode: mode };\n });\n var inputAttributes = __assign(__assign({}, placeholder), inputMode);\n var pField = FormField.parts.field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n inputAttributes: inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n var extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n var extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n var extraBehaviours = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ];\n return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n };\n var renderInput = function (spec, providersBackstage) {\n return renderTextField({\n name: spec.name,\n multiline: false,\n label: spec.label,\n inputMode: spec.inputMode,\n placeholder: spec.placeholder,\n flex: false,\n disabled: spec.disabled,\n classname: 'tox-textfield',\n validation: Optional.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n var renderTextarea = function (spec, providersBackstage) {\n return renderTextField({\n name: spec.name,\n multiline: true,\n label: spec.label,\n inputMode: Optional.none(),\n placeholder: spec.placeholder,\n flex: true,\n disabled: spec.disabled,\n classname: 'tox-textarea',\n validation: Optional.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n\n var events$6 = function (streamConfig, streamState) {\n var streams = streamConfig.stream.streams;\n var processor = streams.setup(streamConfig, streamState);\n return derive$2([\n run$1(streamConfig.event, processor),\n runOnDetached(function () {\n return streamState.cancel();\n })\n ].concat(streamConfig.cancelEvent.map(function (e) {\n return [run$1(e, function () {\n return streamState.cancel();\n })];\n }).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$6\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$8({\n readState: readState,\n setTimer: setTimer,\n cancel: cancel\n });\n };\n var init$9 = 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$9\n });\n\n var setup$c = function (streamInfo, streamState) {\n var sInfo = streamInfo.stream;\n var throttler = last(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 requiredOf('stream', choose$1('mode', {\n throttle: [\n required$1('delay'),\n defaulted('stopEvent', true),\n output$1('streams', {\n setup: setup$c,\n state: throttle\n })\n ]\n })),\n defaulted('event', 'input'),\n option('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n var Streaming = create$7({\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$9(el);\n var node = el.dom;\n if (get$c(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n var setCursorAtEnd = function (input) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(value.length, value.length);\n });\n };\n var setSelectionToEnd = function (input, startOffset) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(startOffset, value.length);\n });\n };\n var attemptSelectOver = function (model, input, item) {\n if (!model.selectsOver) {\n return Optional.none();\n } else {\n var currentValue = Representing.getValue(input);\n var inputDisplay_1 = model.getDisplayText(currentValue);\n var itemValue = Representing.getValue(item);\n var itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay_1) === 0 ? Optional.some(function () {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay_1.length);\n }) : Optional.none();\n }\n };\n\n var itemExecute = constant$1('alloy.typeahead.itemexecute');\n\n var make$3 = 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(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$3(menus, function (menu) {\n return filter$2(menu.items, function (item) {\n return item.type === 'item';\n });\n });\n var repState = Representing.getState(comp);\n repState.update(map$2(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$9(comp.element);\n },\n getFallbackEntry: function (itemString) {\n return {\n value: itemString,\n meta: {}\n };\n },\n setValue: function (comp, data) {\n set$5(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$9(component.element).length >= detail.minChars) {\n var previousValue_1 = Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu).map(Representing.getValue);\n });\n detail.previewing.set(true);\n var onOpenSync = function (_sandbox) {\n Composing.getCurrent(sandbox).each(function (menu) {\n previousValue_1.fold(function () {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(menu);\n }\n }, function (pv) {\n Highlighting.highlightBy(menu, function (item) {\n var itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(menu).orThunk(function () {\n Highlighting.highlightFirst(menu);\n return Optional.none();\n });\n });\n });\n };\n open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Optional.some(true);\n },\n onEscape: function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n return Optional.none();\n },\n onUp: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Optional.some(true);\n },\n onEnter: function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n var sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu);\n }).map(function (item) {\n emitWith(comp, itemExecute(), { item: item });\n return true;\n });\n } else {\n var currentValue = Representing.getValue(comp);\n emit(comp, typeaheadCancel());\n detail.onExecute(sandbox, comp, currentValue);\n if (sandboxIsOpen) {\n Sandboxing.close(sandbox);\n }\n return Optional.some(true);\n }\n }\n }),\n Toggling.config({\n toggleClass: detail.markers.openClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n return makeSandbox$1(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$1(function (comp) {\n var onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }),\n run$1(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$1(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(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$g = constant$1([\n option('lazySink'),\n required$1('fetch'),\n defaulted('minChars', 5),\n defaulted('responseTime', 1000),\n onHandler('onOpen'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n defaulted('layouts', Optional.none()),\n defaulted('eventOrder', {}),\n defaultedObjOf('model', {}, [\n defaulted('getDisplayText', function (itemData) {\n return itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value;\n }),\n defaulted('selectsOver', true),\n defaulted('populateFromBrowse', true)\n ]),\n onHandler('onSetValue'),\n onKeyboardHandler('onExecute'),\n onHandler('onItemExecute'),\n defaulted('inputClasses', []),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('matchWidth', true),\n defaulted('useMinWidth', false),\n defaulted('dismissOnBlur', true),\n markers$1(['openClass']),\n option('initialData'),\n field('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n customField('previewing', function () {\n return Cell(true);\n })\n ].concat(schema$k()).concat(sandboxFields()));\n var parts$b = constant$1([external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: function (detail) {\n return {\n fakeFocus: true,\n onHighlight: function (menu, item) {\n if (!detail.previewing.get()) {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n } else {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n attemptSelectOver(detail.model, input, item).fold(function () {\n return Highlighting.dehighlight(menu, item);\n }, function (fn) {\n return fn();\n });\n });\n }\n detail.previewing.set(false);\n },\n onExecute: function (menu, item) {\n return menu.getSystem().getByUid(detail.uid).toOptional().map(function (typeahead) {\n emitWith(typeahead, itemExecute(), { item: item });\n return true;\n });\n },\n onHover: function (menu, item) {\n detail.previewing.set(false);\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n var Typeahead = composite({\n name: 'Typeahead',\n configFields: schema$g(),\n partFields: parts$b(),\n factory: make$3\n });\n\n var wrap = function (delegate) {\n var toCached = function () {\n return wrap(delegate.toCached());\n };\n var bindFuture = function (f) {\n return wrap(delegate.bind(function (resA) {\n return resA.fold(function (err) {\n return Future.pure(Result.error(err));\n }, function (a) {\n return f(a);\n });\n }));\n };\n var bindResult = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.bind(f);\n }));\n };\n var mapResult = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.map(f);\n }));\n };\n var mapError = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.mapError(f);\n }));\n };\n var foldResult = function (whenError, whenValue) {\n return delegate.map(function (res) {\n return res.fold(whenError, whenValue);\n });\n };\n var withTimeout = function (timeout, errorThunk) {\n return wrap(Future.nu(function (callback) {\n var timedOut = false;\n var timer = setTimeout(function () {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(function (result) {\n if (!timedOut) {\n clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return __assign(__assign({}, delegate), {\n toCached: toCached,\n bindFuture: bindFuture,\n bindResult: bindResult,\n mapResult: mapResult,\n mapError: mapError,\n foldResult: foldResult,\n withTimeout: withTimeout\n });\n };\n var nu$1 = function (worker) {\n return wrap(Future.nu(worker));\n };\n var value = function (value) {\n return wrap(Future.pure(Result.value(value)));\n };\n var error = function (error) {\n return wrap(Future.pure(Result.error(error)));\n };\n var fromResult = function (result) {\n return wrap(Future.pure(result));\n };\n var fromFuture = function (future) {\n return wrap(future.map(Result.value));\n };\n var fromPromise = function (promise) {\n return nu$1(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$1,\n wrap: wrap,\n pure: value,\n value: value,\n error: error,\n fromResult: fromResult,\n fromFuture: fromFuture,\n fromPromise: fromPromise\n };\n\n var separator$1 = { type: 'separator' };\n var toMenuItem = function (target) {\n return {\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: noop\n };\n };\n var staticMenuItem = function (title, url) {\n return {\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: noop\n };\n };\n var toMenuItems = function (targets) {\n return map$2(targets, toMenuItem);\n };\n var filterLinkTargets = function (type, targets) {\n return filter$2(targets, function (target) {\n return target.type === type;\n });\n };\n var filteredTargets = function (type, targets) {\n return toMenuItems(filterLinkTargets(type, targets));\n };\n var headerTargets = function (linkInfo) {\n return filteredTargets('header', linkInfo.targets);\n };\n var anchorTargets = function (linkInfo) {\n return filteredTargets('anchor', linkInfo.targets);\n };\n var anchorTargetTop = function (linkInfo) {\n return Optional.from(linkInfo.anchorTop).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var anchorTargetBottom = function (linkInfo) {\n return Optional.from(linkInfo.anchorBottom).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var historyTargets = function (history) {\n return map$2(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$1, b);\n }, []);\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n return filter$2(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$6('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(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$7(invalidComp.element, 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: function (input) {\n var urlEntry = Representing.getValue(input);\n return FutureResult.nu(function (completer) {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, function (validation) {\n if (validation.status === 'invalid') {\n var err = Result.error(validation.message);\n completer(err);\n } else {\n var val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n });\n }).toArray(),\n [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n config('urlinput-events', flatten([\n spec.filetype === 'file' ? [run$1(input(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n })] : [],\n [\n run$1(change(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run$1(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$2(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 render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\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 }, providersBackstage.icons);\n };\n var memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n var memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n var optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n var browseUrlEvent = generate$6('browser.url.event');\n var memUrlBox = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap']\n },\n components: [\n pField,\n memStatus.asSpec()\n ],\n behaviours: derive$1([Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n })])\n });\n var memUrlPickerButton = record(renderButton({\n name: spec.name,\n icon: Optional.some('browse'),\n text: spec.label.getOr(''),\n disabled: spec.disabled,\n primary: false,\n borderless: true\n }, function (component) {\n return emit(component, browseUrlEvent);\n }, providersBackstage, [], ['tox-browse-url']));\n var controlHWrapper = function () {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(function () {\n return memUrlPickerButton.asSpec();\n }).toArray()\n ])\n };\n };\n var openUrlPicker = function (comp) {\n Composing.getCurrent(comp).each(function (field) {\n var componentData = Representing.getValue(field);\n var urlData = __assign({ fieldname: spec.name }, componentData);\n optUrlPicker.each(function (picker) {\n picker(urlData).get(function (chosenData) {\n Representing.setValue(field, chosenData);\n emitWith(comp, formChangeEvent, { name: spec.name });\n });\n });\n });\n };\n return FormField.sketch({\n dom: renderFormFieldDom(),\n components: pLabel.toArray().concat([controlHWrapper()]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n receivingConfig(),\n config('url-input-events', [run$1(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$1(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 buttonBehaviours: derive$1([addFocusableBehaviour()])\n })]\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body'],\n innerHtml: providersBackstage.translate(spec.text)\n }\n }\n ]\n });\n };\n\n var renderCheckbox = function (spec, providerBackstage) {\n var repBehaviour = Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var el = comp.element.dom;\n return el.checked;\n },\n setValue: function (comp, value) {\n var el = comp.element.dom;\n el.checked = value;\n }\n }\n });\n var toggleCheckboxHandler = function (comp) {\n comp.element.dom.click();\n return Optional.some(true);\n };\n var pField = FormField.parts.field({\n factory: { sketch: identity$1 },\n dom: {\n tag: 'input',\n classes: ['tox-checkbox__input'],\n attributes: { type: 'checkbox' }\n },\n behaviours: derive$1([\n ComposingConfigs.self(),\n Disabling.config({\n disabled: function () {\n return spec.disabled || providerBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n repBehaviour,\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run$1(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 render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ]\n }, providerBackstage.icons);\n };\n var memIcons = record({\n dom: {\n tag: 'div',\n classes: ['tox-checkbox__icons']\n },\n components: [\n makeIcon('checked'),\n makeIcon('unchecked')\n ]\n });\n return FormField.sketch({\n dom: {\n tag: 'label',\n classes: ['tox-checkbox']\n },\n components: [\n pField,\n memIcons.asSpec(),\n pLabel\n ],\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providerBackstage.isDisabled();\n },\n disableClass: 'tox-checkbox--disabled',\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderHtmlPanel = function (spec) {\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html\n }\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n });\n }\n };\n\n var make$2 = function (render) {\n return function (parts, spec, backstage) {\n return get$e(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$2(render)(parts, iframeSpec, backstage);\n };\n };\n var factories = {\n bar: make$2(function (spec, backstage) {\n return renderBar(spec, backstage.shared);\n }),\n collection: make$2(function (spec, backstage) {\n return renderCollection(spec, backstage.shared.providers);\n }),\n alertbanner: make$2(function (spec, backstage) {\n return renderAlertBanner(spec, backstage.shared.providers);\n }),\n input: make$2(function (spec, backstage) {\n return renderInput(spec, backstage.shared.providers);\n }),\n textarea: make$2(function (spec, backstage) {\n return renderTextarea(spec, backstage.shared.providers);\n }),\n label: make$2(function (spec, backstage) {\n return renderLabel(spec, backstage.shared);\n }),\n iframe: makeIframe(function (spec, backstage) {\n return renderIFrame(spec, backstage.shared.providers);\n }),\n button: make$2(function (spec, backstage) {\n return renderDialogButton(spec, backstage.shared.providers);\n }),\n checkbox: make$2(function (spec, backstage) {\n return renderCheckbox(spec, backstage.shared.providers);\n }),\n colorinput: make$2(function (spec, backstage) {\n return renderColorInput(spec, backstage.shared, backstage.colorinput);\n }),\n colorpicker: make$2(renderColorPicker),\n dropzone: make$2(function (spec, backstage) {\n return renderDropZone(spec, backstage.shared.providers);\n }),\n grid: make$2(function (spec, backstage) {\n return renderGrid(spec, backstage.shared);\n }),\n listbox: make$2(function (spec, backstage) {\n return renderListBox(spec, backstage);\n }),\n selectbox: make$2(function (spec, backstage) {\n return renderSelectBox(spec, backstage.shared.providers);\n }),\n sizeinput: make$2(function (spec, backstage) {\n return renderSizeInput(spec, backstage.shared.providers);\n }),\n urlinput: make$2(function (spec, backstage) {\n return renderUrlInput(spec, backstage, backstage.urlinput);\n }),\n customeditor: make$2(renderCustomEditor),\n htmlpanel: make$2(renderHtmlPanel),\n imagetools: make$2(function (spec, backstage) {\n return renderImageTools(spec, backstage.shared.providers);\n }),\n table: make$2(function (spec, backstage) {\n return renderTable(spec, backstage.shared.providers);\n }),\n panel: make$2(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$e(factories, spec.type).fold(function () {\n console.error('Unknown factory type \"' + spec.type + '\", defaulting to container: ', spec);\n return spec;\n }, function (factory) {\n return factory(parts, spec, backstage);\n });\n };\n var interpretWithoutForm = function (spec, backstage) {\n var parts = noFormParts;\n return interpretParts(parts, spec, backstage);\n };\n\n var bubbleAlignments$2 = {\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 bubbleSize = 12;\n var overrides = { maxHeightFunction: expandable$1() };\n var editableAreaAnchor = function () {\n return {\n type: 'node',\n root: getContentContainer(contentAreaElement()),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: function () {\n return [northeast];\n },\n onLtr: function () {\n return [northwest];\n }\n },\n overrides: overrides\n };\n };\n var standardAnchor = function () {\n return {\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: nu$5(-bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: function () {\n return [southeast$2];\n },\n onLtr: function () {\n return [southwest$2];\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 type: 'node',\n root: getContentContainer(contentAreaElement()),\n node: Optional.from(contentAreaElement()),\n layouts: {\n onRtl: function () {\n return [north];\n },\n onLtr: function () {\n return [north];\n }\n }\n };\n };\n var standardAnchor = function () {\n return {\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: function () {\n return [south$2];\n },\n onLtr: function () {\n return [south$2];\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 type: 'selection',\n root: bodyElement(),\n getSelection: function () {\n var rng = editor.selection.getRng();\n return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n }\n };\n };\n };\n var getNodeAnchor$1 = function (bodyElement) {\n return function (element) {\n return {\n type: 'node',\n root: bodyElement(),\n node: element\n };\n };\n };\n var getAnchors = function (editor, lazyAnchorbar, isToolbarTop) {\n var useFixedToolbarContainer = useFixedContainer(editor);\n var bodyElement = function () {\n return SugarElement.fromDom(editor.getBody());\n };\n var contentAreaElement = function () {\n return SugarElement.fromDom(editor.getContentAreaContainer());\n };\n var lazyUseEditableAreaAnchor = function () {\n return useFixedToolbarContainer || !isToolbarTop();\n };\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor$1(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 = function (editor) {\n return function () {\n return hasCustomColors$1(editor);\n };\n };\n var getColors = function (editor) {\n return function () {\n return getColors$2(editor);\n };\n };\n var getColorCols = 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(editor),\n getColors: getColors(editor),\n getColorCols: getColorCols(editor)\n };\n };\n\n var isDraggableModal = function (editor) {\n return function () {\n return isDraggableModal$1(editor);\n };\n };\n var DialogBackstage = function (editor) {\n return { isDraggableModal: isDraggableModal(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$2(format, 'items');\n };\n var isBlockFormat = function (format) {\n return has$2(format, 'block');\n };\n var isInlineFormat = function (format) {\n return has$2(format, 'inline');\n };\n var isSelectorFormat = function (format) {\n return has$2(format, 'selector');\n };\n var mapFormats = function (userFormats) {\n return foldl(userFormats, function (acc, fmt) {\n if (isNestedFormat(fmt)) {\n var result = mapFormats(fmt.items);\n return {\n customFormats: acc.customFormats.concat(result.customFormats),\n formats: acc.formats.concat([{\n title: fmt.title,\n items: result.formats\n }])\n };\n } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n var formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n var formatNameWithPrefix = 'custom-' + formatName;\n return {\n customFormats: acc.customFormats.concat([{\n name: formatNameWithPrefix,\n format: fmt\n }]),\n formats: acc.formats.concat([{\n title: fmt.title,\n format: formatNameWithPrefix,\n icon: fmt.icon\n }])\n };\n } else {\n return __assign(__assign({}, acc), { formats: acc.formats.concat(fmt) });\n }\n }, {\n customFormats: [],\n formats: []\n });\n };\n var registerCustomFormats = function (editor, userFormats) {\n var result = mapFormats(userFormats);\n var registerFormats = function (customFormats) {\n each$1(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$8 = function (editor, formats, isSelectedFor, getPreviewFor) {\n var enrichSupported = function (item) {\n return processBasic(item, isSelectedFor, getPreviewFor);\n };\n var enrichMenu = function (item) {\n var submenuSpec = { type: 'submenu' };\n return deepMerge(item, submenuSpec);\n };\n var enrichCustom = function (item) {\n var formatName = isString(item.name) ? item.name : generate$6(item.title);\n var formatNameWithPrefix = 'custom-' + formatName;\n var customSpec = {\n type: 'formatter',\n format: formatNameWithPrefix,\n isSelected: isSelectedFor(formatNameWithPrefix),\n getStylePreview: getPreviewFor(formatNameWithPrefix)\n };\n var newItem = deepMerge(item, customSpec);\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n var doEnrich = function (items) {\n return map$2(items, function (item) {\n var keys$1 = keys(item);\n if (hasNonNullableKey(item, 'items')) {\n var newItems = doEnrich(item.items);\n return deepMerge(enrichMenu(item), { getStyleItems: constant$1(newItems) });\n } else if (hasNonNullableKey(item, 'format')) {\n return enrichSupported(item);\n } else if (keys$1.length === 1 && contains$2(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$8 = function (editor) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n };\n var flatten = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind$3(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$8(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n settingsFlattenedFormats.set(bind$3(enriched, flatten));\n });\n editor.on('addStyleModifications', function (e) {\n var modifications = register$8(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n eventsFlattenedFormats.set(bind$3(modifications, flatten));\n });\n var getData = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n var fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n var getFlattenedKeys = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFlattenedFormats.get();\n var fromEvents = eventsFlattenedFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return {\n getData: getData,\n getFlattenedKeys: getFlattenedKeys\n };\n };\n\n var isElement = function (node) {\n return isNonNullable(node) && node.nodeType === 1;\n };\n var trim = global$6.trim;\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var create = 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$2(descendants(SugarElement.fromDom(root), selector), function (element) {\n return element.dom;\n });\n };\n var getElementText = function (elm) {\n return elm.innerText || elm.textContent;\n };\n var getOrGenerateId = function (elm) {\n return elm.id ? elm.id : generate$6('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('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('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n var getHeaderTargets = function (elms) {\n return map$2(filter$2(elms, isValidHeader), headerTarget);\n };\n var getAnchorTargets = function (elms) {\n return map$2(filter$2(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(target.title).length > 0;\n };\n var find = function (elm) {\n var elms = getTargetElements(elm);\n return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find };\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$4(r, function (value) {\n return !isArrayOfUrl(value);\n }).isNone();\n };\n var getAllHistory = function () {\n var unparsedHistory = global$9.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n var history;\n try {\n history = JSON.parse(unparsedHistory);\n } catch (e) {\n if (e instanceof SyntaxError) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n return {};\n }\n throw e;\n }\n if (!isRecordOfUrlArray(history)) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);\n return {};\n }\n return history;\n };\n var setAllHistory = function (history) {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n global$9.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n var getHistory = function (fileType) {\n var history = getAllHistory();\n return get$e(history, fileType).getOr([]);\n };\n var addToHistory = function (url, fileType) {\n if (!isHttpUrl(url)) {\n return;\n }\n var history = getAllHistory();\n var items = get$e(history, fileType).getOr([]);\n var itemsWithoutUrl = filter$2(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(global$6.makeMap(value, /[, ]/), isTruthy);\n };\n var getPicker = function (editor) {\n return Optional.from(getFilePickerCallback(editor)).filter(isFunction);\n };\n var getPickerTypes = function (editor) {\n var optFileTypes = Optional.some(getFilePickerTypes(editor)).filter(isTruthy);\n var optLegacyTypes = Optional.some(getFileBrowserCallbackTypes(editor)).filter(isTruthy);\n var optTypes = optFileTypes.or(optLegacyTypes).map(makeMap);\n return getPicker(editor).fold(never, function (_picker) {\n return optTypes.fold(always, function (types) {\n return keys(types).length > 0 ? types : false;\n });\n });\n };\n var getPickerSetting = function (editor, filetype) {\n var pickerTypes = getPickerTypes(editor);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(editor) : Optional.none();\n } else {\n return pickerTypes[filetype] ? getPicker(editor) : Optional.none();\n }\n };\n var getUrlPicker = function (editor, filetype) {\n return getPickerSetting(editor, filetype).map(function (picker) {\n return function (entry) {\n return Future.nu(function (completer) {\n var handler = function (value, meta) {\n if (!isString(value)) {\n throw new Error('Expected value to be string');\n }\n if (meta !== undefined && !isObject(meta)) {\n throw new Error('Expected meta to be a object');\n }\n var r = {\n value: value,\n meta: meta\n };\n completer(r);\n };\n var meta = __assign({\n filetype: filetype,\n fieldname: entry.fieldname\n }, Optional.from(entry.meta).getOr({}));\n picker.call(editor, handler, entry.value, meta);\n });\n };\n });\n };\n var getTextSetting = function (value) {\n return Optional.from(value).filter(isString).getOrUndefined();\n };\n var getLinkInformation = function (editor) {\n if (noTypeaheadUrls(editor)) {\n return Optional.none();\n }\n return Optional.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(getAnchorTop(editor)),\n anchorBottom: getTextSetting(getAnchorBottom(editor))\n });\n };\n var getValidationHandler = function (editor) {\n return Optional.from(getFilePickerValidatorHandler(editor));\n };\n var UrlInputBackstage = function (editor) {\n return {\n getHistory: getHistory,\n addToHistory: addToHistory,\n getLinkInformation: function () {\n return getLinkInformation(editor);\n },\n getValidationHandler: function () {\n return getValidationHandler(editor);\n },\n getUrlPicker: function (filetype) {\n return getUrlPicker(editor, filetype);\n }\n };\n };\n\n var init$7 = 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$f.translate,\n isDisabled: function () {\n return editor.mode.isReadOnly() || editor.ui.isDisabled();\n },\n getSetting: editor.getParam.bind(editor)\n },\n interpreter: function (s) {\n return interpretWithoutForm(s, backstage);\n },\n anchors: getAnchors(editor, lazyAnchorbar, toolbar.isPositionedAtTop),\n header: toolbar,\n getSink: function () {\n return Result.value(sink);\n }\n },\n urlinput: UrlInputBackstage(editor),\n styleselect: init$8(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 setup$b = function (editor, mothership, uiMothership) {\n var broadcastEvent = function (name, evt) {\n each$1([\n mothership,\n uiMothership\n ], function (ship) {\n ship.broadcastEvent(name, evt);\n });\n };\n var broadcastOn = function (channel, message) {\n each$1([\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(SugarElement.fromDom(document), 'touchstart', fireDismissPopups);\n var onTouchmove = bind(SugarElement.fromDom(document), 'touchmove', function (evt) {\n return broadcastEvent(documentTouchmove(), evt);\n });\n var onTouchend = bind(SugarElement.fromDom(document), 'touchend', function (evt) {\n return broadcastEvent(documentTouchend(), evt);\n });\n var onMousedown = bind(SugarElement.fromDom(document), 'mousedown', fireDismissPopups);\n var onMouseup = bind(SugarElement.fromDom(document), 'mouseup', function (evt) {\n if (evt.raw.button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target });\n }\n });\n var onContentClick = function (raw) {\n return broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n };\n var onContentMouseup = function (raw) {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n }\n };\n var onContentMousedown = function () {\n each$1(editor.editorManager.get(), function (loopEditor) {\n if (editor !== loopEditor) {\n loopEditor.fire('DismissPopups', { relatedTarget: editor });\n }\n });\n };\n var onWindowScroll = function (evt) {\n return broadcastEvent(windowScroll(), fromRawEvent(evt));\n };\n var onWindowResize = function (evt) {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent(evt));\n };\n var onEditorResize = function () {\n return broadcastOn(repositionPopups(), {});\n };\n var onEditorProgress = function (evt) {\n if (evt.state) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n }\n };\n var onDismissPopups = function (event) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n };\n editor.on('PostRender', function () {\n editor.on('click', onContentClick);\n editor.on('tap', onContentClick);\n editor.on('mouseup', onContentMouseup);\n editor.on('mousedown', onContentMousedown);\n editor.on('ScrollWindow', onWindowScroll);\n editor.on('ResizeWindow', onWindowResize);\n editor.on('ResizeEditor', onEditorResize);\n editor.on('AfterProgressState', onEditorProgress);\n editor.on('DismissPopups', onDismissPopups);\n });\n editor.on('remove', function () {\n editor.off('click', onContentClick);\n editor.off('tap', onContentClick);\n editor.off('mouseup', onContentMouseup);\n editor.off('mousedown', onContentMousedown);\n editor.off('ScrollWindow', onWindowScroll);\n editor.off('ResizeWindow', onWindowResize);\n editor.off('ResizeEditor', onEditorResize);\n editor.off('AfterProgressState', onEditorProgress);\n editor.off('DismissPopups', onDismissPopups);\n onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n });\n editor.on('detach', function () {\n detachSystem(mothership);\n detachSystem(uiMothership);\n mothership.destroy();\n uiMothership.destroy();\n });\n };\n\n var parts$a = AlloyParts;\n var partType = PartType;\n\n var schema$f = constant$1([\n defaulted('shell', false),\n required$1('makeItem'),\n defaulted('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$9 = constant$1([itemsPart]);\n var name = constant$1('CustomList');\n\n var factory$d = function (detail, components, _spec, _external) {\n var setItems = function (list, items) {\n getListContainer(list).fold(function () {\n console.error('Custom List was defined to not be a shell, but no item container was specified in components');\n throw new Error('Custom List was defined to not be a shell, but no item container was specified in components');\n }, function (container) {\n var itemComps = Replacing.contents(container);\n var numListsRequired = items.length;\n var numListsToAdd = numListsRequired - itemComps.length;\n var itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, function () {\n return detail.makeItem();\n }) : [];\n var itemsToRemove = itemComps.slice(numListsRequired);\n each$1(itemsToRemove, function (item) {\n return Replacing.remove(container, item);\n });\n each$1(itemsToAdd, function (item) {\n return Replacing.append(container, item);\n });\n var builtLists = Replacing.contents(container);\n each$1(builtLists, function (item, i) {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: components\n };\n var getListContainer = function (component) {\n return detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems: setItems }\n };\n };\n var CustomList = composite({\n name: name(),\n configFields: schema$f(),\n partFields: parts$9(),\n factory: factory$d,\n apis: {\n setItems: function (apis, list, items) {\n apis.setItems(list, items);\n }\n }\n });\n\n var schema$e = constant$1([\n required$1('dom'),\n defaulted('shell', true),\n field('toolbarBehaviours', [Replacing])\n ]);\n var enhanceGroups = function () {\n return { behaviours: derive$1([Replacing.config({})]) };\n };\n var parts$8 = constant$1([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n var factory$c = function (detail, components, _spec, _externals) {\n var setGroups = function (toolbar, groups) {\n getGroupContainer(toolbar).fold(function () {\n console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n }, function (container) {\n Replacing.set(container, groups);\n });\n };\n var getGroupContainer = function (component) {\n return detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: components\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n apis: { setGroups: setGroups },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var Toolbar = composite({\n name: 'Toolbar',\n configFields: schema$e(),\n partFields: parts$8(),\n factory: factory$c,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n var setup$a = noop;\n var isDocked$2 = never;\n var getBehaviours$1 = constant$1([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$a,\n isDocked: isDocked$2,\n getBehaviours: getBehaviours$1\n });\n\n var getOffsetParent = function (element) {\n var isFixed = is(getRaw(element, 'position'), 'fixed');\n var offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n return offsetParent$1.orThunk(function () {\n var marker = SugarElement.fromTag('span');\n return parent(element).bind(function (parent) {\n append$2(parent, marker);\n var offsetParent$1 = offsetParent(marker);\n remove$7(marker);\n return offsetParent$1;\n });\n });\n };\n var getOrigin = function (element) {\n return getOffsetParent(element).map(absolute$3).getOrThunk(function () {\n return SugarPosition(0, 0);\n });\n };\n\n var morphAdt = Adt.generate([\n { static: [] },\n { absolute: ['positionCss'] },\n { fixed: ['positionCss'] }\n ]);\n var appear = function (component, contextualInfo) {\n var elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$3(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$3(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.getInitialPos().map(function (pos) {\n return bounds(pos.bounds.x, pos.bounds.y, get$7(elem), get$8(elem));\n });\n };\n var storePrior = function (elem, box, state) {\n state.setInitialPos({\n style: getAllRaw(elem),\n position: get$a(elem, 'position') || 'static',\n bounds: box\n });\n };\n var revertToOriginal = function (elem, box, state) {\n return state.getInitialPos().bind(function (position) {\n state.clearInitialPos();\n switch (position.position) {\n case 'static':\n return Optional.some(morphAdt.static());\n case 'absolute':\n var offsetBox_1 = getOffsetParent(elem).map(box$1).getOrThunk(function () {\n return box$1(body());\n });\n return Optional.some(morphAdt.absolute(NuPositionCss('absolute', get$e(position.style, 'left').map(function (_left) {\n return box.x - offsetBox_1.x;\n }), get$e(position.style, 'top').map(function (_top) {\n return box.y - offsetBox_1.y;\n }), get$e(position.style, 'right').map(function (_right) {\n return offsetBox_1.right - box.right;\n }), get$e(position.style, 'bottom').map(function (_bottom) {\n return offsetBox_1.bottom - box.bottom;\n }))));\n default:\n return Optional.none();\n }\n });\n };\n var morphToOriginal = function (elem, viewport, state) {\n return getPrior(elem, state).filter(function (box) {\n return isVisibleForModes(state.getModes(), box, viewport);\n }).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n var morphToFixed = function (elem, viewport, state) {\n var box = box$1(elem);\n if (!isVisibleForModes(state.getModes(), box, viewport)) {\n storePrior(elem, box, state);\n var winBox = win();\n var left = box.x - winBox.x;\n var top_1 = viewport.y - winBox.y;\n var bottom = winBox.bottom - viewport.bottom;\n var isTop = box.y <= viewport.y;\n return Optional.some(morphAdt.fixed(NuPositionCss('fixed', Optional.some(left), isTop ? Optional.some(top_1) : Optional.none(), Optional.none(), !isTop ? Optional.some(bottom) : Optional.none())));\n } else {\n return Optional.none();\n }\n };\n var getMorph = function (component, viewport, state) {\n var elem = component.element;\n var isDocked = is(getRaw(elem, 'position'), '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$1([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], function (prop) {\n return remove$1(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$1(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$2(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n var refresh$4 = function (component, config, state) {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n var reset = function (component, config, state) {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n var isDocked$1 = function (component, config, state) {\n return state.isDocked();\n };\n var setModes = function (component, config, state, modes) {\n return state.setModes(modes);\n };\n var getModes = function (component, config, state) {\n return state.getModes();\n };\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset,\n isDocked: isDocked$1,\n getModes: getModes,\n setModes: setModes\n });\n\n var events$5 = function (dockInfo, dockState) {\n return derive$2([\n runOnSource(transitionend(), function (component, simulatedEvent) {\n dockInfo.contextual.each(function (contextInfo) {\n if (has(component.element, contextInfo.transitionClass)) {\n remove$2(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$1(windowScroll(), function (component, _) {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(windowResize(), function (component, _) {\n reset(component, dockInfo, dockState);\n })\n ]);\n };\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$5\n });\n\n var DockingSchema = [\n optionObjOf('contextual', [\n requiredString('fadeInClass'),\n requiredString('fadeOutClass'),\n requiredString('transitionClass'),\n requiredFunction('lazyContext'),\n onHandler('onShow'),\n onHandler('onShown'),\n onHandler('onHide'),\n onHandler('onHidden')\n ]),\n defaultedFunction('lazyViewport', win),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n var init$6 = function (spec) {\n var docked = Cell(false);\n var visible = Cell(true);\n var initialBounds = value$1();\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$8({\n isDocked: docked.get,\n setDocked: docked.set,\n getInitialPos: initialBounds.get,\n setInitialPos: initialBounds.set,\n clearInitialPos: initialBounds.clear,\n isVisible: visible.get,\n setVisible: visible.set,\n getModes: modes.get,\n setModes: modes.set,\n readState: readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$6\n });\n\n var Docking = create$7({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n var toolbarHeightChange = constant$1(generate$6('toolbar-height-change'));\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$4(containerHeader);\n var viewHeight = doc.dom.defaultView.innerHeight;\n var scrollPos = get$6(doc);\n var markerElement = SugarElement.fromDom(e.elm);\n var markerPos = absolute$2(markerElement);\n var markerHeight = get$8(markerElement);\n var markerTop = markerPos.y;\n var markerBottom = markerTop + markerHeight;\n var editorHeaderPos = absolute$3(containerHeader);\n var editorHeaderHeight = get$8(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$2(Docking.getModes(header), mode);\n };\n var updateIframeContentFlow = function (header) {\n var getOccupiedHeight = function (elm) {\n return getOuter$1(elm) + (parseInt(get$a(elm, 'margin-top'), 10) || 0) + (parseInt(get$a(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$6(elm, 'width', parentWidth + 'px');\n set$6(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$1(elm, 'width');\n remove$1(parentElem, padding);\n }\n });\n };\n var updateSinkVisibility = function (sinkElem, visible) {\n if (visible) {\n remove$3(sinkElem, visibility.fadeOutClass);\n add$1(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$3(sinkElem, visibility.fadeInClass);\n add$1(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n var updateEditorClasses = function (editor, docked) {\n var editorContainer = SugarElement.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$3(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$3(editorContainer, editorStickyOnClass);\n }\n };\n var restoreFocus = function (headerElem, focusedElem) {\n var ownerDoc = owner$4(focusedElem);\n active(ownerDoc).filter(function (activeElm) {\n return !eq(focusedElem, activeElm);\n }).filter(function (activeElm) {\n return eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm);\n }).each(function () {\n return focus$3(focusedElem);\n });\n };\n var findFocusedElem = function (rootElm, lazySink) {\n return search(rootElm).orThunk(function () {\n return lazySink().toOptional().bind(function (sink) {\n return search(sink.element);\n });\n });\n };\n var setup$9 = 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 = 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 = function (editor, sharedBackstage) {\n var focusedElm = value$1();\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 __spreadArray([\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 = box$1(SugarElement.fromDom(container));\n var boxHeight = box.height - headerHeight;\n var topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n return Optional.some(bounds(box.x, topBound, box.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$2(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n });\n focusedElm.get().each(function (elem) {\n restoreFocus(comp.element, elem);\n focusedElm.clear();\n });\n },\n onHide: function (comp) {\n findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n runOnSinkElement(function (elem) {\n return updateSinkVisibility(elem, false);\n });\n },\n onHidden: function () {\n runOnSinkElement(function (elem) {\n return remove$2(elem, [visibility.transitionClass]);\n });\n }\n }, visibility),\n lazyViewport: function (comp) {\n var win$1 = win();\n var offset = getStickyToolbarOffset(editor);\n var top = win$1.y + (isDockedMode(comp, 'top') ? offset : 0);\n var height = win$1.height - (isDockedMode(comp, 'bottom') ? offset : 0);\n return bounds(win$1.x, top, win$1.width, height);\n },\n modes: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n })\n ], additionalBehaviours);\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$9,\n isDocked: isDocked,\n getBehaviours: getBehaviours\n });\n\n var renderHeader = function (spec) {\n var editor = spec.editor;\n var getBehaviours$2 = spec.sticky ? getBehaviours : getBehaviours$1;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours$2(editor, spec.sharedBackstage))\n };\n };\n\n var groupToolbarButtonSchema = objOf([\n requiredString('type'),\n requiredOf('items', oneOf([\n arrOfObj([\n requiredString('name'),\n requiredArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n var createGroupToolbarButton = function (spec) {\n return asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n };\n\n var baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n\n var MenuButtonSchema = objOf(__spreadArray([requiredString('type')], baseMenuButtonFields));\n var createMenuButton = function (spec) {\n return asRaw('menubutton', MenuButtonSchema, spec);\n };\n\n var splitButtonSchema = objOf([\n requiredString('type'),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n optionFunction('select'),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaulted('columns', 1),\n requiredFunction('onAction'),\n requiredFunction('onItemAction')\n ]);\n var createSplitButton = function (spec) {\n return asRaw('SplitButton', splitButtonSchema, spec);\n };\n\n var factory$b = function (detail, spec) {\n var setMenus = function (comp, menus) {\n var newMenus = map$2(menus, function (m) {\n var buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: function (callback) {\n callback(m.getItems());\n }\n };\n var internal = createMenuButton(buttonSpec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n var apis = {\n focus: Keying.focusIn,\n setMenus: setMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n config('menubar-events', [\n runOnAttached(function (component) {\n detail.onSetup(component);\n }),\n run$1(mouseover(), function (comp, se) {\n descendant(comp.element, '.' + 'tox-mbtn--active').each(function (activeButton) {\n closest$1(se.event.target, '.' + 'tox-mbtn').each(function (hoveredButton) {\n if (!eq(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(function (activeComp) {\n comp.getSystem().getByDom(hoveredButton).each(function (hoveredComp) {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run$1(focusShifted(), function (comp, se) {\n se.event.prevFocus.bind(function (prev) {\n return comp.getSystem().getByDom(prev).toOptional();\n }).each(function (prev) {\n se.event.newFocus.bind(function (nu) {\n return comp.getSystem().getByDom(nu).toOptional();\n }).each(function (nu) {\n if (Dropdown.isOpen(prev)) {\n Dropdown.expand(nu);\n Dropdown.close(prev);\n }\n });\n });\n })\n ]),\n Keying.config({\n mode: 'flow',\n selector: '.' + 'tox-mbtn',\n onEscape: function (comp) {\n detail.onEscape(comp);\n return Optional.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis: apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single({\n factory: factory$b,\n name: 'silver.Menubar',\n configFields: [\n required$1('dom'),\n required$1('uid'),\n required$1('onEscape'),\n required$1('backstage'),\n defaulted('onSetup', noop)\n ],\n apis: {\n focus: 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 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$2(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n var setShrunk = function (component, slideConfig) {\n remove$3(component.element, slideConfig.openClass);\n add$2(component.element, slideConfig.closedClass);\n set$6(component.element, getDimensionProperty(slideConfig), '0px');\n reflow(component.element);\n };\n var setGrown = function (component, slideConfig) {\n remove$3(component.element, slideConfig.closedClass);\n add$2(component.element, slideConfig.openClass);\n remove$1(component.element, getDimensionProperty(slideConfig));\n };\n var doImmediateShrink = function (component, slideConfig, slideState, _calculatedSize) {\n slideState.setCollapsed();\n set$6(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$6(component.element, getDimensionProperty(slideConfig), size);\n reflow(component.element);\n var root = getAnimationRoot(component, slideConfig);\n remove$3(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n var doStartSmartShrink = function (component, slideConfig, slideState) {\n var size = getDimension(slideConfig, component.element);\n var shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Optional.some(size));\n };\n var doStartGrow = function (component, slideConfig, slideState) {\n var root = getAnimationRoot(component, slideConfig);\n var wasShrinking = has(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$6(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$3(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$6(component.element, getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n var refresh$3 = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n remove$1(component.element, getDimensionProperty(slideConfig));\n var fullSize = getDimension(slideConfig, component.element);\n set$6(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);\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(root, slideConfig.growingClass) === true;\n };\n var isShrinking = function (component, slideConfig, _slideState) {\n var root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.shrinkingClass) === true;\n };\n var isTransitioning = function (component, slideConfig, slideState) {\n return isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n };\n var toggleGrow = function (component, slideConfig, slideState) {\n var f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\n };\n\n var SlidingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$3,\n grow: grow,\n shrink: shrink,\n immediateShrink: immediateShrink,\n hasGrown: hasGrown,\n hasShrunk: hasShrunk,\n isGrowing: isGrowing,\n isShrinking: isShrinking,\n isTransitioning: isTransitioning,\n toggleGrow: toggleGrow,\n disableTransitions: disableTransitions\n });\n\n var exhibit = function (base, slideConfig, _slideState) {\n var expanded = slideConfig.expanded;\n return expanded ? nu$7({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$7({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n var events$4 = function (slideConfig, slideState) {\n return derive$2([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$1(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,\n events: events$4\n });\n\n var SlidingSchema = [\n required$1('closedClass'),\n required$1('openClass'),\n required$1('shrinkingClass'),\n required$1('growingClass'),\n option('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted('expanded', false),\n requiredOf('dimension', choose$1('property', {\n width: [\n output$1('property', 'width'),\n output$1('getDimension', function (elem) {\n return get$7(elem) + 'px';\n })\n ],\n height: [\n output$1('property', 'height'),\n output$1('getDimension', function (elem) {\n return get$8(elem) + 'px';\n })\n ]\n }))\n ];\n\n var init$5 = function (spec) {\n var state = Cell(spec.expanded);\n var readState = function () {\n return 'expanded: ' + state.get();\n };\n return nu$8({\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$5\n });\n\n var Sliding = create$7({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n var owner = 'container';\n var schema$d = [field('slotBehaviours', [])];\n var getPartName = function (name) {\n return '';\n };\n var sketch = function (sSpec) {\n var parts = function () {\n var record = [];\n var slot = function (name, config) {\n record.push(name);\n return generateOne$1(owner, getPartName(name), config);\n };\n return {\n slot: slot,\n record: constant$1(record)\n };\n }();\n var spec = sSpec(parts);\n var partNames = parts.record();\n var fieldParts = map$2(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName(n)\n });\n });\n return composite$1(owner, schema$d, fieldParts, make$1, spec);\n };\n var make$1 = 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$1(keys, function (key) {\n return f(container, key);\n });\n };\n };\n var doShowing = function (comp, _key) {\n return get$c(comp.element, 'aria-hidden') !== 'true';\n };\n var doShow = function (comp, key) {\n if (!doShowing(comp)) {\n var element = comp.element;\n remove$1(element, 'display');\n remove$6(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$6(element, 'display', 'none');\n set$7(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$2(detail.slotBehaviours),\n apis: apis\n };\n };\n var slotApis = map({\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 });\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$8 = function (editor) {\n var sidebars = editor.ui.registry.getAll().sidebars;\n each$1(keys(sidebars), function (name) {\n var spec = sidebars[name];\n var isActive = function () {\n return is(Optional.from(editor.queryCommandValue('ToggleSidebar')), 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$2(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$2(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$1(slotVisibility(), function (sidepanel, se) {\n var data = se.event;\n var optSidePanelSpec = find$5(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$5(SlotContainer.getSlotNames(slotContainer), function (name) {\n return SlotContainer.isShowing(slotContainer, name);\n });\n });\n } else {\n return Optional.none();\n }\n });\n };\n var fixSize = generate$6('FixSizeEvent');\n var autoSize = generate$6('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$1(fixSize, function (comp, se) {\n set$6(comp.element, 'width', se.event.width);\n }),\n run$1(autoSize, function (comp, _se) {\n remove$1(comp.element, 'width');\n })\n ])\n ])\n };\n };\n\n var block = function (component, config, state, getBusySpec) {\n set$7(component.element, 'aria-busy', true);\n var root = config.getRoot(component).getOr(component);\n var blockerBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: function () {\n return Optional.some(true);\n },\n onShiftTab: function () {\n return Optional.some(true);\n }\n }),\n Focusing.config({})\n ]);\n var blockSpec = getBusySpec(root, blockerBehaviours);\n var blocker = root.getSystem().build(blockSpec);\n Replacing.append(root, premade(blocker));\n if (blocker.hasConfigured(Keying) && config.focus) {\n Keying.focusIn(blocker);\n }\n if (!state.isBlocked()) {\n config.onBlock(component);\n }\n state.blockWith(function () {\n return Replacing.remove(root, blocker);\n });\n };\n var unblock = function (component, config, state) {\n remove$6(component.element, 'aria-busy');\n if (state.isBlocked()) {\n config.onUnblock(component);\n }\n state.clear();\n };\n\n var BlockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n block: block,\n unblock: unblock\n });\n\n var BlockingSchema = [\n defaultedFunction('getRoot', Optional.none),\n defaultedBoolean('focus', true),\n onHandler('onBlock'),\n onHandler('onUnblock')\n ];\n\n var init$4 = function () {\n var blocker = destroyable();\n var blockWith = function (destroy) {\n blocker.set({ destroy: destroy });\n };\n return nu$8({\n readState: blocker.isSet,\n blockWith: blockWith,\n clear: blocker.clear,\n isBlocked: blocker.isSet\n });\n };\n\n var BlockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$4\n });\n\n var Blocking = create$7({\n fields: BlockingSchema,\n name: 'blocking',\n apis: BlockingApis,\n state: BlockingState\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 = function (html) {\n var elem = SugarElement.fromHtml(html);\n var children$1 = children(elem);\n var attrs = getAttrs(elem);\n var classes = getClasses(elem);\n var contents = children$1.length === 0 ? {} : { innerHtml: get$d(elem) };\n return __assign({\n tag: name$2(elem),\n classes: classes,\n attributes: attrs\n }, contents);\n };\n\n var getBusySpec$1 = function (providerBackstage) {\n return function (_root, _behaviours) {\n return {\n dom: {\n tag: 'div',\n attributes: {\n 'aria-label': providerBackstage.translate('Loading...'),\n 'tabindex': '0'\n },\n classes: ['tox-throbber__busy-spinner']\n },\n components: [{ dom: fromHtml('
') }]\n };\n };\n };\n var focusBusyComponent = function (throbber) {\n return Composing.getCurrent(throbber).each(function (comp) {\n return focus$3(comp.element);\n });\n };\n var toggleEditorTabIndex = function (editor, state) {\n var tabIndexAttr = 'tabindex';\n var dataTabIndexAttr = 'data-mce-' + tabIndexAttr;\n Optional.from(editor.iframeElement).map(SugarElement.fromDom).each(function (iframe) {\n if (state) {\n getOpt(iframe, tabIndexAttr).each(function (tabIndex) {\n return set$7(iframe, dataTabIndexAttr, tabIndex);\n });\n set$7(iframe, tabIndexAttr, -1);\n } else {\n remove$6(iframe, tabIndexAttr);\n getOpt(iframe, dataTabIndexAttr).each(function (tabIndex) {\n set$7(iframe, tabIndexAttr, tabIndex);\n remove$6(iframe, dataTabIndexAttr);\n });\n }\n });\n };\n var toggleThrobber = function (editor, comp, state, providerBackstage) {\n var element = comp.element;\n toggleEditorTabIndex(editor, state);\n if (state) {\n Blocking.block(comp, getBusySpec$1(providerBackstage));\n remove$1(element, 'display');\n remove$6(element, 'aria-hidden');\n if (editor.hasFocus()) {\n focusBusyComponent(comp);\n }\n } else {\n var throbberFocus = Composing.getCurrent(comp).exists(function (busyComp) {\n return hasFocus(busyComp.element);\n });\n Blocking.unblock(comp);\n set$6(element, 'display', 'none');\n set$7(element, 'aria-hidden', 'true');\n if (throbberFocus) {\n editor.focus();\n }\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([\n Replacing.config({}),\n Blocking.config({ focus: false }),\n Composing.config({\n find: function (comp) {\n return head(comp.components());\n }\n })\n ]),\n components: []\n };\n };\n var isFocusEvent = function (event) {\n return event.type === 'focusin';\n };\n var isPasteBinTarget = function (event) {\n if (isFocusEvent(event)) {\n var node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n return node.map(SugarElement.fromDom).filter(isElement$2).exists(function (targetElm) {\n return has(targetElm, 'mce-pastebin');\n });\n } else {\n return false;\n }\n };\n var setup$7 = function (editor, lazyThrobber, sharedBackstage) {\n var throbberState = Cell(false);\n var timer = value$1();\n var stealFocus = function (e) {\n if (throbberState.get() && !isPasteBinTarget(e)) {\n e.preventDefault();\n focusBusyComponent(lazyThrobber());\n editor.editorManager.setActive(editor);\n }\n };\n if (!editor.inline) {\n editor.on('PreInit', function () {\n editor.dom.bind(editor.getWin(), 'focusin', stealFocus);\n editor.on('BeforeExecCommand', function (e) {\n if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) {\n stealFocus(e);\n }\n });\n });\n }\n var toggle = function (state) {\n if (state !== throbberState.get()) {\n throbberState.set(state);\n toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n editor.fire('AfterProgressState', { state: state });\n }\n };\n editor.on('ProgressState', function (e) {\n timer.on(global$g.clearTimeout);\n if (isNumber(e.time)) {\n var timerId = global$g.setEditorTimeout(editor, function () {\n return toggle(e.state);\n }, e.time);\n timer.set(timerId);\n } else {\n toggle(e.state);\n timer.clear();\n }\n });\n };\n\n var generate$1 = 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$1(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 = function (within, extra, withinWidth) {\n return {\n within: within,\n extra: extra,\n withinWidth: withinWidth\n };\n };\n var apportion = function (units, total, len) {\n var parray = generate$1(units, function (unit, current) {\n var width = len(unit);\n return Optional.some({\n element: unit,\n start: current,\n finish: current + width,\n width: width\n });\n });\n var within = filter$2(parray, function (unit) {\n return unit.finish <= total;\n });\n var withinWidth = foldr(within, function (acc, el) {\n return acc + el.width;\n }, 0);\n var extra = parray.slice(within.length);\n return {\n within: within,\n extra: extra,\n withinWidth: withinWidth\n };\n };\n var toUnit = function (parray) {\n return map$2(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(fits, [], withinWidth);\n };\n var overflow = function (within, extra, overflower, withinWidth) {\n var fits = toUnit(within).concat([overflower]);\n return output(fits, toUnit(extra), withinWidth);\n };\n var fitAll = function (within, extra, withinWidth) {\n return output(toUnit(within), [], withinWidth);\n };\n var tryFit = function (total, units, len) {\n var divide = apportion(units, total, len);\n return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n };\n var partition = 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$1 = function (toolbar, storedGroups) {\n var bGroups = map$2(storedGroups, function (g) {\n return premade(g);\n });\n Toolbar.setGroups(toolbar, bGroups);\n };\n var findFocusedComp = function (comps) {\n return findMap(comps, function (comp) {\n return search(comp.element).bind(function (focusedElm) {\n return comp.getSystem().getByDom(focusedElm).toOptional();\n });\n });\n };\n var refresh$2 = function (toolbar, detail, setOverflow) {\n var builtGroups = detail.builtGroups.get();\n if (builtGroups.length === 0) {\n return;\n }\n var primary = getPartOrDie(toolbar, detail, 'primary');\n var overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$6(primary.element, 'visibility', 'hidden');\n var groups = builtGroups.concat([overflowGroup]);\n var focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups$1(primary, groups);\n var availableWidth = get$7(primary.element);\n var overflows = partition(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$1(primary, overflows.within);\n setOverflow(overflows.extra);\n }\n remove$1(primary.element, 'visibility');\n reflow(primary.element);\n focusedComp.each(Focusing.focus);\n };\n\n var schema$c = constant$1([\n field('splitToolbarBehaviours', [Coupling]),\n customField('builtGroups', function () {\n return Cell([]);\n })\n ]);\n\n var schema$b = constant$1([\n markers$1(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n required$1('lazySink'),\n customField('overflowGroups', function () {\n return Cell([]);\n })\n ].concat(schema$c()));\n var parts$7 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n external$1({\n schema: schema$e(),\n name: 'overflow'\n }),\n external$1({ name: 'overflow-button' }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var expandable = constant$1(function (element, available) {\n setMax(element, Math.floor(available));\n });\n\n var schema$a = constant$1([\n markers$1(['toggledClass']),\n required$1('lazySink'),\n requiredFunction('fetch'),\n optionFunction('getBounds'),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n schema$y()\n ]);\n var parts$6 = constant$1([\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$e(),\n name: 'toolbar',\n overrides: function (detail) {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Optional.none();\n }\n })])\n };\n }\n })\n ]);\n\n var toggle = 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 = 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, toolbar, {\n anchor: {\n type: 'hotspot',\n hotspot: button,\n layouts: layouts,\n overrides: { maxWidthFunction: expandable() }\n }\n }, bounds);\n };\n var setGroups = function (button, toolbar, detail, layouts, groups) {\n Toolbar.setGroups(toolbar, groups);\n position(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n var makeSandbox = function (button, spec, detail) {\n var ariaOwner = manager();\n var onOpen = function (sandbox, toolbar) {\n detail.fetch().get(function (groups) {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n ariaOwner.link(button.element);\n Keying.focusIn(toolbar);\n });\n };\n var onClose = function () {\n Toggling.off(button);\n Focusing.focus(button);\n ariaOwner.unlink(button.element);\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaOwner.id }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: function (comp) {\n Sandboxing.close(comp);\n return Optional.some(true);\n }\n }),\n Sandboxing.config({\n onOpen: onOpen,\n onClose: onClose,\n isPartOf: function (container, data, queryElem) {\n return isPartOf$1(data, queryElem) || isPartOf$1(button, queryElem);\n },\n getAttachPoint: function () {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: __assign(__assign({}, receivingChannel$1(__assign({ isExtraPart: never }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel({\n doReposition: function () {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position(button, toolbar, detail, spec.layouts);\n });\n }\n }))\n })\n ])\n };\n };\n var factory$a = function (detail, components, spec, externals) {\n return __assign(__assign({}, Button.sketch(__assign(__assign({}, externals.button()), {\n action: function (button) {\n toggle(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: function (button) {\n return makeSandbox(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(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: function (button) {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: function (button) {\n toggle(button, externals);\n },\n getToolbar: function (button) {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n },\n isOpen: function (button) {\n return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n };\n var FloatingToolbarButton = composite({\n name: 'FloatingToolbarButton',\n factory: factory$a,\n configFields: schema$a(),\n partFields: parts$6(),\n apis: {\n setGroups: function (apis, button, groups) {\n apis.setGroups(button, groups);\n },\n reposition: function (apis, button) {\n apis.reposition(button);\n },\n toggle: function (apis, button) {\n apis.toggle(button);\n },\n getToolbar: function (apis, button) {\n return apis.getToolbar(button);\n },\n isOpen: function (apis, button) {\n return apis.isOpen(button);\n }\n }\n });\n\n var schema$9 = constant$1([\n required$1('items'),\n markers$1(['itemSelector']),\n field('tgroupBehaviours', [Keying])\n ]);\n var parts$5 = constant$1([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({\n name: 'ToolbarGroup',\n configFields: schema$9(),\n partFields: parts$5(),\n factory: factory$9\n });\n\n var buildGroups = function (comps) {\n return map$2(comps, function (g) {\n return premade(g);\n });\n };\n var refresh$1 = function (toolbar, memFloatingToolbarButton, detail) {\n refresh$2(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$8 = 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$2,\n southeast$2\n ];\n },\n onRtl: function () {\n return [\n southeast$2,\n southwest$2\n ];\n },\n onBottomLtr: function () {\n return [\n northwest$2,\n northeast$2\n ];\n },\n onBottomRtl: function () {\n return [\n northeast$2,\n northwest$2\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$2(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: function (toolbar) {\n return refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n toggle: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n isOpen: function (toolbar) {\n return memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false);\n },\n reposition: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: function (toolbar) {\n return memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar);\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitFloatingToolbar = composite({\n name: 'SplitFloatingToolbar',\n configFields: schema$b(),\n partFields: parts$7(),\n factory: factory$8,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n reposition: function (apis, toolbar) {\n apis.reposition(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n },\n isOpen: function (apis, toolbar) {\n return apis.isOpen(toolbar);\n },\n getOverflow: function (apis, toolbar) {\n return apis.getOverflow(toolbar);\n }\n }\n });\n\n var schema$8 = constant$1([\n markers$1([\n 'closedClass',\n 'openClass',\n 'shrinkingClass',\n 'growingClass',\n 'overflowToggledClass'\n ]),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n var parts$4 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'overflow',\n overrides: function (detail) {\n return {\n toolbarBehaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: detail.markers.closedClass,\n openClass: detail.markers.openClass,\n shrinkingClass: detail.markers.shrinkingClass,\n growingClass: detail.markers.growingClass,\n onShrunk: function (comp) {\n getPart(comp, detail, 'overflow-button').each(function (button) {\n Toggling.off(button);\n Focusing.focus(button);\n });\n detail.onClosed(comp);\n },\n onGrown: function (comp) {\n Keying.focusIn(comp);\n detail.onOpened(comp);\n },\n onStartGrow: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Optional.some(true);\n }\n })\n ])\n };\n }\n }),\n external$1({\n name: 'overflow-button',\n overrides: function (detail) {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })])\n };\n }\n }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var isOpen = function (toolbar, detail) {\n return getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n };\n var toggleToolbar = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow-button').bind(function () {\n return getPart(toolbar, detail, 'overflow');\n }).each(function (overf) {\n refresh(toolbar, detail);\n Sliding.toggleGrow(overf);\n });\n };\n var refresh = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow').each(function (overflow) {\n refresh$2(toolbar, detail, function (groups) {\n var builtGroups = map$2(groups, function (g) {\n return premade(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$7 = function (detail, components, spec, externals) {\n var toolbarToggleEvent = 'alloy.toolbar.toggle';\n var doSetGroups = function (toolbar, groups) {\n var built = map$2(groups, toolbar.getSystem().build);\n detail.builtGroups.set(built);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: 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$1(toolbarToggleEvent, function (toolbar) {\n toggleToolbar(toolbar, detail);\n })])\n ]),\n apis: {\n setGroups: function (toolbar, groups) {\n doSetGroups(toolbar, groups);\n refresh(toolbar, detail);\n },\n refresh: function (toolbar) {\n return refresh(toolbar, detail);\n },\n toggle: function (toolbar) {\n return toggleToolbar(toolbar, detail);\n },\n isOpen: function (toolbar) {\n return isOpen(toolbar, detail);\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitSlidingToolbar = composite({\n name: 'SplitSlidingToolbar',\n configFields: schema$8(),\n partFields: parts$4(),\n factory: factory$7,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n },\n isOpen: function (apis, toolbar) {\n return apis.isOpen(toolbar);\n }\n }\n });\n\n var 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$2(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n DisablingConfigs.toolbarButton(toolbarSpec.providers.isDisabled),\n receivingConfig(),\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached])\n ]);\n };\n var renderMoreToolbarCommon = function (toolbarSpec) {\n var modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return {\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n parts: {\n 'overflow-group': renderToolbarGroupCommon({\n title: Optional.none(),\n items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n name: 'more',\n icon: Optional.some('more-drawer'),\n disabled: false,\n tooltip: Optional.some('More...'),\n primary: false,\n borderless: false\n }, Optional.none(), toolbarSpec.providers)\n },\n splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n };\n };\n var renderFloatingMoreToolbar = function (toolbarSpec) {\n var baseSpec = renderMoreToolbarCommon(toolbarSpec);\n var overflowXOffset = 4;\n var primary = SplitFloatingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch(__assign(__assign({}, baseSpec), {\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: function () {\n var headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n var headerBounds = absolute$2(headerElem);\n var docElem = documentElement(headerElem);\n var docBounds = absolute$2(docElem);\n var height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n return bounds(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 factory$6 = function (detail, components, _spec) {\n var apis = {\n getSocket: function (comp) {\n return parts$a.getPart(comp, detail, 'socket');\n },\n setSidebar: function (comp, panelConfigs) {\n parts$a.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return setSidebar(sidebar, panelConfigs);\n });\n },\n toggleSidebar: function (comp, name) {\n parts$a.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return toggleSidebar(sidebar, name);\n });\n },\n whichSidebar: function (comp) {\n return parts$a.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: function (comp) {\n return parts$a.getPart(comp, detail, 'header');\n },\n getToolbar: function (comp) {\n return parts$a.getPart(comp, detail, 'toolbar');\n },\n setToolbar: function (comp, groups) {\n parts$a.getPart(comp, detail, 'toolbar').each(function (toolbar) {\n toolbar.getApis().setGroups(toolbar, groups);\n });\n },\n setToolbars: function (comp, toolbars) {\n parts$a.getPart(comp, detail, 'multiple-toolbar').each(function (mToolbar) {\n CustomList.setItems(mToolbar, toolbars);\n });\n },\n refreshToolbar: function (comp) {\n var toolbar = parts$a.getPart(comp, detail, 'toolbar');\n toolbar.each(function (toolbar) {\n return toolbar.getApis().refresh(toolbar);\n });\n },\n toggleToolbarDrawer: function (comp) {\n parts$a.getPart(comp, detail, 'toolbar').each(function (toolbar) {\n mapFrom(toolbar.getApis().toggle, function (toggle) {\n return toggle(toolbar);\n });\n });\n },\n isToolbarDrawerToggled: function (comp) {\n return parts$a.getPart(comp, detail, 'toolbar').bind(function (toolbar) {\n return Optional.from(toolbar.getApis().isOpen).map(function (isOpen) {\n return isOpen(toolbar);\n });\n }).getOr(false);\n },\n getThrobber: function (comp) {\n return parts$a.getPart(comp, detail, 'throbber');\n },\n focusToolbar: function (comp) {\n var optToolbar = parts$a.getPart(comp, detail, 'toolbar').orThunk(function () {\n return parts$a.getPart(comp, detail, 'multiple-toolbar');\n });\n optToolbar.each(function (toolbar) {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: function (comp, menus) {\n parts$a.getPart(comp, detail, 'menubar').each(function (menubar) {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: function (comp) {\n parts$a.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.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [required$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.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$6('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n providers: spec.providers,\n onEscape: function () {\n spec.onEscape();\n return Optional.some(true);\n }\n });\n },\n setupItem: function (_mToolbar, tc, data, _index) {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n });\n }\n },\n name: 'multiple-toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape')\n ]\n });\n var partToolbar = partType.optional({\n factory: {\n sketch: function (spec) {\n var renderer = toolbarFactory(spec);\n var toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: function () {\n spec.onEscape();\n return Optional.some(true);\n },\n cyclicKeying: false,\n initGroups: [],\n getSink: spec.getSink,\n providers: spec.providers,\n moreDrawerData: {\n lazyToolbar: spec.lazyToolbar,\n lazyMoreButton: spec.lazyMoreButton,\n lazyHeader: spec.lazyHeader\n },\n attributes: spec.attributes\n };\n return renderer(toolbarSpec);\n }\n },\n name: 'toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape'),\n required$1('getSink')\n ]\n });\n var partHeader = partType.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [required$1('dom')]\n });\n var partSocket = partType.optional({\n name: 'socket',\n schema: [required$1('dom')]\n });\n var partSidebar = partType.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [required$1('dom')]\n });\n var partThrobber = partType.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [required$1('dom')]\n });\n var OuterContainer = composite({\n name: 'OuterContainer',\n factory: factory$6,\n configFields: [\n required$1('dom'),\n required$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n 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$2(grps, function (grp) {\n return renderToolbarGroup(grp);\n });\n apis.setToolbar(comp, groups);\n },\n setToolbars: function (apis, comp, ts) {\n var renderedToolbars = map$2(ts, function (g) {\n return map$2(g, renderToolbarGroup);\n });\n apis.setToolbars(comp, renderedToolbars);\n },\n refreshToolbar: function (apis, comp) {\n return apis.refreshToolbar(comp);\n },\n toggleToolbarDrawer: function (apis, comp) {\n apis.toggleToolbarDrawer(comp);\n },\n isToolbarDrawerToggled: function (apis, comp) {\n return apis.isToolbarDrawerToggled(comp);\n },\n getThrobber: function (apis, comp) {\n return apis.getThrobber(comp);\n },\n setMenubar: function (apis, comp, menus) {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: function (apis, comp) {\n apis.focusMenubar(comp);\n },\n focusToolbar: function (apis, comp) {\n apis.focusToolbar(comp);\n }\n }\n });\n\n var defaultMenubar = 'file edit view insert format tools table help';\n var defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | export print | deleteallconversations'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'\n },\n view: {\n title: 'View',\n items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n },\n insert: {\n title: 'Insert',\n items: 'image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | formats blockformats fontformats fontsizes align lineheight | forecolor backcolor | language | 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 = function (menu, registry, editor) {\n var removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: function () {\n return bind$3(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$2(menubar, function (menuName) {\n var isDefaultMenu = has$2(defaultMenus, menuName);\n if (userDefinedMenus) {\n return isDefaultMenu || get$e(registry.menus, menuName).exists(function (menu) {\n return has$2(menu, 'items');\n });\n } else {\n return isDefaultMenu;\n }\n });\n var menus = map$2(validMenus, function (menuName) {\n var menuData = rawMenuData[menuName];\n return make({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter$2(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 = function (editor) {\n var done = function () {\n editor._skinLoaded = true;\n fireSkinLoaded$1(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var fireSkinLoadError = function (editor, err) {\n return function () {\n return fireSkinLoadError$1(editor, { message: err });\n };\n };\n\n var loadStylesheet = function (editor, stylesheetUrl, styleSheetLoader) {\n return new global$d(function (resolve, reject) {\n styleSheetLoader.load(stylesheetUrl, resolve, reject);\n editor.on('remove', function () {\n return styleSheetLoader.unload(stylesheetUrl);\n });\n });\n };\n var loadUiSkins = function (editor, skinUrl) {\n var skinUiCss = skinUrl + '/skin.min.css';\n return loadStylesheet(editor, skinUiCss, editor.ui.styleSheetLoader);\n };\n var loadShadowDomUiSkins = function (editor, skinUrl) {\n var isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n if (isInShadowRoot$1) {\n var shadowDomSkinCss = skinUrl + '/skin.shadowdom.min.css';\n return loadStylesheet(editor, shadowDomSkinCss, global$c.DOM.styleSheetLoader);\n } else {\n return global$d.resolve();\n }\n };\n var loadSkin = function (isInline, editor) {\n var skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');\n }\n if (isSkinDisabled(editor) === false && isString(skinUrl)) {\n global$d.all([\n loadUiSkins(editor, skinUrl),\n loadShadowDomUiSkins(editor, skinUrl)\n ]).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded'));\n } else {\n fireSkinLoaded(editor)();\n }\n };\n var iframe = curry(loadSkin, false);\n var inline = curry(loadSkin, true);\n\n var onSetupFormatToggle = function (editor, name) {\n return function (api) {\n var boundCallback = unbindable();\n var init = function () {\n api.setActive(editor.formatter.match(name));\n var binding = editor.formatter.formatChanged(name, api.setActive);\n boundCallback.set(binding);\n };\n editor.initialized ? init() : editor.once('init', init);\n return function () {\n editor.off('init', init);\n boundCallback.clear();\n };\n };\n };\n var onSetupEvent = function (editor, event, f) {\n return function (api) {\n var handleEvent = function () {\n return f(api);\n };\n var init = function () {\n f(api);\n editor.on(event, handleEvent);\n };\n editor.initialized ? init() : editor.once('init', init);\n return function () {\n editor.off('init', init);\n editor.off(event, handleEvent);\n };\n };\n };\n var onActionToggleFormat$1 = 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 var onActionExecCommand = function (editor, command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n\n var generateSelectItems = function (_editor, backstage, spec) {\n var generateItem = function (rawItem, response, disabled, value) {\n var translatedText = backstage.shared.providers.translate(rawItem.title);\n if (rawItem.type === 'separator') {\n return Optional.some({\n type: 'separator',\n text: translatedText\n });\n } else if (rawItem.type === 'submenu') {\n var items = bind$3(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n if (response === 0 && items.length <= 0) {\n return Optional.none();\n } else {\n return Optional.some({\n type: 'nestedmenuitem',\n text: translatedText,\n disabled: items.length <= 0,\n getSubmenuItems: function () {\n return bind$3(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n }\n });\n }\n } else {\n return Optional.some(__assign({\n type: 'togglemenuitem',\n text: translatedText,\n icon: rawItem.icon,\n active: rawItem.isSelected(value),\n disabled: disabled,\n onAction: spec.onAction(rawItem)\n }, rawItem.getStylePreview().fold(function () {\n return {};\n }, function (preview) {\n return { meta: { style: preview } };\n })));\n }\n };\n var validate = function (item, response, value) {\n var invalid = item.type === 'formatter' && spec.isInvalid(item);\n if (response === 0) {\n return invalid ? [] : generateItem(item, response, false, value).toArray();\n } else {\n return generateItem(item, response, invalid, value).toArray();\n }\n };\n var validateItems = function (preItems) {\n var value = spec.getCurrentValue();\n var response = spec.shouldHide ? 0 : 1;\n return bind$3(preItems, function (item) {\n return validate(item, response, value);\n });\n };\n var getFetch = function (backstage, getStyleItems) {\n return function (comp, callback) {\n var preItems = getStyleItems();\n var items = validateItems(preItems);\n var menu = build(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$2(dataset.data, function (d) {\n return processBasic(d, spec.isSelectedFor, spec.getPreviewFor);\n });\n } : dataset.getData;\n return {\n items: generateSelectItems(editor, backstage, spec),\n getStyleItems: getStyleItems\n };\n };\n var createSelectButton = function (editor, backstage, spec) {\n var _a = createMenuItems(editor, backstage, spec), items = _a.items, getStyleItems = _a.getStyleItems;\n var getApi = function (comp) {\n return { getComponent: constant$1(comp) };\n };\n var onSetup = onSetupEvent(editor, 'NodeChange', function (api) {\n var comp = api.getComponent();\n spec.updateText(comp);\n });\n return renderCommonDropdown({\n text: spec.icon.isSome() ? Optional.none() : spec.text,\n icon: spec.icon,\n tooltip: Optional.from(spec.tooltip),\n role: Optional.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup: 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$2(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$4 = function (editor) {\n var getMatchingValue = function () {\n return find$5(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 Optional.none;\n };\n var updateSelectMenuIcon = function (comp) {\n var match = getMatchingValue();\n var alignment = match.fold(constant$1('left'), function (item) {\n return item.title.toLowerCase();\n });\n emitWith(comp, updateMenuIcon, { icon: 'align-' + alignment });\n };\n var dataset = buildBasicStaticDataset(alignMenuItems);\n var onAction = function (rawItem) {\n return function () {\n return find$5(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 text: Optional.none(),\n icon: Optional.some('align-left'),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n updateText: updateSelectMenuIcon,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createAlignSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$4(editor));\n };\n var alignSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$4(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$2(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$3 = function (editor) {\n var systemFont = 'System Font';\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$5(items, function (item) {\n var format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(function () {\n return someIf(isSystemFontStack(font), {\n title: systemFont,\n format: font\n });\n });\n return {\n matchOpt: matchOpt,\n font: fontFamily\n };\n };\n var isSelectedFor = function (item) {\n return function (valueOpt) {\n return valueOpt.exists(function (value) {\n return value.format === item;\n });\n };\n };\n var getCurrentValue = function () {\n var matchOpt = getMatchingValue().matchOpt;\n return matchOpt;\n };\n var getPreviewFor = function (item) {\n return function () {\n return Optional.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n };\n };\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, font = _a.font;\n var text = matchOpt.fold(constant$1(font), function (item) {\n return item.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var dataset = buildBasicSettingsDataset(editor, 'font_formats', defaultFontsFormats, Delimiter.SemiColon);\n return {\n tooltip: 'Fonts',\n text: Optional.some(systemFont),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: getCurrentValue,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n updateText: updateSelectMenuText,\n dataset: dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n var createFontSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$3(editor));\n };\n var fontSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('fontformats', {\n text: backstage.shared.providers.translate('Fonts'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\n };\n var keywordFontSizes = {\n 'xx-small': '7pt',\n 'x-small': '8pt',\n 'small': '10pt',\n 'medium': '12pt',\n 'large': '14pt',\n 'x-large': '18pt',\n 'xx-large': '24pt'\n };\n var round = 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(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n } else {\n return get$e(keywordFontSizes, fontSize).getOr(fontSize);\n }\n };\n var toLegacy = function (fontSize) {\n return get$e(legacyFontSizes, fontSize).getOr('');\n };\n var getSpec$2 = function (editor) {\n var getMatchingValue = function () {\n var matchOpt = Optional.none();\n var items = dataset.data;\n var fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n var _loop_1 = function (precision) {\n var pt = toPt(fontSize, precision);\n var legacy = toLegacy(pt);\n matchOpt = find$5(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$1(Optional.none);\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, size = _a.size;\n var text = matchOpt.fold(constant$1(size), function (match) {\n return match.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var dataset = buildBasicSettingsDataset(editor, 'fontsize_formats', defaultFontsizeFormats, Delimiter.Space);\n return {\n tooltip: 'Font sizes',\n text: Optional.some('12pt'),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getPreviewFor: getPreviewFor,\n getCurrentValue: getCurrentValue,\n onAction: onAction,\n updateText: updateSelectMenuText,\n dataset: dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n var createFontsizeSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$2(editor));\n };\n var fontsizeSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontsizes', {\n text: 'Font sizes',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var findNearest = function (editor, getStyles) {\n var styles = getStyles();\n var formats = map$2(styles, function (style) {\n return style.format;\n });\n return Optional.from(editor.formatter.closest(formats)).bind(function (fmt) {\n return find$5(styles, function (data) {\n return data.format === fmt;\n });\n }).orThunk(function () {\n return someIf(editor.formatter.match('p'), {\n title: 'Paragraph',\n format: 'p'\n });\n });\n };\n\n var 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$1 = function (editor) {\n var fallbackFormat = 'Paragraph';\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\n return Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var detectedFormat = findNearest(editor, function () {\n return dataset.data;\n });\n var text = detectedFormat.fold(constant$1(fallbackFormat), function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var dataset = buildBasicSettingsDataset(editor, 'block_formats', defaultBlocks, Delimiter.SemiColon);\n return {\n tooltip: 'Blocks',\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createFormatSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$1(editor));\n };\n var formatSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$1(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 = function (editor, dataset) {\n var fallbackFormat = 'Paragraph';\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n };\n var updateSelectMenuText = function (comp) {\n var getFormatItems = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind$3(subs, getFormatItems) : [{\n title: fmt.title,\n format: fmt.format\n }];\n };\n var flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n var detectedFormat = findNearest(editor, constant$1(flattenedItems));\n var text = detectedFormat.fold(constant$1(fallbackFormat), function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n return {\n tooltip: 'Formats',\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n shouldHide: editor.getParam('style_formats_autohide', false, 'boolean'),\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n },\n dataset: dataset\n };\n };\n var createStyleSelect = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n return createSelectButton(editor, backstage, getSpec(editor, dataset));\n };\n var styleSelectMenu = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n var menuItems = createMenuItems(editor, backstage, getSpec(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 events$3 = 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$2(newComponents, component.getSystem().build);\n replaceChildren(component, newChildren);\n });\n };\n return derive$2([\n run$1(receive(), function (component, message) {\n var receivingData = message;\n if (!receivingData.universal) {\n var channel = reflectingConfig.channel;\n if (contains$2(receivingData.channels, channel)) {\n update(component, receivingData.data);\n }\n }\n }),\n runOnAttached(function (comp, _se) {\n reflectingConfig.initialData.each(function (rawData) {\n update(comp, rawData);\n });\n })\n ]);\n };\n\n var ActiveReflecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$3\n });\n\n var getState = function (component, replaceConfig, reflectState) {\n return reflectState;\n };\n\n var ReflectingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getState: getState\n });\n\n var ReflectingSchema = [\n required$1('channel'),\n option('renderComponents'),\n option('updateState'),\n option('initialData')\n ];\n\n var init$3 = function () {\n var cell = Cell(Optional.none());\n var clear = function () {\n return cell.set(Optional.none());\n };\n var readState = function () {\n return cell.get().getOr('none');\n };\n return {\n readState: readState,\n get: cell.get,\n set: cell.set,\n clear: clear\n };\n };\n\n var ReflectingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$3\n });\n\n var Reflecting = create$7({\n fields: ReflectingSchema,\n name: 'reflecting',\n active: ActiveReflecting,\n apis: ReflectingApis,\n state: ReflectingState\n });\n\n var schema$7 = constant$1([\n required$1('toggleClass'),\n required$1('fetch'),\n onStrictHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n onStrictHandler('onItemExecute'),\n option('lazySink'),\n required$1('dom'),\n onHandler('onOpen'),\n field('splitDropdownBehaviours', [\n Coupling,\n Keying,\n Focusing\n ]),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n defaulted('eventOrder', {}),\n option('role')\n ].concat(sandboxFields()));\n var arrowPart = required({\n factory: Button,\n schema: [required$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: [required$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$3 = constant$1([\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: [required$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$1()\n ]);\n\n var factory$5 = function (detail, components, spec, externals) {\n var _a;\n var switchToMenu = function (sandbox) {\n Composing.getCurrent(sandbox).each(function (current) {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n var action = function (component) {\n var onOpenSync = switchToMenu;\n togglePopup(detail, identity$1, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var openMenu = function (comp) {\n action(comp);\n return Optional.some(true);\n };\n var executeOnButton = function (comp) {\n var button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Optional.some(true);\n };\n var buttonEvents = __assign(__assign({}, derive$2([runOnAttached(function (component, _simulatedEvent) {\n var ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(function (descriptor) {\n var descriptorId = generate$6('aria');\n set$7(descriptor.element, 'id', descriptorId);\n set$7(component.element, 'aria-describedby', descriptorId);\n });\n })])), events$a(Optional.some(action)));\n var apis = {\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: apis,\n eventOrder: __assign(__assign({}, detail.eventOrder), (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ], _a)),\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n var arrow = getPartOrDie(hotspot, detail, 'arrow');\n var extras = {\n onOpen: function () {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: function () {\n Toggling.off(arrow);\n Toggling.off(hotspot);\n }\n };\n return makeSandbox$1(detail, hotspot, extras);\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: executeOnButton,\n onEnter: executeOnButton,\n onDown: openMenu\n }),\n Focusing.config({}),\n Toggling.config({\n toggleOnExecute: false,\n aria: { mode: 'expanded' }\n })\n ]),\n domModification: {\n attributes: {\n 'role': detail.role.getOr('button'),\n 'aria-haspopup': true\n }\n }\n };\n };\n var SplitDropdown = composite({\n name: 'SplitDropdown',\n configFields: schema$7(),\n partFields: parts$3(),\n factory: factory$5,\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$6('focus-button');\n var renderCommonStructure = function (icon, text, tooltip, receiver, behaviours, providersBackstage) {\n var _d;\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []),\n attributes: getTooltipAttributes(tooltip, providersBackstage)\n },\n components: componentRenderPipeline([\n icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n }),\n text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]),\n eventOrder: (_d = {}, _d[mousedown()] = [\n 'focusing',\n 'alloy.base.behaviour',\n 'common-button-display-events'\n ], _d),\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(providersBackstage.isDisabled),\n receivingConfig(),\n config('common-button-display-events', [run$1(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(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$2(identifyButtons(spec.items), renderToolbarGroup));\n });\n },\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), sharedBackstage.providers),\n toolbar: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: attributes\n }\n }\n }\n });\n };\n var renderCommonToolbarButton = function (spec, specialisation, providersBackstage) {\n var editorOffCell = Cell(noop);\n var structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), providersBackstage);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: derive$1([\n config('toolbar-button-events', [\n onToolbarButtonExecute({\n onAction: spec.onAction,\n getApi: specialisation.getApi\n }),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n DisablingConfigs.toolbarButton(function () {\n return spec.disabled || providersBackstage.isDisabled();\n }),\n receivingConfig()\n ].concat(specialisation.toolbarButtonBehaviours))\n });\n };\n var renderToolbarButton = function (spec, providersBackstage) {\n return renderToolbarButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarButtonWith = function (spec, providersBackstage, bonusEvents) {\n return renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [].concat(bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : []),\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage);\n };\n var renderToolbarToggleButton = function (spec, providersBackstage) {\n return renderToolbarToggleButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarToggleButtonWith = function (spec, providersBackstage, bonusEvents) {\n return deepMerge(renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [\n Replacing.config({}),\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })\n ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n getApi: getToggleApi,\n onSetup: spec.onSetup\n }, providersBackstage));\n };\n var fetchChoices = function (getApi, spec, providersBackstage) {\n return function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, function (value) {\n spec.onItemAction(getApi(comp), value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), {\n movement: deriveMenuMovement(spec.columns, spec.presets),\n menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached(function (comp, _se) {\n detectSize(comp, 4, classForPreset(spec.presets)).each(function (_d) {\n var numRows = _d.numRows, numColumns = _d.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n })));\n });\n };\n };\n var renderSplitButton = function (spec, sharedBackstage) {\n var _d;\n var displayChannel = generate$6('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(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$7(underlinePath, 'fill', value);\n });\n },\n setIconStroke: function (id, value) {\n descendant(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$7(underlinePath, 'stroke', value);\n });\n },\n setActive: function (state) {\n set$7(comp.element, 'aria-pressed', state);\n descendant(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(comp.element, 'span').exists(function (button) {\n return comp.getSystem().getByDom(button).exists(Toggling.isOn);\n });\n }\n };\n };\n var editorOffCell = Cell(noop);\n var specialisation = {\n getApi: getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: __assign({ 'aria-pressed': false }, getTooltipAttributes(spec.tooltip, sharedBackstage.providers))\n },\n onExecute: function (button) {\n spec.onAction(getApi(button));\n },\n onItemExecute: function (_a, _b, _c) {\n },\n splitDropdownBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n config('split-dropdown-events', [\n run$1(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n Unselecting.config({})\n ]),\n eventOrder: (_d = {}, _d[attachedToDom()] = [\n 'alloy.base.behaviour',\n 'split-dropdown-events'\n ], _d),\n toggleClass: 'tox-tbtn--enabled',\n lazySink: sharedBackstage.getSink,\n fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n parts: { menu: part(false, spec.columns, spec.presets) },\n components: [\n SplitDropdown.parts.button(renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some(displayChannel), Optional.some([Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n toggleOnExecute: false\n })]), sharedBackstage.providers)),\n SplitDropdown.parts.arrow({\n dom: {\n tag: 'button',\n classes: [\n 'tox-tbtn',\n 'tox-split-button__chevron'\n ],\n innerHtml: get$1('chevron-down', sharedBackstage.providers.icons)\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n addFocusableBehaviour()\n ])\n }),\n SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n var defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'styles',\n items: ['styleselect']\n },\n {\n name: 'formatting',\n items: [\n 'bold',\n 'italic'\n ]\n },\n {\n name: 'alignment',\n items: [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ]\n },\n {\n name: 'indentation',\n items: [\n 'outdent',\n 'indent'\n ]\n },\n {\n name: 'permanent pen',\n items: ['permanentpen']\n },\n {\n name: 'comments',\n items: ['addcomment']\n }\n ];\n var renderFromBridge = function (bridgeBuilder, render) {\n return function (spec, extras, editor) {\n var internal = bridgeBuilder(spec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return render(internal, extras, editor);\n };\n };\n var types = {\n button: renderFromBridge(createToolbarButton, function (s, extras) {\n return renderToolbarButton(s, extras.backstage.shared.providers);\n }),\n togglebutton: renderFromBridge(createToggleButton, function (s, extras) {\n return renderToolbarToggleButton(s, extras.backstage.shared.providers);\n }),\n menubutton: renderFromBridge(createMenuButton, function (s, extras) {\n return renderMenuButton(s, 'tox-tbtn', extras.backstage, Optional.none());\n }),\n splitbutton: renderFromBridge(createSplitButton, function (s, extras) {\n return renderSplitButton(s, extras.backstage.shared);\n }),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, function (s, extras, editor) {\n var _a;\n var buttons = editor.ui.registry.getAll().buttons;\n var identify = function (toolbar) {\n return identifyButtons(editor, {\n buttons: buttons,\n toolbar: toolbar,\n allowToolbarGroups: false\n }, extras, Optional.none());\n };\n var attributes = (_a = {}, _a[Attribute] = extras.backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop, _a);\n switch (getToolbarMode(editor)) {\n case ToolbarMode.floating:\n return renderFloatingToolbarButton(s, extras.backstage, identify, attributes);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n }),\n styleSelectButton: function (editor, extras) {\n return createStyleSelect(editor, extras.backstage);\n },\n fontsizeSelectButton: function (editor, extras) {\n return createFontsizeSelect(editor, extras.backstage);\n },\n fontSelectButton: function (editor, extras) {\n return createFontSelect(editor, extras.backstage);\n },\n formatButton: function (editor, extras) {\n return createFormatSelect(editor, extras.backstage);\n },\n alignMenuButton: function (editor, extras) {\n return createAlignSelect(editor, extras.backstage);\n }\n };\n var extractFrom = function (spec, extras, editor) {\n return get$e(types, spec.type).fold(function () {\n console.error('skipping button defined by', spec);\n return Optional.none();\n }, function (render) {\n return Optional.some(render(spec, extras, editor));\n });\n };\n var bespokeButtons = {\n styleselect: types.styleSelectButton,\n fontsizeselect: types.fontsizeSelectButton,\n fontselect: types.fontSelectButton,\n formatselect: types.formatButton,\n align: types.alignMenuButton\n };\n var removeUnusedDefaults = function (buttons) {\n var filteredItemGroups = map$2(defaultToolbar, function (group) {\n var items = filter$2(group.items, function (subItem) {\n return has$2(buttons, subItem) || has$2(bespokeButtons, subItem);\n });\n return {\n name: group.name,\n items: items\n };\n });\n return filter$2(filteredItemGroups, function (group) {\n return group.items.length > 0;\n });\n };\n var convertStringToolbar = function (strToolbar) {\n var groupsStrings = strToolbar.split('|');\n return map$2(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$2(t, 'name') && has$2(t, 'items');\n });\n };\n var createToolbar = function (toolbarConfig) {\n var toolbar = toolbarConfig.toolbar;\n var buttons = toolbarConfig.buttons;\n if (toolbar === false) {\n return [];\n } else if (toolbar === undefined || toolbar === true) {\n return removeUnusedDefaults(buttons);\n } else if (isString(toolbar)) {\n return convertStringToolbar(toolbar);\n } else if (isToolbarGroupSettingArray(toolbar)) {\n return toolbar;\n } else {\n console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]');\n return [];\n }\n };\n var lookupButton = function (editor, buttons, toolbarItem, allowToolbarGroups, extras, prefixes) {\n return get$e(buttons, toolbarItem.toLowerCase()).orThunk(function () {\n return prefixes.bind(function (ps) {\n return findMap(ps, function (prefix) {\n return get$e(buttons, prefix + toolbarItem.toLowerCase());\n });\n });\n }).fold(function () {\n return get$e(bespokeButtons, toolbarItem.toLowerCase()).map(function (r) {\n return r(editor, extras);\n }).orThunk(function () {\n return Optional.none();\n });\n }, function (spec) {\n if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n console.warn('Ignoring the \\'' + toolbarItem + '\\' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.');\n return Optional.none();\n } else {\n return extractFrom(spec, extras, editor);\n }\n });\n };\n var identifyButtons = function (editor, toolbarConfig, extras, prefixes) {\n var toolbarGroups = createToolbar(toolbarConfig);\n var groups = map$2(toolbarGroups, function (group) {\n var items = bind$3(group.items, function (toolbarItem) {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, extras, prefixes).toArray();\n });\n return {\n title: Optional.from(editor.translate(group.name)),\n items: items\n };\n });\n return filter$2(groups, function (group) {\n return group.items.length > 0;\n });\n };\n\n var setToolbar = function (editor, uiComponents, rawUiConfig, backstage) {\n var comp = uiComponents.outerContainer;\n var toolbarConfig = rawUiConfig.toolbar;\n var toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n var toolbars = toolbarConfig.map(function (t) {\n var config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, { backstage: backstage }, Optional.none());\n });\n OuterContainer.setToolbars(comp, toolbars);\n } else {\n OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, { backstage: backstage }, Optional.none()));\n }\n };\n\n var detection = detect$1();\n var isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n var setupEvents$1 = function (editor, uiComponents) {\n var dom = editor.dom;\n var contentWindow = editor.getWin();\n var initialDocEle = editor.getDoc().documentElement;\n var lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n var lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n var resizeWindow = function () {\n var outer = lastWindowDimensions.get();\n if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) {\n lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n fireResizeContent(editor);\n }\n };\n var resizeDocument = function () {\n var docEle = editor.getDoc().documentElement;\n var inner = lastDocumentDimensions.get();\n if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) {\n lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight));\n fireResizeContent(editor);\n }\n };\n var scroll = function (e) {\n return fireScrollContent(editor, e);\n };\n dom.bind(contentWindow, 'resize', resizeWindow);\n dom.bind(contentWindow, 'scroll', scroll);\n var elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n var mothership = uiComponents.uiMothership.element;\n editor.on('hide', function () {\n set$6(mothership, 'display', 'none');\n });\n editor.on('show', function () {\n remove$1(mothership, 'display');\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', function () {\n elementLoad.unbind();\n dom.unbind(contentWindow, 'resize', resizeWindow);\n dom.unbind(contentWindow, 'scroll', scroll);\n contentWindow = null;\n });\n };\n var render$1 = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var lastToolbarWidth = Cell(0);\n var outerContainer = uiComponents.outerContainer;\n iframe(editor);\n var eTargetNode = SugarElement.fromDom(args.targetNode);\n var uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, uiComponents.mothership);\n attachSystem(uiRoot, uiComponents.uiMothership);\n editor.on('PostRender', function () {\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar);\n setupEvents$1(editor, uiComponents);\n });\n var socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12) {\n setAll(socket.element, {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n var limit = first(function () {\n editor.fire('ScrollContent');\n }, 20);\n var unbinder = bind(socket.element, 'scroll', limit.throttle);\n editor.on('remove', unbinder.unbind);\n }\n setupReadonlyModeSwitch(editor, uiComponents);\n editor.addCommand('ToggleSidebar', function (_ui, value) {\n OuterContainer.toggleSidebar(outerContainer, value);\n editor.fire('ToggleSidebar');\n });\n editor.addQueryValueHandler('ToggleSidebar', function () {\n return OuterContainer.whichSidebar(outerContainer);\n });\n var toolbarMode = getToolbarMode(editor);\n var refreshDrawer = function () {\n OuterContainer.refreshToolbar(uiComponents.outerContainer);\n };\n if (toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', function () {\n var width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n var api = {\n enable: function () {\n broadcastReadonly(uiComponents, false);\n },\n disable: function () {\n broadcastReadonly(uiComponents, true);\n },\n isDisabled: function () {\n return Disabling.isDisabled(outerContainer);\n }\n };\n return {\n iframeContainer: socket.element.dom,\n editorContainer: outerContainer.element.dom,\n api: api\n };\n };\n\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n var parseToInt = function (val) {\n var re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Optional.some(parseInt('' + val, 10));\n }\n return Optional.none();\n };\n var numToPx = function (val) {\n return isNumber(val) ? val + 'px' : val;\n };\n var calcCappedSize = function (size, minSize, maxSize) {\n var minOverride = minSize.filter(function (min) {\n return size < min;\n });\n var maxOverride = maxSize.filter(function (max) {\n return size > max;\n });\n return minOverride.or(maxOverride).getOr(size);\n };\n\n var getHeight = 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(editor);\n return height.getOr(getHeightSetting(editor));\n };\n var getWidth = 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(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$c.DOM;\n var useFixedToolbarContainer = useFixedContainer(editor);\n var isSticky = isStickyToolbar(editor);\n var editorMaxWidthOpt = getMaxWidthSetting(editor).or(getWidth(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(constant$1(0), function (tbar) {\n return tbar.components().length > 1 ? get$8(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$8(container.element) - offset;\n var targetBounds = box$1(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$8(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$7(container.element, Attribute, verticalDir);\n };\n var updateChromeWidth = function () {\n var maxWidth = editorMaxWidthOpt.getOrThunk(function () {\n var bodyMargin = parseToInt(get$a(body(), 'margin-left')).getOr(0);\n return get$7(body()) - absolute$3(targetElm).left + bodyMargin;\n });\n set$6(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$1(targetElm);\n var top = isPositionedAtTop() ? Math.max(targetBounds.y - get$8(floatContainer.get().element) + offset, 0) : targetBounds.bottom;\n setAll(outerContainer.element, {\n position: 'absolute',\n top: Math.round(top) + 'px',\n left: Math.round(targetBounds.x) + 'px'\n });\n };\n 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$6(outerContainer.element, 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n remove$1(uiMothership.element, 'display');\n updateMode(false);\n updateChromeUi();\n };\n var hide = function () {\n visible.set(false);\n if (uiComponents.outerContainer) {\n set$6(outerContainer.element, 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n set$6(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$1(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds: bounds\n };\n };\n var setupEvents = function (editor, targetElm, ui, toolbarPersist) {\n var prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n var resizeContent = function (e) {\n var _a = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()), pos = _a.pos, bounds = _a.bounds;\n var _b = prevPosAndBounds.get(), prevPos = _b.pos, prevBounds = _b.bounds;\n var hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos: pos,\n bounds: bounds\n });\n if (hasResized) {\n fireResizeContent(editor, e);\n }\n if (ui.isVisible()) {\n if (prevPos !== pos) {\n ui.update(true);\n } else if (hasResized) {\n ui.updateMode();\n ui.repositionPopups();\n }\n }\n };\n if (!toolbarPersist) {\n editor.on('activate', ui.show);\n editor.on('deactivate', ui.hide);\n }\n editor.on('SkinLoaded ResizeWindow', function () {\n return ui.update(true);\n });\n editor.on('NodeChange keydown', function (e) {\n global$g.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(SugarElement.fromDom(editor.getBody()), 'load', resizeContent));\n editor.on('remove', function () {\n elementLoad.clear();\n });\n };\n var render = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var mothership = uiComponents.mothership, uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var floatContainer = Cell(null);\n var targetElm = SugarElement.fromDom(args.targetNode);\n var ui = InlineHeader(editor, targetElm, uiComponents, backstage, floatContainer);\n var toolbarPersist = isToolbarPersist(editor);\n inline(editor);\n var render = function () {\n if (floatContainer.get()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(outerContainer).getOrDie());\n var uiContainer = getUiContainer(editor);\n attachSystem(uiContainer, mothership);\n attachSystem(uiContainer, uiMothership);\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n ui.show();\n setupEvents(editor, targetElm, ui, toolbarPersist);\n editor.nodeChanged();\n };\n var delayedRender = function () {\n return global$g.setEditorTimeout(editor, render, 0);\n };\n editor.on('show', render);\n editor.on('hide', ui.hide);\n if (!toolbarPersist) {\n editor.on('focus', delayedRender);\n editor.on('blur', ui.hide);\n }\n editor.on('init', function () {\n if (editor.hasFocus() || toolbarPersist) {\n delayedRender();\n }\n });\n setupReadonlyModeSwitch(editor, uiComponents);\n var api = {\n show: function () {\n ui.show();\n },\n hide: function () {\n ui.hide();\n },\n enable: function () {\n broadcastReadonly(uiComponents, false);\n },\n disable: function () {\n broadcastReadonly(uiComponents, true);\n },\n isDisabled: function () {\n return Disabling.isDisabled(outerContainer);\n }\n };\n return {\n editorContainer: outerContainer.element.dom,\n api: api\n };\n };\n\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render\n });\n\n var showContextToolbarEvent = 'contexttoolbar-show';\n var hideContextToolbarEvent = 'contexttoolbar-hide';\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 = function (memInput, original) {\n return run$1(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; _a.primary; var rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToolbarButton(__assign(__assign({}, rest), {\n type: 'button',\n onAction: noop\n })));\n return renderToolbarButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute(memInput, button)]);\n };\n var renderContextToggleButton = function (memInput, button, extras) {\n var _a = button.original; _a.primary; var rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToggleButton(__assign(__assign({}, rest), {\n type: 'togglebutton',\n onAction: noop\n })));\n return renderToolbarToggleButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute(memInput, button)]);\n };\n var generateOne = 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 = function (memInput, buttons, providersBackstage) {\n var mementos = map$2(buttons, function (button) {\n return record(generateOne(memInput, button, providersBackstage));\n });\n var asSpecs = function () {\n return map$2(mementos, function (mem) {\n return mem.asSpec();\n });\n };\n var findPrimary = function (compInSystem) {\n return findMap(buttons, function (button, i) {\n if (button.primary) {\n return Optional.from(mementos[i]).bind(function (mem) {\n return mem.getOpt(compInSystem);\n }).filter(not(Disabling.isDisabled));\n } else {\n return Optional.none();\n }\n });\n };\n return {\n asSpecs: asSpecs,\n findPrimary: findPrimary\n };\n };\n\n var buildInitGroups = function (ctx, providers) {\n var inputAttributes = ctx.label.fold(function () {\n return {};\n }, function (label) {\n return { 'aria-label': label };\n });\n var memInput = record(Input.sketch({\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-js'\n ],\n data: ctx.initValue(),\n inputAttributes: inputAttributes,\n selectOnFocus: true,\n inputBehaviours: derive$1([Keying.config({\n mode: 'special',\n onEnter: function (input) {\n return commands.findPrimary(input).map(function (primary) {\n emitExecute(primary);\n return true;\n });\n },\n onLeft: function (comp, se) {\n se.cut();\n return Optional.none();\n },\n onRight: function (comp, se) {\n se.cut();\n return Optional.none();\n }\n })])\n }));\n var commands = generate(memInput, ctx.commands, providers);\n return [\n {\n title: Optional.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Optional.none(),\n items: commands.asSpecs()\n }\n ];\n };\n var renderContextForm = function (toolbarType, ctx, providers) {\n return renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups: buildInitGroups(ctx, providers),\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: providers\n });\n };\n var ContextForm = {\n renderContextForm: renderContextForm,\n buildInitGroups: buildInitGroups\n };\n\n var isVerticalOverlap = function (a, b, threshold) {\n if (threshold === void 0) {\n threshold = 0.01;\n }\n return b.bottom - a.y >= threshold && a.bottom - b.y >= threshold;\n };\n var getRangeRect = function (rng) {\n var rect = rng.getBoundingClientRect();\n if (rect.height <= 0 && rect.width <= 0) {\n var leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element;\n var elm = isText$1(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1);\n return elm.filter(isElement$2).map(function (e) {\n return e.dom.getBoundingClientRect();\n }).getOr(rect);\n } else {\n return rect;\n }\n };\n var getSelectionBounds = function (editor) {\n var rng = editor.selection.getRng();\n var rect = getRangeRect(rng);\n if (editor.inline) {\n var scroll_1 = get$6();\n return bounds(scroll_1.left + rect.left, scroll_1.top + rect.top, rect.width, rect.height);\n } else {\n var bodyPos = absolute$2(SugarElement.fromDom(editor.getBody()));\n return bounds(bodyPos.x + rect.left, bodyPos.y + rect.top, rect.width, rect.height);\n }\n };\n var getAnchorElementBounds = function (editor, lastElement) {\n return lastElement.filter(inBody).map(absolute$2).getOrThunk(function () {\n return getSelectionBounds(editor);\n });\n };\n var getHorizontalBounds = function (contentAreaBox, viewportBounds, margin) {\n var x = Math.max(contentAreaBox.x + margin, viewportBounds.x);\n var right = Math.min(contentAreaBox.right - margin, viewportBounds.right);\n return {\n x: x,\n width: right - x\n };\n };\n var getVerticalBounds = function (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) {\n var container = SugarElement.fromDom(editor.getContainer());\n var header = descendant(container, '.tox-editor-header').getOr(container);\n var headerBox = box$1(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 + margin, viewportBounds.y),\n bottom: viewportBounds.bottom\n };\n }\n if (editor.inline && !isToolbarAbove) {\n return {\n y: viewportBounds.y,\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n }\n var containerBounds = toolbarType === 'line' ? box$1(container) : contentAreaBox;\n if (isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n bottom: Math.min(containerBounds.bottom - margin, viewportBounds.bottom)\n };\n }\n return {\n y: Math.max(containerBounds.y + margin, viewportBounds.y),\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n };\n var getContextToolbarBounds = function (editor, sharedBackstage, toolbarType, margin) {\n if (margin === void 0) {\n margin = 0;\n }\n var viewportBounds = getBounds$3(window);\n var contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n var toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n var _a = getHorizontalBounds(contentAreaBox, viewportBounds, margin), x = _a.x, width = _a.width;\n if (editor.inline && !toolbarOrMenubarEnabled) {\n return bounds(x, viewportBounds.y, width, viewportBounds.height);\n } else {\n var isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n var _b = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin), y = _b.y, bottom = _b.bottom;\n return bounds(x, y, width, bottom - y);\n }\n };\n\n var bubbleSize$1 = 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 inset: ['tox-pop--inset']\n };\n var anchorOverrides = {\n maxHeightFunction: expandable$1(),\n maxWidthFunction: expandable()\n };\n var isEntireElementSelected = function (editor, elem) {\n var rng = editor.selection.getRng();\n var leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n return rng.startContainer === rng.endContainer && rng.startOffset === rng.endOffset - 1 && eq(leaf$1.element, elem);\n };\n var preservePosition = function (elem, position, f) {\n var currentPosition = getRaw(elem, 'position');\n set$6(elem, 'position', position);\n var result = f(elem);\n currentPosition.each(function (pos) {\n return set$6(elem, 'position', pos);\n });\n return result;\n };\n var shouldUseInsetLayouts = function (position) {\n return position === 'node';\n };\n var determineInsetLayout = function (editor, contextbar, elem, data, bounds) {\n var selectionBounds = getSelectionBounds(editor);\n var isSameAnchorElement = data.lastElement().exists(function (prev) {\n return eq(elem, prev);\n });\n if (isEntireElementSelected(editor, elem)) {\n return isSameAnchorElement ? preserve : north;\n } else if (isSameAnchorElement) {\n return preservePosition(contextbar, data.getMode(), function () {\n var isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar));\n return isOverlapping && !data.isReposition() ? flip$2 : preserve;\n });\n } else {\n var yBounds = data.getMode() === 'fixed' ? bounds.y + get$6().top : bounds.y;\n var contextbarHeight = get$8(contextbar) + bubbleSize$1;\n return yBounds + contextbarHeight <= selectionBounds.y ? north : south;\n }\n };\n var getAnchorSpec$2 = function (editor, mobile, data, position) {\n var smartInsetLayout = function (elem) {\n return function (anchor, element, bubbles, placee, bounds) {\n var layout = determineInsetLayout(editor, placee, elem, data, bounds);\n var newAnchor = __assign(__assign({}, anchor), {\n y: bounds.y,\n height: bounds.height\n });\n return __assign(__assign({}, layout(newAnchor, element, bubbles, placee, bounds)), { alwaysFit: true });\n };\n };\n var getInsetLayouts = function (elem) {\n return shouldUseInsetLayouts(position) ? [smartInsetLayout(elem)] : [];\n };\n var desktopAnchorSpecLayouts = {\n onLtr: function (elem) {\n return [\n north$2,\n south$2,\n northeast$2,\n southeast$2,\n northwest$2,\n southwest$2\n ].concat(getInsetLayouts(elem));\n },\n onRtl: function (elem) {\n return [\n north$2,\n south$2,\n northwest$2,\n southwest$2,\n northeast$2,\n southeast$2\n ].concat(getInsetLayouts(elem));\n }\n };\n var mobileAnchorSpecLayouts = {\n onLtr: function (elem) {\n return [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2\n ].concat(getInsetLayouts(elem));\n },\n onRtl: function (elem) {\n return [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2\n ].concat(getInsetLayouts(elem));\n }\n };\n return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts;\n };\n var getAnchorLayout = function (editor, position, isTouch, data) {\n if (position === 'line') {\n return {\n bubble: nu$5(bubbleSize$1, 0, bubbleAlignments$1),\n layouts: {\n onLtr: function () {\n return [east$2];\n },\n onRtl: function () {\n return [west$2];\n }\n },\n overrides: anchorOverrides\n };\n } else {\n return {\n bubble: nu$5(0, bubbleSize$1, bubbleAlignments$1, 1 / bubbleSize$1),\n layouts: getAnchorSpec$2(editor, isTouch, data, position),\n overrides: anchorOverrides\n };\n }\n };\n\n var matchTargetWith = function (elem, candidates) {\n var ctxs = filter$2(candidates, function (toolbarApi) {\n return toolbarApi.predicate(elem.dom);\n });\n var _a = partition$3(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$2(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$2(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$5(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$2(toolbars, function (t) {\n return t.position === pos;\n });\n });\n }\n };\n var matchStartNode = function (elem, nodeCandidates, editorCandidates) {\n var nodeMatches = matchTargetWith(elem, nodeCandidates);\n if (nodeMatches.contextForms.length > 0) {\n return Optional.some({\n elem: elem,\n toolbars: [nodeMatches.contextForms[0]]\n });\n } else {\n var editorMatches = matchTargetWith(elem, editorCandidates);\n if (editorMatches.contextForms.length > 0) {\n return Optional.some({\n elem: elem,\n toolbars: [editorMatches.contextForms[0]]\n });\n } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n var toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n return Optional.some({\n elem: elem,\n toolbars: toolbars\n });\n } else {\n return Optional.none();\n }\n }\n };\n var matchAncestor = function (isRoot, startNode, scopes) {\n if (isRoot(startNode)) {\n return Optional.none();\n } else {\n return ancestor$2(startNode, function (ancestorElem) {\n if (isElement$2(ancestorElem)) {\n var _a = matchTargetWith(ancestorElem, scopes.inNodeScope), contextToolbars = _a.contextToolbars, contextForms = _a.contextForms;\n var toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n return toolbars.length > 0 ? Optional.some({\n elem: ancestorElem,\n toolbars: toolbars\n }) : Optional.none();\n } else {\n return Optional.none();\n }\n }, isRoot);\n }\n };\n var lookup$1 = function (scopes, editor) {\n var rootElem = SugarElement.fromDom(editor.getBody());\n var isRoot = function (elem) {\n return eq(elem, rootElem);\n };\n var isOutsideRoot = function (startNode) {\n return !isRoot(startNode) && !contains(rootElem, startNode);\n };\n var startNode = SugarElement.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Optional.none();\n }\n return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(function () {\n return matchAncestor(isRoot, startNode, scopes);\n });\n };\n\n var categorise = function (contextToolbars, navigate) {\n var forms = {};\n var inNodeScope = [];\n var inEditorScope = [];\n var formNavigators = {};\n var lookupTable = {};\n var registerForm = function (key, toolbarSpec) {\n var contextForm = getOrDie(createContextForm(toolbarSpec));\n forms[key] = contextForm;\n contextForm.launch.map(function (launch) {\n formNavigators['form:' + key + ''] = __assign(__assign({}, toolbarSpec.launch), {\n type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n onAction: function () {\n navigate(contextForm);\n }\n });\n });\n if (contextForm.scope === 'editor') {\n inEditorScope.push(contextForm);\n } else {\n inNodeScope.push(contextForm);\n }\n lookupTable[key] = contextForm;\n };\n var registerToolbar = function (key, toolbarSpec) {\n createContextToolbar(toolbarSpec).each(function (contextToolbar) {\n if (toolbarSpec.scope === 'editor') {\n inEditorScope.push(contextToolbar);\n } else {\n inNodeScope.push(contextToolbar);\n }\n lookupTable[key] = contextToolbar;\n });\n };\n var keys$1 = keys(contextToolbars);\n each$1(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$6('forward-slide');\n var backSlideEvent = generate$6('backward-slide');\n var changeSlideEvent = generate$6('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$1(c.element, 'visibility');\n });\n remove$3(comp.element, resizingClass);\n remove$1(comp.element, 'width');\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), function (comp, se) {\n if (se.event.raw.propertyName === 'width') {\n remove$3(comp.element, resizingClass);\n remove$1(comp.element, 'width');\n }\n }),\n run$1(changeSlideEvent, function (comp, se) {\n var elem = comp.element;\n remove$1(elem, 'width');\n var currentWidth = get$7(elem);\n InlineView.setContent(comp, se.event.contents);\n add$2(elem, resizingClass);\n var newWidth = get$7(elem);\n set$6(elem, 'width', currentWidth + 'px');\n InlineView.getContent(comp).each(function (newContents) {\n se.event.focus.bind(function (f) {\n focus$3(f);\n return search(elem);\n }).orThunk(function () {\n Keying.focusIn(newContents);\n return active(getRootNode(elem));\n });\n });\n global$g.setTimeout(function () {\n set$6(comp.element, 'width', newWidth + 'px');\n }, 0);\n }),\n run$1(forwardSlideEvent, function (comp, se) {\n InlineView.getContent(comp).each(function (oldContents) {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active(getRootNode(comp.element))\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event.forwardContents,\n focus: Optional.none()\n });\n }),\n run$1(backSlideEvent, function (comp, _se) {\n last$2(stack.get()).each(function (last) {\n stack.set(stack.get().slice(0, stack.get().length - 1));\n emitWith(comp, changeSlideEvent, {\n contents: premade(last.bar),\n focus: last.focus\n });\n });\n })\n ]),\n Keying.config({\n mode: 'special',\n onEscape: function (comp) {\n return last$2(stack.get()).fold(function () {\n return spec.onEscape();\n }, function (_) {\n emit(comp, backSlideEvent);\n return Optional.some(true);\n });\n }\n })\n ]),\n lazySink: function () {\n return Result.value(spec.sink);\n }\n });\n };\n\n var transitionClass = 'tox-pop--transition';\n var register$7 = function (editor, registryContextToolbars, sink, extras) {\n var backstage = extras.backstage;\n var sharedBackstage = backstage.shared;\n var isTouch = detect$1().deviceType.isTouch;\n var lastElement = value$1();\n var lastTrigger = value$1();\n var lastContextPosition = value$1();\n var contextbar = build$1(renderContextToolbar({\n sink: sink,\n onEscape: function () {\n editor.focus();\n return Optional.some(true);\n }\n }));\n var getBounds = function () {\n var position = lastContextPosition.get().getOr('node');\n var margin = shouldUseInsetLayouts(position) ? 1 : 0;\n return getContextToolbarBounds(editor, sharedBackstage, position, margin);\n };\n var canLaunchToolbar = function () {\n return !editor.removed && !(isTouch() && backstage.isContextMenuOpen());\n };\n var isSameLaunchElement = function (elem) {\n return is(lift2(elem, lastElement.get(), eq), true);\n };\n var shouldContextToolbarHide = function () {\n if (!canLaunchToolbar()) {\n return true;\n } else {\n var contextToolbarBounds = getBounds();\n var anchorBounds = is(lastContextPosition.get(), 'node') ? getAnchorElementBounds(editor, lastElement.get()) : getSelectionBounds(editor);\n return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds);\n }\n };\n var close = function () {\n lastElement.clear();\n lastTrigger.clear();\n lastContextPosition.clear();\n InlineView.hide(contextbar);\n };\n var hideOrRepositionIfNecessary = function () {\n if (InlineView.isOpen(contextbar)) {\n var contextBarEle = contextbar.element;\n remove$1(contextBarEle, 'display');\n if (shouldContextToolbarHide()) {\n set$6(contextBarEle, 'display', 'none');\n } else {\n lastTrigger.set(0);\n InlineView.reposition(contextbar);\n }\n }\n };\n var wrapInPopDialog = function (toolbarSpec) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-pop__dialog']\n },\n components: [toolbarSpec],\n behaviours: derive$1([\n Keying.config({ mode: 'acyclic' }),\n config('pop-dialog-wrap-events', [\n runOnAttached(function (comp) {\n editor.shortcuts.add('ctrl+F9', 'focus statusbar', function () {\n return Keying.focusIn(comp);\n });\n }),\n runOnDetached(function (_comp) {\n editor.shortcuts.remove('ctrl+F9');\n })\n ])\n ])\n };\n };\n var getScopes = cached(function () {\n return categorise(registryContextToolbars, function (toolbarApi) {\n var alloySpec = buildToolbar([toolbarApi]);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n });\n });\n var buildContextToolbarGroups = function (allButtons, ctx) {\n return identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras, Optional.some(['form:']));\n };\n var buildContextFormGroups = 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$2(toolbars, function (ctx) {\n return ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, ctx) : buildContextFormGroups(ctx, sharedBackstage.providers);\n }));\n return renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups: initGroups,\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: sharedBackstage.providers\n });\n };\n var getAnchor = function (position, element) {\n var anchorage = position === 'node' ? sharedBackstage.anchors.node(element) : sharedBackstage.anchors.cursor();\n var anchorLayout = getAnchorLayout(editor, position, isTouch(), {\n lastElement: lastElement.get,\n isReposition: function () {\n return is(lastTrigger.get(), 0);\n },\n getMode: function () {\n return Positioning.getMode(sink);\n }\n });\n return deepMerge(anchorage, anchorLayout);\n };\n var launchContext = function (toolbarApi, elem) {\n launchContextToolbar.cancel();\n if (!canLaunchToolbar()) {\n return;\n }\n var toolbarSpec = buildToolbar(toolbarApi);\n var position = toolbarApi[0].position;\n var anchor = getAnchor(position, elem);\n lastContextPosition.set(position);\n lastTrigger.set(1);\n var contextBarEle = contextbar.element;\n remove$1(contextBarEle, 'display');\n if (!isSameLaunchElement(elem)) {\n remove$3(contextBarEle, transitionClass);\n Positioning.reset(sink, contextbar);\n }\n InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), {\n anchor: anchor,\n transition: {\n classes: [transitionClass],\n mode: 'placement'\n }\n }, function () {\n return Optional.some(getBounds());\n });\n elem.fold(lastElement.clear, lastElement.set);\n if (shouldContextToolbarHide()) {\n set$6(contextBarEle, 'display', 'none');\n }\n };\n var launchContextToolbar = last(function () {\n if (!editor.hasFocus() || editor.removed) {\n return;\n }\n if (has(contextbar.element, transitionClass)) {\n launchContextToolbar.throttle();\n } else {\n var scopes = getScopes();\n lookup$1(scopes, editor).fold(close, function (info) {\n launchContext(info.toolbars, Optional.some(info.elem));\n });\n }\n }, 17);\n editor.on('init', function () {\n editor.on('remove', close);\n editor.on('ScrollContent ScrollWindow ObjectResized ResizeEditor longpress', hideOrRepositionIfNecessary);\n editor.on('click keyup focus SetContent', launchContextToolbar.throttle);\n editor.on(hideContextToolbarEvent, close);\n editor.on(showContextToolbarEvent, function (e) {\n var scopes = getScopes();\n get$e(scopes.lookupTable, e.toolbarKey).each(function (ctx) {\n launchContext([ctx], someIf(e.target !== editor, e.target));\n InlineView.getContent(contextbar).each(Keying.focusIn);\n });\n });\n editor.on('focusout', function (_e) {\n global$g.setEditorTimeout(editor, function () {\n if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n close();\n }\n }, 0);\n });\n editor.on('SwitchMode', function () {\n if (editor.mode.isReadOnly()) {\n close();\n }\n });\n editor.on('AfterProgressState', function (event) {\n if (event.state) {\n close();\n } else if (editor.hasFocus()) {\n launchContextToolbar.throttle();\n }\n });\n editor.on('NodeChange', function (_e) {\n search(contextbar.element).fold(launchContextToolbar.throttle, noop);\n });\n });\n };\n\n var register$6 = 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 each$1(alignToolbarButtons, function (item) {\n editor.ui.registry.addToggleButton(item.name, {\n tooltip: item.text,\n icon: item.icon,\n onAction: onActionExecCommand(editor, item.cmd),\n onSetup: onSetupFormatToggle(editor, item.name)\n });\n });\n editor.ui.registry.addButton('alignnone', {\n tooltip: 'No alignment',\n icon: 'align-none',\n onAction: onActionExecCommand(editor, 'JustifyNone')\n });\n };\n\n var units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n var pattern = function () {\n var decimalDigits = '[0-9]+';\n var signedInteger = '[+-]?' + decimalDigits;\n var exponentPart = '[eE]' + signedInteger;\n var dot = '\\\\.';\n var opt = function (input) {\n return '(?:' + input + ')?';\n };\n var unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n var float = '[+-]?(?:' + unsignedDecimalLiteral + ')';\n return new RegExp('^(' + float + ')(.*)$');\n }();\n var isUnit = function (unit, accepted) {\n return exists(accepted, function (acc) {\n return exists(units[acc], function (check) {\n return unit === check;\n });\n });\n };\n var parse = function (input, accepted) {\n var match = Optional.from(pattern.exec(input));\n return match.bind(function (array) {\n var value = Number(array[1]);\n var unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value: value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n var normalise = function (input, accepted) {\n return parse(input, accepted).map(function (_a) {\n var value = _a.value, unit = _a.unit;\n return value + unit;\n });\n };\n\n var registerController = function (editor, spec) {\n var getMenuItems = function () {\n var options = spec.getOptions(editor);\n var initial = spec.getCurrent(editor).map(spec.hash);\n var current = value$1();\n return map$2(options, function (value) {\n return {\n type: 'togglemenuitem',\n text: spec.display(value),\n onSetup: function (api) {\n var setActive = function (active) {\n if (active) {\n current.on(function (oldApi) {\n return oldApi.setActive(false);\n });\n current.set(api);\n }\n api.setActive(active);\n };\n setActive(is(initial, spec.hash(value)));\n var unbindWatcher = spec.watcher(editor, value, setActive);\n return function () {\n current.clear();\n unbindWatcher();\n };\n },\n onAction: function () {\n return spec.setCurrent(editor, value);\n }\n };\n });\n };\n editor.ui.registry.addMenuButton(spec.name, {\n tooltip: spec.text,\n icon: spec.icon,\n fetch: function (callback) {\n return callback(getMenuItems());\n },\n onSetup: spec.onToolbarSetup\n });\n editor.ui.registry.addNestedMenuItem(spec.name, {\n type: 'nestedmenuitem',\n text: spec.text,\n getSubmenuItems: getMenuItems,\n onSetup: spec.onMenuSetup\n });\n };\n var lineHeightSpec = {\n name: 'lineheight',\n text: 'Line height',\n icon: 'line-height',\n getOptions: getLineHeightFormats,\n hash: function (input) {\n return normalise(input, [\n 'fixed',\n 'relative',\n 'empty'\n ]).getOr(input);\n },\n display: identity$1,\n watcher: function (editor, value, callback) {\n return editor.formatter.formatChanged('lineheight', callback, false, { value: value }).unbind;\n },\n getCurrent: function (editor) {\n return Optional.from(editor.queryCommandValue('LineHeight'));\n },\n setCurrent: function (editor, value) {\n return editor.execCommand('LineHeight', false, value);\n }\n };\n var languageSpec = function (editor) {\n var settingsOpt = Optional.from(getContentLanguages(editor));\n return settingsOpt.map(function (settings) {\n return {\n name: 'language',\n text: 'Language',\n icon: 'language',\n getOptions: constant$1(settings),\n hash: function (input) {\n return isUndefined(input.customCode) ? input.code : input.code + '/' + input.customCode;\n },\n display: function (input) {\n return input.title;\n },\n watcher: function (editor, value, callback) {\n return editor.formatter.formatChanged('lang', callback, false, {\n value: value.code,\n customValue: value.customCode\n }).unbind;\n },\n getCurrent: function (editor) {\n var node = SugarElement.fromDom(editor.selection.getNode());\n return closest$4(node, function (n) {\n return Optional.some(n).filter(isElement$2).bind(function (ele) {\n var codeOpt = getOpt(ele, 'lang');\n return codeOpt.map(function (code) {\n var customCode = getOpt(ele, 'data-mce-lang').getOrUndefined();\n return {\n code: code,\n customCode: customCode,\n title: ''\n };\n });\n });\n });\n },\n setCurrent: function (editor, lang) {\n return editor.execCommand('Lang', false, lang);\n },\n onToolbarSetup: function (api) {\n var unbinder = unbindable();\n api.setActive(editor.formatter.match('lang', {}, undefined, true));\n unbinder.set(editor.formatter.formatChanged('lang', api.setActive, true));\n return unbinder.clear;\n }\n };\n });\n };\n var register$5 = function (editor) {\n registerController(editor, lineHeightSpec);\n languageSpec(editor).each(function (spec) {\n return registerController(editor, spec);\n });\n };\n\n var register$4 = 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 onSetupOutdentState = function (editor) {\n return onSetupEvent(editor, 'NodeChange', function (api) {\n api.setDisabled(!editor.queryCommandState('outdent'));\n });\n };\n var registerButtons$2 = function (editor) {\n editor.ui.registry.addButton('outdent', {\n tooltip: 'Decrease indent',\n icon: 'outdent',\n onSetup: onSetupOutdentState(editor),\n onAction: onActionExecCommand(editor, 'outdent')\n });\n editor.ui.registry.addButton('indent', {\n tooltip: 'Increase indent',\n icon: 'indent',\n onAction: onActionExecCommand(editor, 'indent')\n });\n };\n var register$3 = function (editor) {\n registerButtons$2(editor);\n };\n\n var onActionToggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var registerFormatButtons = function (editor) {\n global$6.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: onActionToggleFormat(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: onActionToggleFormat(editor, name_1)\n });\n }\n };\n var registerCommandButtons = function (editor) {\n global$6.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: onActionExecCommand(editor, btn.action)\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$6.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: onActionExecCommand(editor, btn.action),\n onSetup: onSetupFormatToggle(editor, btn.name)\n });\n });\n };\n var registerButtons$1 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems$2 = function (editor) {\n global$6.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: onActionExecCommand(editor, btn.action)\n });\n });\n editor.ui.registry.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'sourcecode',\n onAction: onActionToggleFormat(editor, 'code')\n });\n };\n var register$2 = function (editor) {\n registerButtons$1(editor);\n registerMenuItems$2(editor);\n };\n\n var onSetupUndoRedoState = function (editor, type) {\n return onSetupEvent(editor, 'Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function (api) {\n api.setDisabled(editor.mode.isReadOnly() || !editor.undoManager[type]());\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: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo')\n });\n editor.ui.registry.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo')\n });\n };\n var registerButtons = function (editor) {\n editor.ui.registry.addButton('undo', {\n tooltip: 'Undo',\n icon: 'undo',\n disabled: true,\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo')\n });\n editor.ui.registry.addButton('redo', {\n tooltip: 'Redo',\n icon: 'redo',\n disabled: true,\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo')\n });\n };\n var register$1 = function (editor) {\n registerMenuItems$1(editor);\n registerButtons(editor);\n };\n\n var onSetupVisualAidState = function (editor) {\n return onSetupEvent(editor, 'VisualAid', function (api) {\n api.setActive(editor.hasVisual);\n });\n };\n var registerMenuItems = function (editor) {\n editor.ui.registry.addToggleMenuItem('visualaid', {\n text: 'Visual aids',\n onSetup: onSetupVisualAidState(editor),\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n });\n };\n var registerToolbarButton = function (editor) {\n editor.ui.registry.addButton('visualaid', {\n tooltip: 'Visual aids',\n text: 'Visual aids',\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n });\n };\n var register = function (editor) {\n registerToolbarButton(editor);\n registerMenuItems(editor);\n };\n\n var setup$6 = function (editor, backstage) {\n register$6(editor);\n register$2(editor);\n register$4(editor, backstage);\n register$1(editor);\n register$a(editor);\n register(editor);\n register$3(editor);\n register$5(editor);\n };\n\n var nu = function (x, y) {\n return {\n type: 'makeshift',\n x: x,\n y: y\n };\n };\n var transpose = function (pos, dx, dy) {\n return nu(pos.x + dx, pos.y + dy);\n };\n var isTouchEvent = function (e) {\n return e.type === 'longpress' || e.type.indexOf('touch') === 0;\n };\n var fromPageXY = function (e) {\n if (isTouchEvent(e)) {\n var touch = e.touches[0];\n return nu(touch.pageX, touch.pageY);\n } else {\n return nu(e.pageX, e.pageY);\n }\n };\n var fromClientXY = function (e) {\n if (isTouchEvent(e)) {\n var touch = e.touches[0];\n return nu(touch.clientX, touch.clientY);\n } else {\n return nu(e.clientX, e.clientY);\n }\n };\n var transposeContentAreaContainer = function (element, pos) {\n var containerPos = global$c.DOM.getPos(element);\n return transpose(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 type: 'selection',\n root: SugarElement.fromDom(editor.selection.getNode())\n };\n };\n var getNodeAnchor = function (editor) {\n return {\n type: 'node',\n node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n root: SugarElement.fromDom(editor.getBody())\n };\n };\n var getAnchorSpec$1 = function (editor, e, anchorType) {\n switch (anchorType) {\n case 'node':\n return getNodeAnchor(editor);\n case 'point':\n return getPointAnchor(editor, e);\n case 'selection':\n return getSelectionAnchor(editor);\n }\n };\n\n var initAndShow$1 = function (editor, e, buildMenu, backstage, contextmenu, anchorType) {\n var items = buildMenu();\n var anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, {\n menu: { markers: markers('normal') },\n data: menuData\n });\n });\n };\n\n var layouts = {\n onLtr: function () {\n return [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2,\n north,\n south,\n northeast,\n southeast,\n northwest,\n southwest\n ];\n },\n onRtl: function () {\n return [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2,\n north,\n south,\n northwest,\n southwest,\n northeast,\n southeast\n ];\n }\n };\n var bubbleSize = 12;\n var bubbleAlignments = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top']\n };\n 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(editor.getWin(), SimSelection.domRange(rng));\n return rngRectOpt.exists(function (rngRect) {\n return rngRect.left <= touch_1.clientX && rngRect.right >= touch_1.clientX && rngRect.top <= touch_1.clientY && rngRect.bottom >= touch_1.clientY;\n });\n }\n };\n var setupiOSOverrides = function (editor) {\n var originalSelection = editor.selection.getRng();\n var selectionReset = function () {\n global$g.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 getAnchorSpec = function (editor, e, anchorType) {\n var anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n var bubbleYOffset = anchorType === 'point' ? bubbleSize : 0;\n return __assign({\n bubble: nu$5(0, bubbleYOffset, bubbleAlignments),\n layouts: layouts,\n overrides: {\n maxWidthFunction: expandable(),\n maxHeightFunction: expandable$1()\n }\n }, anchorSpec);\n };\n var show = function (editor, e, items, backstage, contextmenu, anchorType, highlightImmediately) {\n var anchorSpec = getAnchorSpec(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, true).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, {\n menu: {\n markers: markers('normal'),\n highlightImmediately: highlightImmediately\n },\n data: menuData,\n type: 'horizontal'\n }, function () {\n return Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === 'node' ? 'node' : 'selection'));\n });\n editor.fire(hideContextToolbarEvent);\n });\n };\n var initAndShow = function (editor, e, buildMenu, backstage, contextmenu, anchorType) {\n var detection = detect$1();\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, anchorType, shouldHighlightImmediately());\n };\n if ((isOSX || isiOS) && anchorType !== 'node') {\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 open();\n }\n };\n\n var patchPipeConfig = function (config) {\n return typeof config === 'string' ? config.split(/[ ,]/) : config;\n };\n var shouldNeverUseNative = function (editor) {\n return editor.getParam('contextmenu_never_use_native', false, 'boolean');\n };\n var getMenuItems = function (editor, name, defaultItems) {\n var contextMenus = editor.ui.registry.getAll().contextMenus;\n return Optional.from(editor.getParam(name)).map(patchPipeConfig).getOrThunk(function () {\n return filter$2(patchPipeConfig(defaultItems), function (item) {\n return has$2(contextMenus, item);\n });\n });\n };\n var isContextMenuDisabled = function (editor) {\n return editor.getParam('contextmenu') === false;\n };\n var getContextMenu = function (editor) {\n return getMenuItems(editor, 'contextmenu', 'link linkchecker image imagetools table spellchecker configurepermanentpen');\n };\n var getAvoidOverlapSelector = function (editor) {\n return editor.getParam('contextmenu_avoid_overlap', '', 'string');\n };\n\n var isSeparator = function (item) {\n return isString(item) ? item === '|' : item.type === 'separator';\n };\n var separator = { type: 'separator' };\n var makeContextItem = function (item) {\n var commonMenuItem = function (item) {\n return {\n text: item.text,\n icon: item.icon,\n disabled: item.disabled,\n shortcut: item.shortcut\n };\n };\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator;\n case 'submenu':\n return __assign(__assign({ type: 'nestedmenuitem' }, commonMenuItem(item)), {\n getSubmenuItems: function () {\n var items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map$2(items, makeContextItem);\n }\n }\n });\n default:\n return __assign(__assign({ type: 'menuitem' }, commonMenuItem(item)), { onAction: noarg(item.onAction) });\n }\n }\n };\n var addContextMenuGroup = function (xs, groupItems) {\n if (groupItems.length === 0) {\n return xs;\n }\n var lastMenuItem = last$2(xs).filter(function (item) {\n return !isSeparator(item);\n });\n var before = lastMenuItem.fold(function () {\n return [];\n }, function (_) {\n return [separator];\n });\n return xs.concat(before).concat(groupItems).concat([separator]);\n };\n var generateContextMenu = function (contextMenus, menuConfig, selectedElement) {\n var sections = foldl(menuConfig, function (acc, name) {\n return get$e(contextMenus, name.toLowerCase()).map(function (menu) {\n var items = menu.update(selectedElement);\n if (isString(items)) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (items.length > 0) {\n var allItems = map$2(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n }).getOrThunk(function () {\n return acc.concat([name]);\n });\n }, []);\n if (sections.length > 0 && isSeparator(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !shouldNeverUseNative(editor);\n };\n var isTriggeredByKeyboard = function (editor, e) {\n return e.type !== 'longpress' && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n };\n var getSelectedElement = function (editor, e) {\n return isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target;\n };\n var getAnchorType = function (editor, e) {\n var selector = getAvoidOverlapSelector(editor);\n var anchorType = isTriggeredByKeyboard(editor, e) ? 'selection' : 'point';\n if (isNotEmpty(selector)) {\n var target = getSelectedElement(editor, e);\n var selectorExists = closest(SugarElement.fromDom(target), selector);\n return selectorExists ? 'node' : anchorType;\n } else {\n return anchorType;\n }\n };\n var setup$5 = function (editor, lazySink, backstage) {\n var detection = detect$1();\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$1(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 anchorType = getAnchorType(editor, e);\n var buildMenu = function () {\n var selectedElement = getSelectedElement(editor, e);\n var registry = editor.ui.registry.getAll();\n var menuConfig = getContextMenu(editor);\n return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n };\n var initAndShow$2 = isTouch() ? initAndShow : initAndShow$1;\n initAndShow$2(editor, e, buildMenu, backstage, contextmenu, anchorType);\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 = 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 = function (change) {\n return function (point) {\n return point.translate(change.left, change.top);\n };\n };\n var transform = function (changes) {\n return function (x, y) {\n return foldl(changes, function (rest, f) {\n return f(rest);\n }, SugarPosition(x, y));\n };\n };\n var asFixed = function (coord, scroll, origin) {\n return coord.fold(transform([\n add(origin),\n subtract(scroll)\n ]), transform([subtract(scroll)]), transform([]));\n };\n var asAbsolute = function (coord, scroll, origin) {\n return coord.fold(transform([add(origin)]), transform([]), transform([add(scroll)]));\n };\n var asOffset = function (coord, scroll, origin) {\n return coord.fold(transform([]), transform([subtract(origin)]), transform([\n add(scroll),\n subtract(origin)\n ]));\n };\n var withinRange = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n return Math.abs(a1.left - a2.left) <= xRange && Math.abs(a1.top - a2.top) <= yRange;\n };\n var getDeltas = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n var left = Math.abs(a1.left - a2.left);\n var top = Math.abs(a1.top - a2.top);\n return SugarPosition(left, top);\n };\n var toStyles = function (coord, scroll, origin) {\n var stylesOpt = coord.fold(function (x, y) {\n return {\n position: Optional.some('absolute'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n };\n }, function (x, y) {\n return {\n position: Optional.some('absolute'),\n left: Optional.some(x - origin.left + 'px'),\n top: Optional.some(y - origin.top + 'px')\n };\n }, function (x, y) {\n return {\n position: Optional.some('fixed'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n };\n });\n return __assign({\n right: Optional.none(),\n bottom: Optional.none()\n }, stylesOpt);\n };\n var translate = 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(x + deltaX, y + deltaY);\n }, function (x, y) {\n return fixed(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), absorbOne(asFixed, fixed));\n };\n var offset = adt.offset;\n var absolute = adt.absolute;\n var fixed = adt.fixed;\n\n var parseAttrToInt = function (element, name) {\n var value = get$c(element, name);\n return isUndefined(value) ? NaN : parseInt(value, 10);\n };\n var get = function (component, snapsInfo) {\n var element = component.element;\n var x = parseAttrToInt(element, snapsInfo.leftAttr);\n var y = parseAttrToInt(element, snapsInfo.topAttr);\n return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y));\n };\n var set = function (component, snapsInfo, pt) {\n var element = component.element;\n set$7(element, snapsInfo.leftAttr, pt.left + 'px');\n set$7(element, snapsInfo.topAttr, pt.top + 'px');\n };\n var clear = function (component, snapsInfo) {\n var element = component.element;\n remove$6(element, snapsInfo.leftAttr);\n remove$6(element, snapsInfo.topAttr);\n };\n\n var getCoords = function (component, snapInfo, coord, delta) {\n return get(component, snapInfo).fold(function () {\n return coord;\n }, function (fixed$1) {\n return fixed(fixed$1.left + delta.left, fixed$1.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(component, snapInfo, fixedCoord);\n return snap.fold(function () {\n return {\n coord: fixed(fixedCoord.left, fixedCoord.top),\n extra: Optional.none()\n };\n }, function (spanned) {\n return {\n coord: spanned.output,\n extra: spanned.extra\n };\n });\n };\n var stopDrag = function (component, snapInfo) {\n clear(component, snapInfo);\n };\n var findMatchingSnap = function (snaps, newCoord, scroll, origin) {\n return findMap(snaps, function (snap) {\n var sensor = snap.sensor;\n var inRange = withinRange(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return inRange ? Optional.some({\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n }) : Optional.none();\n });\n };\n var findClosestSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n var matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n return matchSnap.orThunk(function () {\n var bestSnap = foldl(snaps, function (acc, snap) {\n var sensor = snap.sensor;\n var deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return acc.deltas.fold(function () {\n return {\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n };\n }, function (bestDeltas) {\n var currAvg = (deltas.left + deltas.top) / 2;\n var bestAvg = (bestDeltas.left + bestDeltas.top) / 2;\n if (currAvg <= bestAvg) {\n return {\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n };\n } else {\n return acc;\n }\n });\n }, {\n deltas: Optional.none(),\n snap: Optional.none()\n });\n return bestSnap.snap.map(function (snap) {\n return {\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n };\n });\n });\n };\n var findSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n return findMatchingSnap(snaps, newCoord, scroll, origin);\n };\n var snapTo$1 = 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 = function (component, dragConfig, _state, snap) {\n var target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n var doc = owner$4(component.element);\n var scroll_1 = get$6(doc);\n var origin_1 = getOrigin(target);\n var snapPin = snapTo$1(snap, scroll_1, origin_1);\n var styles = toStyles(snapPin.coord, scroll_1, origin_1);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo\n });\n\n var initialAttribute = 'data-initial-z-index';\n var resetZIndex = function (blocker) {\n parent(blocker.element).filter(isElement$2).each(function (root) {\n getOpt(root, initialAttribute).fold(function () {\n return remove$1(root, 'z-index');\n }, function (zIndex) {\n return set$6(root, 'z-index', zIndex);\n });\n remove$6(root, initialAttribute);\n });\n };\n var changeZIndex = function (blocker) {\n parent(blocker.element).filter(isElement$2).each(function (root) {\n getRaw(root, 'z-index').each(function (zindex) {\n set$7(root, initialAttribute, zindex);\n });\n set$6(root, 'z-index', get$a(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 required$1('getSnapPoints'),\n onHandler('onSensor'),\n required$1('leftAttr'),\n required$1('topAttr'),\n defaulted('lazyViewport', win),\n defaulted('mustSnap', false)\n ]);\n\n var schema$6 = [\n defaulted('useFixed', never),\n required$1('blockerClass'),\n defaulted('getTarget', identity$1),\n defaulted('onDrag', noop),\n defaulted('repositionTarget', true),\n defaulted('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 : offset;\n return nu(parseInt(left, 10), parseInt(top, 10));\n }).getOrThunk(function () {\n var location = absolute$3(target);\n return absolute(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$1(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width);\n var newY = clamp$1(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height);\n var newCoords = absolute(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 }, constant$1(newCoords), function () {\n var fixed$1 = asFixed(newCoords, scroll, origin);\n return fixed(fixed$1.left, fixed$1.top);\n });\n };\n var calcNewCoord = function (component, optSnaps, currentCoord, scroll, origin, delta, startData) {\n var newCoord = optSnaps.fold(function () {\n var translated = translate(currentCoord, delta.left, delta.top);\n var fixedCoord = asFixed(translated, scroll, origin);\n return fixed(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$4(component.element);\n var scroll_1 = get$6(doc);\n var origin_1 = getOrigin(target);\n var currentCoord = getCurrentCoord(target);\n var newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll_1, origin_1, delta, startData);\n var styles = toStyles(newCoord, scroll_1, origin_1);\n setOptions(target, styles);\n }\n dragConfig.onDrag(component, target, delta);\n };\n\n var calcStartData = function (dragConfig, comp) {\n return {\n bounds: dragConfig.getBounds(),\n height: getOuter$1(comp.element),\n width: getOuter(comp.element)\n };\n };\n var move = 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$2(__spreadArray([run$1(windowScroll(), function (comp) {\n dragState.getStartData().each(function () {\n return updateStartState(comp);\n });\n })], events(dragConfig, dragState, updateStartState)));\n };\n };\n\n var init$2 = function (dragApi) {\n return derive$2([\n run$1(mousedown(), dragApi.forceDrop),\n run$1(mouseup(), dragApi.drop),\n run$1(mousemove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event);\n }),\n run$1(mouseout(), dragApi.delayDrop)\n ]);\n };\n\n var getData$1 = function (event) {\n return Optional.from(SugarPosition(event.x, event.y));\n };\n var getDelta$1 = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n\n var MouseData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$1,\n getDelta: getDelta$1\n });\n\n var events$2 = function (dragConfig, dragState, updateStartState) {\n return [run$1(mousedown(), function (component, simulatedEvent) {\n var raw = simulatedEvent.event.raw;\n if (raw.button !== 0) {\n return;\n }\n simulatedEvent.stop();\n var stop$1 = function () {\n return stop(component, Optional.some(blocker), dragConfig, dragState);\n };\n var delayDrop = DelayedFunction(stop$1, 200);\n var dragApi = {\n drop: stop$1,\n delayDrop: delayDrop.schedule,\n forceDrop: stop$1,\n move: function (event) {\n delayDrop.cancel();\n move(component, dragConfig, dragState, MouseData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$2(dragApi));\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n })];\n };\n var schema$5 = __spreadArray(__spreadArray([], schema$6), [output$1('dragger', { handlers: handlers(events$2) })]);\n\n var init$1 = function (dragApi) {\n return derive$2([\n run$1(touchstart(), dragApi.forceDrop),\n run$1(touchend(), dragApi.drop),\n run$1(touchcancel(), dragApi.drop),\n run$1(touchmove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event);\n })\n ]);\n };\n\n var getDataFrom = function (touches) {\n var touch = touches[0];\n return Optional.some(SugarPosition(touch.clientX, touch.clientY));\n };\n var getData = function (event) {\n var raw = event.raw;\n var touches = raw.touches;\n return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n };\n var getDelta = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n\n var TouchData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData,\n getDelta: getDelta\n });\n\n var events$1 = function (dragConfig, dragState, updateStartState) {\n var blockerSingleton = value$1();\n var stopBlocking = function (component) {\n stop(component, blockerSingleton.get(), dragConfig, dragState);\n blockerSingleton.clear();\n };\n return [\n run$1(touchstart(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n var stop = function () {\n return stopBlocking(component);\n };\n var dragApi = {\n drop: stop,\n delayDrop: noop,\n forceDrop: stop,\n move: function (event) {\n move(component, dragConfig, dragState, TouchData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$1(dragApi));\n blockerSingleton.set(blocker);\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n }),\n run$1(touchmove(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n move(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n }),\n run$1(touchend(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n stopBlocking(component);\n }),\n run$1(touchcancel(), stopBlocking)\n ];\n };\n var schema$4 = __spreadArray(__spreadArray([], schema$6), [output$1('dragger', { handlers: handlers(events$1) })]);\n\n var events = function (dragConfig, dragState, updateStartState) {\n return __spreadArray(__spreadArray([], events$2(dragConfig, dragState, updateStartState)), events$1(dragConfig, dragState, updateStartState));\n };\n var schema$3 = __spreadArray(__spreadArray([], schema$6), [output$1('dragger', { handlers: handlers(events) })]);\n\n var mouse = schema$5;\n var touch = schema$4;\n var mouseOrTouch = schema$3;\n\n var DraggingBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n mouse: mouse,\n touch: touch,\n mouseOrTouch: mouseOrTouch\n });\n\n var init = function () {\n var previous = Optional.none();\n var startData = Optional.none();\n var reset = function () {\n previous = Optional.none();\n startData = Optional.none();\n };\n var calculateDelta = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.getDelta(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n var update = function (mode, dragEvent) {\n return mode.getData(dragEvent).bind(function (nuData) {\n return calculateDelta(mode, nuData);\n });\n };\n var setStartData = function (data) {\n startData = Optional.some(data);\n };\n var getStartData = function () {\n return startData;\n };\n var readState = constant$1({});\n return nu$8({\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\n });\n\n var Dragging = createModes({\n branchKey: 'mode',\n branches: DraggingBranches,\n name: 'dragging',\n active: {\n events: function (dragConfig, dragState) {\n var dragger = dragConfig.dragger;\n return dragger.handlers(dragConfig, dragState);\n }\n },\n extra: {\n snap: function (sConfig) {\n return {\n sensor: sConfig.sensor,\n range: sConfig.range,\n output: sConfig.output,\n extra: Optional.from(sConfig.extra)\n };\n }\n },\n state: DragState,\n apis: DraggingApis\n });\n\n var snapWidth = 40;\n var snapOffset = snapWidth / 2;\n var calcSnap = function (selectorOpt, td, x, y, width, height) {\n return selectorOpt.fold(function () {\n return Dragging.snap({\n sensor: absolute(x - snapOffset, y - snapOffset),\n range: SugarPosition(width, height),\n output: absolute(Optional.some(x), Optional.some(y)),\n extra: { td: td }\n });\n }, function (selectorHandle) {\n var sensorLeft = x - snapOffset;\n var sensorTop = y - snapOffset;\n var sensorWidth = snapWidth;\n var sensorHeight = snapWidth;\n var rect = selectorHandle.element.dom.getBoundingClientRect();\n return Dragging.snap({\n sensor: absolute(sensorLeft, sensorTop),\n range: SugarPosition(sensorWidth, sensorHeight),\n output: absolute(Optional.some(x - rect.width / 2), Optional.some(y - rect.height / 2)),\n extra: { td: td }\n });\n });\n };\n var getSnapsConfig = function (getSnapPoints, cell, onChange) {\n var isSameCell = function (cellOpt, td) {\n return cellOpt.exists(function (currentTd) {\n return eq(currentTd, td);\n });\n };\n return {\n getSnapPoints: getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: function (component, extra) {\n var td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(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$4 = function (editor, sink) {\n var tlTds = Cell([]);\n var brTds = Cell([]);\n var isVisible = Cell(false);\n var startCell = value$1();\n var finishCell = value$1();\n var getTopLeftSnap = function (td) {\n var box = absolute$2(td);\n return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height);\n };\n var getTopLeftSnaps = function () {\n return map$2(tlTds.get(), function (td) {\n return getTopLeftSnap(td);\n });\n };\n var getBottomRightSnap = function (td) {\n var box = absolute$2(td);\n return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height);\n };\n var getBottomRightSnaps = function () {\n return map$2(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$1(selector.element, 'display');\n var viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n var aboveViewport = isAbove(cellRect);\n var belowViewport = isBelow(cellRect, viewportHeight);\n if (aboveViewport || belowViewport) {\n set$6(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$1().deviceType.isTouch()) {\n editor.on('TableSelectionChange', function (e) {\n if (!isVisible.get()) {\n attach(sink, topLeft);\n attach(sink, bottomRight);\n isVisible.set(true);\n }\n startCell.set(e.start);\n finishCell.set(e.finish);\n e.otherCells.each(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.clear();\n finishCell.clear();\n });\n }\n };\n\n var isHidden = 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$2(parts, function (part, index) {\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: {\n 'role': 'button',\n 'data-index': index,\n 'tab-index': -1,\n 'aria-level': index + 1\n },\n innerHtml: part.name\n },\n action: function (_btn) {\n editor.focus();\n editor.selection.select(part.element);\n editor.nodeChanged();\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig()\n ])\n });\n });\n var divider = {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true },\n innerHtml: ' ' + settings.delimiter + ' '\n }\n };\n return foldl(newPathElements.slice(1), function (acc, element) {\n var newAcc = acc;\n newAcc.push(divider);\n newAcc.push(element);\n return newAcc;\n }, [newPathElements[0]]);\n };\n var updatePath = function (parents) {\n var newPath = [];\n var i = parents.length;\n while (i-- > 0) {\n var parent_1 = parents[i];\n if (parent_1.nodeType === 1 && !isHidden(parent_1)) {\n var args = editor.fire('ResolveName', {\n name: parent_1.nodeName.toLowerCase(),\n target: parent_1\n });\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent_1\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n return newPath;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path'],\n attributes: { role: 'navigation' }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: 'div[role=button]'\n }),\n Disabling.config({ disabled: providersBackstage.isDisabled }),\n receivingConfig(),\n Tabstopping.config({}),\n Replacing.config({}),\n config('elementPathEvents', [runOnAttached(function (comp, _e) {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', function () {\n return Keying.focusIn(comp);\n });\n editor.on('NodeChange', function (e) {\n var newPath = updatePath(e.parents);\n if (newPath.length > 0) {\n Replacing.set(comp, getDataPath(newPath));\n } else {\n Replacing.set(comp, []);\n }\n });\n })])\n ]),\n components: []\n };\n };\n\n var ResizeTypes;\n (function (ResizeTypes) {\n ResizeTypes[ResizeTypes['None'] = 0] = 'None';\n ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';\n ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';\n }(ResizeTypes || (ResizeTypes = {})));\n var getDimensions = function (editor, deltas, resizeType, originalHeight, originalWidth) {\n var dimensions = {};\n dimensions.height = calcCappedSize(originalHeight + deltas.top, getMinHeightSetting(editor), getMaxHeightSetting(editor));\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthSetting(editor), getMaxWidthSetting(editor));\n }\n return dimensions;\n };\n var resize = function (editor, deltas, resizeType) {\n var container = SugarElement.fromDom(editor.getContainer());\n var dimensions = getDimensions(editor, deltas, resizeType, get$8(container), get$7(container));\n each(dimensions, function (val, dim) {\n return set$6(container, dim, numToPx(val));\n });\n fireResizeEditor(editor);\n };\n\n var getResizeType = function (editor) {\n var fallback = !editor.hasPlugin('autoresize');\n var resize = editor.getParam('resize', fallback);\n if (resize === false) {\n return ResizeTypes.None;\n } else if (resize === 'both') {\n return ResizeTypes.Both;\n } else {\n return ResizeTypes.Vertical;\n }\n };\n var keyboardHandler = function (editor, resizeType, x, y) {\n var scale = 20;\n var delta = SugarPosition(x * scale, y * scale);\n resize(editor, delta, resizeType);\n return Optional.some(true);\n };\n var renderResizeHandler = function (editor, providersBackstage) {\n var resizeType = getResizeType(editor);\n if (resizeType === ResizeTypes.None) {\n return Optional.none();\n }\n return Optional.some(render$3('resize-handle', {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: { title: providersBackstage.translate('Resize') },\n behaviours: [\n Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: function (_comp, _target, delta) {\n return resize(editor, delta, resizeType);\n },\n blockerClass: 'tox-blocker'\n }),\n Keying.config({\n mode: 'special',\n onLeft: function () {\n return keyboardHandler(editor, resizeType, -1, 0);\n },\n onRight: function () {\n return keyboardHandler(editor, resizeType, 1, 0);\n },\n onUp: function () {\n return keyboardHandler(editor, resizeType, 0, -1);\n },\n onDown: function () {\n return keyboardHandler(editor, resizeType, 0, 1);\n }\n }),\n Tabstopping.config({}),\n Focusing.config({})\n ]\n }, providersBackstage.icons));\n };\n\n var renderWordCount = function (editor, providersBackstage) {\n var _a;\n var replaceCountText = function (comp, count, mode) {\n return Replacing.set(comp, [text(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\n };\n return Button.sketch({\n dom: {\n tag: 'button',\n classes: ['tox-statusbar__wordcount']\n },\n components: [],\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig(),\n Tabstopping.config({}),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: {\n mode: 'words',\n count: {\n words: 0,\n characters: 0\n }\n }\n }\n }),\n config('wordcount-events', [\n runOnExecute$1(function (comp) {\n var currentVal = Representing.getValue(comp);\n var newMode = currentVal.mode === 'words' ? 'characters' : 'words';\n Representing.setValue(comp, {\n mode: newMode,\n count: currentVal.count\n });\n replaceCountText(comp, currentVal.count, newMode);\n }),\n runOnAttached(function (comp) {\n editor.on('wordCountUpdate', function (e) {\n var mode = Representing.getValue(comp).mode;\n Representing.setValue(comp, {\n mode: mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ]),\n eventOrder: (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'wordcount-events'\n ], _a)\n });\n };\n\n var renderStatusbar = function (editor, providersBackstage) {\n var renderBranding = function () {\n var label = global$f.translate([\n 'Powered by {0}',\n 'Tiny'\n ]);\n var linkHtml = '' + label + '';\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding'],\n innerHtml: linkHtml\n }\n };\n };\n var getTextComponents = function () {\n var components = [];\n if (editor.getParam('elementpath', true, 'boolean')) {\n components.push(renderElementPath(editor, {}, providersBackstage));\n }\n if (editor.hasPlugin('wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (editor.getParam('branding', true, 'boolean')) {\n components.push(renderBranding());\n }\n if (components.length > 0) {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__text-container']\n },\n components: components\n }];\n }\n return [];\n };\n var getComponents = function () {\n var components = getTextComponents();\n var resizeHandler = renderResizeHandler(editor, providersBackstage);\n return components.concat(resizeHandler.toArray());\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n var setup$3 = function (editor) {\n var _a;\n var isInline = editor.inline;\n var mode = isInline ? Inline : Iframe;\n var header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n var lazyOuterContainer = Optional.none();\n var platform = detect$1();\n var isIE = platform.browser.isIE();\n var platformClasses = isIE ? ['tox-platform-ie'] : [];\n var isTouch = platform.deviceType.isTouch();\n var touchPlatformClass = 'tox-platform-touch';\n var deviceClasses = isTouch ? [touchPlatformClass] : [];\n var isToolbarBottom = isToolbarLocationBottom(editor);\n var uiContainer = getUiContainer(editor);\n var dirAttributes = global$f.isRtl() ? { attributes: { dir: 'rtl' } } : {};\n var verticalDirAttributes = { attributes: (_a = {}, _a[Attribute] = isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom, _a) };\n var lazyHeader = function () {\n return lazyOuterContainer.bind(OuterContainer.getHeader);\n };\n var isHeaderDocked = function () {\n return header.isDocked(lazyHeader);\n };\n var resizeUiMothership = function () {\n set$6(uiMothership.element, 'width', document.body.clientWidth + 'px');\n };\n var makeSinkDefinition = function () {\n var isGridUiContainer = eq(body(), uiContainer) && get$a(uiContainer, 'display') === 'grid';\n var sinkSpec = {\n dom: __assign({\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-tinymce-aux'\n ].concat(platformClasses).concat(deviceClasses)\n }, dirAttributes),\n behaviours: derive$1([Positioning.config({\n useFixed: function () {\n return isHeaderDocked();\n }\n })])\n };\n var reactiveWidthSpec = {\n dom: { styles: { width: document.body.clientWidth + 'px' } },\n events: derive$2([run$1(windowResize(), resizeUiMothership)])\n };\n return deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {});\n };\n var sink = build$1(makeSinkDefinition());\n var lazySink = function () {\n return Result.value(sink);\n };\n var memAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-anchorbar']\n }\n });\n var lazyAnchorBar = function () {\n return lazyOuterContainer.bind(function (container) {\n return memAnchorBar.getOpt(container);\n }).getOrDie('Could not find a anchor bar element');\n };\n var lazyToolbar = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getToolbar(container);\n }).getOrDie('Could not find more toolbar element');\n };\n var lazyThrobber = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getThrobber(container);\n }).getOrDie('Could not find throbber element');\n };\n var backstage = init$7(sink, editor, lazyAnchorBar);\n var partMenubar = OuterContainer.parts.menubar({\n dom: {\n tag: 'div',\n classes: ['tox-menubar']\n },\n backstage: backstage,\n onEscape: function () {\n editor.focus();\n }\n });\n var toolbarMode = getToolbarMode(editor);\n var partToolbar = OuterContainer.parts.toolbar(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar']\n },\n getSink: lazySink,\n providers: backstage.shared.providers,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode,\n lazyToolbar: lazyToolbar,\n lazyHeader: function () {\n return lazyHeader().getOrDie('Could not find header element');\n }\n }, verticalDirAttributes));\n var partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n providers: backstage.shared.providers,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode\n });\n var partSocket = OuterContainer.parts.socket({\n dom: {\n tag: 'div',\n classes: ['tox-edit-area']\n }\n });\n var partSidebar = OuterContainer.parts.sidebar({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar']\n }\n });\n var partThrobber = OuterContainer.parts.throbber({\n dom: {\n tag: 'div',\n classes: ['tox-throbber']\n },\n backstage: backstage\n });\n var sb = editor.getParam('statusbar', true, 'boolean');\n var statusbar = sb && !isInline ? Optional.some(renderStatusbar(editor, backstage.shared.providers)) : Optional.none();\n var socketSidebarContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar-wrap']\n },\n components: [\n partSocket,\n partSidebar\n ]\n };\n var hasMultipleToolbar = isMultipleToolbars(editor);\n var hasToolbar = isToolbarEnabled(editor);\n var hasMenubar = isMenubarEnabled(editor);\n var getPartToolbar = function () {\n if (hasMultipleToolbar) {\n return [partMultipleToolbar];\n } else if (hasToolbar) {\n return [partToolbar];\n } else {\n return [];\n }\n };\n var partHeader = OuterContainer.parts.header({\n dom: __assign({\n tag: 'div',\n classes: ['tox-editor-header']\n }, verticalDirAttributes),\n components: flatten([\n hasMenubar ? [partMenubar] : [],\n getPartToolbar(),\n useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n ]),\n sticky: isStickyToolbar(editor),\n editor: editor,\n sharedBackstage: backstage.shared\n });\n var editorComponents = flatten([\n isToolbarBottom ? [] : [partHeader],\n isInline ? [] : [socketSidebarContainer],\n isToolbarBottom ? [partHeader] : []\n ]);\n var editorContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: editorComponents\n };\n var containerComponents = flatten([\n [editorContainer],\n isInline ? [] : statusbar.toArray(),\n [partThrobber]\n ]);\n var isHidden = isDistractionFree(editor);\n var attributes = __assign(__assign({ role: 'application' }, global$f.isRtl() ? { dir: 'rtl' } : {}), isHidden ? { 'aria-hidden': 'true' } : {});\n var outerContainer = build$1(OuterContainer.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-tinymce'\n ].concat(isInline ? ['tox-tinymce-inline'] : []).concat(isToolbarBottom ? ['tox-tinymce--toolbar-bottom'] : []).concat(deviceClasses).concat(platformClasses),\n styles: __assign({ visibility: 'hidden' }, isHidden ? {\n opacity: '0',\n border: '0'\n } : {}),\n attributes: attributes\n },\n components: containerComponents,\n behaviours: derive$1([\n receivingConfig(),\n Disabling.config({ disableClass: 'tox-tinymce--disabled' }),\n Keying.config({\n mode: 'cyclic',\n selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle'\n })\n ])\n }));\n lazyOuterContainer = Optional.some(outerContainer);\n editor.shortcuts.add('alt+F9', 'focus menubar', function () {\n OuterContainer.focusMenubar(outerContainer);\n });\n editor.shortcuts.add('alt+F10', 'focus toolbar', function () {\n OuterContainer.focusToolbar(outerContainer);\n });\n editor.addCommand('ToggleToolbarDrawer', function () {\n OuterContainer.toggleToolbarDrawer(outerContainer);\n });\n editor.addQueryStateHandler('ToggleToolbarDrawer', function () {\n return OuterContainer.isToolbarDrawerToggled(outerContainer);\n });\n var mothership = takeover(outerContainer);\n var uiMothership = takeover(sink);\n setup$b(editor, mothership, uiMothership);\n var getUi = function () {\n var channels = {\n broadcastAll: uiMothership.broadcast,\n broadcastOn: uiMothership.broadcastOn,\n register: noop\n };\n return { channels: channels };\n };\n var setEditorSize = function () {\n var parsedHeight = numToPx(getHeightWithFallback(editor));\n var parsedWidth = numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue('div', 'width', parsedWidth)) {\n set$6(outerContainer.element, 'width', parsedWidth);\n }\n if (isValidValue('div', 'height', parsedHeight)) {\n set$6(outerContainer.element, 'height', parsedHeight);\n } else {\n set$6(outerContainer.element, 'height', '200px');\n }\n }\n return parsedHeight;\n };\n var renderUI = function () {\n header.setup(editor, backstage.shared, lazyHeader);\n setup$6(editor, backstage);\n setup$5(editor, lazySink, backstage);\n setup$8(editor);\n setup$7(editor, lazyThrobber, backstage.shared);\n map(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$7(editor, contextToolbars, sink, { backstage: backstage });\n setup$4(editor, sink);\n var elm = editor.getElement();\n var height = setEditorSize();\n var uiComponents = {\n mothership: mothership,\n uiMothership: uiMothership,\n outerContainer: outerContainer\n };\n var args = {\n targetNode: elm,\n height: height\n };\n return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n };\n return {\n mothership: mothership,\n uiMothership: uiMothership,\n backstage: backstage,\n renderUI: renderUI,\n getUi: getUi\n };\n };\n\n var describedBy = function (describedElement, describeElement) {\n var describeId = Optional.from(get$c(describedElement, 'id')).fold(function () {\n var id = generate$6('dialog-describe');\n set$7(describeElement, 'id', id);\n return id;\n }, identity$1);\n set$7(describedElement, 'aria-describedby', describeId);\n };\n\n var labelledBy = function (labelledElement, labelElement) {\n var labelId = getOpt(labelledElement, 'id').fold(function () {\n var id = generate$6('dialog-label');\n set$7(labelElement, 'id', id);\n return id;\n }, identity$1);\n set$7(labelledElement, 'aria-labelledby', labelId);\n };\n\n var schema$2 = constant$1([\n required$1('lazySink'),\n option('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted('useTabstopAt', always),\n defaulted('eventOrder', {}),\n field('modalBehaviours', [Keying]),\n onKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape')\n ]);\n var basic = { sketch: identity$1 };\n var parts$2 = constant$1([\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(handle, '[role=\"dialog\"]').getOr(handle);\n },\n blockerClass: detail.dragBlockClass.getOrDie(new Error('The drag blocker class was not specified for a dialog with a drag handle: \\n' + JSON.stringify(spec, null, 2)).message),\n getBounds: detail.getDragBounds\n })])\n };\n }\n }),\n required({\n schema: [required$1('dom')],\n name: 'title'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'close'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'body'\n }),\n optional({\n factory: basic,\n schema: [required$1('dom')],\n name: 'footer'\n }),\n external$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('dom', {\n tag: 'div',\n styles: {\n position: 'fixed',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px'\n }\n }),\n defaulted('components', [])\n ],\n name: 'blocker'\n })\n ]);\n\n var factory$4 = function (detail, components, spec, externals) {\n var _a;\n var dialogComp = value$1();\n var showDialog = function (dialog) {\n dialogComp.set(dialog);\n var sink = detail.lazySink(dialog).getOrDie();\n var externalBlocker = externals.blocker();\n var blocker = sink.getSystem().build(__assign(__assign({}, externalBlocker), {\n components: externalBlocker.components.concat([premade(dialog)]),\n behaviours: derive$1([\n Focusing.config({}),\n config('dialog-blocker-events', [runOnSource(focusin(), function () {\n Keying.focusIn(dialog);\n })])\n ])\n }));\n attach(sink, blocker);\n Keying.focusIn(dialog);\n };\n var hideDialog = function (dialog) {\n dialogComp.clear();\n parent(dialog.element).each(function (blockerDom) {\n dialog.getSystem().getByDom(blockerDom).each(function (blocker) {\n detach(blocker);\n });\n });\n };\n var getDialogBody = function (dialog) {\n return getPartOrDie(dialog, detail, 'body');\n };\n var getDialogFooter = function (dialog) {\n return getPartOrDie(dialog, detail, 'footer');\n };\n var setBusy = function (dialog, getBusySpec) {\n Blocking.block(dialog, getBusySpec);\n };\n var setIdle = function (dialog) {\n Blocking.unblock(dialog);\n };\n var modalEventsId = generate$6('modal-events');\n var eventOrder = __assign(__assign({}, detail.eventOrder), (_a = {}, _a[attachedToDom()] = [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || []), _a));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: {\n show: showDialog,\n hide: hideDialog,\n getBody: getDialogBody,\n getFooter: getDialogFooter,\n setIdle: setIdle,\n setBusy: setBusy\n },\n eventOrder: eventOrder,\n domModification: {\n attributes: {\n 'role': 'dialog',\n 'aria-modal': 'true'\n }\n },\n behaviours: augment(detail.modalBehaviours, [\n Replacing.config({}),\n Keying.config({\n mode: 'cyclic',\n onEnter: detail.onExecute,\n onEscape: detail.onEscape,\n useTabstopAt: detail.useTabstopAt\n }),\n Blocking.config({ getRoot: dialogComp.get }),\n config(modalEventsId, [runOnAttached(function (c) {\n labelledBy(c.element, getPartOrDie(c, detail, 'title').element);\n describedBy(c.element, getPartOrDie(c, detail, 'body').element);\n })])\n ])\n };\n };\n var ModalDialog = composite({\n name: 'ModalDialog',\n configFields: schema$2(),\n partFields: parts$2(),\n factory: factory$4,\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 requiredString('type'),\n requiredString('name')\n ].concat(commonMenuItemFields));\n var dialogToggleMenuItemDataProcessor = boolean;\n\n var baseFooterButtonFields = [\n field$1('name', 'name', defaultedThunk(function () {\n return generate$6('button-name');\n }), string),\n optionString('icon'),\n defaultedStringEnum('align', 'end', [\n 'start',\n 'end'\n ]),\n defaultedBoolean('primary', false),\n defaultedBoolean('disabled', false)\n ];\n var dialogFooterButtonFields = __spreadArray(__spreadArray([], baseFooterButtonFields), [requiredString('text')]);\n var normalFooterButtonFields = __spreadArray([requiredStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ])], dialogFooterButtonFields);\n var menuFooterButtonFields = __spreadArray([\n requiredStringEnum('type', ['menu']),\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n requiredArrayOf('items', dialogToggleMenuItemSchema)\n ], baseFooterButtonFields);\n var dialogFooterButtonSchema = choose$1('type', {\n submit: normalFooterButtonFields,\n cancel: normalFooterButtonFields,\n custom: normalFooterButtonFields,\n menu: menuFooterButtonFields\n });\n\n var alertBannerFields = [\n requiredString('type'),\n requiredString('text'),\n requiredStringEnum('level', [\n 'info',\n 'warn',\n 'error',\n 'success'\n ]),\n requiredString('icon'),\n defaulted('url', '')\n ];\n var alertBannerSchema = objOf(alertBannerFields);\n\n var createBarFields = function (itemsField) {\n return [\n requiredString('type'),\n itemsField\n ];\n };\n\n var buttonFields = [\n requiredString('type'),\n requiredString('text'),\n defaultedBoolean('disabled', false),\n defaultedBoolean('primary', false),\n field$1('name', 'name', defaultedThunk(function () {\n return generate$6('button-name');\n }), string),\n optionString('icon'),\n defaultedBoolean('borderless', false)\n ];\n var buttonSchema = objOf(buttonFields);\n\n var checkboxFields = [\n requiredString('type'),\n requiredString('name'),\n requiredString('label'),\n defaultedBoolean('disabled', false)\n ];\n var checkboxSchema = objOf(checkboxFields);\n var checkboxDataProcessor = boolean;\n\n var formComponentFields = [\n requiredString('type'),\n requiredString('name')\n ];\n var formComponentWithLabelFields = formComponentFields.concat([optionString('label')]);\n\n var collectionFields = formComponentWithLabelFields.concat([defaulted('columns', 'auto')]);\n var collectionSchema = objOf(collectionFields);\n var collectionDataProcessor = arrOfObj([\n requiredString('value'),\n requiredString('text'),\n requiredString('icon')\n ]);\n\n var colorInputFields = formComponentWithLabelFields;\n var colorInputSchema = objOf(colorInputFields);\n var colorInputDataProcessor = string;\n\n var colorPickerFields = formComponentWithLabelFields;\n var colorPickerSchema = objOf(colorPickerFields);\n var colorPickerDataProcessor = string;\n\n var customEditorFields = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredString('scriptId'),\n requiredString('scriptUrl'),\n defaultedPostMsg('settings', undefined)\n ]);\n var customEditorFieldsOld = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredFunction('init')\n ]);\n var customEditorSchema = valueOf(function (v) {\n return asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(function () {\n return asRaw('customeditor.new', objOfOnly(customEditorFields), v);\n });\n });\n var customEditorDataProcessor = string;\n\n var dropZoneFields = formComponentWithLabelFields;\n var dropZoneSchema = objOf(dropZoneFields);\n var dropZoneDataProcessor = arrOfVal();\n\n var createGridFields = function (itemsField) {\n return [\n requiredString('type'),\n requiredNumber('columns'),\n itemsField\n ];\n };\n\n var htmlPanelFields = [\n requiredString('type'),\n requiredString('html'),\n defaultedStringEnum('presets', 'presentation', [\n 'presentation',\n 'document'\n ])\n ];\n var htmlPanelSchema = objOf(htmlPanelFields);\n\n var iframeFields = formComponentWithLabelFields.concat([defaultedBoolean('sandboxed', true)]);\n var iframeSchema = objOf(iframeFields);\n var iframeDataProcessor = string;\n\n var imageToolsFields = formComponentWithLabelFields.concat([requiredOf('currentState', objOf([\n required$1('blob'),\n requiredString('url')\n ]))]);\n var imageToolsSchema = objOf(imageToolsFields);\n\n var inputFields = formComponentWithLabelFields.concat([\n optionString('inputMode'),\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var inputSchema = objOf(inputFields);\n var inputDataProcessor = string;\n\n var createLabelFields = function (itemsField) {\n return [\n requiredString('type'),\n requiredString('label'),\n itemsField\n ];\n };\n\n var listBoxSingleItemFields = [\n requiredString('text'),\n requiredString('value')\n ];\n var listBoxNestedItemFields = [\n requiredString('text'),\n requiredArrayOf('items', thunkOf('items', function () {\n return listBoxItemSchema;\n }))\n ];\n var listBoxItemSchema = oneOf([\n objOf(listBoxSingleItemFields),\n objOf(listBoxNestedItemFields)\n ]);\n var listBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOf('items', listBoxItemSchema),\n defaultedBoolean('disabled', false)\n ]);\n var listBoxSchema = objOf(listBoxFields);\n var listBoxDataProcessor = string;\n\n var selectBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOfObj('items', [\n requiredString('text'),\n requiredString('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 requiredString('width'),\n requiredString('height')\n ]);\n\n var tableFields = [\n requiredString('type'),\n requiredArrayOf('header', string),\n requiredArrayOf('cells', arrOf(string))\n ];\n var tableSchema = objOf(tableFields);\n\n var textAreaFields = formComponentWithLabelFields.concat([\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var textAreaSchema = objOf(textAreaFields);\n var textAreaDataProcessor = string;\n\n var urlInputFields = formComponentWithLabelFields.concat([\n defaultedStringEnum('filetype', 'file', [\n 'image',\n 'media',\n 'file'\n ]),\n defaulted('disabled', false)\n ]);\n var urlInputSchema = objOf(urlInputFields);\n var urlInputDataProcessor = objOf([\n requiredString('value'),\n defaulted('meta', {})\n ]);\n\n var createItemsField = function (name) {\n return field$1('items', 'items', required$2(), arrOf(valueOf(function (v) {\n return asRaw('Checking item of ' + name, itemSchema, v).fold(function (sErr) {\n return Result.error(formatError(sErr));\n }, function (passValue) {\n return Result.value(passValue);\n });\n })));\n };\n var itemSchema = valueThunk(function () {\n return choose$2('type', {\n alertbanner: alertBannerSchema,\n bar: objOf(createBarFields(createItemsField('bar'))),\n button: buttonSchema,\n checkbox: checkboxSchema,\n colorinput: colorInputSchema,\n colorpicker: colorPickerSchema,\n dropzone: dropZoneSchema,\n grid: objOf(createGridFields(createItemsField('grid'))),\n iframe: iframeSchema,\n input: inputSchema,\n listbox: listBoxSchema,\n selectbox: selectBoxSchema,\n sizeinput: sizeInputSchema,\n 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 requiredString('type'),\n defaulted('classes', []),\n requiredArrayOf('items', itemSchema)\n ];\n var panelSchema = objOf(panelFields);\n\n var tabFields = [\n field$1('name', 'name', defaultedThunk(function () {\n return generate$6('tab-name');\n }), string),\n requiredString('title'),\n requiredArrayOf('items', itemSchema)\n ];\n var tabPanelFields = [\n requiredString('type'),\n requiredArrayOfObj('tabs', tabFields)\n ];\n var tabPanelSchema = objOf(tabPanelFields);\n\n var dialogButtonFields = dialogFooterButtonFields;\n var dialogButtonSchema = dialogFooterButtonSchema;\n var dialogSchema = objOf([\n requiredString('title'),\n requiredOf('body', choose$2('type', {\n panel: panelSchema,\n tabpanel: tabPanelSchema\n })),\n defaultedString('size', 'normal'),\n requiredArrayOf('buttons', dialogButtonSchema),\n defaulted('initialData', {}),\n defaultedFunction('onAction', noop),\n defaultedFunction('onChange', noop),\n defaultedFunction('onSubmit', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onCancel', noop),\n defaulted('onTabChange', noop)\n ]);\n var createDialog = function (spec) {\n return asRaw('dialog', dialogSchema, spec);\n };\n\n var urlDialogButtonSchema = objOf(__spreadArray([requiredStringEnum('type', [\n 'cancel',\n 'custom'\n ])], dialogButtonFields));\n var urlDialogSchema = objOf([\n requiredString('title'),\n requiredString('url'),\n optionNumber('height'),\n optionNumber('width'),\n optionArrayOf('buttons', urlDialogButtonSchema),\n defaultedFunction('onAction', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onMessage', noop)\n ]);\n var createUrlDialog = function (spec) {\n return asRaw('dialog', urlDialogSchema, spec);\n };\n\n var getAllObjects = function (obj) {\n if (isObject(obj)) {\n return [obj].concat(bind$3(values(obj), getAllObjects));\n } else if (isArray(obj)) {\n return bind$3(obj, getAllObjects);\n } else {\n return [];\n }\n };\n\n var isNamedItem = function (obj) {\n return isString(obj.type) && isString(obj.name);\n };\n var dataProcessors = {\n checkbox: checkboxDataProcessor,\n colorinput: colorInputDataProcessor,\n colorpicker: colorPickerDataProcessor,\n dropzone: dropZoneDataProcessor,\n input: inputDataProcessor,\n iframe: iframeDataProcessor,\n sizeinput: sizeInputDataProcessor,\n selectbox: selectBoxDataProcessor,\n listbox: listBoxDataProcessor,\n size: sizeInputDataProcessor,\n textarea: textAreaDataProcessor,\n urlinput: urlInputDataProcessor,\n customeditor: customEditorDataProcessor,\n collection: collectionDataProcessor,\n togglemenuitem: dialogToggleMenuItemDataProcessor\n };\n var getDataProcessor = function (item) {\n return Optional.from(dataProcessors[item.type]);\n };\n var getNamedItems = function (structure) {\n return filter$2(getAllObjects(structure), isNamedItem);\n };\n\n var createDataValidator = function (structure) {\n var namedItems = getNamedItems(structure);\n var fields = bind$3(namedItems, function (item) {\n return getDataProcessor(item).fold(function () {\n return [];\n }, function (schema) {\n return [requiredOf(item.name, schema)];\n });\n });\n return objOf(fields);\n };\n\n var extract = 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(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(structure);\n }\n };\n\n var toValidValues = function (values) {\n var errors = [];\n var result = {};\n each(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$2(spec.items, function (item) {\n return interpretInForm(parts, item, backstage);\n })\n };\n }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [memForm.asSpec()]\n }],\n behaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n ComposingConfigs.memento(memForm),\n RepresentingConfigs.memento(memForm, {\n postprocess: function (formValue) {\n return toValidValues(formValue).fold(function (err) {\n console.error(err);\n return {};\n }, identity$1);\n }\n })\n ])\n };\n };\n\n var factory$3 = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events$a(detail.action),\n behaviours: augment(detail.tabButtonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n })\n ]),\n domModification: detail.domModification\n };\n };\n var TabButton = single({\n name: 'TabButton',\n configFields: [\n defaulted('uid', undefined),\n required$1('value'),\n field$1('dom', 'dom', mergeWithThunk(function () {\n return {\n attributes: {\n 'role': 'tab',\n 'id': generate$6('aria'),\n 'aria-selected': 'false'\n }\n };\n }), anyValue()),\n option('action'),\n defaulted('domModification', {}),\n field('tabButtonBehaviours', [\n Focusing,\n Keying,\n Representing\n ]),\n required$1('view')\n ],\n factory: factory$3\n });\n\n var schema$1 = constant$1([\n required$1('tabs'),\n required$1('dom'),\n defaulted('clickToDismiss', false),\n field('tabbarBehaviours', [\n Highlighting,\n Keying\n ]),\n markers$1([\n 'tabClass',\n 'selectedClass'\n ])\n ]);\n 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$1 = constant$1([tabsPart]);\n\n var factory$2 = 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$7(tab.element, 'aria-selected', 'true');\n },\n onDehighlight: function (tabbar, tab) {\n set$7(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({\n name: 'Tabbar',\n configFields: schema$1(),\n partFields: parts$1(),\n factory: factory$2\n });\n\n var factory$1 = 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({\n name: 'Tabview',\n configFields: [field('tabviewBehaviours', [Replacing])],\n factory: factory$1\n });\n\n var schema = constant$1([\n defaulted('selectFirst', true),\n onHandler('onChangeTab'),\n onHandler('onDismissTab'),\n defaulted('tabs', []),\n field('tabSectionBehaviours', [])\n ]);\n var barPart = required({\n factory: Tabbar,\n schema: [\n required$1('dom'),\n requiredObjOf('markers', [\n required$1('tabClass'),\n required$1('selectedClass')\n ])\n ],\n name: 'tabbar',\n defaults: function (detail) {\n return { tabs: detail.tabs };\n }\n });\n var viewPart = required({\n factory: Tabview,\n name: 'tabview'\n });\n var parts = constant$1([\n barPart,\n viewPart\n ]);\n\n var factory = 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$5(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$7(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$2(detail.tabSectionBehaviours),\n events: derive$2(flatten([\n detail.selectFirst ? [runOnAttached(function (section, _simulatedEvent) {\n changeTabBy(section, Highlighting.getFirst);\n })] : [],\n [\n run$1(changeTab(), function (section, simulatedEvent) {\n var button = simulatedEvent.event.button;\n changeTab$1(button);\n }),\n run$1(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$5(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({\n name: 'TabSection',\n configFields: schema(),\n partFields: parts(),\n factory: factory,\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$2(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(dialog, '.tox-dialog-wrap').getOr(dialog);\n var isFixed = get$a(rootElm, 'position') === 'fixed';\n var maxHeight;\n if (isFixed) {\n maxHeight = Math.max(documentElement$1.clientHeight, window.innerHeight);\n } else {\n maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n }\n var tabviewHeight = get$8(tabview);\n var isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$7(tablist);\n var currentTabHeight = isTabListBeside ? Math.max(get$8(tablist), tabviewHeight) : tabviewHeight;\n var dialogTopMargin = parseInt(get$a(dialog, 'margin-top'), 10) || 0;\n var dialogBottomMargin = parseInt(get$a(dialog, 'margin-bottom'), 10) || 0;\n var dialogHeight = get$8(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$6(tabview, 'height', height + 'px');\n if (!detect$1().browser.isIE()) {\n set$6(tabview, 'flex-basis', height + 'px');\n } else {\n remove$1(tabview, 'flex-basis');\n }\n };\n var updateTabviewHeight = function (dialogBody, tabview, maxTabHeight) {\n ancestor(dialogBody, '[role=\"dialog\"]').each(function (dialog) {\n descendant(dialog, '[role=\"tablist\"]').each(function (tablist) {\n maxTabHeight.get().map(function (height) {\n set$6(tabview, 'height', '0');\n set$6(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(dialog, '[role=\"tabpanel\"]');\n };\n var setMode = function (allTabs) {\n var smartTabHeight = function () {\n var maxTabHeight = value$1();\n var extraEvents = [\n runOnAttached(function (comp) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n set$6(tabview, 'visibility', 'hidden');\n comp.getSystem().getByDom(tabview).toOptional().each(function (tabviewComp) {\n var heights = measureHeights(allTabs, tabview, tabviewComp);\n var maxTabHeightOpt = getMaxHeight(heights);\n maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set);\n });\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n remove$1(tabview, 'visibility');\n showTab(allTabs, comp);\n global$g.requestAnimationFrame(function () {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n });\n }),\n run$1(windowResize(), function (comp) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n }),\n run$1(formResizeEvent, function (comp, _se) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n var oldFocus = active(getRootNode(tabview));\n set$6(tabview, 'visibility', 'hidden');\n var oldHeight = getRaw(tabview, 'height').map(function (h) {\n return parseInt(h, 10);\n });\n remove$1(tabview, 'height');\n remove$1(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(newHeight);\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n } else {\n oldHeight.each(function (h) {\n setTabviewHeight(tabview, h);\n });\n }\n remove$1(tabview, 'visibility');\n oldFocus.each(focus$3);\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$2(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$2(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([\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$6('update-dialog');\n var titleChannel = generate$6('update-title');\n var bodyChannel = generate$6('update-body');\n var footerChannel = generate$6('update-footer');\n var bodySendMessageChannel = generate$6('body-send-message');\n\n var renderBody = function (spec, id, backstage, ariaAttrs) {\n var renderComponents = function (incoming) {\n switch (incoming.body.type) {\n case 'tabpanel': {\n return [renderTabPanel(incoming.body, backstage)];\n }\n default: {\n return [renderBodyPanel(incoming.body, backstage)];\n }\n }\n };\n var updateState = function (_comp, incoming) {\n return Optional.some({\n isTabPanel: function () {\n return incoming.body.type === 'tabpanel';\n }\n });\n };\n var ariaAttributes = { 'aria-live': 'polite' };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js'],\n attributes: __assign(__assign({}, id.map(function (x) {\n return { id: x };\n }).getOr({})), ariaAttrs ? ariaAttributes : {})\n },\n components: [],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n Reflecting.config({\n channel: bodyChannel,\n updateState: updateState,\n renderComponents: renderComponents,\n initialData: spec\n })\n ])\n };\n };\n var renderInlineBody = function (spec, contentId, backstage, ariaAttrs) {\n return renderBody(spec, Optional.some(contentId), backstage, ariaAttrs);\n };\n var renderModalBody = function (spec, backstage) {\n var bodySpec = renderBody(spec, Optional.none(), backstage, false);\n return ModalDialog.parts.body(bodySpec);\n };\n var renderIframeBody = function (spec) {\n var bodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-iframe']\n },\n components: [craft({\n dom: {\n tag: 'iframe',\n attributes: { src: spec.url }\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n })]\n }],\n behaviours: derive$1([Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n })])\n };\n return ModalDialog.parts.body(bodySpec);\n };\n\n var isTouch = global$a.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('

' + providersBackstage.translate(message) + '

') }]\n }]\n });\n };\n var pFooter = function (buttons) {\n return ModalDialog.parts.footer({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer']\n },\n components: buttons\n });\n };\n var pFooterGroup = function (startButtons, endButtons) {\n return [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-start']\n },\n components: startButtons\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-end']\n },\n components: endButtons\n })\n ];\n };\n var renderDialog$1 = function (spec) {\n var _a;\n var dialogClass = 'tox-dialog';\n var blockerClass = dialogClass + '-wrap';\n var blockerBackdropClass = blockerClass + '__backdrop';\n var scrollLockClass = dialogClass + '__disable-scroll';\n return ModalDialog.sketch({\n lazySink: spec.lazySink,\n onEscape: function (comp) {\n spec.onEscape(comp);\n return Optional.some(true);\n },\n useTabstopAt: function (elem) {\n return !isPseudoStop(elem);\n },\n dom: {\n tag: 'div',\n classes: [dialogClass].concat(spec.extraClasses),\n styles: __assign({ position: 'relative' }, spec.extraStyles)\n },\n components: __spreadArray([\n spec.header,\n spec.body\n ], spec.footer.toArray()),\n parts: {\n blocker: {\n dom: fromHtml('
'),\n components: [{\n dom: {\n tag: 'div',\n classes: isTouch ? [\n blockerBackdropClass,\n blockerBackdropClass + '--opaque'\n ] : [blockerBackdropClass]\n }\n }]\n }\n },\n dragBlockClass: blockerClass,\n modalBehaviours: derive$1(__spreadArray([\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$3(body(), scrollLockClass);\n })\n ])\n ], spec.extraBehaviours)),\n eventOrder: __assign((_a = {}, _a[execute$5()] = ['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: [render$3('close', {\n tag: 'div',\n classes: ['tox-icon']\n }, providersBackstage.icons)],\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('
') };\n };\n var renderInlineHeader = function (spec, titleId, providersBackstage) {\n return Container.sketch({\n dom: fromHtml('
'),\n components: [\n renderTitle(spec, Optional.some(titleId), providersBackstage),\n renderDragHandle(),\n renderClose(providersBackstage)\n ],\n containerBehaviours: derive$1([Dragging.config({\n mode: 'mouse',\n blockerClass: 'blocker',\n getTarget: function (handle) {\n return closest$1(handle, '[role=\"dialog\"]').getOrDie();\n },\n snaps: {\n getSnapPoints: function () {\n return [];\n },\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top'\n }\n })])\n });\n };\n var renderModalHeader = function (spec, providersBackstage) {\n var pTitle = ModalDialog.parts.title(renderTitle(spec, Optional.none(), providersBackstage));\n var pHandle = ModalDialog.parts.draghandle(renderDragHandle());\n var pClose = ModalDialog.parts.close(renderClose(providersBackstage));\n var components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]);\n return Container.sketch({\n dom: fromHtml('
'),\n components: components\n });\n };\n\n var getHeader = function (title, backstage) {\n return renderModalHeader({\n title: backstage.shared.providers.translate(title),\n draggable: backstage.dialog.isDraggableModal()\n }, backstage.shared.providers);\n };\n var getBusySpec = function (message, bs, providers) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__busy-spinner'],\n attributes: { 'aria-label': providers.translate(message) },\n styles: {\n left: '0px',\n right: '0px',\n bottom: '0px',\n top: '0px',\n position: 'absolute'\n }\n },\n behaviours: bs,\n components: [{ dom: fromHtml('
') }]\n };\n };\n var getEventExtras = function (lazyDialog, providers, extra) {\n return {\n onClose: function () {\n return extra.closeWindow();\n },\n onBlock: function (blockEvent) {\n ModalDialog.setBusy(lazyDialog(), function (_comp, bs) {\n return getBusySpec(blockEvent.message, bs, providers);\n });\n },\n onUnblock: function () {\n ModalDialog.setIdle(lazyDialog());\n }\n };\n };\n var renderModalDialog = function (spec, initialData, dialogEvents, backstage) {\n var _a;\n var updateState = function (_comp, incoming) {\n return Optional.some(incoming);\n };\n return build$1(renderDialog$1(__assign(__assign({}, spec), {\n lazySink: backstage.shared.getSink,\n extraBehaviours: __spreadArray([\n Reflecting.config({\n channel: dialogChannel,\n updateState: updateState,\n initialData: initialData\n }),\n RepresentingConfigs.memory({})\n ], spec.extraBehaviours),\n onEscape: function (comp) {\n emit(comp, formCancelEvent);\n },\n dialogEvents: dialogEvents,\n eventOrder: (_a = {}, _a[receive()] = [\n Reflecting.name(),\n Receiving.name()\n ], _a[attachedToDom()] = [\n 'scroll-lock',\n Reflecting.name(),\n 'messages',\n 'dialog-events',\n 'alloy.base.behaviour'\n ], _a[detachedFromDom()] = [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'messages',\n Reflecting.name(),\n 'scroll-lock'\n ], _a)\n })));\n };\n var mapMenuButtons = function (buttons) {\n var mapItems = function (button) {\n var items = map$2(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$2(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),\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$1(formUnblockEvent, function (_c, _se) {\n return extras.onUnblock();\n }),\n run$1(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$1(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 __spreadArray(__spreadArray([], 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$1(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 __spreadArray(__spreadArray([], initCommonEvents(fireApiEvent, extras)), [\n fireApiEvent(formSubmitEvent, function (api, spec) {\n return spec.onSubmit(api);\n }),\n fireApiEvent(formChangeEvent, function (api, spec, event) {\n spec.onChange(api, { name: event.name });\n }),\n fireApiEvent(formActionEvent, function (api, spec, event, component) {\n var focusIn = function () {\n return Keying.focusIn(component);\n };\n var isDisabled = function (focused) {\n return has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(function (val) {\n return val === 'true';\n });\n };\n var rootNode = getRootNode(component.element);\n var current = active(rootNode);\n spec.onAction(api, {\n name: event.name,\n value: event.value\n });\n active(rootNode).fold(focusIn, function (focused) {\n if (isDisabled(focused)) {\n focusIn();\n } else if (current.exists(function (cur) {\n return contains(focused, cur) && isDisabled(cur);\n })) {\n focusIn();\n } else {\n getSink().toOptional().filter(function (sink) {\n return !contains(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 = function (compInSystem, footerButtons, buttonName) {\n return find$5(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$3(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$2(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$2(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(compInSystem, footerButtons, buttonName);\n };\n return Optional.some({\n lookupByName: lookupByName,\n footerButtons: footerButtons\n });\n };\n return {\n dom: fromHtml('
'),\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: footerChannel,\n initialData: initSpec,\n updateState: updateState,\n renderComponents: renderComponents\n })])\n };\n };\n var renderInlineFooter = function (initSpec, backstage) {\n return renderFooter(initSpec, backstage);\n };\n var renderModalFooter = function (initSpec, backstage) {\n return ModalDialog.parts.footer(renderFooter(initSpec, backstage));\n };\n\n var getCompByName = function (access, name) {\n var root = access.getRoot();\n if (root.getSystem().isConnected()) {\n var form_1 = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n return Form.getField(form_1, name).fold(function () {\n var footer = access.getFooter();\n var footerState = Reflecting.getState(footer);\n return footerState.get().bind(function (f) {\n return f.lookupByName(form_1, name);\n });\n }, function (comp) {\n return Optional.some(comp);\n });\n } else {\n return Optional.none();\n }\n };\n var validateData$1 = 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(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$1(access, mergedData);\n var form = access.getFormWrapper();\n Representing.setValue(form, newInternalData);\n each(menuItemStates, function (v, k) {\n if (has$2(mergedData, k)) {\n v.set(mergedData[k]);\n }\n });\n });\n };\n var disable = function (name) {\n getCompByName(access, name).each(Disabling.disable);\n };\n var enable = function (name) {\n getCompByName(access, name).each(Disabling.enable);\n };\n var focus = function (name) {\n getCompByName(access, name).each(Focusing.focus);\n };\n var block = function (message) {\n if (!isString(message)) {\n throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(function (root) {\n emitWith(root, formBlockEvent, { message: message });\n });\n };\n var unblock = function () {\n withRoot(function (root) {\n emit(root, formUnblockEvent);\n });\n };\n var showTab = function (name) {\n withRoot(function (_) {\n var body = access.getBody();\n var bodyState = Reflecting.getState(body);\n if (bodyState.get().exists(function (b) {\n return b.isTabPanel();\n })) {\n Composing.getCurrent(body).each(function (tabSection) {\n TabSection.showTab(tabSection, name);\n });\n }\n });\n };\n var redial = function (d) {\n withRoot(function (root) {\n var dialogInit = doRedial(d);\n root.getSystem().broadcastOn([dialogChannel], dialogInit);\n root.getSystem().broadcastOn([titleChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([bodyChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([footerChannel], dialogInit.internalDialog);\n instanceApi.setData(dialogInit.initialData);\n });\n };\n var close = function () {\n withRoot(function (root) {\n emit(root, formCloseEvent);\n });\n };\n var instanceApi = {\n getData: getData,\n setData: setData,\n disable: disable,\n enable: enable,\n focus: focus,\n block: block,\n unblock: unblock,\n showTab: showTab,\n redial: redial,\n close: close\n };\n return instanceApi;\n };\n\n var getDialogSizeClasses = function (size) {\n switch (size) {\n case 'large':\n return ['tox-dialog--width-lg'];\n case 'medium':\n return ['tox-dialog--width-md'];\n default:\n return [];\n }\n };\n var renderDialog = function (dialogInit, extra, backstage) {\n var header = getHeader(dialogInit.internalDialog.title, backstage);\n var body = renderModalBody({ body: dialogInit.internalDialog.body }, backstage);\n var storagedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons);\n var objOfCells = extractCellsToObject(storagedMenuButtons);\n var footer = renderModalFooter({ buttons: storagedMenuButtons }, backstage);\n var dialogEvents = SilverDialogEvents.initDialog(function () {\n return instanceApi;\n }, getEventExtras(function () {\n return dialog;\n }, backstage.shared.providers, extra), backstage.shared.getSink);\n var dialogSize = getDialogSizeClasses(dialogInit.internalDialog.size);\n var spec = {\n header: header,\n body: body,\n footer: Optional.some(footer),\n extraClasses: dialogSize,\n extraBehaviours: [],\n extraStyles: {}\n };\n var dialog = renderModalDialog(spec, dialogInit, dialogEvents, backstage);\n var modalAccess = function () {\n var getForm = function () {\n var outerForm = ModalDialog.getBody(dialog);\n return Composing.getCurrent(outerForm).getOr(outerForm);\n };\n return {\n getRoot: constant$1(dialog),\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$6('dialog-label');\n var dialogContentId = generate$6('dialog-content');\n var updateState = function (_comp, incoming) {\n return Optional.some(incoming);\n };\n var memHeader = record(renderInlineHeader({\n title: dialogInit.internalDialog.title,\n draggable: true\n }, dialogLabelId, backstage.shared.providers));\n var memBody = record(renderInlineBody({ body: dialogInit.internalDialog.body }, dialogContentId, backstage, ariaAttrs));\n var storagedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons);\n var objOfCells = extractCellsToObject(storagedMenuButtons);\n var memFooter = record(renderInlineFooter({ buttons: storagedMenuButtons }, backstage));\n var dialogEvents = SilverDialogEvents.initDialog(function () {\n return instanceApi;\n }, {\n onBlock: function (event) {\n Blocking.block(dialog, function (_comp, bs) {\n return getBusySpec(event.message, bs, backstage.shared.providers);\n });\n },\n onUnblock: function () {\n Blocking.unblock(dialog);\n },\n onClose: function () {\n return extra.closeWindow();\n }\n }, backstage.shared.getSink);\n var dialog = build$1({\n dom: {\n tag: 'div',\n classes: [\n 'tox-dialog',\n 'tox-dialog-inline'\n ],\n attributes: (_a = { role: 'dialog' }, _a['aria-labelledby'] = dialogLabelId, _a['aria-describedby'] = dialogContentId, _a)\n },\n eventOrder: (_b = {}, _b[receive()] = [\n Reflecting.name(),\n Receiving.name()\n ], _b[execute$5()] = ['execute-on-form'], _b[attachedToDom()] = [\n 'reflecting',\n 'execute-on-form'\n ], _b),\n behaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n onEscape: function (c) {\n emit(c, formCloseEvent);\n return Optional.some(true);\n },\n useTabstopAt: function (elem) {\n return !isPseudoStop(elem) && (name$2(elem) !== 'button' || get$c(elem, 'disabled') !== 'disabled');\n }\n }),\n Reflecting.config({\n channel: dialogChannel,\n updateState: updateState,\n initialData: dialogInit\n }),\n Focusing.config({}),\n config('execute-on-form', dialogEvents.concat([runOnSource(focusin(), function (comp, _se) {\n Keying.focusIn(comp);\n })])),\n Blocking.config({\n getRoot: function () {\n return Optional.some(dialog);\n }\n }),\n Replacing.config({}),\n RepresentingConfigs.memory({})\n ]),\n components: [\n memHeader.asSpec(),\n memBody.asSpec(),\n memFooter.asSpec()\n ]\n });\n var instanceApi = getDialogApi({\n getRoot: constant$1(dialog),\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$1 = 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$2(data, 'mceAction');\n };\n var handleMessage = function (editor, api, data) {\n switch (data.mceAction) {\n case 'insertContent':\n editor.insertContent(data.content);\n break;\n case 'setContent':\n editor.setContent(data.content);\n break;\n case 'execCommand':\n var ui = isBoolean(data.ui) ? data.ui : false;\n editor.execCommand(data.cmd, ui, data.value);\n break;\n case 'close':\n api.close();\n break;\n case 'block':\n api.block(data.message);\n break;\n case 'unblock':\n api.unblock();\n break;\n }\n };\n var renderUrlDialog = function (internalDialog, extra, editor, backstage) {\n var _a;\n var header = getHeader(internalDialog.title, backstage);\n var body = renderIframeBody(internalDialog);\n var footer = internalDialog.buttons.bind(function (buttons) {\n if (buttons.length === 0) {\n return Optional.none();\n } else {\n return Optional.some(renderModalFooter({ buttons: buttons }, backstage));\n }\n });\n var dialogEvents = SilverDialogEvents.initUrlDialog(function () {\n return instanceApi;\n }, getEventExtras(function () {\n return dialog;\n }, backstage.shared.providers, extra));\n var styles = __assign(__assign({}, internalDialog.height.fold(function () {\n return {};\n }, function (height) {\n return {\n 'height': height + 'px',\n 'max-height': height + 'px'\n };\n })), internalDialog.width.fold(function () {\n return {};\n }, function (width) {\n return {\n 'width': width + 'px',\n 'max-width': width + 'px'\n };\n }));\n var classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];\n var iframeUri = new global$1(internalDialog.url, { base_uri: new global$1(window.location.href) });\n var iframeDomain = iframeUri.protocol + '://' + iframeUri.host + (iframeUri.port ? ':' + iframeUri.port : '');\n var messageHandlerUnbinder = unbindable();\n var extraBehaviours = [\n config('messages', [\n runOnAttached(function () {\n var unbind = bind(SugarElement.fromDom(window), 'message', function (e) {\n if (iframeUri.isSameOrigin(new global$1(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(unbind);\n }),\n runOnDetached(messageHandlerUnbinder.clear)\n ]),\n Receiving.config({\n channels: (_a = {}, _a[bodySendMessageChannel] = {\n onReceive: function (comp, data) {\n descendant(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$2 = function (extras) {\n var sharedBackstage = extras.backstage.shared;\n var open = function (message, callback) {\n var closeDialog = function () {\n ModalDialog.hide(alertDialog);\n callback();\n };\n var memFooterClose = record(renderFooterButton({\n name: 'close-alert',\n text: 'OK',\n primary: true,\n align: 'end',\n disabled: false,\n icon: Optional.none()\n }, 'cancel', extras.backstage));\n var titleSpec = pUntitled();\n var closeSpec = pClose(closeDialog, sharedBackstage.providers);\n var alertDialog = build$1(renderDialog$1({\n lazySink: function () {\n return sharedBackstage.getSink();\n },\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [memFooterClose.asSpec()]))),\n onEscape: closeDialog,\n extraClasses: ['tox-alert-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [run$1(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$1 = function (extras) {\n var sharedBackstage = extras.backstage.shared;\n var open = function (message, callback) {\n var closeDialog = function (state) {\n ModalDialog.hide(confirmDialog);\n callback(state);\n };\n var memFooterYes = record(renderFooterButton({\n name: 'yes',\n text: 'Yes',\n primary: true,\n align: 'end',\n disabled: false,\n icon: Optional.none()\n }, 'submit', extras.backstage));\n var footerNo = renderFooterButton({\n name: 'no',\n text: 'No',\n primary: false,\n align: 'end',\n disabled: false,\n icon: Optional.none()\n }, 'cancel', extras.backstage);\n var titleSpec = pUntitled();\n var closeSpec = pClose(function () {\n return closeDialog(false);\n }, sharedBackstage.providers);\n var confirmDialog = build$1(renderDialog$1({\n lazySink: function () {\n return sharedBackstage.getSink();\n },\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [\n footerNo,\n memFooterYes.asSpec()\n ]))),\n onEscape: function () {\n return closeDialog(false);\n },\n extraClasses: ['tox-confirm-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [\n run$1(formCancelEvent, function () {\n return closeDialog(false);\n }),\n run$1(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 = function (data, validator) {\n return getOrDie(asRaw('data', validator, data));\n };\n var isAlertOrConfirmDialog = function (target) {\n return closest(target, '.tox-alert-dialog') || closest(target, '.tox-confirm-dialog');\n };\n var inlineAdditionalBehaviours = function (editor, isStickyToolbar, isToolbarLocationTop) {\n if (isStickyToolbar && isToolbarLocationTop) {\n return [];\n } else {\n return [Docking.config({\n contextual: {\n lazyContext: function () {\n return Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer())));\n },\n fadeInClass: 'tox-dialog-dock-fadein',\n fadeOutClass: 'tox-dialog-dock-fadeout',\n transitionClass: 'tox-dialog-dock-transition'\n },\n modes: ['top']\n })];\n }\n };\n var setup = function (extras) {\n var backstage = extras.backstage;\n var editor = extras.editor;\n var isStickyToolbar$1 = isStickyToolbar(editor);\n var alertDialog = setup$2(extras);\n var confirmDialog = setup$1(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(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(internalInitialData, dataValidator);\n var inlineDialog = value$1();\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(__spreadArray([config('window-manager-inline-events', [run$1(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, premade(dialogUi.dialog), { anchor: anchor }, Optional.some(body()));\n if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor', refreshDocking);\n }\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n 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$h.add('silver', function (editor) {\n var _a = setup$3(editor), uiMothership = _a.uiMothership, backstage = _a.backstage, renderUI = _a.renderUI, getUi = _a.getUi;\n Autocompleter.register(editor, backstage.shared);\n var windowMgr = setup({\n editor: editor,\n backstage: backstage\n });\n return {\n renderUI: renderUI,\n getWindowManagerImpl: constant$1(windowMgr),\n getNotificationManagerImpl: function () {\n return NotificationManagerImpl(editor, { backstage: backstage }, uiMothership);\n },\n ui: getUi()\n };\n });\n }\n\n Theme();\n\n}());\n","/*!\n * bsStepper v1.7.0 (https://github.com/Johann-S/bs-stepper)\n * Copyright 2018 - 2019 Johann-S \n * Licensed under MIT (https://github.com/Johann-S/bs-stepper/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Stepper = factory());\n}(this, function () { 'use strict';\n\n function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n }\n\n var matches = window.Element.prototype.matches;\n\n var closest = function closest(element, selector) {\n return element.closest(selector);\n };\n\n var WinEvent = function WinEvent(inType, params) {\n return new window.Event(inType, params);\n };\n\n var createCustomEvent = function createCustomEvent(eventName, params) {\n var cEvent = new window.CustomEvent(eventName, params);\n return cEvent;\n };\n /* istanbul ignore next */\n\n\n function polyfill() {\n if (!window.Element.prototype.matches) {\n matches = window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector;\n }\n\n if (!window.Element.prototype.closest) {\n closest = function closest(element, selector) {\n if (!document.documentElement.contains(element)) {\n return null;\n }\n\n do {\n if (matches.call(element, selector)) {\n return element;\n }\n\n element = element.parentElement || element.parentNode;\n } while (element !== null && element.nodeType === 1);\n\n return null;\n };\n }\n\n if (!window.Event || typeof window.Event !== 'function') {\n WinEvent = function WinEvent(inType, params) {\n params = params || {};\n var e = document.createEvent('Event');\n e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));\n return e;\n };\n }\n\n if (typeof window.CustomEvent !== 'function') {\n var originPreventDefault = window.Event.prototype.preventDefault;\n\n createCustomEvent = function createCustomEvent(eventName, params) {\n var evt = document.createEvent('CustomEvent');\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: null\n };\n evt.initCustomEvent(eventName, params.bubbles, params.cancelable, params.detail);\n\n evt.preventDefault = function () {\n if (!this.cancelable) {\n return;\n }\n\n originPreventDefault.call(this);\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n };\n\n return evt;\n };\n }\n }\n\n polyfill();\n\n var MILLISECONDS_MULTIPLIER = 1000;\n var ClassName = {\n ACTIVE: 'active',\n LINEAR: 'linear',\n BLOCK: 'dstepper-block',\n NONE: 'dstepper-none',\n FADE: 'fade',\n VERTICAL: 'vertical'\n };\n var transitionEndEvent = 'transitionend';\n var customProperty = 'bsStepper';\n\n var show = function show(stepperNode, indexStep, options, done) {\n var stepper = stepperNode[customProperty];\n\n if (stepper._steps[indexStep].classList.contains(ClassName.ACTIVE) || stepper._stepsContents[indexStep].classList.contains(ClassName.ACTIVE)) {\n return;\n }\n\n var showEvent = createCustomEvent('show.bs-stepper', {\n cancelable: true,\n detail: {\n from: stepper._currentIndex,\n to: indexStep,\n indexStep: indexStep\n }\n });\n stepperNode.dispatchEvent(showEvent);\n\n var activeStep = stepper._steps.filter(function (step) {\n return step.classList.contains(ClassName.ACTIVE);\n });\n\n var activeContent = stepper._stepsContents.filter(function (content) {\n return content.classList.contains(ClassName.ACTIVE);\n });\n\n if (showEvent.defaultPrevented) {\n return;\n }\n\n if (activeStep.length) {\n activeStep[0].classList.remove(ClassName.ACTIVE);\n }\n\n if (activeContent.length) {\n activeContent[0].classList.remove(ClassName.ACTIVE);\n\n if (!stepperNode.classList.contains(ClassName.VERTICAL) && !stepper.options.animation) {\n activeContent[0].classList.remove(ClassName.BLOCK);\n }\n }\n\n showStep(stepperNode, stepper._steps[indexStep], stepper._steps, options);\n showContent(stepperNode, stepper._stepsContents[indexStep], stepper._stepsContents, activeContent, done);\n };\n\n var showStep = function showStep(stepperNode, step, stepList, options) {\n stepList.forEach(function (step) {\n var trigger = step.querySelector(options.selectors.trigger);\n trigger.setAttribute('aria-selected', 'false'); // if stepper is in linear mode, set disabled attribute on the trigger\n\n if (stepperNode.classList.contains(ClassName.LINEAR)) {\n trigger.setAttribute('disabled', 'disabled');\n }\n });\n step.classList.add(ClassName.ACTIVE);\n var currentTrigger = step.querySelector(options.selectors.trigger);\n currentTrigger.setAttribute('aria-selected', 'true'); // if stepper is in linear mode, remove disabled attribute on current\n\n if (stepperNode.classList.contains(ClassName.LINEAR)) {\n currentTrigger.removeAttribute('disabled');\n }\n };\n\n var showContent = function showContent(stepperNode, content, contentList, activeContent, done) {\n var stepper = stepperNode[customProperty];\n var toIndex = contentList.indexOf(content);\n var shownEvent = createCustomEvent('shown.bs-stepper', {\n cancelable: true,\n detail: {\n from: stepper._currentIndex,\n to: toIndex,\n indexStep: toIndex\n }\n });\n\n function complete() {\n content.classList.add(ClassName.BLOCK);\n content.removeEventListener(transitionEndEvent, complete);\n stepperNode.dispatchEvent(shownEvent);\n done();\n }\n\n if (content.classList.contains(ClassName.FADE)) {\n content.classList.remove(ClassName.NONE);\n var duration = getTransitionDurationFromElement(content);\n content.addEventListener(transitionEndEvent, complete);\n\n if (activeContent.length) {\n activeContent[0].classList.add(ClassName.NONE);\n }\n\n content.classList.add(ClassName.ACTIVE);\n emulateTransitionEnd(content, duration);\n } else {\n content.classList.add(ClassName.ACTIVE);\n content.classList.add(ClassName.BLOCK);\n stepperNode.dispatchEvent(shownEvent);\n done();\n }\n };\n\n var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = window.getComputedStyle(element).transitionDuration;\n var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;\n };\n\n var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {\n var called = false;\n var durationPadding = 5;\n var emulatedDuration = duration + durationPadding;\n\n function listener() {\n called = true;\n element.removeEventListener(transitionEndEvent, listener);\n }\n\n element.addEventListener(transitionEndEvent, listener);\n window.setTimeout(function () {\n if (!called) {\n element.dispatchEvent(WinEvent(transitionEndEvent));\n }\n\n element.removeEventListener(transitionEndEvent, listener);\n }, emulatedDuration);\n };\n\n var detectAnimation = function detectAnimation(contentList, options) {\n if (options.animation) {\n contentList.forEach(function (content) {\n content.classList.add(ClassName.FADE);\n content.classList.add(ClassName.NONE);\n });\n }\n };\n\n var buildClickStepLinearListener = function buildClickStepLinearListener() {\n return function clickStepLinearListener(event) {\n event.preventDefault();\n };\n };\n\n var buildClickStepNonLinearListener = function buildClickStepNonLinearListener(options) {\n return function clickStepNonLinearListener(event) {\n event.preventDefault();\n var step = closest(event.target, options.selectors.steps);\n var stepperNode = closest(step, options.selectors.stepper);\n var stepper = stepperNode[customProperty];\n\n var stepIndex = stepper._steps.indexOf(step);\n\n show(stepperNode, stepIndex, options, function () {\n stepper._currentIndex = stepIndex;\n });\n };\n };\n\n var DEFAULT_OPTIONS = {\n linear: true,\n animation: false,\n selectors: {\n steps: '.step',\n trigger: '.step-trigger',\n stepper: '.bs-stepper'\n }\n };\n\n var Stepper =\n /*#__PURE__*/\n function () {\n function Stepper(element, _options) {\n var _this = this;\n\n if (_options === void 0) {\n _options = {};\n }\n\n this._element = element;\n this._currentIndex = 0;\n this._stepsContents = [];\n this.options = _extends({}, DEFAULT_OPTIONS, {}, _options);\n this.options.selectors = _extends({}, DEFAULT_OPTIONS.selectors, {}, this.options.selectors);\n\n if (this.options.linear) {\n this._element.classList.add(ClassName.LINEAR);\n }\n\n this._steps = [].slice.call(this._element.querySelectorAll(this.options.selectors.steps));\n\n this._steps.filter(function (step) {\n return step.hasAttribute('data-target');\n }).forEach(function (step) {\n _this._stepsContents.push(_this._element.querySelector(step.getAttribute('data-target')));\n });\n\n detectAnimation(this._stepsContents, this.options);\n\n this._setLinkListeners();\n\n Object.defineProperty(this._element, customProperty, {\n value: this,\n writable: true\n });\n\n if (this._steps.length) {\n show(this._element, this._currentIndex, this.options, function () {});\n }\n } // Private\n\n\n var _proto = Stepper.prototype;\n\n _proto._setLinkListeners = function _setLinkListeners() {\n var _this2 = this;\n\n this._steps.forEach(function (step) {\n var trigger = step.querySelector(_this2.options.selectors.trigger);\n\n if (_this2.options.linear) {\n _this2._clickStepLinearListener = buildClickStepLinearListener(_this2.options);\n trigger.addEventListener('click', _this2._clickStepLinearListener);\n } else {\n _this2._clickStepNonLinearListener = buildClickStepNonLinearListener(_this2.options);\n trigger.addEventListener('click', _this2._clickStepNonLinearListener);\n }\n });\n } // Public\n ;\n\n _proto.next = function next() {\n var _this3 = this;\n\n var nextStep = this._currentIndex + 1 <= this._steps.length - 1 ? this._currentIndex + 1 : this._steps.length - 1;\n show(this._element, nextStep, this.options, function () {\n _this3._currentIndex = nextStep;\n });\n };\n\n _proto.previous = function previous() {\n var _this4 = this;\n\n var previousStep = this._currentIndex - 1 >= 0 ? this._currentIndex - 1 : 0;\n show(this._element, previousStep, this.options, function () {\n _this4._currentIndex = previousStep;\n });\n };\n\n _proto.to = function to(stepNumber) {\n var _this5 = this;\n\n var tempIndex = stepNumber - 1;\n var nextStep = tempIndex >= 0 && tempIndex < this._steps.length ? tempIndex : 0;\n show(this._element, nextStep, this.options, function () {\n _this5._currentIndex = nextStep;\n });\n };\n\n _proto.reset = function reset() {\n var _this6 = this;\n\n show(this._element, 0, this.options, function () {\n _this6._currentIndex = 0;\n });\n };\n\n _proto.destroy = function destroy() {\n var _this7 = this;\n\n this._steps.forEach(function (step) {\n var trigger = step.querySelector(_this7.options.selectors.trigger);\n\n if (_this7.options.linear) {\n trigger.removeEventListener('click', _this7._clickStepLinearListener);\n } else {\n trigger.removeEventListener('click', _this7._clickStepNonLinearListener);\n }\n });\n\n this._element[customProperty] = undefined;\n this._element = undefined;\n this._currentIndex = undefined;\n this._steps = undefined;\n this._stepsContents = undefined;\n this._clickStepLinearListener = undefined;\n this._clickStepNonLinearListener = undefined;\n };\n\n return Stepper;\n }();\n\n return Stepper;\n\n}));\n//# sourceMappingURL=bs-stepper.js.map\n","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/silver')\n// ES2015:\n// import 'tinymce/themes/silver'\nrequire('./theme.js');","/**\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.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType$1 = 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$1('string');\n var isObject = isType$1('object');\n var isArray = isType$1('array');\n var isBoolean = isSimpleType('boolean');\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var tripleEquals = function (a, b) {\n return a === b;\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 call = function (thunk) {\n return thunk();\n };\n var id = identity;\n var me = {\n fold: function (n, _s) {\n return n();\n },\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: function () {\n return none();\n },\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 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 };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each$1 = 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$1 = 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$1(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n var find$1 = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var get$1 = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get$1(xs, 0);\n };\n var last = function (xs) {\n return get$1(xs, xs.length - 1);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2)\n for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar)\n ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find = 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$2(group(1), group(2));\n };\n var detect$3 = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n var unknown$2 = function () {\n return nu$2(0, 0);\n };\n var nu$2 = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$2,\n detect: detect$3,\n unknown: unknown$2\n };\n\n var detectBrowser$1 = function (browsers, userAgentData) {\n return findMap(userAgentData.brands, function (uaBrand) {\n var lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, function (browser) {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(function (info) {\n return {\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n };\n });\n });\n };\n\n var detect$2 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find$1(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$2(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$2(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\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim = blank(/^\\s+|\\s+$/g);\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n var isEmpty$1 = function (s) {\n return !isNotEmpty(s);\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$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 brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown = function () {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu = 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,\n nu: nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$1 = function (userAgent, userAgentDataOpt, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = userAgentDataOpt.bind(function (userAgentData) {\n return detectBrowser$1(browsers, userAgentData);\n }).orThunk(function () {\n return detectBrowser(browsers, userAgent);\n }).fold(Browser.unknown, Browser.nu);\n var os = 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$1 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);\n });\n var detect = function () {\n return platform();\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var ELEMENT = 1;\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var is$2 = 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 = function (e1, e2) {\n return detect().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n var is$1 = is$2;\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var keys = Object.keys;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType(ELEMENT);\n var isTag = function (tag) {\n return function (e) {\n return isElement(e) && name(e) === tag;\n };\n };\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var setAll = function (element, attrs) {\n var dom = element.dom;\n each(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var clone$1 = function (element) {\n return foldl(element.dom.attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var children = function (element) {\n return map(element.dom.childNodes, SugarElement.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom.childNodes.length - 1);\n };\n\n var before$1 = 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$1 = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n\n var before = function (marker, elements) {\n each$1(elements, function (x) {\n before$1(marker, x);\n });\n };\n var append = function (parent, elements) {\n each$1(elements, function (x) {\n append$1(parent, x);\n });\n };\n\n var remove = function (element) {\n var dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var clone = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var deep = function (original) {\n return clone(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = SugarElement.fromTag(tag);\n var attributes = clone$1(original);\n setAll(nu, attributes);\n return nu;\n };\n var mutate = function (original, tag) {\n var nu = shallowAs(original, tag);\n before$1(original, nu);\n var children$1 = children(original);\n append(nu, children$1);\n remove(original);\n return nu;\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var matchNodeName = function (name) {\n return function (node) {\n return node && node.nodeName.toLowerCase() === name;\n };\n };\n var matchNodeNames = function (regex) {\n return function (node) {\n return node && regex.test(node.nodeName);\n };\n };\n var isTextNode = function (node) {\n return node && node.nodeType === 3;\n };\n var isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n var isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n var isOlNode = matchNodeName('ol');\n var isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n var isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n var isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n var isBr = matchNodeName('br');\n var isFirstChild = function (node) {\n return node.parentNode.firstChild === node;\n };\n var isTextBlock = function (editor, node) {\n return node && !!editor.schema.getTextBlockElements()[node.nodeName];\n };\n var isBlock = function (node, blockElements) {\n return node && node.nodeName in blockElements;\n };\n var isBogusBr = function (dom, node) {\n if (!isBr(node)) {\n return false;\n }\n return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n };\n var isEmpty = function (dom, elm, keepBookmarks) {\n var empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n var isChildOfBody = function (dom, elm) {\n return dom.isChildOf(elm, dom.getRoot());\n };\n\n var shouldIndentOnTab = function (editor) {\n return editor.getParam('lists_indent_on_tab', true);\n };\n var getForcedRootBlock = function (editor) {\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n\n var createTextBlock = function (editor, contentNode) {\n var dom = editor.dom;\n var blockElements = editor.schema.getBlockElements();\n var fragment = dom.createFragment();\n var blockName = getForcedRootBlock(editor);\n var node, textBlock, hasContentNode;\n if (blockName) {\n textBlock = dom.create(blockName);\n if (textBlock.tagName === blockName.toUpperCase()) {\n dom.setAttribs(textBlock, getForcedRootBlockAttrs(editor));\n }\n if (!isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n }\n if (contentNode) {\n while (node = contentNode.firstChild) {\n var nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (blockName) {\n if (!textBlock) {\n textBlock = dom.create(blockName);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n } else {\n fragment.appendChild(node);\n }\n }\n }\n }\n if (!blockName) {\n fragment.appendChild(dom.create('br'));\n } else {\n if (!hasContentNode) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n return fragment;\n };\n\n var DOM$2 = global$3.DOM;\n var splitList = function (editor, list, li) {\n var removeAndKeepBookmarks = function (targetNode) {\n global$2.each(bookmarks, function (node) {\n targetNode.parentNode.insertBefore(node, li.parentNode);\n });\n DOM$2.remove(targetNode);\n };\n var bookmarks = DOM$2.select('span[data-mce-type=\"bookmark\"]', list);\n var newBlock = createTextBlock(editor, li);\n var tmpRng = DOM$2.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(list);\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$2.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$2.insertAfter(fragment, list);\n }\n DOM$2.insertAfter(newBlock, list);\n if (isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM$2.remove(li);\n if (isEmpty(editor.dom, list)) {\n DOM$2.remove(list);\n }\n };\n\n var isDescriptionDetail = isTag('dd');\n var isDescriptionTerm = isTag('dt');\n var outdentDlItem = function (editor, item) {\n if (isDescriptionDetail(item)) {\n mutate(item, 'dt');\n } else if (isDescriptionTerm(item)) {\n parent(item).each(function (dl) {\n return splitList(editor, dl.dom, item.dom);\n });\n }\n };\n var indentDlItem = function (item) {\n if (isDescriptionTerm(item)) {\n mutate(item, 'dd');\n }\n };\n var dlIndentation = function (editor, indentation, dlItems) {\n if (indentation === 'Indent') {\n each$1(dlItems, indentDlItem);\n } else {\n each$1(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$6.getNode(container, offset);\n if (isTextNode(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && isTextNode(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && isTextNode(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container: container,\n offset: offset\n };\n };\n var normalizeRange = function (rng) {\n var outRng = rng.cloneRange();\n var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var getParentList = function (editor, node) {\n var selectionStart = node || editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));\n };\n var isParentListSelected = function (parentList, selectedBlocks) {\n return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n };\n var findSubLists = function (parentList) {\n return filter$1(parentList.querySelectorAll('ol,ul,dl'), isListNode);\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 filter$1(selectedBlocks, function (elm) {\n return isListNode(elm) && parentList !== elm;\n });\n }\n };\n var findParentListItemsNodes = function (editor, elms) {\n var listItemsElms = global$2.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$1.unique(listItemsElms);\n };\n var getSelectedListItems = function (editor) {\n var selectedBlocks = editor.selection.getSelectedBlocks();\n return filter$1(findParentListItemsNodes(editor, selectedBlocks), isListItemNode);\n };\n var getSelectedDlItems = function (editor) {\n return filter$1(getSelectedListItems(editor), isDlItemNode);\n };\n var getClosestListRootElm = function (editor, elm) {\n var parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n return parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\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$1(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$1.unique(listRoots);\n };\n\n var is = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lhs.exists(function (left) {\n return comparator(left, rhs);\n });\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || document;\n var fragment = doc.createDocumentFragment();\n each$1(elements, function (element) {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n var fireListEvent = function (editor, action, element) {\n return editor.fire('ListMutation', {\n action: action,\n element: element\n });\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var set = function (element, property, value) {\n var dom = element.dom;\n internalSet(dom, property, value);\n };\n\n var joinSegment = function (parent, child) {\n append$1(parent.item, child.list);\n };\n var joinSegments = function (segments) {\n for (var i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n var appendSegments = function (head$1, tail) {\n lift2(last(head$1), head(tail), joinSegment);\n };\n var createSegment = function (scope, listType) {\n var segment = {\n list: SugarElement.fromTag(listType, scope),\n item: SugarElement.fromTag('li', scope)\n };\n append$1(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(segment.item, entry.content);\n });\n };\n var normalizeSegment = function (segment, entry) {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n var createItem = function (scope, attr, content) {\n var item = SugarElement.fromTag('li', scope);\n setAll(item, attr);\n append(item, content);\n return item;\n };\n var appendItem = function (segment, item) {\n append$1(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).exists(isList);\n };\n var hasLastChildList = function (el) {\n return lastChild(el).exists(isList);\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$1(li),\n listAttributes: clone$1(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(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$1(entries, function (entry, i) {\n closestSiblingEntry(entries, i).fold(function () {\n if (entry.dirty) {\n cleanListProperties(entry);\n }\n }, function (matchingEntry) {\n return cloneListProperties(entry, matchingEntry);\n });\n });\n return entries;\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var parseItem = function (depth, itemSelection, selectionState, item) {\n return firstChild(item).filter(isList).fold(function () {\n itemSelection.each(function (selection) {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n var currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(function (selection) {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n var childListEntries = lastChild(item).filter(isList).map(function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n }).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n }, function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n });\n };\n var parseList = function (depth, itemSelection, selectionState, list) {\n return bind(children(list), function (element) {\n var parser = isList(element) ? parseList : parseItem;\n var newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n };\n var parseLists = function (lists, itemSelection) {\n var selectionState = Cell(false);\n var initialDepth = 0;\n return map(lists, function (list) {\n return {\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n };\n });\n };\n\n var outdentedComposer = function (editor, entries) {\n var normalizedEntries = normalizeEntries(entries);\n return map(normalizedEntries, function (entry) {\n var content = fromElements(entry.content);\n return SugarElement.fromDom(createTextBlock(editor, content.dom));\n });\n };\n var indentedComposer = function (editor, entries) {\n var normalizedEntries = normalizeEntries(entries);\n return composeList(editor.contentDocument, normalizedEntries).toArray();\n };\n var composeEntries = function (editor, entries) {\n return bind(groupBy(entries, isIndented), function (entries) {\n var groupIsIndented = head(entries).exists(isIndented);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n };\n var indentSelectedEntries = function (entries, indentation) {\n each$1(filter$1(entries, isSelected), function (entry) {\n return indentEntry(indentation, entry);\n });\n };\n var getItemSelection = function (editor) {\n var selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom);\n return lift2(find$1(selectedListItems, not(hasFirstChildList)), find$1(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$1(entrySets, function (entrySet) {\n indentSelectedEntries(entrySet.entries, indentation);\n var composedLists = composeEntries(editor, entrySet.entries);\n each$1(composedLists, function (composedList) {\n fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom);\n });\n before(entrySet.sourceList, composedLists);\n remove(entrySet.sourceList);\n });\n };\n\n var selectionIndentation = function (editor, indentation) {\n var lists = map(getSelectedListRoots(editor), SugarElement.fromDom);\n var dlItems = map(getSelectedDlItems(editor), SugarElement.fromDom);\n var isHandled = false;\n if (lists.length || dlItems.length) {\n var bookmark = editor.selection.getBookmark();\n listIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n var indentListSelection = function (editor) {\n return selectionIndentation(editor, 'Indent');\n };\n var outdentListSelection = function (editor) {\n return selectionIndentation(editor, 'Outdent');\n };\n var flattenListSelection = function (editor) {\n return selectionIndentation(editor, 'Flatten');\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n var DOM$1 = global$3.DOM;\n var createBookmark = function (rng) {\n var bookmark = {};\n var setupEndPoint = function (start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n var offsetNode = DOM$1.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM$1.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n var resolveBookmark = function (bookmark) {\n var restoreEndPoint = function (start) {\n var 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 var container = node = bookmark[start ? 'startContainer' : 'endContainer'];\n var 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$2.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$2.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$2.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 = [];\n var 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$2.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.isBookmarkNode(node)) {\n if (isListNode(nextSibling) || isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n node.parentNode.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n var hasCompatibleStyle = function (dom, sib, detail) {\n var sibStyle = dom.getStyle(sib, 'list-style-type');\n var detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n var applyList = function (editor, listName, detail) {\n var rng = editor.selection.getRng();\n var listItemName = 'LI';\n var root = getClosestListRootElm(editor, editor.selection.getStart(true));\n var dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n var bookmark = createBookmark(rng);\n var selectedTextBlocks = getSelectedTextBlocks(editor, rng, root);\n global$2.each(selectedTextBlocks, function (block) {\n var listBlock;\n var sibling = block.previousSibling;\n var parent = block.parentNode;\n if (!isListItemNode(parent)) {\n if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n block.parentNode.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n }\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n };\n var isValidLists = function (list1, list2) {\n return list1 && list2 && isListNode(list1) && list1.nodeName === list2.nodeName;\n };\n var hasSameListStyle = function (dom, list1, list2) {\n var targetStyle = dom.getStyle(list1, 'list-style-type', true);\n var style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n var hasSameClasses = function (elm1, elm2) {\n return elm1.className === elm2.className;\n };\n var shouldMerge = function (dom, list1, list2) {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n var mergeWithAdjacentLists = function (dom, listBlock) {\n var sibling, node;\n sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(sibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(sibling);\n }\n };\n var updateList$1 = function (editor, list, listName, detail) {\n if (list.nodeName !== listName) {\n var newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {\n var parentIsList = isListNode(parentList);\n if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n applyList(editor, listName, detail);\n var bookmark = createBookmark(editor.selection.getRng());\n var allLists = parentIsList ? __spreadArray([parentList], lists) : lists;\n global$2.each(allLists, function (elm) {\n updateList$1(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());\n updateListWithDetails(editor.dom, parentList, detail);\n var newList = editor.dom.rename(parentList, listName);\n mergeWithAdjacentLists(editor.dom, newList);\n editor.selection.setRng(resolveBookmark(bookmark));\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n }\n } else {\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n }\n };\n var toggleList = function (editor, listName, _detail) {\n var parentList = getParentList(editor);\n var selectedSubLists = getSelectedSubLists(editor);\n var detail = isObject(_detail) ? _detail : {};\n if (selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n\n var DOM = global$3.DOM;\n var normalizeList = function (dom, list) {\n var parentNode = list.parentNode;\n if (parentNode.nodeName === 'LI' && parentNode.firstChild === list) {\n var sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n if (isEmpty(dom, parentNode)) {\n DOM.remove(parentNode);\n }\n } else {\n DOM.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (isListNode(parentNode)) {\n var sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n }\n }\n };\n var normalizeLists = function (dom, element) {\n var lists = global$2.grep(dom.select('ol,ul', element));\n global$2.each(lists, function (list) {\n normalizeList(dom, list);\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$6.getNode(node, offset);\n }\n var walker = new global$5(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$1 = contains(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n var nestedLists = contains$1 ? dom.getParents(fromElm, isListNode, toElm) : [];\n dom.remove(fromElm);\n each$1(nestedLists, function (list) {\n if (isEmpty(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n editor.dom.$(toLi).empty();\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi, 0);\n };\n var mergeForward = function (editor, rng, fromLi, toLi) {\n var dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n var bookmark = createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n var mergeBackward = function (editor, rng, fromLi, toLi) {\n var bookmark = createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n var resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n var backspaceDeleteFromListToListCaret = function (editor, isForward) {\n var dom = editor.dom, selection = editor.selection;\n var selectionStartElm = selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var li = dom.getParent(selection.getStart(), 'LI', root);\n if (li) {\n var ul = li.parentNode;\n if (ul === editor.getBody() && isEmpty(dom, ul)) {\n return true;\n }\n var rng_1 = normalizeRange(selection.getRng());\n var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng_1, isForward, root), 'LI', root);\n if (otherLi_1 && otherLi_1 !== li) {\n editor.undoManager.transact(function () {\n if (isForward) {\n mergeForward(editor, rng_1, otherLi_1, li);\n } else {\n if (isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng_1, li, otherLi_1);\n }\n }\n });\n return true;\n } else if (!otherLi_1) {\n if (!isForward && rng_1.startOffset === 0 && rng_1.endOffset === 0) {\n editor.undoManager.transact(function () {\n flattenListSelection(editor);\n });\n return true;\n }\n }\n }\n return false;\n };\n var removeBlock = function (dom, block, root) {\n var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n var backspaceDeleteIntoListCaret = function (editor, isForward) {\n var dom = editor.dom;\n var selectionStartElm = editor.selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n var rng = normalizeRange(editor.selection.getRng());\n var otherLi_2 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi_2) {\n editor.undoManager.transact(function () {\n removeBlock(dom, block, root);\n mergeWithAdjacentLists(dom, otherLi_2.parentNode);\n editor.selection.select(otherLi_2, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n var backspaceDeleteCaret = function (editor, isForward) {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n var backspaceDeleteRange = function (editor) {\n var selectionStartElm = editor.selection.getStart();\n var root = getClosestListRootElm(editor, selectionStartElm);\n var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n if (startListParent || getSelectedListItems(editor).length > 0) {\n editor.undoManager.transact(function () {\n editor.execCommand('Delete');\n normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n var backspaceDelete = function (editor, isForward) {\n return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n };\n var setup$1 = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$4.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$4.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 updateList = function (editor, update) {\n var parentList = getParentList(editor);\n editor.undoManager.transact(function () {\n if (isObject(update.styles)) {\n editor.dom.setStyles(parentList, update.styles);\n }\n if (isObject(update.attrs)) {\n each(update.attrs, function (v, k) {\n return editor.dom.setAttrib(parentList, k, v);\n });\n }\n });\n };\n\n var parseAlphabeticBase26 = function (str) {\n var chars = reverse(trim(str).split(''));\n var values = map(chars, function (char, i) {\n var charValue = char.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0) + 1;\n return Math.pow(26, i) * charValue;\n });\n return foldl(values, function (sum, v) {\n return sum + v;\n }, 0);\n };\n var composeAlphabeticBase26 = function (value) {\n value--;\n if (value < 0) {\n return '';\n } else {\n var remainder = value % 26;\n var quotient = Math.floor(value / 26);\n var rest = composeAlphabeticBase26(quotient);\n var char = String.fromCharCode('A'.charCodeAt(0) + remainder);\n return rest + char;\n }\n };\n var isUppercase = function (str) {\n return /^[A-Z]+$/.test(str);\n };\n var isLowercase = function (str) {\n return /^[a-z]+$/.test(str);\n };\n var isNumeric = function (str) {\n return /^[0-9]+$/.test(str);\n };\n var deduceListType = function (start) {\n if (isNumeric(start)) {\n return 2;\n } else if (isUppercase(start)) {\n return 0;\n } else if (isLowercase(start)) {\n return 1;\n } else if (isEmpty$1(start)) {\n return 3;\n } else {\n return 4;\n }\n };\n var parseStartValue = function (start) {\n switch (deduceListType(start)) {\n case 2:\n return Optional.some({\n listStyleType: Optional.none(),\n start: start\n });\n case 0:\n return Optional.some({\n listStyleType: Optional.some('upper-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 1:\n return Optional.some({\n listStyleType: Optional.some('lower-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 3:\n return Optional.some({\n listStyleType: Optional.none(),\n start: ''\n });\n case 4:\n return Optional.none();\n }\n };\n var parseDetail = function (detail) {\n var start = parseInt(detail.start, 10);\n if (is(detail.listStyleType, 'upper-alpha')) {\n return composeAlphabeticBase26(start);\n } else if (is(detail.listStyleType, 'lower-alpha')) {\n return composeAlphabeticBase26(start).toLowerCase();\n } else {\n return detail.start;\n }\n };\n\n var open = function (editor) {\n var currentList = getParentList(editor);\n if (!isOlNode(currentList)) {\n return;\n }\n editor.windowManager.open({\n title: 'List Properties',\n body: {\n type: 'panel',\n items: [{\n type: 'input',\n name: 'start',\n label: 'Start list at number',\n inputMode: 'numeric'\n }]\n },\n initialData: {\n start: parseDetail({\n start: editor.dom.getAttrib(currentList, 'start', '1'),\n listStyleType: Optional.some(editor.dom.getStyle(currentList, 'list-style-type'))\n })\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: function (api) {\n var data = api.getData();\n parseStartValue(data.start).each(function (detail) {\n editor.execCommand('mceListUpdate', false, {\n attrs: { start: detail.start === '1' ? '' : detail.start },\n styles: { 'list-style-type': detail.listStyleType.getOr('') }\n });\n });\n api.close();\n }\n });\n };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = getParentList(editor);\n return parentList && parentList.nodeName === listName;\n };\n };\n var registerDialog = function (editor) {\n editor.addCommand('mceListProps', function () {\n open(editor);\n });\n };\n var register$2 = function (editor) {\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', function (ui, detail) {\n toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', function (ui, detail) {\n toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', function (ui, detail) {\n toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', function () {\n flattenListSelection(editor);\n });\n registerDialog(editor);\n editor.addCommand('mceListUpdate', function (ui, detail) {\n if (isObject(detail)) {\n updateList(editor, detail);\n }\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n\n var setupTabKey = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode !== global$4.TAB || global$4.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 = function (editor) {\n if (shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n setup$1(editor);\n };\n\n var register$1 = function (editor) {\n var exec = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n if (!editor.hasPlugin('advlist')) {\n editor.ui.registry.addToggleButton('numlist', {\n icon: 'ordered-list',\n active: false,\n tooltip: 'Numbered list',\n onAction: exec('InsertOrderedList'),\n onSetup: function (api) {\n return listState(editor, 'OL', api.setActive);\n }\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: function (api) {\n return listState(editor, 'UL', api.setActive);\n }\n });\n }\n };\n\n var register = function (editor) {\n var listProperties = {\n text: 'List properties...',\n icon: 'ordered-list',\n onAction: function () {\n return editor.execCommand('mceListProps');\n },\n onSetup: function (api) {\n return listState(editor, 'OL', function (active) {\n return api.setDisabled(!active);\n });\n }\n };\n editor.ui.registry.addMenuItem('listprops', listProperties);\n editor.ui.registry.addContextMenu('lists', {\n update: function (node) {\n var parentList = getParentList(editor, node);\n return isOlNode(parentList) ? ['listprops'] : [];\n }\n });\n };\n\n function Plugin () {\n global$7.add('lists', function (editor) {\n if (editor.hasPlugin('rtc', true) === false) {\n setup(editor);\n register$2(editor);\n } else {\n registerDialog(editor);\n }\n register$1(editor);\n register(editor);\n return get(editor);\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","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!./index.vue?vue&type=style&index=0&id=42458261&scoped=true&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!./index.vue?vue&type=style&index=0&id=42458261&scoped=true&lang=css&\"","// Source: npm package: emojilib, file:emojis.json\nwindow.tinymce.Resource.add(\"tinymce.plugins.emoticons\", {\n grinning: {\n keywords: [ \"face\", \"smile\", \"happy\", \"joy\", \":D\", \"grin\" ],\n char: \"\\ud83d\\ude00\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n grimacing: {\n keywords: [ \"face\", \"grimace\", \"teeth\" ],\n char: \"\\ud83d\\ude2c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n grin: {\n keywords: [ \"face\", \"happy\", \"smile\", \"joy\", \"kawaii\" ],\n char: \"\\ud83d\\ude01\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n joy: {\n keywords: [ \"face\", \"cry\", \"tears\", \"weep\", \"happy\", \"happytears\", \"haha\" ],\n char: \"\\ud83d\\ude02\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n rofl: {\n keywords: [ \"face\", \"rolling\", \"floor\", \"laughing\", \"lol\", \"haha\" ],\n char: \"\\ud83e\\udd23\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n partying: {\n keywords: [ \"face\", \"celebration\", \"woohoo\" ],\n char: \"\\ud83e\\udd73\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smiley: {\n keywords: [ \"face\", \"happy\", \"joy\", \"haha\", \":D\", \":)\", \"smile\", \"funny\" ],\n char: \"\\ud83d\\ude03\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smile: {\n keywords: [ \"face\", \"happy\", \"joy\", \"funny\", \"haha\", \"laugh\", \"like\", \":D\", \":)\" ],\n char: \"\\ud83d\\ude04\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sweat_smile: {\n keywords: [ \"face\", \"hot\", \"happy\", \"laugh\", \"sweat\", \"smile\", \"relief\" ],\n char: \"\\ud83d\\ude05\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n laughing: {\n keywords: [ \"happy\", \"joy\", \"lol\", \"satisfied\", \"haha\", \"face\", \"glad\", \"XD\", \"laugh\" ],\n char: \"\\ud83d\\ude06\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n innocent: {\n keywords: [ \"face\", \"angel\", \"heaven\", \"halo\" ],\n char: \"\\ud83d\\ude07\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n wink: {\n keywords: [ \"face\", \"happy\", \"mischievous\", \"secret\", \";)\", \"smile\", \"eye\" ],\n char: \"\\ud83d\\ude09\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n blush: {\n keywords: [ \"face\", \"smile\", \"happy\", \"flushed\", \"crush\", \"embarrassed\", \"shy\", \"joy\" ],\n char: \"\\ud83d\\ude0a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n slightly_smiling_face: {\n keywords: [ \"face\", \"smile\" ],\n char: \"\\ud83d\\ude42\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n upside_down_face: {\n keywords: [ \"face\", \"flipped\", \"silly\", \"smile\" ],\n char: \"\\ud83d\\ude43\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n relaxed: {\n keywords: [ \"face\", \"blush\", \"massage\", \"happiness\" ],\n char: \"\\u263a\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n yum: {\n keywords: [ \"happy\", \"joy\", \"tongue\", \"smile\", \"face\", \"silly\", \"yummy\", \"nom\", \"delicious\", \"savouring\" ],\n char: \"\\ud83d\\ude0b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n relieved: {\n keywords: [ \"face\", \"relaxed\", \"phew\", \"massage\", \"happiness\" ],\n char: \"\\ud83d\\ude0c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n heart_eyes: {\n keywords: [ \"face\", \"love\", \"like\", \"affection\", \"valentines\", \"infatuation\", \"crush\", \"heart\" ],\n char: \"\\ud83d\\ude0d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smiling_face_with_three_hearts: {\n keywords: [ \"face\", \"love\", \"like\", \"affection\", \"valentines\", \"infatuation\", \"crush\", \"hearts\", \"adore\" ],\n char: \"\\ud83e\\udd70\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n kissing_heart: {\n keywords: [ \"face\", \"love\", \"like\", \"affection\", \"valentines\", \"infatuation\", \"kiss\" ],\n char: \"\\ud83d\\ude18\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n kissing: {\n keywords: [ \"love\", \"like\", \"face\", \"3\", \"valentines\", \"infatuation\", \"kiss\" ],\n char: \"\\ud83d\\ude17\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n kissing_smiling_eyes: {\n keywords: [ \"face\", \"affection\", \"valentines\", \"infatuation\", \"kiss\" ],\n char: \"\\ud83d\\ude19\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n kissing_closed_eyes: {\n keywords: [ \"face\", \"love\", \"like\", \"affection\", \"valentines\", \"infatuation\", \"kiss\" ],\n char: \"\\ud83d\\ude1a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n stuck_out_tongue_winking_eye: {\n keywords: [ \"face\", \"prank\", \"childish\", \"playful\", \"mischievous\", \"smile\", \"wink\", \"tongue\" ],\n char: \"\\ud83d\\ude1c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n zany: {\n keywords: [ \"face\", \"goofy\", \"crazy\" ],\n char: \"\\ud83e\\udd2a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n raised_eyebrow: {\n keywords: [ \"face\", \"distrust\", \"scepticism\", \"disapproval\", \"disbelief\", \"surprise\" ],\n char: \"\\ud83e\\udd28\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n monocle: {\n keywords: [ \"face\", \"stuffy\", \"wealthy\" ],\n char: \"\\ud83e\\uddd0\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n stuck_out_tongue_closed_eyes: {\n keywords: [ \"face\", \"prank\", \"playful\", \"mischievous\", \"smile\", \"tongue\" ],\n char: \"\\ud83d\\ude1d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n stuck_out_tongue: {\n keywords: [ \"face\", \"prank\", \"childish\", \"playful\", \"mischievous\", \"smile\", \"tongue\" ],\n char: \"\\ud83d\\ude1b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n money_mouth_face: {\n keywords: [ \"face\", \"rich\", \"dollar\", \"money\" ],\n char: \"\\ud83e\\udd11\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n nerd_face: {\n keywords: [ \"face\", \"nerdy\", \"geek\", \"dork\" ],\n char: \"\\ud83e\\udd13\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sunglasses: {\n keywords: [ \"face\", \"cool\", \"smile\", \"summer\", \"beach\", \"sunglass\" ],\n char: \"\\ud83d\\ude0e\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n star_struck: {\n keywords: [ \"face\", \"smile\", \"starry\", \"eyes\", \"grinning\" ],\n char: \"\\ud83e\\udd29\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n clown_face: {\n keywords: [ \"face\" ],\n char: \"\\ud83e\\udd21\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n cowboy_hat_face: {\n keywords: [ \"face\", \"cowgirl\", \"hat\" ],\n char: \"\\ud83e\\udd20\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n hugs: {\n keywords: [ \"face\", \"smile\", \"hug\" ],\n char: \"\\ud83e\\udd17\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smirk: {\n keywords: [ \"face\", \"smile\", \"mean\", \"prank\", \"smug\", \"sarcasm\" ],\n char: \"\\ud83d\\ude0f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n no_mouth: {\n keywords: [ \"face\", \"hellokitty\" ],\n char: \"\\ud83d\\ude36\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n neutral_face: {\n keywords: [ \"indifference\", \"meh\", \":|\", \"neutral\" ],\n char: \"\\ud83d\\ude10\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n expressionless: {\n keywords: [ \"face\", \"indifferent\", \"-_-\", \"meh\", \"deadpan\" ],\n char: \"\\ud83d\\ude11\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n unamused: {\n keywords: [ \"indifference\", \"bored\", \"straight face\", \"serious\", \"sarcasm\", \"unimpressed\", \"skeptical\", \"dubious\", \"side_eye\" ],\n char: \"\\ud83d\\ude12\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n roll_eyes: {\n keywords: [ \"face\", \"eyeroll\", \"frustrated\" ],\n char: \"\\ud83d\\ude44\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n thinking: {\n keywords: [ \"face\", \"hmmm\", \"think\", \"consider\" ],\n char: \"\\ud83e\\udd14\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n lying_face: {\n keywords: [ \"face\", \"lie\", \"pinocchio\" ],\n char: \"\\ud83e\\udd25\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n hand_over_mouth: {\n keywords: [ \"face\", \"whoops\", \"shock\", \"surprise\" ],\n char: \"\\ud83e\\udd2d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n shushing: {\n keywords: [ \"face\", \"quiet\", \"shhh\" ],\n char: \"\\ud83e\\udd2b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n symbols_over_mouth: {\n keywords: [ \"face\", \"swearing\", \"cursing\", \"cussing\", \"profanity\", \"expletive\" ],\n char: \"\\ud83e\\udd2c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n exploding_head: {\n keywords: [ \"face\", \"shocked\", \"mind\", \"blown\" ],\n char: \"\\ud83e\\udd2f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n flushed: {\n keywords: [ \"face\", \"blush\", \"shy\", \"flattered\" ],\n char: \"\\ud83d\\ude33\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n disappointed: {\n keywords: [ \"face\", \"sad\", \"upset\", \"depressed\", \":(\" ],\n char: \"\\ud83d\\ude1e\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n worried: {\n keywords: [ \"face\", \"concern\", \"nervous\", \":(\" ],\n char: \"\\ud83d\\ude1f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n angry: {\n keywords: [ \"mad\", \"face\", \"annoyed\", \"frustrated\" ],\n char: \"\\ud83d\\ude20\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n rage: {\n keywords: [ \"angry\", \"mad\", \"hate\", \"despise\" ],\n char: \"\\ud83d\\ude21\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n pensive: {\n keywords: [ \"face\", \"sad\", \"depressed\", \"upset\" ],\n char: \"\\ud83d\\ude14\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n confused: {\n keywords: [ \"face\", \"indifference\", \"huh\", \"weird\", \"hmmm\", \":/\" ],\n char: \"\\ud83d\\ude15\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n slightly_frowning_face: {\n keywords: [ \"face\", \"frowning\", \"disappointed\", \"sad\", \"upset\" ],\n char: \"\\ud83d\\ude41\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n frowning_face: {\n keywords: [ \"face\", \"sad\", \"upset\", \"frown\" ],\n char: \"\\u2639\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n persevere: {\n keywords: [ \"face\", \"sick\", \"no\", \"upset\", \"oops\" ],\n char: \"\\ud83d\\ude23\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n confounded: {\n keywords: [ \"face\", \"confused\", \"sick\", \"unwell\", \"oops\", \":S\" ],\n char: \"\\ud83d\\ude16\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n tired_face: {\n keywords: [ \"sick\", \"whine\", \"upset\", \"frustrated\" ],\n char: \"\\ud83d\\ude2b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n weary: {\n keywords: [ \"face\", \"tired\", \"sleepy\", \"sad\", \"frustrated\", \"upset\" ],\n char: \"\\ud83d\\ude29\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n pleading: {\n keywords: [ \"face\", \"begging\", \"mercy\" ],\n char: \"\\ud83e\\udd7a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n triumph: {\n keywords: [ \"face\", \"gas\", \"phew\", \"proud\", \"pride\" ],\n char: \"\\ud83d\\ude24\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n open_mouth: {\n keywords: [ \"face\", \"surprise\", \"impressed\", \"wow\", \"whoa\", \":O\" ],\n char: \"\\ud83d\\ude2e\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n scream: {\n keywords: [ \"face\", \"munch\", \"scared\", \"omg\" ],\n char: \"\\ud83d\\ude31\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n fearful: {\n keywords: [ \"face\", \"scared\", \"terrified\", \"nervous\", \"oops\", \"huh\" ],\n char: \"\\ud83d\\ude28\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n cold_sweat: {\n keywords: [ \"face\", \"nervous\", \"sweat\" ],\n char: \"\\ud83d\\ude30\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n hushed: {\n keywords: [ \"face\", \"woo\", \"shh\" ],\n char: \"\\ud83d\\ude2f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n frowning: {\n keywords: [ \"face\", \"aw\", \"what\" ],\n char: \"\\ud83d\\ude26\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n anguished: {\n keywords: [ \"face\", \"stunned\", \"nervous\" ],\n char: \"\\ud83d\\ude27\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n cry: {\n keywords: [ \"face\", \"tears\", \"sad\", \"depressed\", \"upset\", \":'(\" ],\n char: \"\\ud83d\\ude22\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n disappointed_relieved: {\n keywords: [ \"face\", \"phew\", \"sweat\", \"nervous\" ],\n char: \"\\ud83d\\ude25\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n drooling_face: {\n keywords: [ \"face\" ],\n char: \"\\ud83e\\udd24\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sleepy: {\n keywords: [ \"face\", \"tired\", \"rest\", \"nap\" ],\n char: \"\\ud83d\\ude2a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sweat: {\n keywords: [ \"face\", \"hot\", \"sad\", \"tired\", \"exercise\" ],\n char: \"\\ud83d\\ude13\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n hot: {\n keywords: [ \"face\", \"feverish\", \"heat\", \"red\", \"sweating\" ],\n char: \"\\ud83e\\udd75\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n cold: {\n keywords: [ \"face\", \"blue\", \"freezing\", \"frozen\", \"frostbite\", \"icicles\" ],\n char: \"\\ud83e\\udd76\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sob: {\n keywords: [ \"face\", \"cry\", \"tears\", \"sad\", \"upset\", \"depressed\" ],\n char: \"\\ud83d\\ude2d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n dizzy_face: {\n keywords: [ \"spent\", \"unconscious\", \"xox\", \"dizzy\" ],\n char: \"\\ud83d\\ude35\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n astonished: {\n keywords: [ \"face\", \"xox\", \"surprised\", \"poisoned\" ],\n char: \"\\ud83d\\ude32\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n zipper_mouth_face: {\n keywords: [ \"face\", \"sealed\", \"zipper\", \"secret\" ],\n char: \"\\ud83e\\udd10\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n nauseated_face: {\n keywords: [ \"face\", \"vomit\", \"gross\", \"green\", \"sick\", \"throw up\", \"ill\" ],\n char: \"\\ud83e\\udd22\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sneezing_face: {\n keywords: [ \"face\", \"gesundheit\", \"sneeze\", \"sick\", \"allergy\" ],\n char: \"\\ud83e\\udd27\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n vomiting: {\n keywords: [ \"face\", \"sick\" ],\n char: \"\\ud83e\\udd2e\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n mask: {\n keywords: [ \"face\", \"sick\", \"ill\", \"disease\" ],\n char: \"\\ud83d\\ude37\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n face_with_thermometer: {\n keywords: [ \"sick\", \"temperature\", \"thermometer\", \"cold\", \"fever\" ],\n char: \"\\ud83e\\udd12\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n face_with_head_bandage: {\n keywords: [ \"injured\", \"clumsy\", \"bandage\", \"hurt\" ],\n char: \"\\ud83e\\udd15\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n woozy: {\n keywords: [ \"face\", \"dizzy\", \"intoxicated\", \"tipsy\", \"wavy\" ],\n char: \"\\ud83e\\udd74\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sleeping: {\n keywords: [ \"face\", \"tired\", \"sleepy\", \"night\", \"zzz\" ],\n char: \"\\ud83d\\ude34\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n zzz: {\n keywords: [ \"sleepy\", \"tired\", \"dream\" ],\n char: \"\\ud83d\\udca4\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n poop: {\n keywords: [ \"hankey\", \"shitface\", \"fail\", \"turd\", \"shit\" ],\n char: \"\\ud83d\\udca9\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smiling_imp: {\n keywords: [ \"devil\", \"horns\" ],\n char: \"\\ud83d\\ude08\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n imp: {\n keywords: [ \"devil\", \"angry\", \"horns\" ],\n char: \"\\ud83d\\udc7f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n japanese_ogre: {\n keywords: [ \"monster\", \"red\", \"mask\", \"halloween\", \"scary\", \"creepy\", \"devil\", \"demon\", \"japanese\", \"ogre\" ],\n char: \"\\ud83d\\udc79\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n japanese_goblin: {\n keywords: [ \"red\", \"evil\", \"mask\", \"monster\", \"scary\", \"creepy\", \"japanese\", \"goblin\" ],\n char: \"\\ud83d\\udc7a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n skull: {\n keywords: [ \"dead\", \"skeleton\", \"creepy\", \"death\" ],\n char: \"\\ud83d\\udc80\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n ghost: {\n keywords: [ \"halloween\", \"spooky\", \"scary\" ],\n char: \"\\ud83d\\udc7b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n alien: {\n keywords: [ \"UFO\", \"paul\", \"weird\", \"outer_space\" ],\n char: \"\\ud83d\\udc7d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n robot: {\n keywords: [ \"computer\", \"machine\", \"bot\" ],\n char: \"\\ud83e\\udd16\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smiley_cat: {\n keywords: [ \"animal\", \"cats\", \"happy\", \"smile\" ],\n char: \"\\ud83d\\ude3a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smile_cat: {\n keywords: [ \"animal\", \"cats\", \"smile\" ],\n char: \"\\ud83d\\ude38\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n joy_cat: {\n keywords: [ \"animal\", \"cats\", \"haha\", \"happy\", \"tears\" ],\n char: \"\\ud83d\\ude39\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n heart_eyes_cat: {\n keywords: [ \"animal\", \"love\", \"like\", \"affection\", \"cats\", \"valentines\", \"heart\" ],\n char: \"\\ud83d\\ude3b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n smirk_cat: {\n keywords: [ \"animal\", \"cats\", \"smirk\" ],\n char: \"\\ud83d\\ude3c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n kissing_cat: {\n keywords: [ \"animal\", \"cats\", \"kiss\" ],\n char: \"\\ud83d\\ude3d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n scream_cat: {\n keywords: [ \"animal\", \"cats\", \"munch\", \"scared\", \"scream\" ],\n char: \"\\ud83d\\ude40\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n crying_cat_face: {\n keywords: [ \"animal\", \"tears\", \"weep\", \"sad\", \"cats\", \"upset\", \"cry\" ],\n char: \"\\ud83d\\ude3f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n pouting_cat: {\n keywords: [ \"animal\", \"cats\" ],\n char: \"\\ud83d\\ude3e\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n palms_up: {\n keywords: [ \"hands\", \"gesture\", \"cupped\", \"prayer\" ],\n char: \"\\ud83e\\udd32\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n raised_hands: {\n keywords: [ \"gesture\", \"hooray\", \"yea\", \"celebration\", \"hands\" ],\n char: \"\\ud83d\\ude4c\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n clap: {\n keywords: [ \"hands\", \"praise\", \"applause\", \"congrats\", \"yay\" ],\n char: \"\\ud83d\\udc4f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n wave: {\n keywords: [ \"hands\", \"gesture\", \"goodbye\", \"solong\", \"farewell\", \"hello\", \"hi\", \"palm\" ],\n char: \"\\ud83d\\udc4b\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n call_me_hand: {\n keywords: [ \"hands\", \"gesture\" ],\n char: \"\\ud83e\\udd19\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n \"+1\": {\n keywords: [ \"thumbsup\", \"yes\", \"awesome\", \"good\", \"agree\", \"accept\", \"cool\", \"hand\", \"like\" ],\n char: \"\\ud83d\\udc4d\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n \"-1\": {\n keywords: [ \"thumbsdown\", \"no\", \"dislike\", \"hand\" ],\n char: \"\\ud83d\\udc4e\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n facepunch: {\n keywords: [ \"angry\", \"violence\", \"fist\", \"hit\", \"attack\", \"hand\" ],\n char: \"\\ud83d\\udc4a\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n fist: {\n keywords: [ \"fingers\", \"hand\", \"grasp\" ],\n char: \"\\u270a\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n fist_left: {\n keywords: [ \"hand\", \"fistbump\" ],\n char: \"\\ud83e\\udd1b\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n fist_right: {\n keywords: [ \"hand\", \"fistbump\" ],\n char: \"\\ud83e\\udd1c\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n v: {\n keywords: [ \"fingers\", \"ohyeah\", \"hand\", \"peace\", \"victory\", \"two\" ],\n char: \"\\u270c\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n ok_hand: {\n keywords: [ \"fingers\", \"limbs\", \"perfect\", \"ok\", \"okay\" ],\n char: \"\\ud83d\\udc4c\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n raised_hand: {\n keywords: [ \"fingers\", \"stop\", \"highfive\", \"palm\", \"ban\" ],\n char: \"\\u270b\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n raised_back_of_hand: {\n keywords: [ \"fingers\", \"raised\", \"backhand\" ],\n char: \"\\ud83e\\udd1a\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n open_hands: {\n keywords: [ \"fingers\", \"butterfly\", \"hands\", \"open\" ],\n char: \"\\ud83d\\udc50\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n muscle: {\n keywords: [ \"arm\", \"flex\", \"hand\", \"summer\", \"strong\", \"biceps\" ],\n char: \"\\ud83d\\udcaa\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n pray: {\n keywords: [ \"please\", \"hope\", \"wish\", \"namaste\", \"highfive\" ],\n char: \"\\ud83d\\ude4f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n foot: {\n keywords: [ \"kick\", \"stomp\" ],\n char: \"\\ud83e\\uddb6\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n leg: {\n keywords: [ \"kick\", \"limb\" ],\n char: \"\\ud83e\\uddb5\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n handshake: {\n keywords: [ \"agreement\", \"shake\" ],\n char: \"\\ud83e\\udd1d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n point_up: {\n keywords: [ \"hand\", \"fingers\", \"direction\", \"up\" ],\n char: \"\\u261d\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n point_up_2: {\n keywords: [ \"fingers\", \"hand\", \"direction\", \"up\" ],\n char: \"\\ud83d\\udc46\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n point_down: {\n keywords: [ \"fingers\", \"hand\", \"direction\", \"down\" ],\n char: \"\\ud83d\\udc47\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n point_left: {\n keywords: [ \"direction\", \"fingers\", \"hand\", \"left\" ],\n char: \"\\ud83d\\udc48\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n point_right: {\n keywords: [ \"fingers\", \"hand\", \"direction\", \"right\" ],\n char: \"\\ud83d\\udc49\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n fu: {\n keywords: [ \"hand\", \"fingers\", \"rude\", \"middle\", \"flipping\" ],\n char: \"\\ud83d\\udd95\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n raised_hand_with_fingers_splayed: {\n keywords: [ \"hand\", \"fingers\", \"palm\" ],\n char: \"\\ud83d\\udd90\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n love_you: {\n keywords: [ \"hand\", \"fingers\", \"gesture\" ],\n char: \"\\ud83e\\udd1f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n metal: {\n keywords: [ \"hand\", \"fingers\", \"evil_eye\", \"sign_of_horns\", \"rock_on\" ],\n char: \"\\ud83e\\udd18\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n crossed_fingers: {\n keywords: [ \"good\", \"lucky\" ],\n char: \"\\ud83e\\udd1e\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n vulcan_salute: {\n keywords: [ \"hand\", \"fingers\", \"spock\", \"star trek\" ],\n char: \"\\ud83d\\udd96\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n writing_hand: {\n keywords: [ \"lower_left_ballpoint_pen\", \"stationery\", \"write\", \"compose\" ],\n char: \"\\u270d\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n selfie: {\n keywords: [ \"camera\", \"phone\" ],\n char: \"\\ud83e\\udd33\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n nail_care: {\n keywords: [ \"beauty\", \"manicure\", \"finger\", \"fashion\", \"nail\" ],\n char: \"\\ud83d\\udc85\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n lips: {\n keywords: [ \"mouth\", \"kiss\" ],\n char: \"\\ud83d\\udc44\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n tooth: {\n keywords: [ \"teeth\", \"dentist\" ],\n char: \"\\ud83e\\uddb7\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n tongue: {\n keywords: [ \"mouth\", \"playful\" ],\n char: \"\\ud83d\\udc45\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n ear: {\n keywords: [ \"face\", \"hear\", \"sound\", \"listen\" ],\n char: \"\\ud83d\\udc42\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n nose: {\n keywords: [ \"smell\", \"sniff\" ],\n char: \"\\ud83d\\udc43\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n eye: {\n keywords: [ \"face\", \"look\", \"see\", \"watch\", \"stare\" ],\n char: \"\\ud83d\\udc41\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n eyes: {\n keywords: [ \"look\", \"watch\", \"stalk\", \"peek\", \"see\" ],\n char: \"\\ud83d\\udc40\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n brain: {\n keywords: [ \"smart\", \"intelligent\" ],\n char: \"\\ud83e\\udde0\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n bust_in_silhouette: {\n keywords: [ \"user\", \"person\", \"human\" ],\n char: \"\\ud83d\\udc64\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n busts_in_silhouette: {\n keywords: [ \"user\", \"person\", \"human\", \"group\", \"team\" ],\n char: \"\\ud83d\\udc65\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n speaking_head: {\n keywords: [ \"user\", \"person\", \"human\", \"sing\", \"say\", \"talk\" ],\n char: \"\\ud83d\\udde3\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n baby: {\n keywords: [ \"child\", \"boy\", \"girl\", \"toddler\" ],\n char: \"\\ud83d\\udc76\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n child: {\n keywords: [ \"gender-neutral\", \"young\" ],\n char: \"\\ud83e\\uddd2\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n boy: {\n keywords: [ \"man\", \"male\", \"guy\", \"teenager\" ],\n char: \"\\ud83d\\udc66\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n girl: {\n keywords: [ \"female\", \"woman\", \"teenager\" ],\n char: \"\\ud83d\\udc67\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n adult: {\n keywords: [ \"gender-neutral\", \"person\" ],\n char: \"\\ud83e\\uddd1\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man: {\n keywords: [ \"mustache\", \"father\", \"dad\", \"guy\", \"classy\", \"sir\", \"moustache\" ],\n char: \"\\ud83d\\udc68\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman: {\n keywords: [ \"female\", \"girls\", \"lady\" ],\n char: \"\\ud83d\\udc69\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n blonde_woman: {\n keywords: [ \"woman\", \"female\", \"girl\", \"blonde\", \"person\" ],\n char: \"\\ud83d\\udc71\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n blonde_man: {\n keywords: [ \"man\", \"male\", \"boy\", \"blonde\", \"guy\", \"person\" ],\n char: \"\\ud83d\\udc71\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n bearded_person: {\n keywords: [ \"person\", \"bewhiskered\" ],\n char: \"\\ud83e\\uddd4\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n older_adult: {\n keywords: [ \"human\", \"elder\", \"senior\", \"gender-neutral\" ],\n char: \"\\ud83e\\uddd3\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n older_man: {\n keywords: [ \"human\", \"male\", \"men\", \"old\", \"elder\", \"senior\" ],\n char: \"\\ud83d\\udc74\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n older_woman: {\n keywords: [ \"human\", \"female\", \"women\", \"lady\", \"old\", \"elder\", \"senior\" ],\n char: \"\\ud83d\\udc75\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_with_gua_pi_mao: {\n keywords: [ \"male\", \"boy\", \"chinese\" ],\n char: \"\\ud83d\\udc72\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_with_headscarf: {\n keywords: [ \"female\", \"hijab\", \"mantilla\", \"tichel\" ],\n char: \"\\ud83e\\uddd5\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_with_turban: {\n keywords: [ \"female\", \"indian\", \"hinduism\", \"arabs\", \"woman\" ],\n char: \"\\ud83d\\udc73\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_with_turban: {\n keywords: [ \"male\", \"indian\", \"hinduism\", \"arabs\" ],\n char: \"\\ud83d\\udc73\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n policewoman: {\n keywords: [ \"woman\", \"police\", \"law\", \"legal\", \"enforcement\", \"arrest\", \"911\", \"female\" ],\n char: \"\\ud83d\\udc6e\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n policeman: {\n keywords: [ \"man\", \"police\", \"law\", \"legal\", \"enforcement\", \"arrest\", \"911\" ],\n char: \"\\ud83d\\udc6e\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n construction_worker_woman: {\n keywords: [ \"female\", \"human\", \"wip\", \"build\", \"construction\", \"worker\", \"labor\", \"woman\" ],\n char: \"\\ud83d\\udc77\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n construction_worker_man: {\n keywords: [ \"male\", \"human\", \"wip\", \"guy\", \"build\", \"construction\", \"worker\", \"labor\" ],\n char: \"\\ud83d\\udc77\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n guardswoman: {\n keywords: [ \"uk\", \"gb\", \"british\", \"female\", \"royal\", \"woman\" ],\n char: \"\\ud83d\\udc82\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n guardsman: {\n keywords: [ \"uk\", \"gb\", \"british\", \"male\", \"guy\", \"royal\" ],\n char: \"\\ud83d\\udc82\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n female_detective: {\n keywords: [ \"human\", \"spy\", \"detective\", \"female\", \"woman\" ],\n char: \"\\ud83d\\udd75\\ufe0f\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n male_detective: {\n keywords: [ \"human\", \"spy\", \"detective\" ],\n char: \"\\ud83d\\udd75\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_health_worker: {\n keywords: [ \"doctor\", \"nurse\", \"therapist\", \"healthcare\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\u2695\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_health_worker: {\n keywords: [ \"doctor\", \"nurse\", \"therapist\", \"healthcare\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\u2695\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_farmer: {\n keywords: [ \"rancher\", \"gardener\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83c\\udf3e\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_farmer: {\n keywords: [ \"rancher\", \"gardener\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83c\\udf3e\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_cook: {\n keywords: [ \"chef\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83c\\udf73\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_cook: {\n keywords: [ \"chef\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83c\\udf73\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_student: {\n keywords: [ \"graduate\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83c\\udf93\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_student: {\n keywords: [ \"graduate\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83c\\udf93\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_singer: {\n keywords: [ \"rockstar\", \"entertainer\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83c\\udfa4\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_singer: {\n keywords: [ \"rockstar\", \"entertainer\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83c\\udfa4\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_teacher: {\n keywords: [ \"instructor\", \"professor\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83c\\udfeb\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_teacher: {\n keywords: [ \"instructor\", \"professor\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83c\\udfeb\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_factory_worker: {\n keywords: [ \"assembly\", \"industrial\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83c\\udfed\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_factory_worker: {\n keywords: [ \"assembly\", \"industrial\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83c\\udfed\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_technologist: {\n keywords: [ \"coder\", \"developer\", \"engineer\", \"programmer\", \"software\", \"woman\", \"human\", \"laptop\", \"computer\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udcbb\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_technologist: {\n keywords: [ \"coder\", \"developer\", \"engineer\", \"programmer\", \"software\", \"man\", \"human\", \"laptop\", \"computer\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udcbb\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_office_worker: {\n keywords: [ \"business\", \"manager\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udcbc\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_office_worker: {\n keywords: [ \"business\", \"manager\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udcbc\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_mechanic: {\n keywords: [ \"plumber\", \"woman\", \"human\", \"wrench\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udd27\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_mechanic: {\n keywords: [ \"plumber\", \"man\", \"human\", \"wrench\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udd27\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_scientist: {\n keywords: [ \"biologist\", \"chemist\", \"engineer\", \"physicist\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udd2c\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_scientist: {\n keywords: [ \"biologist\", \"chemist\", \"engineer\", \"physicist\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udd2c\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_artist: {\n keywords: [ \"painter\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83c\\udfa8\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_artist: {\n keywords: [ \"painter\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83c\\udfa8\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_firefighter: {\n keywords: [ \"fireman\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\ude92\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_firefighter: {\n keywords: [ \"fireman\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\ude92\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_pilot: {\n keywords: [ \"aviator\", \"plane\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\u2708\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_pilot: {\n keywords: [ \"aviator\", \"plane\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\u2708\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_astronaut: {\n keywords: [ \"space\", \"rocket\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\ude80\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_astronaut: {\n keywords: [ \"space\", \"rocket\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\ude80\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_judge: {\n keywords: [ \"justice\", \"court\", \"woman\", \"human\" ],\n char: \"\\ud83d\\udc69\\u200d\\u2696\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_judge: {\n keywords: [ \"justice\", \"court\", \"man\", \"human\" ],\n char: \"\\ud83d\\udc68\\u200d\\u2696\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_superhero: {\n keywords: [ \"woman\", \"female\", \"good\", \"heroine\", \"superpowers\" ],\n char: \"\\ud83e\\uddb8\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_superhero: {\n keywords: [ \"man\", \"male\", \"good\", \"hero\", \"superpowers\" ],\n char: \"\\ud83e\\uddb8\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_supervillain: {\n keywords: [ \"woman\", \"female\", \"evil\", \"bad\", \"criminal\", \"heroine\", \"superpowers\" ],\n char: \"\\ud83e\\uddb9\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_supervillain: {\n keywords: [ \"man\", \"male\", \"evil\", \"bad\", \"criminal\", \"hero\", \"superpowers\" ],\n char: \"\\ud83e\\uddb9\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n mrs_claus: {\n keywords: [ \"woman\", \"female\", \"xmas\", \"mother christmas\" ],\n char: \"\\ud83e\\udd36\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n santa: {\n keywords: [ \"festival\", \"man\", \"male\", \"xmas\", \"father christmas\" ],\n char: \"\\ud83c\\udf85\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n sorceress: {\n keywords: [ \"woman\", \"female\", \"mage\", \"witch\" ],\n char: \"\\ud83e\\uddd9\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n wizard: {\n keywords: [ \"man\", \"male\", \"mage\", \"sorcerer\" ],\n char: \"\\ud83e\\uddd9\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_elf: {\n keywords: [ \"woman\", \"female\" ],\n char: \"\\ud83e\\udddd\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_elf: {\n keywords: [ \"man\", \"male\" ],\n char: \"\\ud83e\\udddd\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_vampire: {\n keywords: [ \"woman\", \"female\" ],\n char: \"\\ud83e\\udddb\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_vampire: {\n keywords: [ \"man\", \"male\", \"dracula\" ],\n char: \"\\ud83e\\udddb\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_zombie: {\n keywords: [ \"woman\", \"female\", \"undead\", \"walking dead\" ],\n char: \"\\ud83e\\udddf\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n man_zombie: {\n keywords: [ \"man\", \"male\", \"dracula\", \"undead\", \"walking dead\" ],\n char: \"\\ud83e\\udddf\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n woman_genie: {\n keywords: [ \"woman\", \"female\" ],\n char: \"\\ud83e\\uddde\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n man_genie: {\n keywords: [ \"man\", \"male\" ],\n char: \"\\ud83e\\uddde\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n mermaid: {\n keywords: [ \"woman\", \"female\", \"merwoman\", \"ariel\" ],\n char: \"\\ud83e\\udddc\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n merman: {\n keywords: [ \"man\", \"male\", \"triton\" ],\n char: \"\\ud83e\\udddc\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_fairy: {\n keywords: [ \"woman\", \"female\" ],\n char: \"\\ud83e\\uddda\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_fairy: {\n keywords: [ \"man\", \"male\" ],\n char: \"\\ud83e\\uddda\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n angel: {\n keywords: [ \"heaven\", \"wings\", \"halo\" ],\n char: \"\\ud83d\\udc7c\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n pregnant_woman: {\n keywords: [ \"baby\" ],\n char: \"\\ud83e\\udd30\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n breastfeeding: {\n keywords: [ \"nursing\", \"baby\" ],\n char: \"\\ud83e\\udd31\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n princess: {\n keywords: [ \"girl\", \"woman\", \"female\", \"blond\", \"crown\", \"royal\", \"queen\" ],\n char: \"\\ud83d\\udc78\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n prince: {\n keywords: [ \"boy\", \"man\", \"male\", \"crown\", \"royal\", \"king\" ],\n char: \"\\ud83e\\udd34\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n bride_with_veil: {\n keywords: [ \"couple\", \"marriage\", \"wedding\", \"woman\", \"bride\" ],\n char: \"\\ud83d\\udc70\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_in_tuxedo: {\n keywords: [ \"couple\", \"marriage\", \"wedding\", \"groom\" ],\n char: \"\\ud83e\\udd35\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n running_woman: {\n keywords: [ \"woman\", \"walking\", \"exercise\", \"race\", \"running\", \"female\" ],\n char: \"\\ud83c\\udfc3\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n running_man: {\n keywords: [ \"man\", \"walking\", \"exercise\", \"race\", \"running\" ],\n char: \"\\ud83c\\udfc3\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n walking_woman: {\n keywords: [ \"human\", \"feet\", \"steps\", \"woman\", \"female\" ],\n char: \"\\ud83d\\udeb6\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n walking_man: {\n keywords: [ \"human\", \"feet\", \"steps\" ],\n char: \"\\ud83d\\udeb6\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n dancer: {\n keywords: [ \"female\", \"girl\", \"woman\", \"fun\" ],\n char: \"\\ud83d\\udc83\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_dancing: {\n keywords: [ \"male\", \"boy\", \"fun\", \"dancer\" ],\n char: \"\\ud83d\\udd7a\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n dancing_women: {\n keywords: [ \"female\", \"bunny\", \"women\", \"girls\" ],\n char: \"\\ud83d\\udc6f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n dancing_men: {\n keywords: [ \"male\", \"bunny\", \"men\", \"boys\" ],\n char: \"\\ud83d\\udc6f\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n couple: {\n keywords: [ \"pair\", \"people\", \"human\", \"love\", \"date\", \"dating\", \"like\", \"affection\", \"valentines\", \"marriage\" ],\n char: \"\\ud83d\\udc6b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n two_men_holding_hands: {\n keywords: [ \"pair\", \"couple\", \"love\", \"like\", \"bromance\", \"friendship\", \"people\", \"human\" ],\n char: \"\\ud83d\\udc6c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n two_women_holding_hands: {\n keywords: [ \"pair\", \"friendship\", \"couple\", \"love\", \"like\", \"female\", \"people\", \"human\" ],\n char: \"\\ud83d\\udc6d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n bowing_woman: {\n keywords: [ \"woman\", \"female\", \"girl\" ],\n char: \"\\ud83d\\ude47\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n bowing_man: {\n keywords: [ \"man\", \"male\", \"boy\" ],\n char: \"\\ud83d\\ude47\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_facepalming: {\n keywords: [ \"man\", \"male\", \"boy\", \"disbelief\" ],\n char: \"\\ud83e\\udd26\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_facepalming: {\n keywords: [ \"woman\", \"female\", \"girl\", \"disbelief\" ],\n char: \"\\ud83e\\udd26\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_shrugging: {\n keywords: [ \"woman\", \"female\", \"girl\", \"confused\", \"indifferent\", \"doubt\" ],\n char: \"\\ud83e\\udd37\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_shrugging: {\n keywords: [ \"man\", \"male\", \"boy\", \"confused\", \"indifferent\", \"doubt\" ],\n char: \"\\ud83e\\udd37\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n tipping_hand_woman: {\n keywords: [ \"female\", \"girl\", \"woman\", \"human\", \"information\" ],\n char: \"\\ud83d\\udc81\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n tipping_hand_man: {\n keywords: [ \"male\", \"boy\", \"man\", \"human\", \"information\" ],\n char: \"\\ud83d\\udc81\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n no_good_woman: {\n keywords: [ \"female\", \"girl\", \"woman\", \"nope\" ],\n char: \"\\ud83d\\ude45\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n no_good_man: {\n keywords: [ \"male\", \"boy\", \"man\", \"nope\" ],\n char: \"\\ud83d\\ude45\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n ok_woman: {\n keywords: [ \"women\", \"girl\", \"female\", \"pink\", \"human\", \"woman\" ],\n char: \"\\ud83d\\ude46\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n ok_man: {\n keywords: [ \"men\", \"boy\", \"male\", \"blue\", \"human\", \"man\" ],\n char: \"\\ud83d\\ude46\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n raising_hand_woman: {\n keywords: [ \"female\", \"girl\", \"woman\" ],\n char: \"\\ud83d\\ude4b\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n raising_hand_man: {\n keywords: [ \"male\", \"boy\", \"man\" ],\n char: \"\\ud83d\\ude4b\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n pouting_woman: {\n keywords: [ \"female\", \"girl\", \"woman\" ],\n char: \"\\ud83d\\ude4e\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n pouting_man: {\n keywords: [ \"male\", \"boy\", \"man\" ],\n char: \"\\ud83d\\ude4e\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n frowning_woman: {\n keywords: [ \"female\", \"girl\", \"woman\", \"sad\", \"depressed\", \"discouraged\", \"unhappy\" ],\n char: \"\\ud83d\\ude4d\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n frowning_man: {\n keywords: [ \"male\", \"boy\", \"man\", \"sad\", \"depressed\", \"discouraged\", \"unhappy\" ],\n char: \"\\ud83d\\ude4d\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n haircut_woman: {\n keywords: [ \"female\", \"girl\", \"woman\" ],\n char: \"\\ud83d\\udc87\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n haircut_man: {\n keywords: [ \"male\", \"boy\", \"man\" ],\n char: \"\\ud83d\\udc87\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n massage_woman: {\n keywords: [ \"female\", \"girl\", \"woman\", \"head\" ],\n char: \"\\ud83d\\udc86\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n massage_man: {\n keywords: [ \"male\", \"boy\", \"man\", \"head\" ],\n char: \"\\ud83d\\udc86\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n woman_in_steamy_room: {\n keywords: [ \"female\", \"woman\", \"spa\", \"steamroom\", \"sauna\" ],\n char: \"\\ud83e\\uddd6\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n man_in_steamy_room: {\n keywords: [ \"male\", \"man\", \"spa\", \"steamroom\", \"sauna\" ],\n char: \"\\ud83e\\uddd6\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"people\"\n },\n couple_with_heart_woman_man: {\n keywords: [ \"pair\", \"love\", \"like\", \"affection\", \"human\", \"dating\", \"valentines\", \"marriage\" ],\n char: \"\\ud83d\\udc91\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n couple_with_heart_woman_woman: {\n keywords: [ \"pair\", \"love\", \"like\", \"affection\", \"human\", \"dating\", \"valentines\", \"marriage\" ],\n char: \"\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n couple_with_heart_man_man: {\n keywords: [ \"pair\", \"love\", \"like\", \"affection\", \"human\", \"dating\", \"valentines\", \"marriage\" ],\n char: \"\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n couplekiss_man_woman: {\n keywords: [ \"pair\", \"valentines\", \"love\", \"like\", \"dating\", \"marriage\" ],\n char: \"\\ud83d\\udc8f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n couplekiss_woman_woman: {\n keywords: [ \"pair\", \"valentines\", \"love\", \"like\", \"dating\", \"marriage\" ],\n char: \"\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n couplekiss_man_man: {\n keywords: [ \"pair\", \"valentines\", \"love\", \"like\", \"dating\", \"marriage\" ],\n char: \"\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_woman_boy: {\n keywords: [ \"home\", \"parents\", \"child\", \"mom\", \"dad\", \"father\", \"mother\", \"people\", \"human\" ],\n char: \"\\ud83d\\udc6a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_woman_girl: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"child\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_woman_girl_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_woman_boy_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_woman_girl_girl: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_woman_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_woman_girl: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_woman_girl_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_woman_boy_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_woman_girl_girl: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_man_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_man_girl: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_man_girl_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_man_boy_boy: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_man_girl_girl: {\n keywords: [ \"home\", \"parents\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_boy: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"child\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_girl: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"child\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_girl_boy: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_boy_boy: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_woman_girl_girl: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_boy: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"child\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_girl: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"child\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_girl_boy: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_boy_boy: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n family_man_girl_girl: {\n keywords: [ \"home\", \"parent\", \"people\", \"human\", \"children\" ],\n char: \"\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d\\udc67\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n yarn: {\n keywords: [ \"ball\", \"crochet\", \"knit\" ],\n char: \"\\ud83e\\uddf6\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n thread: {\n keywords: [ \"needle\", \"sewing\", \"spool\", \"string\" ],\n char: \"\\ud83e\\uddf5\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n coat: {\n keywords: [ \"jacket\" ],\n char: \"\\ud83e\\udde5\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n labcoat: {\n keywords: [ \"doctor\", \"experiment\", \"scientist\", \"chemist\" ],\n char: \"\\ud83e\\udd7c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n womans_clothes: {\n keywords: [ \"fashion\", \"shopping_bags\", \"female\" ],\n char: \"\\ud83d\\udc5a\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n tshirt: {\n keywords: [ \"fashion\", \"cloth\", \"casual\", \"shirt\", \"tee\" ],\n char: \"\\ud83d\\udc55\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n jeans: {\n keywords: [ \"fashion\", \"shopping\" ],\n char: \"\\ud83d\\udc56\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n necktie: {\n keywords: [ \"shirt\", \"suitup\", \"formal\", \"fashion\", \"cloth\", \"business\" ],\n char: \"\\ud83d\\udc54\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n dress: {\n keywords: [ \"clothes\", \"fashion\", \"shopping\" ],\n char: \"\\ud83d\\udc57\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n bikini: {\n keywords: [ \"swimming\", \"female\", \"woman\", \"girl\", \"fashion\", \"beach\", \"summer\" ],\n char: \"\\ud83d\\udc59\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n kimono: {\n keywords: [ \"dress\", \"fashion\", \"women\", \"female\", \"japanese\" ],\n char: \"\\ud83d\\udc58\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n lipstick: {\n keywords: [ \"female\", \"girl\", \"fashion\", \"woman\" ],\n char: \"\\ud83d\\udc84\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n kiss: {\n keywords: [ \"face\", \"lips\", \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc8b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n footprints: {\n keywords: [ \"feet\", \"tracking\", \"walking\", \"beach\" ],\n char: \"\\ud83d\\udc63\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n flat_shoe: {\n keywords: [ \"ballet\", \"slip-on\", \"slipper\" ],\n char: \"\\ud83e\\udd7f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n high_heel: {\n keywords: [ \"fashion\", \"shoes\", \"female\", \"pumps\", \"stiletto\" ],\n char: \"\\ud83d\\udc60\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n sandal: {\n keywords: [ \"shoes\", \"fashion\", \"flip flops\" ],\n char: \"\\ud83d\\udc61\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n boot: {\n keywords: [ \"shoes\", \"fashion\" ],\n char: \"\\ud83d\\udc62\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n mans_shoe: {\n keywords: [ \"fashion\", \"male\" ],\n char: \"\\ud83d\\udc5e\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n athletic_shoe: {\n keywords: [ \"shoes\", \"sports\", \"sneakers\" ],\n char: \"\\ud83d\\udc5f\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n hiking_boot: {\n keywords: [ \"backpacking\", \"camping\", \"hiking\" ],\n char: \"\\ud83e\\udd7e\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n socks: {\n keywords: [ \"stockings\", \"clothes\" ],\n char: \"\\ud83e\\udde6\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n gloves: {\n keywords: [ \"hands\", \"winter\", \"clothes\" ],\n char: \"\\ud83e\\udde4\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n scarf: {\n keywords: [ \"neck\", \"winter\", \"clothes\" ],\n char: \"\\ud83e\\udde3\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n womans_hat: {\n keywords: [ \"fashion\", \"accessories\", \"female\", \"lady\", \"spring\" ],\n char: \"\\ud83d\\udc52\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n tophat: {\n keywords: [ \"magic\", \"gentleman\", \"classy\", \"circus\" ],\n char: \"\\ud83c\\udfa9\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n billed_hat: {\n keywords: [ \"cap\", \"baseball\" ],\n char: \"\\ud83e\\udde2\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n rescue_worker_helmet: {\n keywords: [ \"construction\", \"build\" ],\n char: \"\\u26d1\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n mortar_board: {\n keywords: [ \"school\", \"college\", \"degree\", \"university\", \"graduation\", \"cap\", \"hat\", \"legal\", \"learn\", \"education\" ],\n char: \"\\ud83c\\udf93\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n crown: {\n keywords: [ \"king\", \"kod\", \"leader\", \"royalty\", \"lord\" ],\n char: \"\\ud83d\\udc51\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n school_satchel: {\n keywords: [ \"student\", \"education\", \"bag\", \"backpack\" ],\n char: \"\\ud83c\\udf92\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n luggage: {\n keywords: [ \"packing\", \"travel\" ],\n char: \"\\ud83e\\uddf3\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n pouch: {\n keywords: [ \"bag\", \"accessories\", \"shopping\" ],\n char: \"\\ud83d\\udc5d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n purse: {\n keywords: [ \"fashion\", \"accessories\", \"money\", \"sales\", \"shopping\" ],\n char: \"\\ud83d\\udc5b\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n handbag: {\n keywords: [ \"fashion\", \"accessory\", \"accessories\", \"shopping\" ],\n char: \"\\ud83d\\udc5c\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n briefcase: {\n keywords: [ \"business\", \"documents\", \"work\", \"law\", \"legal\", \"job\", \"career\" ],\n char: \"\\ud83d\\udcbc\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n eyeglasses: {\n keywords: [ \"fashion\", \"accessories\", \"eyesight\", \"nerdy\", \"dork\", \"geek\" ],\n char: \"\\ud83d\\udc53\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n dark_sunglasses: {\n keywords: [ \"face\", \"cool\", \"accessories\" ],\n char: \"\\ud83d\\udd76\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n goggles: {\n keywords: [ \"eyes\", \"protection\", \"safety\" ],\n char: \"\\ud83e\\udd7d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n ring: {\n keywords: [ \"wedding\", \"propose\", \"marriage\", \"valentines\", \"diamond\", \"fashion\", \"jewelry\", \"gem\", \"engagement\" ],\n char: \"\\ud83d\\udc8d\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n closed_umbrella: {\n keywords: [ \"weather\", \"rain\", \"drizzle\" ],\n char: \"\\ud83c\\udf02\",\n fitzpatrick_scale: false,\n category: \"people\"\n },\n dog: {\n keywords: [ \"animal\", \"friend\", \"nature\", \"woof\", \"puppy\", \"pet\", \"faithful\" ],\n char: \"\\ud83d\\udc36\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cat: {\n keywords: [ \"animal\", \"meow\", \"nature\", \"pet\", \"kitten\" ],\n char: \"\\ud83d\\udc31\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n mouse: {\n keywords: [ \"animal\", \"nature\", \"cheese_wedge\", \"rodent\" ],\n char: \"\\ud83d\\udc2d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n hamster: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83d\\udc39\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n rabbit: {\n keywords: [ \"animal\", \"nature\", \"pet\", \"spring\", \"magic\", \"bunny\" ],\n char: \"\\ud83d\\udc30\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n fox_face: {\n keywords: [ \"animal\", \"nature\", \"face\" ],\n char: \"\\ud83e\\udd8a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n bear: {\n keywords: [ \"animal\", \"nature\", \"wild\" ],\n char: \"\\ud83d\\udc3b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n panda_face: {\n keywords: [ \"animal\", \"nature\", \"panda\" ],\n char: \"\\ud83d\\udc3c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n koala: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83d\\udc28\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n tiger: {\n keywords: [ \"animal\", \"cat\", \"danger\", \"wild\", \"nature\", \"roar\" ],\n char: \"\\ud83d\\udc2f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n lion: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83e\\udd81\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cow: {\n keywords: [ \"beef\", \"ox\", \"animal\", \"nature\", \"moo\", \"milk\" ],\n char: \"\\ud83d\\udc2e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n pig: {\n keywords: [ \"animal\", \"oink\", \"nature\" ],\n char: \"\\ud83d\\udc37\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n pig_nose: {\n keywords: [ \"animal\", \"oink\" ],\n char: \"\\ud83d\\udc3d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n frog: {\n keywords: [ \"animal\", \"nature\", \"croak\", \"toad\" ],\n char: \"\\ud83d\\udc38\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n squid: {\n keywords: [ \"animal\", \"nature\", \"ocean\", \"sea\" ],\n char: \"\\ud83e\\udd91\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n octopus: {\n keywords: [ \"animal\", \"creature\", \"ocean\", \"sea\", \"nature\", \"beach\" ],\n char: \"\\ud83d\\udc19\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n shrimp: {\n keywords: [ \"animal\", \"ocean\", \"nature\", \"seafood\" ],\n char: \"\\ud83e\\udd90\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n monkey_face: {\n keywords: [ \"animal\", \"nature\", \"circus\" ],\n char: \"\\ud83d\\udc35\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n gorilla: {\n keywords: [ \"animal\", \"nature\", \"circus\" ],\n char: \"\\ud83e\\udd8d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n see_no_evil: {\n keywords: [ \"monkey\", \"animal\", \"nature\", \"haha\" ],\n char: \"\\ud83d\\ude48\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n hear_no_evil: {\n keywords: [ \"animal\", \"monkey\", \"nature\" ],\n char: \"\\ud83d\\ude49\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n speak_no_evil: {\n keywords: [ \"monkey\", \"animal\", \"nature\", \"omg\" ],\n char: \"\\ud83d\\ude4a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n monkey: {\n keywords: [ \"animal\", \"nature\", \"banana\", \"circus\" ],\n char: \"\\ud83d\\udc12\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n chicken: {\n keywords: [ \"animal\", \"cluck\", \"nature\", \"bird\" ],\n char: \"\\ud83d\\udc14\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n penguin: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83d\\udc27\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n bird: {\n keywords: [ \"animal\", \"nature\", \"fly\", \"tweet\", \"spring\" ],\n char: \"\\ud83d\\udc26\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n baby_chick: {\n keywords: [ \"animal\", \"chicken\", \"bird\" ],\n char: \"\\ud83d\\udc24\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n hatching_chick: {\n keywords: [ \"animal\", \"chicken\", \"egg\", \"born\", \"baby\", \"bird\" ],\n char: \"\\ud83d\\udc23\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n hatched_chick: {\n keywords: [ \"animal\", \"chicken\", \"baby\", \"bird\" ],\n char: \"\\ud83d\\udc25\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n duck: {\n keywords: [ \"animal\", \"nature\", \"bird\", \"mallard\" ],\n char: \"\\ud83e\\udd86\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n eagle: {\n keywords: [ \"animal\", \"nature\", \"bird\" ],\n char: \"\\ud83e\\udd85\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n owl: {\n keywords: [ \"animal\", \"nature\", \"bird\", \"hoot\" ],\n char: \"\\ud83e\\udd89\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n bat: {\n keywords: [ \"animal\", \"nature\", \"blind\", \"vampire\" ],\n char: \"\\ud83e\\udd87\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n wolf: {\n keywords: [ \"animal\", \"nature\", \"wild\" ],\n char: \"\\ud83d\\udc3a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n boar: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83d\\udc17\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n horse: {\n keywords: [ \"animal\", \"brown\", \"nature\" ],\n char: \"\\ud83d\\udc34\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n unicorn: {\n keywords: [ \"animal\", \"nature\", \"mystical\" ],\n char: \"\\ud83e\\udd84\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n honeybee: {\n keywords: [ \"animal\", \"insect\", \"nature\", \"bug\", \"spring\", \"honey\" ],\n char: \"\\ud83d\\udc1d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n bug: {\n keywords: [ \"animal\", \"insect\", \"nature\", \"worm\" ],\n char: \"\\ud83d\\udc1b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n butterfly: {\n keywords: [ \"animal\", \"insect\", \"nature\", \"caterpillar\" ],\n char: \"\\ud83e\\udd8b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n snail: {\n keywords: [ \"slow\", \"animal\", \"shell\" ],\n char: \"\\ud83d\\udc0c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n beetle: {\n keywords: [ \"animal\", \"insect\", \"nature\", \"ladybug\" ],\n char: \"\\ud83d\\udc1e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n ant: {\n keywords: [ \"animal\", \"insect\", \"nature\", \"bug\" ],\n char: \"\\ud83d\\udc1c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n grasshopper: {\n keywords: [ \"animal\", \"cricket\", \"chirp\" ],\n char: \"\\ud83e\\udd97\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n spider: {\n keywords: [ \"animal\", \"arachnid\" ],\n char: \"\\ud83d\\udd77\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n scorpion: {\n keywords: [ \"animal\", \"arachnid\" ],\n char: \"\\ud83e\\udd82\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n crab: {\n keywords: [ \"animal\", \"crustacean\" ],\n char: \"\\ud83e\\udd80\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n snake: {\n keywords: [ \"animal\", \"evil\", \"nature\", \"hiss\", \"python\" ],\n char: \"\\ud83d\\udc0d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n lizard: {\n keywords: [ \"animal\", \"nature\", \"reptile\" ],\n char: \"\\ud83e\\udd8e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n \"t-rex\": {\n keywords: [ \"animal\", \"nature\", \"dinosaur\", \"tyrannosaurus\", \"extinct\" ],\n char: \"\\ud83e\\udd96\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sauropod: {\n keywords: [ \"animal\", \"nature\", \"dinosaur\", \"brachiosaurus\", \"brontosaurus\", \"diplodocus\", \"extinct\" ],\n char: \"\\ud83e\\udd95\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n turtle: {\n keywords: [ \"animal\", \"slow\", \"nature\", \"tortoise\" ],\n char: \"\\ud83d\\udc22\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n tropical_fish: {\n keywords: [ \"animal\", \"swim\", \"ocean\", \"beach\", \"nemo\" ],\n char: \"\\ud83d\\udc20\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n fish: {\n keywords: [ \"animal\", \"food\", \"nature\" ],\n char: \"\\ud83d\\udc1f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n blowfish: {\n keywords: [ \"animal\", \"nature\", \"food\", \"sea\", \"ocean\" ],\n char: \"\\ud83d\\udc21\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dolphin: {\n keywords: [ \"animal\", \"nature\", \"fish\", \"sea\", \"ocean\", \"flipper\", \"fins\", \"beach\" ],\n char: \"\\ud83d\\udc2c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n shark: {\n keywords: [ \"animal\", \"nature\", \"fish\", \"sea\", \"ocean\", \"jaws\", \"fins\", \"beach\" ],\n char: \"\\ud83e\\udd88\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n whale: {\n keywords: [ \"animal\", \"nature\", \"sea\", \"ocean\" ],\n char: \"\\ud83d\\udc33\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n whale2: {\n keywords: [ \"animal\", \"nature\", \"sea\", \"ocean\" ],\n char: \"\\ud83d\\udc0b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n crocodile: {\n keywords: [ \"animal\", \"nature\", \"reptile\", \"lizard\", \"alligator\" ],\n char: \"\\ud83d\\udc0a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n leopard: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83d\\udc06\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n zebra: {\n keywords: [ \"animal\", \"nature\", \"stripes\", \"safari\" ],\n char: \"\\ud83e\\udd93\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n tiger2: {\n keywords: [ \"animal\", \"nature\", \"roar\" ],\n char: \"\\ud83d\\udc05\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n water_buffalo: {\n keywords: [ \"animal\", \"nature\", \"ox\", \"cow\" ],\n char: \"\\ud83d\\udc03\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n ox: {\n keywords: [ \"animal\", \"cow\", \"beef\" ],\n char: \"\\ud83d\\udc02\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cow2: {\n keywords: [ \"beef\", \"ox\", \"animal\", \"nature\", \"moo\", \"milk\" ],\n char: \"\\ud83d\\udc04\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n deer: {\n keywords: [ \"animal\", \"nature\", \"horns\", \"venison\" ],\n char: \"\\ud83e\\udd8c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dromedary_camel: {\n keywords: [ \"animal\", \"hot\", \"desert\", \"hump\" ],\n char: \"\\ud83d\\udc2a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n camel: {\n keywords: [ \"animal\", \"nature\", \"hot\", \"desert\", \"hump\" ],\n char: \"\\ud83d\\udc2b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n giraffe: {\n keywords: [ \"animal\", \"nature\", \"spots\", \"safari\" ],\n char: \"\\ud83e\\udd92\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n elephant: {\n keywords: [ \"animal\", \"nature\", \"nose\", \"th\", \"circus\" ],\n char: \"\\ud83d\\udc18\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n rhinoceros: {\n keywords: [ \"animal\", \"nature\", \"horn\" ],\n char: \"\\ud83e\\udd8f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n goat: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83d\\udc10\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n ram: {\n keywords: [ \"animal\", \"sheep\", \"nature\" ],\n char: \"\\ud83d\\udc0f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sheep: {\n keywords: [ \"animal\", \"nature\", \"wool\", \"shipit\" ],\n char: \"\\ud83d\\udc11\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n racehorse: {\n keywords: [ \"animal\", \"gamble\", \"luck\" ],\n char: \"\\ud83d\\udc0e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n pig2: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83d\\udc16\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n rat: {\n keywords: [ \"animal\", \"mouse\", \"rodent\" ],\n char: \"\\ud83d\\udc00\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n mouse2: {\n keywords: [ \"animal\", \"nature\", \"rodent\" ],\n char: \"\\ud83d\\udc01\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n rooster: {\n keywords: [ \"animal\", \"nature\", \"chicken\" ],\n char: \"\\ud83d\\udc13\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n turkey: {\n keywords: [ \"animal\", \"bird\" ],\n char: \"\\ud83e\\udd83\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dove: {\n keywords: [ \"animal\", \"bird\" ],\n char: \"\\ud83d\\udd4a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dog2: {\n keywords: [ \"animal\", \"nature\", \"friend\", \"doge\", \"pet\", \"faithful\" ],\n char: \"\\ud83d\\udc15\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n poodle: {\n keywords: [ \"dog\", \"animal\", \"101\", \"nature\", \"pet\" ],\n char: \"\\ud83d\\udc29\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cat2: {\n keywords: [ \"animal\", \"meow\", \"pet\", \"cats\" ],\n char: \"\\ud83d\\udc08\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n rabbit2: {\n keywords: [ \"animal\", \"nature\", \"pet\", \"magic\", \"spring\" ],\n char: \"\\ud83d\\udc07\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n chipmunk: {\n keywords: [ \"animal\", \"nature\", \"rodent\", \"squirrel\" ],\n char: \"\\ud83d\\udc3f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n hedgehog: {\n keywords: [ \"animal\", \"nature\", \"spiny\" ],\n char: \"\\ud83e\\udd94\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n raccoon: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83e\\udd9d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n llama: {\n keywords: [ \"animal\", \"nature\", \"alpaca\" ],\n char: \"\\ud83e\\udd99\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n hippopotamus: {\n keywords: [ \"animal\", \"nature\" ],\n char: \"\\ud83e\\udd9b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n kangaroo: {\n keywords: [ \"animal\", \"nature\", \"australia\", \"joey\", \"hop\", \"marsupial\" ],\n char: \"\\ud83e\\udd98\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n badger: {\n keywords: [ \"animal\", \"nature\", \"honey\" ],\n char: \"\\ud83e\\udda1\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n swan: {\n keywords: [ \"animal\", \"nature\", \"bird\" ],\n char: \"\\ud83e\\udda2\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n peacock: {\n keywords: [ \"animal\", \"nature\", \"peahen\", \"bird\" ],\n char: \"\\ud83e\\udd9a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n parrot: {\n keywords: [ \"animal\", \"nature\", \"bird\", \"pirate\", \"talk\" ],\n char: \"\\ud83e\\udd9c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n lobster: {\n keywords: [ \"animal\", \"nature\", \"bisque\", \"claws\", \"seafood\" ],\n char: \"\\ud83e\\udd9e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n mosquito: {\n keywords: [ \"animal\", \"nature\", \"insect\", \"malaria\" ],\n char: \"\\ud83e\\udd9f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n paw_prints: {\n keywords: [ \"animal\", \"tracking\", \"footprints\", \"dog\", \"cat\", \"pet\", \"feet\" ],\n char: \"\\ud83d\\udc3e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dragon: {\n keywords: [ \"animal\", \"myth\", \"nature\", \"chinese\", \"green\" ],\n char: \"\\ud83d\\udc09\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dragon_face: {\n keywords: [ \"animal\", \"myth\", \"nature\", \"chinese\", \"green\" ],\n char: \"\\ud83d\\udc32\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cactus: {\n keywords: [ \"vegetable\", \"plant\", \"nature\" ],\n char: \"\\ud83c\\udf35\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n christmas_tree: {\n keywords: [ \"festival\", \"vacation\", \"december\", \"xmas\", \"celebration\" ],\n char: \"\\ud83c\\udf84\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n evergreen_tree: {\n keywords: [ \"plant\", \"nature\" ],\n char: \"\\ud83c\\udf32\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n deciduous_tree: {\n keywords: [ \"plant\", \"nature\" ],\n char: \"\\ud83c\\udf33\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n palm_tree: {\n keywords: [ \"plant\", \"vegetable\", \"nature\", \"summer\", \"beach\", \"mojito\", \"tropical\" ],\n char: \"\\ud83c\\udf34\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n seedling: {\n keywords: [ \"plant\", \"nature\", \"grass\", \"lawn\", \"spring\" ],\n char: \"\\ud83c\\udf31\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n herb: {\n keywords: [ \"vegetable\", \"plant\", \"medicine\", \"weed\", \"grass\", \"lawn\" ],\n char: \"\\ud83c\\udf3f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n shamrock: {\n keywords: [ \"vegetable\", \"plant\", \"nature\", \"irish\", \"clover\" ],\n char: \"\\u2618\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n four_leaf_clover: {\n keywords: [ \"vegetable\", \"plant\", \"nature\", \"lucky\", \"irish\" ],\n char: \"\\ud83c\\udf40\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n bamboo: {\n keywords: [ \"plant\", \"nature\", \"vegetable\", \"panda\", \"pine_decoration\" ],\n char: \"\\ud83c\\udf8d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n tanabata_tree: {\n keywords: [ \"plant\", \"nature\", \"branch\", \"summer\" ],\n char: \"\\ud83c\\udf8b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n leaves: {\n keywords: [ \"nature\", \"plant\", \"tree\", \"vegetable\", \"grass\", \"lawn\", \"spring\" ],\n char: \"\\ud83c\\udf43\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n fallen_leaf: {\n keywords: [ \"nature\", \"plant\", \"vegetable\", \"leaves\" ],\n char: \"\\ud83c\\udf42\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n maple_leaf: {\n keywords: [ \"nature\", \"plant\", \"vegetable\", \"ca\", \"fall\" ],\n char: \"\\ud83c\\udf41\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n ear_of_rice: {\n keywords: [ \"nature\", \"plant\" ],\n char: \"\\ud83c\\udf3e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n hibiscus: {\n keywords: [ \"plant\", \"vegetable\", \"flowers\", \"beach\" ],\n char: \"\\ud83c\\udf3a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sunflower: {\n keywords: [ \"nature\", \"plant\", \"fall\" ],\n char: \"\\ud83c\\udf3b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n rose: {\n keywords: [ \"flowers\", \"valentines\", \"love\", \"spring\" ],\n char: \"\\ud83c\\udf39\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n wilted_flower: {\n keywords: [ \"plant\", \"nature\", \"flower\" ],\n char: \"\\ud83e\\udd40\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n tulip: {\n keywords: [ \"flowers\", \"plant\", \"nature\", \"summer\", \"spring\" ],\n char: \"\\ud83c\\udf37\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n blossom: {\n keywords: [ \"nature\", \"flowers\", \"yellow\" ],\n char: \"\\ud83c\\udf3c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cherry_blossom: {\n keywords: [ \"nature\", \"plant\", \"spring\", \"flower\" ],\n char: \"\\ud83c\\udf38\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n bouquet: {\n keywords: [ \"flowers\", \"nature\", \"spring\" ],\n char: \"\\ud83d\\udc90\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n mushroom: {\n keywords: [ \"plant\", \"vegetable\" ],\n char: \"\\ud83c\\udf44\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n chestnut: {\n keywords: [ \"food\", \"squirrel\" ],\n char: \"\\ud83c\\udf30\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n jack_o_lantern: {\n keywords: [ \"halloween\", \"light\", \"pumpkin\", \"creepy\", \"fall\" ],\n char: \"\\ud83c\\udf83\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n shell: {\n keywords: [ \"nature\", \"sea\", \"beach\" ],\n char: \"\\ud83d\\udc1a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n spider_web: {\n keywords: [ \"animal\", \"insect\", \"arachnid\", \"silk\" ],\n char: \"\\ud83d\\udd78\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n earth_americas: {\n keywords: [ \"globe\", \"world\", \"USA\", \"international\" ],\n char: \"\\ud83c\\udf0e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n earth_africa: {\n keywords: [ \"globe\", \"world\", \"international\" ],\n char: \"\\ud83c\\udf0d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n earth_asia: {\n keywords: [ \"globe\", \"world\", \"east\", \"international\" ],\n char: \"\\ud83c\\udf0f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n full_moon: {\n keywords: [ \"nature\", \"yellow\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf15\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n waning_gibbous_moon: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\", \"waxing_gibbous_moon\" ],\n char: \"\\ud83c\\udf16\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n last_quarter_moon: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf17\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n waning_crescent_moon: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf18\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n new_moon: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf11\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n waxing_crescent_moon: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf12\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n first_quarter_moon: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf13\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n waxing_gibbous_moon: {\n keywords: [ \"nature\", \"night\", \"sky\", \"gray\", \"twilight\", \"planet\", \"space\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf14\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n new_moon_with_face: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf1a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n full_moon_with_face: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf1d\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n first_quarter_moon_with_face: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf1b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n last_quarter_moon_with_face: {\n keywords: [ \"nature\", \"twilight\", \"planet\", \"space\", \"night\", \"evening\", \"sleep\" ],\n char: \"\\ud83c\\udf1c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sun_with_face: {\n keywords: [ \"nature\", \"morning\", \"sky\" ],\n char: \"\\ud83c\\udf1e\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n crescent_moon: {\n keywords: [ \"night\", \"sleep\", \"sky\", \"evening\", \"magic\" ],\n char: \"\\ud83c\\udf19\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n star: {\n keywords: [ \"night\", \"yellow\" ],\n char: \"\\u2b50\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n star2: {\n keywords: [ \"night\", \"sparkle\", \"awesome\", \"good\", \"magic\" ],\n char: \"\\ud83c\\udf1f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dizzy: {\n keywords: [ \"star\", \"sparkle\", \"shoot\", \"magic\" ],\n char: \"\\ud83d\\udcab\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sparkles: {\n keywords: [ \"stars\", \"shine\", \"shiny\", \"cool\", \"awesome\", \"good\", \"magic\" ],\n char: \"\\u2728\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n comet: {\n keywords: [ \"space\" ],\n char: \"\\u2604\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sunny: {\n keywords: [ \"weather\", \"nature\", \"brightness\", \"summer\", \"beach\", \"spring\" ],\n char: \"\\u2600\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sun_behind_small_cloud: {\n keywords: [ \"weather\" ],\n char: \"\\ud83c\\udf24\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n partly_sunny: {\n keywords: [ \"weather\", \"nature\", \"cloudy\", \"morning\", \"fall\", \"spring\" ],\n char: \"\\u26c5\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sun_behind_large_cloud: {\n keywords: [ \"weather\" ],\n char: \"\\ud83c\\udf25\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sun_behind_rain_cloud: {\n keywords: [ \"weather\" ],\n char: \"\\ud83c\\udf26\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cloud: {\n keywords: [ \"weather\", \"sky\" ],\n char: \"\\u2601\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cloud_with_rain: {\n keywords: [ \"weather\" ],\n char: \"\\ud83c\\udf27\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cloud_with_lightning_and_rain: {\n keywords: [ \"weather\", \"lightning\" ],\n char: \"\\u26c8\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cloud_with_lightning: {\n keywords: [ \"weather\", \"thunder\" ],\n char: \"\\ud83c\\udf29\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n zap: {\n keywords: [ \"thunder\", \"weather\", \"lightning bolt\", \"fast\" ],\n char: \"\\u26a1\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n fire: {\n keywords: [ \"hot\", \"cook\", \"flame\" ],\n char: \"\\ud83d\\udd25\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n boom: {\n keywords: [ \"bomb\", \"explode\", \"explosion\", \"collision\", \"blown\" ],\n char: \"\\ud83d\\udca5\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n snowflake: {\n keywords: [ \"winter\", \"season\", \"cold\", \"weather\", \"christmas\", \"xmas\" ],\n char: \"\\u2744\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n cloud_with_snow: {\n keywords: [ \"weather\" ],\n char: \"\\ud83c\\udf28\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n snowman: {\n keywords: [ \"winter\", \"season\", \"cold\", \"weather\", \"christmas\", \"xmas\", \"frozen\", \"without_snow\" ],\n char: \"\\u26c4\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n snowman_with_snow: {\n keywords: [ \"winter\", \"season\", \"cold\", \"weather\", \"christmas\", \"xmas\", \"frozen\" ],\n char: \"\\u2603\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n wind_face: {\n keywords: [ \"gust\", \"air\" ],\n char: \"\\ud83c\\udf2c\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n dash: {\n keywords: [ \"wind\", \"air\", \"fast\", \"shoo\", \"fart\", \"smoke\", \"puff\" ],\n char: \"\\ud83d\\udca8\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n tornado: {\n keywords: [ \"weather\", \"cyclone\", \"twister\" ],\n char: \"\\ud83c\\udf2a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n fog: {\n keywords: [ \"weather\" ],\n char: \"\\ud83c\\udf2b\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n open_umbrella: {\n keywords: [ \"weather\", \"spring\" ],\n char: \"\\u2602\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n umbrella: {\n keywords: [ \"rainy\", \"weather\", \"spring\" ],\n char: \"\\u2614\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n droplet: {\n keywords: [ \"water\", \"drip\", \"faucet\", \"spring\" ],\n char: \"\\ud83d\\udca7\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n sweat_drops: {\n keywords: [ \"water\", \"drip\", \"oops\" ],\n char: \"\\ud83d\\udca6\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n ocean: {\n keywords: [ \"sea\", \"water\", \"wave\", \"nature\", \"tsunami\", \"disaster\" ],\n char: \"\\ud83c\\udf0a\",\n fitzpatrick_scale: false,\n category: \"animals_and_nature\"\n },\n green_apple: {\n keywords: [ \"fruit\", \"nature\" ],\n char: \"\\ud83c\\udf4f\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n apple: {\n keywords: [ \"fruit\", \"mac\", \"school\" ],\n char: \"\\ud83c\\udf4e\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n pear: {\n keywords: [ \"fruit\", \"nature\", \"food\" ],\n char: \"\\ud83c\\udf50\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n tangerine: {\n keywords: [ \"food\", \"fruit\", \"nature\", \"orange\" ],\n char: \"\\ud83c\\udf4a\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n lemon: {\n keywords: [ \"fruit\", \"nature\" ],\n char: \"\\ud83c\\udf4b\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n banana: {\n keywords: [ \"fruit\", \"food\", \"monkey\" ],\n char: \"\\ud83c\\udf4c\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n watermelon: {\n keywords: [ \"fruit\", \"food\", \"picnic\", \"summer\" ],\n char: \"\\ud83c\\udf49\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n grapes: {\n keywords: [ \"fruit\", \"food\", \"wine\" ],\n char: \"\\ud83c\\udf47\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n strawberry: {\n keywords: [ \"fruit\", \"food\", \"nature\" ],\n char: \"\\ud83c\\udf53\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n melon: {\n keywords: [ \"fruit\", \"nature\", \"food\" ],\n char: \"\\ud83c\\udf48\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cherries: {\n keywords: [ \"food\", \"fruit\" ],\n char: \"\\ud83c\\udf52\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n peach: {\n keywords: [ \"fruit\", \"nature\", \"food\" ],\n char: \"\\ud83c\\udf51\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n pineapple: {\n keywords: [ \"fruit\", \"nature\", \"food\" ],\n char: \"\\ud83c\\udf4d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n coconut: {\n keywords: [ \"fruit\", \"nature\", \"food\", \"palm\" ],\n char: \"\\ud83e\\udd65\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n kiwi_fruit: {\n keywords: [ \"fruit\", \"food\" ],\n char: \"\\ud83e\\udd5d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n mango: {\n keywords: [ \"fruit\", \"food\", \"tropical\" ],\n char: \"\\ud83e\\udd6d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n avocado: {\n keywords: [ \"fruit\", \"food\" ],\n char: \"\\ud83e\\udd51\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n broccoli: {\n keywords: [ \"fruit\", \"food\", \"vegetable\" ],\n char: \"\\ud83e\\udd66\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n tomato: {\n keywords: [ \"fruit\", \"vegetable\", \"nature\", \"food\" ],\n char: \"\\ud83c\\udf45\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n eggplant: {\n keywords: [ \"vegetable\", \"nature\", \"food\", \"aubergine\" ],\n char: \"\\ud83c\\udf46\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cucumber: {\n keywords: [ \"fruit\", \"food\", \"pickle\" ],\n char: \"\\ud83e\\udd52\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n carrot: {\n keywords: [ \"vegetable\", \"food\", \"orange\" ],\n char: \"\\ud83e\\udd55\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n hot_pepper: {\n keywords: [ \"food\", \"spicy\", \"chilli\", \"chili\" ],\n char: \"\\ud83c\\udf36\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n potato: {\n keywords: [ \"food\", \"tuber\", \"vegatable\", \"starch\" ],\n char: \"\\ud83e\\udd54\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n corn: {\n keywords: [ \"food\", \"vegetable\", \"plant\" ],\n char: \"\\ud83c\\udf3d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n leafy_greens: {\n keywords: [ \"food\", \"vegetable\", \"plant\", \"bok choy\", \"cabbage\", \"kale\", \"lettuce\" ],\n char: \"\\ud83e\\udd6c\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n sweet_potato: {\n keywords: [ \"food\", \"nature\" ],\n char: \"\\ud83c\\udf60\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n peanuts: {\n keywords: [ \"food\", \"nut\" ],\n char: \"\\ud83e\\udd5c\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n honey_pot: {\n keywords: [ \"bees\", \"sweet\", \"kitchen\" ],\n char: \"\\ud83c\\udf6f\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n croissant: {\n keywords: [ \"food\", \"bread\", \"french\" ],\n char: \"\\ud83e\\udd50\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n bread: {\n keywords: [ \"food\", \"wheat\", \"breakfast\", \"toast\" ],\n char: \"\\ud83c\\udf5e\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n baguette_bread: {\n keywords: [ \"food\", \"bread\", \"french\" ],\n char: \"\\ud83e\\udd56\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n bagel: {\n keywords: [ \"food\", \"bread\", \"bakery\", \"schmear\" ],\n char: \"\\ud83e\\udd6f\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n pretzel: {\n keywords: [ \"food\", \"bread\", \"twisted\" ],\n char: \"\\ud83e\\udd68\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cheese: {\n keywords: [ \"food\", \"chadder\" ],\n char: \"\\ud83e\\uddc0\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n egg: {\n keywords: [ \"food\", \"chicken\", \"breakfast\" ],\n char: \"\\ud83e\\udd5a\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n bacon: {\n keywords: [ \"food\", \"breakfast\", \"pork\", \"pig\", \"meat\" ],\n char: \"\\ud83e\\udd53\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n steak: {\n keywords: [ \"food\", \"cow\", \"meat\", \"cut\", \"chop\", \"lambchop\", \"porkchop\" ],\n char: \"\\ud83e\\udd69\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n pancakes: {\n keywords: [ \"food\", \"breakfast\", \"flapjacks\", \"hotcakes\" ],\n char: \"\\ud83e\\udd5e\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n poultry_leg: {\n keywords: [ \"food\", \"meat\", \"drumstick\", \"bird\", \"chicken\", \"turkey\" ],\n char: \"\\ud83c\\udf57\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n meat_on_bone: {\n keywords: [ \"good\", \"food\", \"drumstick\" ],\n char: \"\\ud83c\\udf56\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n bone: {\n keywords: [ \"skeleton\" ],\n char: \"\\ud83e\\uddb4\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n fried_shrimp: {\n keywords: [ \"food\", \"animal\", \"appetizer\", \"summer\" ],\n char: \"\\ud83c\\udf64\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n fried_egg: {\n keywords: [ \"food\", \"breakfast\", \"kitchen\", \"egg\" ],\n char: \"\\ud83c\\udf73\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n hamburger: {\n keywords: [ \"meat\", \"fast food\", \"beef\", \"cheeseburger\", \"mcdonalds\", \"burger king\" ],\n char: \"\\ud83c\\udf54\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n fries: {\n keywords: [ \"chips\", \"snack\", \"fast food\" ],\n char: \"\\ud83c\\udf5f\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n stuffed_flatbread: {\n keywords: [ \"food\", \"flatbread\", \"stuffed\", \"gyro\" ],\n char: \"\\ud83e\\udd59\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n hotdog: {\n keywords: [ \"food\", \"frankfurter\" ],\n char: \"\\ud83c\\udf2d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n pizza: {\n keywords: [ \"food\", \"party\" ],\n char: \"\\ud83c\\udf55\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n sandwich: {\n keywords: [ \"food\", \"lunch\", \"bread\" ],\n char: \"\\ud83e\\udd6a\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n canned_food: {\n keywords: [ \"food\", \"soup\" ],\n char: \"\\ud83e\\udd6b\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n spaghetti: {\n keywords: [ \"food\", \"italian\", \"noodle\" ],\n char: \"\\ud83c\\udf5d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n taco: {\n keywords: [ \"food\", \"mexican\" ],\n char: \"\\ud83c\\udf2e\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n burrito: {\n keywords: [ \"food\", \"mexican\" ],\n char: \"\\ud83c\\udf2f\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n green_salad: {\n keywords: [ \"food\", \"healthy\", \"lettuce\" ],\n char: \"\\ud83e\\udd57\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n shallow_pan_of_food: {\n keywords: [ \"food\", \"cooking\", \"casserole\", \"paella\" ],\n char: \"\\ud83e\\udd58\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n ramen: {\n keywords: [ \"food\", \"japanese\", \"noodle\", \"chopsticks\" ],\n char: \"\\ud83c\\udf5c\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n stew: {\n keywords: [ \"food\", \"meat\", \"soup\" ],\n char: \"\\ud83c\\udf72\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n fish_cake: {\n keywords: [ \"food\", \"japan\", \"sea\", \"beach\", \"narutomaki\", \"pink\", \"swirl\", \"kamaboko\", \"surimi\", \"ramen\" ],\n char: \"\\ud83c\\udf65\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n fortune_cookie: {\n keywords: [ \"food\", \"prophecy\" ],\n char: \"\\ud83e\\udd60\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n sushi: {\n keywords: [ \"food\", \"fish\", \"japanese\", \"rice\" ],\n char: \"\\ud83c\\udf63\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n bento: {\n keywords: [ \"food\", \"japanese\", \"box\" ],\n char: \"\\ud83c\\udf71\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n curry: {\n keywords: [ \"food\", \"spicy\", \"hot\", \"indian\" ],\n char: \"\\ud83c\\udf5b\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n rice_ball: {\n keywords: [ \"food\", \"japanese\" ],\n char: \"\\ud83c\\udf59\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n rice: {\n keywords: [ \"food\", \"china\", \"asian\" ],\n char: \"\\ud83c\\udf5a\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n rice_cracker: {\n keywords: [ \"food\", \"japanese\" ],\n char: \"\\ud83c\\udf58\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n oden: {\n keywords: [ \"food\", \"japanese\" ],\n char: \"\\ud83c\\udf62\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n dango: {\n keywords: [ \"food\", \"dessert\", \"sweet\", \"japanese\", \"barbecue\", \"meat\" ],\n char: \"\\ud83c\\udf61\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n shaved_ice: {\n keywords: [ \"hot\", \"dessert\", \"summer\" ],\n char: \"\\ud83c\\udf67\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n ice_cream: {\n keywords: [ \"food\", \"hot\", \"dessert\" ],\n char: \"\\ud83c\\udf68\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n icecream: {\n keywords: [ \"food\", \"hot\", \"dessert\", \"summer\" ],\n char: \"\\ud83c\\udf66\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n pie: {\n keywords: [ \"food\", \"dessert\", \"pastry\" ],\n char: \"\\ud83e\\udd67\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cake: {\n keywords: [ \"food\", \"dessert\" ],\n char: \"\\ud83c\\udf70\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cupcake: {\n keywords: [ \"food\", \"dessert\", \"bakery\", \"sweet\" ],\n char: \"\\ud83e\\uddc1\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n moon_cake: {\n keywords: [ \"food\", \"autumn\" ],\n char: \"\\ud83e\\udd6e\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n birthday: {\n keywords: [ \"food\", \"dessert\", \"cake\" ],\n char: \"\\ud83c\\udf82\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n custard: {\n keywords: [ \"dessert\", \"food\" ],\n char: \"\\ud83c\\udf6e\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n candy: {\n keywords: [ \"snack\", \"dessert\", \"sweet\", \"lolly\" ],\n char: \"\\ud83c\\udf6c\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n lollipop: {\n keywords: [ \"food\", \"snack\", \"candy\", \"sweet\" ],\n char: \"\\ud83c\\udf6d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n chocolate_bar: {\n keywords: [ \"food\", \"snack\", \"dessert\", \"sweet\" ],\n char: \"\\ud83c\\udf6b\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n popcorn: {\n keywords: [ \"food\", \"movie theater\", \"films\", \"snack\" ],\n char: \"\\ud83c\\udf7f\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n dumpling: {\n keywords: [ \"food\", \"empanada\", \"pierogi\", \"potsticker\" ],\n char: \"\\ud83e\\udd5f\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n doughnut: {\n keywords: [ \"food\", \"dessert\", \"snack\", \"sweet\", \"donut\" ],\n char: \"\\ud83c\\udf69\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cookie: {\n keywords: [ \"food\", \"snack\", \"oreo\", \"chocolate\", \"sweet\", \"dessert\" ],\n char: \"\\ud83c\\udf6a\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n milk_glass: {\n keywords: [ \"beverage\", \"drink\", \"cow\" ],\n char: \"\\ud83e\\udd5b\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n beer: {\n keywords: [ \"relax\", \"beverage\", \"drink\", \"drunk\", \"party\", \"pub\", \"summer\", \"alcohol\", \"booze\" ],\n char: \"\\ud83c\\udf7a\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n beers: {\n keywords: [ \"relax\", \"beverage\", \"drink\", \"drunk\", \"party\", \"pub\", \"summer\", \"alcohol\", \"booze\" ],\n char: \"\\ud83c\\udf7b\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n clinking_glasses: {\n keywords: [ \"beverage\", \"drink\", \"party\", \"alcohol\", \"celebrate\", \"cheers\", \"wine\", \"champagne\", \"toast\" ],\n char: \"\\ud83e\\udd42\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n wine_glass: {\n keywords: [ \"drink\", \"beverage\", \"drunk\", \"alcohol\", \"booze\" ],\n char: \"\\ud83c\\udf77\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n tumbler_glass: {\n keywords: [ \"drink\", \"beverage\", \"drunk\", \"alcohol\", \"liquor\", \"booze\", \"bourbon\", \"scotch\", \"whisky\", \"glass\", \"shot\" ],\n char: \"\\ud83e\\udd43\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cocktail: {\n keywords: [ \"drink\", \"drunk\", \"alcohol\", \"beverage\", \"booze\", \"mojito\" ],\n char: \"\\ud83c\\udf78\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n tropical_drink: {\n keywords: [ \"beverage\", \"cocktail\", \"summer\", \"beach\", \"alcohol\", \"booze\", \"mojito\" ],\n char: \"\\ud83c\\udf79\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n champagne: {\n keywords: [ \"drink\", \"wine\", \"bottle\", \"celebration\" ],\n char: \"\\ud83c\\udf7e\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n sake: {\n keywords: [ \"wine\", \"drink\", \"drunk\", \"beverage\", \"japanese\", \"alcohol\", \"booze\" ],\n char: \"\\ud83c\\udf76\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n tea: {\n keywords: [ \"drink\", \"bowl\", \"breakfast\", \"green\", \"british\" ],\n char: \"\\ud83c\\udf75\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n cup_with_straw: {\n keywords: [ \"drink\", \"soda\" ],\n char: \"\\ud83e\\udd64\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n coffee: {\n keywords: [ \"beverage\", \"caffeine\", \"latte\", \"espresso\" ],\n char: \"\\u2615\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n baby_bottle: {\n keywords: [ \"food\", \"container\", \"milk\" ],\n char: \"\\ud83c\\udf7c\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n salt: {\n keywords: [ \"condiment\", \"shaker\" ],\n char: \"\\ud83e\\uddc2\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n spoon: {\n keywords: [ \"cutlery\", \"kitchen\", \"tableware\" ],\n char: \"\\ud83e\\udd44\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n fork_and_knife: {\n keywords: [ \"cutlery\", \"kitchen\" ],\n char: \"\\ud83c\\udf74\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n plate_with_cutlery: {\n keywords: [ \"food\", \"eat\", \"meal\", \"lunch\", \"dinner\", \"restaurant\" ],\n char: \"\\ud83c\\udf7d\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n bowl_with_spoon: {\n keywords: [ \"food\", \"breakfast\", \"cereal\", \"oatmeal\", \"porridge\" ],\n char: \"\\ud83e\\udd63\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n takeout_box: {\n keywords: [ \"food\", \"leftovers\" ],\n char: \"\\ud83e\\udd61\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n chopsticks: {\n keywords: [ \"food\" ],\n char: \"\\ud83e\\udd62\",\n fitzpatrick_scale: false,\n category: \"food_and_drink\"\n },\n soccer: {\n keywords: [ \"sports\", \"football\" ],\n char: \"\\u26bd\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n basketball: {\n keywords: [ \"sports\", \"balls\", \"NBA\" ],\n char: \"\\ud83c\\udfc0\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n football: {\n keywords: [ \"sports\", \"balls\", \"NFL\" ],\n char: \"\\ud83c\\udfc8\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n baseball: {\n keywords: [ \"sports\", \"balls\" ],\n char: \"\\u26be\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n softball: {\n keywords: [ \"sports\", \"balls\" ],\n char: \"\\ud83e\\udd4e\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n tennis: {\n keywords: [ \"sports\", \"balls\", \"green\" ],\n char: \"\\ud83c\\udfbe\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n volleyball: {\n keywords: [ \"sports\", \"balls\" ],\n char: \"\\ud83c\\udfd0\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n rugby_football: {\n keywords: [ \"sports\", \"team\" ],\n char: \"\\ud83c\\udfc9\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n flying_disc: {\n keywords: [ \"sports\", \"frisbee\", \"ultimate\" ],\n char: \"\\ud83e\\udd4f\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n \"8ball\": {\n keywords: [ \"pool\", \"hobby\", \"game\", \"luck\", \"magic\" ],\n char: \"\\ud83c\\udfb1\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n golf: {\n keywords: [ \"sports\", \"business\", \"flag\", \"hole\", \"summer\" ],\n char: \"\\u26f3\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n golfing_woman: {\n keywords: [ \"sports\", \"business\", \"woman\", \"female\" ],\n char: \"\\ud83c\\udfcc\\ufe0f\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n golfing_man: {\n keywords: [ \"sports\", \"business\" ],\n char: \"\\ud83c\\udfcc\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n ping_pong: {\n keywords: [ \"sports\", \"pingpong\" ],\n char: \"\\ud83c\\udfd3\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n badminton: {\n keywords: [ \"sports\" ],\n char: \"\\ud83c\\udff8\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n goal_net: {\n keywords: [ \"sports\" ],\n char: \"\\ud83e\\udd45\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n ice_hockey: {\n keywords: [ \"sports\" ],\n char: \"\\ud83c\\udfd2\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n field_hockey: {\n keywords: [ \"sports\" ],\n char: \"\\ud83c\\udfd1\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n lacrosse: {\n keywords: [ \"sports\", \"ball\", \"stick\" ],\n char: \"\\ud83e\\udd4d\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n cricket: {\n keywords: [ \"sports\" ],\n char: \"\\ud83c\\udfcf\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n ski: {\n keywords: [ \"sports\", \"winter\", \"cold\", \"snow\" ],\n char: \"\\ud83c\\udfbf\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n skier: {\n keywords: [ \"sports\", \"winter\", \"snow\" ],\n char: \"\\u26f7\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n snowboarder: {\n keywords: [ \"sports\", \"winter\" ],\n char: \"\\ud83c\\udfc2\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n person_fencing: {\n keywords: [ \"sports\", \"fencing\", \"sword\" ],\n char: \"\\ud83e\\udd3a\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n women_wrestling: {\n keywords: [ \"sports\", \"wrestlers\" ],\n char: \"\\ud83e\\udd3c\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n men_wrestling: {\n keywords: [ \"sports\", \"wrestlers\" ],\n char: \"\\ud83e\\udd3c\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n woman_cartwheeling: {\n keywords: [ \"gymnastics\" ],\n char: \"\\ud83e\\udd38\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n man_cartwheeling: {\n keywords: [ \"gymnastics\" ],\n char: \"\\ud83e\\udd38\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n woman_playing_handball: {\n keywords: [ \"sports\" ],\n char: \"\\ud83e\\udd3e\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n man_playing_handball: {\n keywords: [ \"sports\" ],\n char: \"\\ud83e\\udd3e\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n ice_skate: {\n keywords: [ \"sports\" ],\n char: \"\\u26f8\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n curling_stone: {\n keywords: [ \"sports\" ],\n char: \"\\ud83e\\udd4c\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n skateboard: {\n keywords: [ \"board\" ],\n char: \"\\ud83d\\udef9\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n sled: {\n keywords: [ \"sleigh\", \"luge\", \"toboggan\" ],\n char: \"\\ud83d\\udef7\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n bow_and_arrow: {\n keywords: [ \"sports\" ],\n char: \"\\ud83c\\udff9\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n fishing_pole_and_fish: {\n keywords: [ \"food\", \"hobby\", \"summer\" ],\n char: \"\\ud83c\\udfa3\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n boxing_glove: {\n keywords: [ \"sports\", \"fighting\" ],\n char: \"\\ud83e\\udd4a\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n martial_arts_uniform: {\n keywords: [ \"judo\", \"karate\", \"taekwondo\" ],\n char: \"\\ud83e\\udd4b\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n rowing_woman: {\n keywords: [ \"sports\", \"hobby\", \"water\", \"ship\", \"woman\", \"female\" ],\n char: \"\\ud83d\\udea3\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n rowing_man: {\n keywords: [ \"sports\", \"hobby\", \"water\", \"ship\" ],\n char: \"\\ud83d\\udea3\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n climbing_woman: {\n keywords: [ \"sports\", \"hobby\", \"woman\", \"female\", \"rock\" ],\n char: \"\\ud83e\\uddd7\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n climbing_man: {\n keywords: [ \"sports\", \"hobby\", \"man\", \"male\", \"rock\" ],\n char: \"\\ud83e\\uddd7\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n swimming_woman: {\n keywords: [ \"sports\", \"exercise\", \"human\", \"athlete\", \"water\", \"summer\", \"woman\", \"female\" ],\n char: \"\\ud83c\\udfca\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n swimming_man: {\n keywords: [ \"sports\", \"exercise\", \"human\", \"athlete\", \"water\", \"summer\" ],\n char: \"\\ud83c\\udfca\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n woman_playing_water_polo: {\n keywords: [ \"sports\", \"pool\" ],\n char: \"\\ud83e\\udd3d\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n man_playing_water_polo: {\n keywords: [ \"sports\", \"pool\" ],\n char: \"\\ud83e\\udd3d\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n woman_in_lotus_position: {\n keywords: [ \"woman\", \"female\", \"meditation\", \"yoga\", \"serenity\", \"zen\", \"mindfulness\" ],\n char: \"\\ud83e\\uddd8\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n man_in_lotus_position: {\n keywords: [ \"man\", \"male\", \"meditation\", \"yoga\", \"serenity\", \"zen\", \"mindfulness\" ],\n char: \"\\ud83e\\uddd8\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n surfing_woman: {\n keywords: [ \"sports\", \"ocean\", \"sea\", \"summer\", \"beach\", \"woman\", \"female\" ],\n char: \"\\ud83c\\udfc4\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n surfing_man: {\n keywords: [ \"sports\", \"ocean\", \"sea\", \"summer\", \"beach\" ],\n char: \"\\ud83c\\udfc4\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n bath: {\n keywords: [ \"clean\", \"shower\", \"bathroom\" ],\n char: \"\\ud83d\\udec0\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n basketball_woman: {\n keywords: [ \"sports\", \"human\", \"woman\", \"female\" ],\n char: \"\\u26f9\\ufe0f\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n basketball_man: {\n keywords: [ \"sports\", \"human\" ],\n char: \"\\u26f9\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n weight_lifting_woman: {\n keywords: [ \"sports\", \"training\", \"exercise\", \"woman\", \"female\" ],\n char: \"\\ud83c\\udfcb\\ufe0f\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n weight_lifting_man: {\n keywords: [ \"sports\", \"training\", \"exercise\" ],\n char: \"\\ud83c\\udfcb\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n biking_woman: {\n keywords: [ \"sports\", \"bike\", \"exercise\", \"hipster\", \"woman\", \"female\" ],\n char: \"\\ud83d\\udeb4\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n biking_man: {\n keywords: [ \"sports\", \"bike\", \"exercise\", \"hipster\" ],\n char: \"\\ud83d\\udeb4\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n mountain_biking_woman: {\n keywords: [ \"transportation\", \"sports\", \"human\", \"race\", \"bike\", \"woman\", \"female\" ],\n char: \"\\ud83d\\udeb5\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n mountain_biking_man: {\n keywords: [ \"transportation\", \"sports\", \"human\", \"race\", \"bike\" ],\n char: \"\\ud83d\\udeb5\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n horse_racing: {\n keywords: [ \"animal\", \"betting\", \"competition\", \"gambling\", \"luck\" ],\n char: \"\\ud83c\\udfc7\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n business_suit_levitating: {\n keywords: [ \"suit\", \"business\", \"levitate\", \"hover\", \"jump\" ],\n char: \"\\ud83d\\udd74\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n trophy: {\n keywords: [ \"win\", \"award\", \"contest\", \"place\", \"ftw\", \"ceremony\" ],\n char: \"\\ud83c\\udfc6\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n running_shirt_with_sash: {\n keywords: [ \"play\", \"pageant\" ],\n char: \"\\ud83c\\udfbd\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n medal_sports: {\n keywords: [ \"award\", \"winning\" ],\n char: \"\\ud83c\\udfc5\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n medal_military: {\n keywords: [ \"award\", \"winning\", \"army\" ],\n char: \"\\ud83c\\udf96\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n \"1st_place_medal\": {\n keywords: [ \"award\", \"winning\", \"first\" ],\n char: \"\\ud83e\\udd47\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n \"2nd_place_medal\": {\n keywords: [ \"award\", \"second\" ],\n char: \"\\ud83e\\udd48\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n \"3rd_place_medal\": {\n keywords: [ \"award\", \"third\" ],\n char: \"\\ud83e\\udd49\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n reminder_ribbon: {\n keywords: [ \"sports\", \"cause\", \"support\", \"awareness\" ],\n char: \"\\ud83c\\udf97\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n rosette: {\n keywords: [ \"flower\", \"decoration\", \"military\" ],\n char: \"\\ud83c\\udff5\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n ticket: {\n keywords: [ \"event\", \"concert\", \"pass\" ],\n char: \"\\ud83c\\udfab\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n tickets: {\n keywords: [ \"sports\", \"concert\", \"entrance\" ],\n char: \"\\ud83c\\udf9f\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n performing_arts: {\n keywords: [ \"acting\", \"theater\", \"drama\" ],\n char: \"\\ud83c\\udfad\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n art: {\n keywords: [ \"design\", \"paint\", \"draw\", \"colors\" ],\n char: \"\\ud83c\\udfa8\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n circus_tent: {\n keywords: [ \"festival\", \"carnival\", \"party\" ],\n char: \"\\ud83c\\udfaa\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n woman_juggling: {\n keywords: [ \"juggle\", \"balance\", \"skill\", \"multitask\" ],\n char: \"\\ud83e\\udd39\\u200d\\u2640\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n man_juggling: {\n keywords: [ \"juggle\", \"balance\", \"skill\", \"multitask\" ],\n char: \"\\ud83e\\udd39\\u200d\\u2642\\ufe0f\",\n fitzpatrick_scale: true,\n category: \"activity\"\n },\n microphone: {\n keywords: [ \"sound\", \"music\", \"PA\", \"sing\", \"talkshow\" ],\n char: \"\\ud83c\\udfa4\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n headphones: {\n keywords: [ \"music\", \"score\", \"gadgets\" ],\n char: \"\\ud83c\\udfa7\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n musical_score: {\n keywords: [ \"treble\", \"clef\", \"compose\" ],\n char: \"\\ud83c\\udfbc\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n musical_keyboard: {\n keywords: [ \"piano\", \"instrument\", \"compose\" ],\n char: \"\\ud83c\\udfb9\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n drum: {\n keywords: [ \"music\", \"instrument\", \"drumsticks\", \"snare\" ],\n char: \"\\ud83e\\udd41\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n saxophone: {\n keywords: [ \"music\", \"instrument\", \"jazz\", \"blues\" ],\n char: \"\\ud83c\\udfb7\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n trumpet: {\n keywords: [ \"music\", \"brass\" ],\n char: \"\\ud83c\\udfba\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n guitar: {\n keywords: [ \"music\", \"instrument\" ],\n char: \"\\ud83c\\udfb8\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n violin: {\n keywords: [ \"music\", \"instrument\", \"orchestra\", \"symphony\" ],\n char: \"\\ud83c\\udfbb\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n clapper: {\n keywords: [ \"movie\", \"film\", \"record\" ],\n char: \"\\ud83c\\udfac\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n video_game: {\n keywords: [ \"play\", \"console\", \"PS4\", \"controller\" ],\n char: \"\\ud83c\\udfae\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n space_invader: {\n keywords: [ \"game\", \"arcade\", \"play\" ],\n char: \"\\ud83d\\udc7e\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n dart: {\n keywords: [ \"game\", \"play\", \"bar\", \"target\", \"bullseye\" ],\n char: \"\\ud83c\\udfaf\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n game_die: {\n keywords: [ \"dice\", \"random\", \"tabletop\", \"play\", \"luck\" ],\n char: \"\\ud83c\\udfb2\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n chess_pawn: {\n keywords: [ \"expendable\" ],\n char: \"\\u265f\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n slot_machine: {\n keywords: [ \"bet\", \"gamble\", \"vegas\", \"fruit machine\", \"luck\", \"casino\" ],\n char: \"\\ud83c\\udfb0\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n jigsaw: {\n keywords: [ \"interlocking\", \"puzzle\", \"piece\" ],\n char: \"\\ud83e\\udde9\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n bowling: {\n keywords: [ \"sports\", \"fun\", \"play\" ],\n char: \"\\ud83c\\udfb3\",\n fitzpatrick_scale: false,\n category: \"activity\"\n },\n red_car: {\n keywords: [ \"red\", \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude97\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n taxi: {\n keywords: [ \"uber\", \"vehicle\", \"cars\", \"transportation\" ],\n char: \"\\ud83d\\ude95\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n blue_car: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude99\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n bus: {\n keywords: [ \"car\", \"vehicle\", \"transportation\" ],\n char: \"\\ud83d\\ude8c\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n trolleybus: {\n keywords: [ \"bart\", \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude8e\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n racing_car: {\n keywords: [ \"sports\", \"race\", \"fast\", \"formula\", \"f1\" ],\n char: \"\\ud83c\\udfce\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n police_car: {\n keywords: [ \"vehicle\", \"cars\", \"transportation\", \"law\", \"legal\", \"enforcement\" ],\n char: \"\\ud83d\\ude93\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n ambulance: {\n keywords: [ \"health\", \"911\", \"hospital\" ],\n char: \"\\ud83d\\ude91\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n fire_engine: {\n keywords: [ \"transportation\", \"cars\", \"vehicle\" ],\n char: \"\\ud83d\\ude92\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n minibus: {\n keywords: [ \"vehicle\", \"car\", \"transportation\" ],\n char: \"\\ud83d\\ude90\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n truck: {\n keywords: [ \"cars\", \"transportation\" ],\n char: \"\\ud83d\\ude9a\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n articulated_lorry: {\n keywords: [ \"vehicle\", \"cars\", \"transportation\", \"express\" ],\n char: \"\\ud83d\\ude9b\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n tractor: {\n keywords: [ \"vehicle\", \"car\", \"farming\", \"agriculture\" ],\n char: \"\\ud83d\\ude9c\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n kick_scooter: {\n keywords: [ \"vehicle\", \"kick\", \"razor\" ],\n char: \"\\ud83d\\udef4\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n motorcycle: {\n keywords: [ \"race\", \"sports\", \"fast\" ],\n char: \"\\ud83c\\udfcd\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n bike: {\n keywords: [ \"sports\", \"bicycle\", \"exercise\", \"hipster\" ],\n char: \"\\ud83d\\udeb2\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n motor_scooter: {\n keywords: [ \"vehicle\", \"vespa\", \"sasha\" ],\n char: \"\\ud83d\\udef5\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n rotating_light: {\n keywords: [ \"police\", \"ambulance\", \"911\", \"emergency\", \"alert\", \"error\", \"pinged\", \"law\", \"legal\" ],\n char: \"\\ud83d\\udea8\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n oncoming_police_car: {\n keywords: [ \"vehicle\", \"law\", \"legal\", \"enforcement\", \"911\" ],\n char: \"\\ud83d\\ude94\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n oncoming_bus: {\n keywords: [ \"vehicle\", \"transportation\" ],\n char: \"\\ud83d\\ude8d\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n oncoming_automobile: {\n keywords: [ \"car\", \"vehicle\", \"transportation\" ],\n char: \"\\ud83d\\ude98\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n oncoming_taxi: {\n keywords: [ \"vehicle\", \"cars\", \"uber\" ],\n char: \"\\ud83d\\ude96\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n aerial_tramway: {\n keywords: [ \"transportation\", \"vehicle\", \"ski\" ],\n char: \"\\ud83d\\udea1\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n mountain_cableway: {\n keywords: [ \"transportation\", \"vehicle\", \"ski\" ],\n char: \"\\ud83d\\udea0\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n suspension_railway: {\n keywords: [ \"vehicle\", \"transportation\" ],\n char: \"\\ud83d\\ude9f\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n railway_car: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude83\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n train: {\n keywords: [ \"transportation\", \"vehicle\", \"carriage\", \"public\", \"travel\" ],\n char: \"\\ud83d\\ude8b\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n monorail: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude9d\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n bullettrain_side: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude84\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n bullettrain_front: {\n keywords: [ \"transportation\", \"vehicle\", \"speed\", \"fast\", \"public\", \"travel\" ],\n char: \"\\ud83d\\ude85\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n light_rail: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude88\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n mountain_railway: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude9e\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n steam_locomotive: {\n keywords: [ \"transportation\", \"vehicle\", \"train\" ],\n char: \"\\ud83d\\ude82\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n train2: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude86\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n metro: {\n keywords: [ \"transportation\", \"blue-square\", \"mrt\", \"underground\", \"tube\" ],\n char: \"\\ud83d\\ude87\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n tram: {\n keywords: [ \"transportation\", \"vehicle\" ],\n char: \"\\ud83d\\ude8a\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n station: {\n keywords: [ \"transportation\", \"vehicle\", \"public\" ],\n char: \"\\ud83d\\ude89\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n flying_saucer: {\n keywords: [ \"transportation\", \"vehicle\", \"ufo\" ],\n char: \"\\ud83d\\udef8\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n helicopter: {\n keywords: [ \"transportation\", \"vehicle\", \"fly\" ],\n char: \"\\ud83d\\ude81\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n small_airplane: {\n keywords: [ \"flight\", \"transportation\", \"fly\", \"vehicle\" ],\n char: \"\\ud83d\\udee9\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n airplane: {\n keywords: [ \"vehicle\", \"transportation\", \"flight\", \"fly\" ],\n char: \"\\u2708\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n flight_departure: {\n keywords: [ \"airport\", \"flight\", \"landing\" ],\n char: \"\\ud83d\\udeeb\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n flight_arrival: {\n keywords: [ \"airport\", \"flight\", \"boarding\" ],\n char: \"\\ud83d\\udeec\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n sailboat: {\n keywords: [ \"ship\", \"summer\", \"transportation\", \"water\", \"sailing\" ],\n char: \"\\u26f5\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n motor_boat: {\n keywords: [ \"ship\" ],\n char: \"\\ud83d\\udee5\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n speedboat: {\n keywords: [ \"ship\", \"transportation\", \"vehicle\", \"summer\" ],\n char: \"\\ud83d\\udea4\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n ferry: {\n keywords: [ \"boat\", \"ship\", \"yacht\" ],\n char: \"\\u26f4\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n passenger_ship: {\n keywords: [ \"yacht\", \"cruise\", \"ferry\" ],\n char: \"\\ud83d\\udef3\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n rocket: {\n keywords: [ \"launch\", \"ship\", \"staffmode\", \"NASA\", \"outer space\", \"outer_space\", \"fly\" ],\n char: \"\\ud83d\\ude80\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n artificial_satellite: {\n keywords: [ \"communication\", \"gps\", \"orbit\", \"spaceflight\", \"NASA\", \"ISS\" ],\n char: \"\\ud83d\\udef0\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n seat: {\n keywords: [ \"sit\", \"airplane\", \"transport\", \"bus\", \"flight\", \"fly\" ],\n char: \"\\ud83d\\udcba\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n canoe: {\n keywords: [ \"boat\", \"paddle\", \"water\", \"ship\" ],\n char: \"\\ud83d\\udef6\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n anchor: {\n keywords: [ \"ship\", \"ferry\", \"sea\", \"boat\" ],\n char: \"\\u2693\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n construction: {\n keywords: [ \"wip\", \"progress\", \"caution\", \"warning\" ],\n char: \"\\ud83d\\udea7\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n fuelpump: {\n keywords: [ \"gas station\", \"petroleum\" ],\n char: \"\\u26fd\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n busstop: {\n keywords: [ \"transportation\", \"wait\" ],\n char: \"\\ud83d\\ude8f\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n vertical_traffic_light: {\n keywords: [ \"transportation\", \"driving\" ],\n char: \"\\ud83d\\udea6\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n traffic_light: {\n keywords: [ \"transportation\", \"signal\" ],\n char: \"\\ud83d\\udea5\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n checkered_flag: {\n keywords: [ \"contest\", \"finishline\", \"race\", \"gokart\" ],\n char: \"\\ud83c\\udfc1\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n ship: {\n keywords: [ \"transportation\", \"titanic\", \"deploy\" ],\n char: \"\\ud83d\\udea2\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n ferris_wheel: {\n keywords: [ \"photo\", \"carnival\", \"londoneye\" ],\n char: \"\\ud83c\\udfa1\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n roller_coaster: {\n keywords: [ \"carnival\", \"playground\", \"photo\", \"fun\" ],\n char: \"\\ud83c\\udfa2\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n carousel_horse: {\n keywords: [ \"photo\", \"carnival\" ],\n char: \"\\ud83c\\udfa0\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n building_construction: {\n keywords: [ \"wip\", \"working\", \"progress\" ],\n char: \"\\ud83c\\udfd7\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n foggy: {\n keywords: [ \"photo\", \"mountain\" ],\n char: \"\\ud83c\\udf01\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n tokyo_tower: {\n keywords: [ \"photo\", \"japanese\" ],\n char: \"\\ud83d\\uddfc\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n factory: {\n keywords: [ \"building\", \"industry\", \"pollution\", \"smoke\" ],\n char: \"\\ud83c\\udfed\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n fountain: {\n keywords: [ \"photo\", \"summer\", \"water\", \"fresh\" ],\n char: \"\\u26f2\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n rice_scene: {\n keywords: [ \"photo\", \"japan\", \"asia\", \"tsukimi\" ],\n char: \"\\ud83c\\udf91\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n mountain: {\n keywords: [ \"photo\", \"nature\", \"environment\" ],\n char: \"\\u26f0\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n mountain_snow: {\n keywords: [ \"photo\", \"nature\", \"environment\", \"winter\", \"cold\" ],\n char: \"\\ud83c\\udfd4\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n mount_fuji: {\n keywords: [ \"photo\", \"mountain\", \"nature\", \"japanese\" ],\n char: \"\\ud83d\\uddfb\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n volcano: {\n keywords: [ \"photo\", \"nature\", \"disaster\" ],\n char: \"\\ud83c\\udf0b\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n japan: {\n keywords: [ \"nation\", \"country\", \"japanese\", \"asia\" ],\n char: \"\\ud83d\\uddfe\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n camping: {\n keywords: [ \"photo\", \"outdoors\", \"tent\" ],\n char: \"\\ud83c\\udfd5\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n tent: {\n keywords: [ \"photo\", \"camping\", \"outdoors\" ],\n char: \"\\u26fa\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n national_park: {\n keywords: [ \"photo\", \"environment\", \"nature\" ],\n char: \"\\ud83c\\udfde\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n motorway: {\n keywords: [ \"road\", \"cupertino\", \"interstate\", \"highway\" ],\n char: \"\\ud83d\\udee3\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n railway_track: {\n keywords: [ \"train\", \"transportation\" ],\n char: \"\\ud83d\\udee4\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n sunrise: {\n keywords: [ \"morning\", \"view\", \"vacation\", \"photo\" ],\n char: \"\\ud83c\\udf05\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n sunrise_over_mountains: {\n keywords: [ \"view\", \"vacation\", \"photo\" ],\n char: \"\\ud83c\\udf04\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n desert: {\n keywords: [ \"photo\", \"warm\", \"saharah\" ],\n char: \"\\ud83c\\udfdc\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n beach_umbrella: {\n keywords: [ \"weather\", \"summer\", \"sunny\", \"sand\", \"mojito\" ],\n char: \"\\ud83c\\udfd6\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n desert_island: {\n keywords: [ \"photo\", \"tropical\", \"mojito\" ],\n char: \"\\ud83c\\udfdd\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n city_sunrise: {\n keywords: [ \"photo\", \"good morning\", \"dawn\" ],\n char: \"\\ud83c\\udf07\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n city_sunset: {\n keywords: [ \"photo\", \"evening\", \"sky\", \"buildings\" ],\n char: \"\\ud83c\\udf06\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n cityscape: {\n keywords: [ \"photo\", \"night life\", \"urban\" ],\n char: \"\\ud83c\\udfd9\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n night_with_stars: {\n keywords: [ \"evening\", \"city\", \"downtown\" ],\n char: \"\\ud83c\\udf03\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n bridge_at_night: {\n keywords: [ \"photo\", \"sanfrancisco\" ],\n char: \"\\ud83c\\udf09\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n milky_way: {\n keywords: [ \"photo\", \"space\", \"stars\" ],\n char: \"\\ud83c\\udf0c\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n stars: {\n keywords: [ \"night\", \"photo\" ],\n char: \"\\ud83c\\udf20\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n sparkler: {\n keywords: [ \"stars\", \"night\", \"shine\" ],\n char: \"\\ud83c\\udf87\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n fireworks: {\n keywords: [ \"photo\", \"festival\", \"carnival\", \"congratulations\" ],\n char: \"\\ud83c\\udf86\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n rainbow: {\n keywords: [ \"nature\", \"happy\", \"unicorn_face\", \"photo\", \"sky\", \"spring\" ],\n char: \"\\ud83c\\udf08\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n houses: {\n keywords: [ \"buildings\", \"photo\" ],\n char: \"\\ud83c\\udfd8\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n european_castle: {\n keywords: [ \"building\", \"royalty\", \"history\" ],\n char: \"\\ud83c\\udff0\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n japanese_castle: {\n keywords: [ \"photo\", \"building\" ],\n char: \"\\ud83c\\udfef\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n stadium: {\n keywords: [ \"photo\", \"place\", \"sports\", \"concert\", \"venue\" ],\n char: \"\\ud83c\\udfdf\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n statue_of_liberty: {\n keywords: [ \"american\", \"newyork\" ],\n char: \"\\ud83d\\uddfd\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n house: {\n keywords: [ \"building\", \"home\" ],\n char: \"\\ud83c\\udfe0\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n house_with_garden: {\n keywords: [ \"home\", \"plant\", \"nature\" ],\n char: \"\\ud83c\\udfe1\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n derelict_house: {\n keywords: [ \"abandon\", \"evict\", \"broken\", \"building\" ],\n char: \"\\ud83c\\udfda\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n office: {\n keywords: [ \"building\", \"bureau\", \"work\" ],\n char: \"\\ud83c\\udfe2\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n department_store: {\n keywords: [ \"building\", \"shopping\", \"mall\" ],\n char: \"\\ud83c\\udfec\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n post_office: {\n keywords: [ \"building\", \"envelope\", \"communication\" ],\n char: \"\\ud83c\\udfe3\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n european_post_office: {\n keywords: [ \"building\", \"email\" ],\n char: \"\\ud83c\\udfe4\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n hospital: {\n keywords: [ \"building\", \"health\", \"surgery\", \"doctor\" ],\n char: \"\\ud83c\\udfe5\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n bank: {\n keywords: [ \"building\", \"money\", \"sales\", \"cash\", \"business\", \"enterprise\" ],\n char: \"\\ud83c\\udfe6\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n hotel: {\n keywords: [ \"building\", \"accomodation\", \"checkin\" ],\n char: \"\\ud83c\\udfe8\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n convenience_store: {\n keywords: [ \"building\", \"shopping\", \"groceries\" ],\n char: \"\\ud83c\\udfea\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n school: {\n keywords: [ \"building\", \"student\", \"education\", \"learn\", \"teach\" ],\n char: \"\\ud83c\\udfeb\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n love_hotel: {\n keywords: [ \"like\", \"affection\", \"dating\" ],\n char: \"\\ud83c\\udfe9\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n wedding: {\n keywords: [ \"love\", \"like\", \"affection\", \"couple\", \"marriage\", \"bride\", \"groom\" ],\n char: \"\\ud83d\\udc92\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n classical_building: {\n keywords: [ \"art\", \"culture\", \"history\" ],\n char: \"\\ud83c\\udfdb\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n church: {\n keywords: [ \"building\", \"religion\", \"christ\" ],\n char: \"\\u26ea\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n mosque: {\n keywords: [ \"islam\", \"worship\", \"minaret\" ],\n char: \"\\ud83d\\udd4c\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n synagogue: {\n keywords: [ \"judaism\", \"worship\", \"temple\", \"jewish\" ],\n char: \"\\ud83d\\udd4d\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n kaaba: {\n keywords: [ \"mecca\", \"mosque\", \"islam\" ],\n char: \"\\ud83d\\udd4b\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n shinto_shrine: {\n keywords: [ \"temple\", \"japan\", \"kyoto\" ],\n char: \"\\u26e9\",\n fitzpatrick_scale: false,\n category: \"travel_and_places\"\n },\n watch: {\n keywords: [ \"time\", \"accessories\" ],\n char: \"\\u231a\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n iphone: {\n keywords: [ \"technology\", \"apple\", \"gadgets\", \"dial\" ],\n char: \"\\ud83d\\udcf1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n calling: {\n keywords: [ \"iphone\", \"incoming\" ],\n char: \"\\ud83d\\udcf2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n computer: {\n keywords: [ \"technology\", \"laptop\", \"screen\", \"display\", \"monitor\" ],\n char: \"\\ud83d\\udcbb\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n keyboard: {\n keywords: [ \"technology\", \"computer\", \"type\", \"input\", \"text\" ],\n char: \"\\u2328\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n desktop_computer: {\n keywords: [ \"technology\", \"computing\", \"screen\" ],\n char: \"\\ud83d\\udda5\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n printer: {\n keywords: [ \"paper\", \"ink\" ],\n char: \"\\ud83d\\udda8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n computer_mouse: {\n keywords: [ \"click\" ],\n char: \"\\ud83d\\uddb1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n trackball: {\n keywords: [ \"technology\", \"trackpad\" ],\n char: \"\\ud83d\\uddb2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n joystick: {\n keywords: [ \"game\", \"play\" ],\n char: \"\\ud83d\\udd79\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n clamp: {\n keywords: [ \"tool\" ],\n char: \"\\ud83d\\udddc\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n minidisc: {\n keywords: [ \"technology\", \"record\", \"data\", \"disk\", \"90s\" ],\n char: \"\\ud83d\\udcbd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n floppy_disk: {\n keywords: [ \"oldschool\", \"technology\", \"save\", \"90s\", \"80s\" ],\n char: \"\\ud83d\\udcbe\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n cd: {\n keywords: [ \"technology\", \"dvd\", \"disk\", \"disc\", \"90s\" ],\n char: \"\\ud83d\\udcbf\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n dvd: {\n keywords: [ \"cd\", \"disk\", \"disc\" ],\n char: \"\\ud83d\\udcc0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n vhs: {\n keywords: [ \"record\", \"video\", \"oldschool\", \"90s\", \"80s\" ],\n char: \"\\ud83d\\udcfc\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n camera: {\n keywords: [ \"gadgets\", \"photography\" ],\n char: \"\\ud83d\\udcf7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n camera_flash: {\n keywords: [ \"photography\", \"gadgets\" ],\n char: \"\\ud83d\\udcf8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n video_camera: {\n keywords: [ \"film\", \"record\" ],\n char: \"\\ud83d\\udcf9\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n movie_camera: {\n keywords: [ \"film\", \"record\" ],\n char: \"\\ud83c\\udfa5\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n film_projector: {\n keywords: [ \"video\", \"tape\", \"record\", \"movie\" ],\n char: \"\\ud83d\\udcfd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n film_strip: {\n keywords: [ \"movie\" ],\n char: \"\\ud83c\\udf9e\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n telephone_receiver: {\n keywords: [ \"technology\", \"communication\", \"dial\" ],\n char: \"\\ud83d\\udcde\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n phone: {\n keywords: [ \"technology\", \"communication\", \"dial\", \"telephone\" ],\n char: \"\\u260e\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n pager: {\n keywords: [ \"bbcall\", \"oldschool\", \"90s\" ],\n char: \"\\ud83d\\udcdf\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n fax: {\n keywords: [ \"communication\", \"technology\" ],\n char: \"\\ud83d\\udce0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n tv: {\n keywords: [ \"technology\", \"program\", \"oldschool\", \"show\", \"television\" ],\n char: \"\\ud83d\\udcfa\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n radio: {\n keywords: [ \"communication\", \"music\", \"podcast\", \"program\" ],\n char: \"\\ud83d\\udcfb\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n studio_microphone: {\n keywords: [ \"sing\", \"recording\", \"artist\", \"talkshow\" ],\n char: \"\\ud83c\\udf99\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n level_slider: {\n keywords: [ \"scale\" ],\n char: \"\\ud83c\\udf9a\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n control_knobs: {\n keywords: [ \"dial\" ],\n char: \"\\ud83c\\udf9b\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n compass: {\n keywords: [ \"magnetic\", \"navigation\", \"orienteering\" ],\n char: \"\\ud83e\\udded\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n stopwatch: {\n keywords: [ \"time\", \"deadline\" ],\n char: \"\\u23f1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n timer_clock: {\n keywords: [ \"alarm\" ],\n char: \"\\u23f2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n alarm_clock: {\n keywords: [ \"time\", \"wake\" ],\n char: \"\\u23f0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n mantelpiece_clock: {\n keywords: [ \"time\" ],\n char: \"\\ud83d\\udd70\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n hourglass_flowing_sand: {\n keywords: [ \"oldschool\", \"time\", \"countdown\" ],\n char: \"\\u23f3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n hourglass: {\n keywords: [ \"time\", \"clock\", \"oldschool\", \"limit\", \"exam\", \"quiz\", \"test\" ],\n char: \"\\u231b\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n satellite: {\n keywords: [ \"communication\", \"future\", \"radio\", \"space\" ],\n char: \"\\ud83d\\udce1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n battery: {\n keywords: [ \"power\", \"energy\", \"sustain\" ],\n char: \"\\ud83d\\udd0b\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n electric_plug: {\n keywords: [ \"charger\", \"power\" ],\n char: \"\\ud83d\\udd0c\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n bulb: {\n keywords: [ \"light\", \"electricity\", \"idea\" ],\n char: \"\\ud83d\\udca1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n flashlight: {\n keywords: [ \"dark\", \"camping\", \"sight\", \"night\" ],\n char: \"\\ud83d\\udd26\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n candle: {\n keywords: [ \"fire\", \"wax\" ],\n char: \"\\ud83d\\udd6f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n fire_extinguisher: {\n keywords: [ \"quench\" ],\n char: \"\\ud83e\\uddef\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n wastebasket: {\n keywords: [ \"bin\", \"trash\", \"rubbish\", \"garbage\", \"toss\" ],\n char: \"\\ud83d\\uddd1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n oil_drum: {\n keywords: [ \"barrell\" ],\n char: \"\\ud83d\\udee2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n money_with_wings: {\n keywords: [ \"dollar\", \"bills\", \"payment\", \"sale\" ],\n char: \"\\ud83d\\udcb8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n dollar: {\n keywords: [ \"money\", \"sales\", \"bill\", \"currency\" ],\n char: \"\\ud83d\\udcb5\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n yen: {\n keywords: [ \"money\", \"sales\", \"japanese\", \"dollar\", \"currency\" ],\n char: \"\\ud83d\\udcb4\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n euro: {\n keywords: [ \"money\", \"sales\", \"dollar\", \"currency\" ],\n char: \"\\ud83d\\udcb6\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n pound: {\n keywords: [ \"british\", \"sterling\", \"money\", \"sales\", \"bills\", \"uk\", \"england\", \"currency\" ],\n char: \"\\ud83d\\udcb7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n moneybag: {\n keywords: [ \"dollar\", \"payment\", \"coins\", \"sale\" ],\n char: \"\\ud83d\\udcb0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n credit_card: {\n keywords: [ \"money\", \"sales\", \"dollar\", \"bill\", \"payment\", \"shopping\" ],\n char: \"\\ud83d\\udcb3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n gem: {\n keywords: [ \"blue\", \"ruby\", \"diamond\", \"jewelry\" ],\n char: \"\\ud83d\\udc8e\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n balance_scale: {\n keywords: [ \"law\", \"fairness\", \"weight\" ],\n char: \"\\u2696\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n toolbox: {\n keywords: [ \"tools\", \"diy\", \"fix\", \"maintainer\", \"mechanic\" ],\n char: \"\\ud83e\\uddf0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n wrench: {\n keywords: [ \"tools\", \"diy\", \"ikea\", \"fix\", \"maintainer\" ],\n char: \"\\ud83d\\udd27\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n hammer: {\n keywords: [ \"tools\", \"build\", \"create\" ],\n char: \"\\ud83d\\udd28\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n hammer_and_pick: {\n keywords: [ \"tools\", \"build\", \"create\" ],\n char: \"\\u2692\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n hammer_and_wrench: {\n keywords: [ \"tools\", \"build\", \"create\" ],\n char: \"\\ud83d\\udee0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n pick: {\n keywords: [ \"tools\", \"dig\" ],\n char: \"\\u26cf\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n nut_and_bolt: {\n keywords: [ \"handy\", \"tools\", \"fix\" ],\n char: \"\\ud83d\\udd29\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n gear: {\n keywords: [ \"cog\" ],\n char: \"\\u2699\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n brick: {\n keywords: [ \"bricks\" ],\n char: \"\\ud83e\\uddf1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n chains: {\n keywords: [ \"lock\", \"arrest\" ],\n char: \"\\u26d3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n magnet: {\n keywords: [ \"attraction\", \"magnetic\" ],\n char: \"\\ud83e\\uddf2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n gun: {\n keywords: [ \"violence\", \"weapon\", \"pistol\", \"revolver\" ],\n char: \"\\ud83d\\udd2b\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n bomb: {\n keywords: [ \"boom\", \"explode\", \"explosion\", \"terrorism\" ],\n char: \"\\ud83d\\udca3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n firecracker: {\n keywords: [ \"dynamite\", \"boom\", \"explode\", \"explosion\", \"explosive\" ],\n char: \"\\ud83e\\udde8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n hocho: {\n keywords: [ \"knife\", \"blade\", \"cutlery\", \"kitchen\", \"weapon\" ],\n char: \"\\ud83d\\udd2a\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n dagger: {\n keywords: [ \"weapon\" ],\n char: \"\\ud83d\\udde1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n crossed_swords: {\n keywords: [ \"weapon\" ],\n char: \"\\u2694\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n shield: {\n keywords: [ \"protection\", \"security\" ],\n char: \"\\ud83d\\udee1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n smoking: {\n keywords: [ \"kills\", \"tobacco\", \"cigarette\", \"joint\", \"smoke\" ],\n char: \"\\ud83d\\udeac\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n skull_and_crossbones: {\n keywords: [ \"poison\", \"danger\", \"deadly\", \"scary\", \"death\", \"pirate\", \"evil\" ],\n char: \"\\u2620\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n coffin: {\n keywords: [ \"vampire\", \"dead\", \"die\", \"death\", \"rip\", \"graveyard\", \"cemetery\", \"casket\", \"funeral\", \"box\" ],\n char: \"\\u26b0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n funeral_urn: {\n keywords: [ \"dead\", \"die\", \"death\", \"rip\", \"ashes\" ],\n char: \"\\u26b1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n amphora: {\n keywords: [ \"vase\", \"jar\" ],\n char: \"\\ud83c\\udffa\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n crystal_ball: {\n keywords: [ \"disco\", \"party\", \"magic\", \"circus\", \"fortune_teller\" ],\n char: \"\\ud83d\\udd2e\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n prayer_beads: {\n keywords: [ \"dhikr\", \"religious\" ],\n char: \"\\ud83d\\udcff\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n nazar_amulet: {\n keywords: [ \"bead\", \"charm\" ],\n char: \"\\ud83e\\uddff\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n barber: {\n keywords: [ \"hair\", \"salon\", \"style\" ],\n char: \"\\ud83d\\udc88\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n alembic: {\n keywords: [ \"distilling\", \"science\", \"experiment\", \"chemistry\" ],\n char: \"\\u2697\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n telescope: {\n keywords: [ \"stars\", \"space\", \"zoom\", \"science\", \"astronomy\" ],\n char: \"\\ud83d\\udd2d\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n microscope: {\n keywords: [ \"laboratory\", \"experiment\", \"zoomin\", \"science\", \"study\" ],\n char: \"\\ud83d\\udd2c\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n hole: {\n keywords: [ \"embarrassing\" ],\n char: \"\\ud83d\\udd73\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n pill: {\n keywords: [ \"health\", \"medicine\", \"doctor\", \"pharmacy\", \"drug\" ],\n char: \"\\ud83d\\udc8a\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n syringe: {\n keywords: [ \"health\", \"hospital\", \"drugs\", \"blood\", \"medicine\", \"needle\", \"doctor\", \"nurse\" ],\n char: \"\\ud83d\\udc89\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n dna: {\n keywords: [ \"biologist\", \"genetics\", \"life\" ],\n char: \"\\ud83e\\uddec\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n microbe: {\n keywords: [ \"amoeba\", \"bacteria\", \"germs\" ],\n char: \"\\ud83e\\udda0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n petri_dish: {\n keywords: [ \"bacteria\", \"biology\", \"culture\", \"lab\" ],\n char: \"\\ud83e\\uddeb\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n test_tube: {\n keywords: [ \"chemistry\", \"experiment\", \"lab\", \"science\" ],\n char: \"\\ud83e\\uddea\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n thermometer: {\n keywords: [ \"weather\", \"temperature\", \"hot\", \"cold\" ],\n char: \"\\ud83c\\udf21\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n broom: {\n keywords: [ \"cleaning\", \"sweeping\", \"witch\" ],\n char: \"\\ud83e\\uddf9\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n basket: {\n keywords: [ \"laundry\" ],\n char: \"\\ud83e\\uddfa\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n toilet_paper: {\n keywords: [ \"roll\" ],\n char: \"\\ud83e\\uddfb\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n label: {\n keywords: [ \"sale\", \"tag\" ],\n char: \"\\ud83c\\udff7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n bookmark: {\n keywords: [ \"favorite\", \"label\", \"save\" ],\n char: \"\\ud83d\\udd16\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n toilet: {\n keywords: [ \"restroom\", \"wc\", \"washroom\", \"bathroom\", \"potty\" ],\n char: \"\\ud83d\\udebd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n shower: {\n keywords: [ \"clean\", \"water\", \"bathroom\" ],\n char: \"\\ud83d\\udebf\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n bathtub: {\n keywords: [ \"clean\", \"shower\", \"bathroom\" ],\n char: \"\\ud83d\\udec1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n soap: {\n keywords: [ \"bar\", \"bathing\", \"cleaning\", \"lather\" ],\n char: \"\\ud83e\\uddfc\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n sponge: {\n keywords: [ \"absorbing\", \"cleaning\", \"porous\" ],\n char: \"\\ud83e\\uddfd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n lotion_bottle: {\n keywords: [ \"moisturizer\", \"sunscreen\" ],\n char: \"\\ud83e\\uddf4\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n key: {\n keywords: [ \"lock\", \"door\", \"password\" ],\n char: \"\\ud83d\\udd11\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n old_key: {\n keywords: [ \"lock\", \"door\", \"password\" ],\n char: \"\\ud83d\\udddd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n couch_and_lamp: {\n keywords: [ \"read\", \"chill\" ],\n char: \"\\ud83d\\udecb\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n sleeping_bed: {\n keywords: [ \"bed\", \"rest\" ],\n char: \"\\ud83d\\udecc\",\n fitzpatrick_scale: true,\n category: \"objects\"\n },\n bed: {\n keywords: [ \"sleep\", \"rest\" ],\n char: \"\\ud83d\\udecf\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n door: {\n keywords: [ \"house\", \"entry\", \"exit\" ],\n char: \"\\ud83d\\udeaa\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n bellhop_bell: {\n keywords: [ \"service\" ],\n char: \"\\ud83d\\udece\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n teddy_bear: {\n keywords: [ \"plush\", \"stuffed\" ],\n char: \"\\ud83e\\uddf8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n framed_picture: {\n keywords: [ \"photography\" ],\n char: \"\\ud83d\\uddbc\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n world_map: {\n keywords: [ \"location\", \"direction\" ],\n char: \"\\ud83d\\uddfa\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n parasol_on_ground: {\n keywords: [ \"weather\", \"summer\" ],\n char: \"\\u26f1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n moyai: {\n keywords: [ \"rock\", \"easter island\", \"moai\" ],\n char: \"\\ud83d\\uddff\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n shopping: {\n keywords: [ \"mall\", \"buy\", \"purchase\" ],\n char: \"\\ud83d\\udecd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n shopping_cart: {\n keywords: [ \"trolley\" ],\n char: \"\\ud83d\\uded2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n balloon: {\n keywords: [ \"party\", \"celebration\", \"birthday\", \"circus\" ],\n char: \"\\ud83c\\udf88\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n flags: {\n keywords: [ \"fish\", \"japanese\", \"koinobori\", \"carp\", \"banner\" ],\n char: \"\\ud83c\\udf8f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n ribbon: {\n keywords: [ \"decoration\", \"pink\", \"girl\", \"bowtie\" ],\n char: \"\\ud83c\\udf80\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n gift: {\n keywords: [ \"present\", \"birthday\", \"christmas\", \"xmas\" ],\n char: \"\\ud83c\\udf81\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n confetti_ball: {\n keywords: [ \"festival\", \"party\", \"birthday\", \"circus\" ],\n char: \"\\ud83c\\udf8a\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n tada: {\n keywords: [ \"party\", \"congratulations\", \"birthday\", \"magic\", \"circus\", \"celebration\" ],\n char: \"\\ud83c\\udf89\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n dolls: {\n keywords: [ \"japanese\", \"toy\", \"kimono\" ],\n char: \"\\ud83c\\udf8e\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n wind_chime: {\n keywords: [ \"nature\", \"ding\", \"spring\", \"bell\" ],\n char: \"\\ud83c\\udf90\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n crossed_flags: {\n keywords: [ \"japanese\", \"nation\", \"country\", \"border\" ],\n char: \"\\ud83c\\udf8c\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n izakaya_lantern: {\n keywords: [ \"light\", \"paper\", \"halloween\", \"spooky\" ],\n char: \"\\ud83c\\udfee\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n red_envelope: {\n keywords: [ \"gift\" ],\n char: \"\\ud83e\\udde7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n email: {\n keywords: [ \"letter\", \"postal\", \"inbox\", \"communication\" ],\n char: \"\\u2709\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n envelope_with_arrow: {\n keywords: [ \"email\", \"communication\" ],\n char: \"\\ud83d\\udce9\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n incoming_envelope: {\n keywords: [ \"email\", \"inbox\" ],\n char: \"\\ud83d\\udce8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n \"e-mail\": {\n keywords: [ \"communication\", \"inbox\" ],\n char: \"\\ud83d\\udce7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n love_letter: {\n keywords: [ \"email\", \"like\", \"affection\", \"envelope\", \"valentines\" ],\n char: \"\\ud83d\\udc8c\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n postbox: {\n keywords: [ \"email\", \"letter\", \"envelope\" ],\n char: \"\\ud83d\\udcee\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n mailbox_closed: {\n keywords: [ \"email\", \"communication\", \"inbox\" ],\n char: \"\\ud83d\\udcea\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n mailbox: {\n keywords: [ \"email\", \"inbox\", \"communication\" ],\n char: \"\\ud83d\\udceb\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n mailbox_with_mail: {\n keywords: [ \"email\", \"inbox\", \"communication\" ],\n char: \"\\ud83d\\udcec\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n mailbox_with_no_mail: {\n keywords: [ \"email\", \"inbox\" ],\n char: \"\\ud83d\\udced\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n package: {\n keywords: [ \"mail\", \"gift\", \"cardboard\", \"box\", \"moving\" ],\n char: \"\\ud83d\\udce6\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n postal_horn: {\n keywords: [ \"instrument\", \"music\" ],\n char: \"\\ud83d\\udcef\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n inbox_tray: {\n keywords: [ \"email\", \"documents\" ],\n char: \"\\ud83d\\udce5\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n outbox_tray: {\n keywords: [ \"inbox\", \"email\" ],\n char: \"\\ud83d\\udce4\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n scroll: {\n keywords: [ \"documents\", \"ancient\", \"history\", \"paper\" ],\n char: \"\\ud83d\\udcdc\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n page_with_curl: {\n keywords: [ \"documents\", \"office\", \"paper\" ],\n char: \"\\ud83d\\udcc3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n bookmark_tabs: {\n keywords: [ \"favorite\", \"save\", \"order\", \"tidy\" ],\n char: \"\\ud83d\\udcd1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n receipt: {\n keywords: [ \"accounting\", \"expenses\" ],\n char: \"\\ud83e\\uddfe\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n bar_chart: {\n keywords: [ \"graph\", \"presentation\", \"stats\" ],\n char: \"\\ud83d\\udcca\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n chart_with_upwards_trend: {\n keywords: [ \"graph\", \"presentation\", \"stats\", \"recovery\", \"business\", \"economics\", \"money\", \"sales\", \"good\", \"success\" ],\n char: \"\\ud83d\\udcc8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n chart_with_downwards_trend: {\n keywords: [ \"graph\", \"presentation\", \"stats\", \"recession\", \"business\", \"economics\", \"money\", \"sales\", \"bad\", \"failure\" ],\n char: \"\\ud83d\\udcc9\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n page_facing_up: {\n keywords: [ \"documents\", \"office\", \"paper\", \"information\" ],\n char: \"\\ud83d\\udcc4\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n date: {\n keywords: [ \"calendar\", \"schedule\" ],\n char: \"\\ud83d\\udcc5\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n calendar: {\n keywords: [ \"schedule\", \"date\", \"planning\" ],\n char: \"\\ud83d\\udcc6\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n spiral_calendar: {\n keywords: [ \"date\", \"schedule\", \"planning\" ],\n char: \"\\ud83d\\uddd3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n card_index: {\n keywords: [ \"business\", \"stationery\" ],\n char: \"\\ud83d\\udcc7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n card_file_box: {\n keywords: [ \"business\", \"stationery\" ],\n char: \"\\ud83d\\uddc3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n ballot_box: {\n keywords: [ \"election\", \"vote\" ],\n char: \"\\ud83d\\uddf3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n file_cabinet: {\n keywords: [ \"filing\", \"organizing\" ],\n char: \"\\ud83d\\uddc4\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n clipboard: {\n keywords: [ \"stationery\", \"documents\" ],\n char: \"\\ud83d\\udccb\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n spiral_notepad: {\n keywords: [ \"memo\", \"stationery\" ],\n char: \"\\ud83d\\uddd2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n file_folder: {\n keywords: [ \"documents\", \"business\", \"office\" ],\n char: \"\\ud83d\\udcc1\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n open_file_folder: {\n keywords: [ \"documents\", \"load\" ],\n char: \"\\ud83d\\udcc2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n card_index_dividers: {\n keywords: [ \"organizing\", \"business\", \"stationery\" ],\n char: \"\\ud83d\\uddc2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n newspaper_roll: {\n keywords: [ \"press\", \"headline\" ],\n char: \"\\ud83d\\uddde\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n newspaper: {\n keywords: [ \"press\", \"headline\" ],\n char: \"\\ud83d\\udcf0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n notebook: {\n keywords: [ \"stationery\", \"record\", \"notes\", \"paper\", \"study\" ],\n char: \"\\ud83d\\udcd3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n closed_book: {\n keywords: [ \"read\", \"library\", \"knowledge\", \"textbook\", \"learn\" ],\n char: \"\\ud83d\\udcd5\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n green_book: {\n keywords: [ \"read\", \"library\", \"knowledge\", \"study\" ],\n char: \"\\ud83d\\udcd7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n blue_book: {\n keywords: [ \"read\", \"library\", \"knowledge\", \"learn\", \"study\" ],\n char: \"\\ud83d\\udcd8\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n orange_book: {\n keywords: [ \"read\", \"library\", \"knowledge\", \"textbook\", \"study\" ],\n char: \"\\ud83d\\udcd9\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n notebook_with_decorative_cover: {\n keywords: [ \"classroom\", \"notes\", \"record\", \"paper\", \"study\" ],\n char: \"\\ud83d\\udcd4\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n ledger: {\n keywords: [ \"notes\", \"paper\" ],\n char: \"\\ud83d\\udcd2\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n books: {\n keywords: [ \"literature\", \"library\", \"study\" ],\n char: \"\\ud83d\\udcda\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n open_book: {\n keywords: [ \"book\", \"read\", \"library\", \"knowledge\", \"literature\", \"learn\", \"study\" ],\n char: \"\\ud83d\\udcd6\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n safety_pin: {\n keywords: [ \"diaper\" ],\n char: \"\\ud83e\\uddf7\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n link: {\n keywords: [ \"rings\", \"url\" ],\n char: \"\\ud83d\\udd17\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n paperclip: {\n keywords: [ \"documents\", \"stationery\" ],\n char: \"\\ud83d\\udcce\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n paperclips: {\n keywords: [ \"documents\", \"stationery\" ],\n char: \"\\ud83d\\udd87\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n scissors: {\n keywords: [ \"stationery\", \"cut\" ],\n char: \"\\u2702\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n triangular_ruler: {\n keywords: [ \"stationery\", \"math\", \"architect\", \"sketch\" ],\n char: \"\\ud83d\\udcd0\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n straight_ruler: {\n keywords: [ \"stationery\", \"calculate\", \"length\", \"math\", \"school\", \"drawing\", \"architect\", \"sketch\" ],\n char: \"\\ud83d\\udccf\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n abacus: {\n keywords: [ \"calculation\" ],\n char: \"\\ud83e\\uddee\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n pushpin: {\n keywords: [ \"stationery\", \"mark\", \"here\" ],\n char: \"\\ud83d\\udccc\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n round_pushpin: {\n keywords: [ \"stationery\", \"location\", \"map\", \"here\" ],\n char: \"\\ud83d\\udccd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n triangular_flag_on_post: {\n keywords: [ \"mark\", \"milestone\", \"place\" ],\n char: \"\\ud83d\\udea9\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n white_flag: {\n keywords: [ \"losing\", \"loser\", \"lost\", \"surrender\", \"give up\", \"fail\" ],\n char: \"\\ud83c\\udff3\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n black_flag: {\n keywords: [ \"pirate\" ],\n char: \"\\ud83c\\udff4\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n rainbow_flag: {\n keywords: [ \"flag\", \"rainbow\", \"pride\", \"gay\", \"lgbt\", \"glbt\", \"queer\", \"homosexual\", \"lesbian\", \"bisexual\", \"transgender\" ],\n char: \"\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n closed_lock_with_key: {\n keywords: [ \"security\", \"privacy\" ],\n char: \"\\ud83d\\udd10\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n lock: {\n keywords: [ \"security\", \"password\", \"padlock\" ],\n char: \"\\ud83d\\udd12\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n unlock: {\n keywords: [ \"privacy\", \"security\" ],\n char: \"\\ud83d\\udd13\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n lock_with_ink_pen: {\n keywords: [ \"security\", \"secret\" ],\n char: \"\\ud83d\\udd0f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n pen: {\n keywords: [ \"stationery\", \"writing\", \"write\" ],\n char: \"\\ud83d\\udd8a\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n fountain_pen: {\n keywords: [ \"stationery\", \"writing\", \"write\" ],\n char: \"\\ud83d\\udd8b\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n black_nib: {\n keywords: [ \"pen\", \"stationery\", \"writing\", \"write\" ],\n char: \"\\u2712\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n memo: {\n keywords: [ \"write\", \"documents\", \"stationery\", \"pencil\", \"paper\", \"writing\", \"legal\", \"exam\", \"quiz\", \"test\", \"study\", \"compose\" ],\n char: \"\\ud83d\\udcdd\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n pencil2: {\n keywords: [ \"stationery\", \"write\", \"paper\", \"writing\", \"school\", \"study\" ],\n char: \"\\u270f\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n crayon: {\n keywords: [ \"drawing\", \"creativity\" ],\n char: \"\\ud83d\\udd8d\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n paintbrush: {\n keywords: [ \"drawing\", \"creativity\", \"art\" ],\n char: \"\\ud83d\\udd8c\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n mag: {\n keywords: [ \"search\", \"zoom\", \"find\", \"detective\" ],\n char: \"\\ud83d\\udd0d\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n mag_right: {\n keywords: [ \"search\", \"zoom\", \"find\", \"detective\" ],\n char: \"\\ud83d\\udd0e\",\n fitzpatrick_scale: false,\n category: \"objects\"\n },\n heart: {\n keywords: [ \"love\", \"like\", \"valentines\" ],\n char: \"\\u2764\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n orange_heart: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83e\\udde1\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n yellow_heart: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc9b\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n green_heart: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc9a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n blue_heart: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc99\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n purple_heart: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc9c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_heart: {\n keywords: [ \"evil\" ],\n char: \"\\ud83d\\udda4\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n broken_heart: {\n keywords: [ \"sad\", \"sorry\", \"break\", \"heart\", \"heartbreak\" ],\n char: \"\\ud83d\\udc94\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heavy_heart_exclamation: {\n keywords: [ \"decoration\", \"love\" ],\n char: \"\\u2763\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n two_hearts: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\", \"heart\" ],\n char: \"\\ud83d\\udc95\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n revolving_hearts: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc9e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heartbeat: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\", \"pink\", \"heart\" ],\n char: \"\\ud83d\\udc93\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heartpulse: {\n keywords: [ \"like\", \"love\", \"affection\", \"valentines\", \"pink\" ],\n char: \"\\ud83d\\udc97\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n sparkling_heart: {\n keywords: [ \"love\", \"like\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc96\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n cupid: {\n keywords: [ \"love\", \"like\", \"heart\", \"affection\", \"valentines\" ],\n char: \"\\ud83d\\udc98\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n gift_heart: {\n keywords: [ \"love\", \"valentines\" ],\n char: \"\\ud83d\\udc9d\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heart_decoration: {\n keywords: [ \"purple-square\", \"love\", \"like\" ],\n char: \"\\ud83d\\udc9f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n peace_symbol: {\n keywords: [ \"hippie\" ],\n char: \"\\u262e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n latin_cross: {\n keywords: [ \"christianity\" ],\n char: \"\\u271d\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n star_and_crescent: {\n keywords: [ \"islam\" ],\n char: \"\\u262a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n om: {\n keywords: [ \"hinduism\", \"buddhism\", \"sikhism\", \"jainism\" ],\n char: \"\\ud83d\\udd49\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n wheel_of_dharma: {\n keywords: [ \"hinduism\", \"buddhism\", \"sikhism\", \"jainism\" ],\n char: \"\\u2638\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n star_of_david: {\n keywords: [ \"judaism\" ],\n char: \"\\u2721\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n six_pointed_star: {\n keywords: [ \"purple-square\", \"religion\", \"jewish\", \"hexagram\" ],\n char: \"\\ud83d\\udd2f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n menorah: {\n keywords: [ \"hanukkah\", \"candles\", \"jewish\" ],\n char: \"\\ud83d\\udd4e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n yin_yang: {\n keywords: [ \"balance\" ],\n char: \"\\u262f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n orthodox_cross: {\n keywords: [ \"suppedaneum\", \"religion\" ],\n char: \"\\u2626\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n place_of_worship: {\n keywords: [ \"religion\", \"church\", \"temple\", \"prayer\" ],\n char: \"\\ud83d\\uded0\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n ophiuchus: {\n keywords: [ \"sign\", \"purple-square\", \"constellation\", \"astrology\" ],\n char: \"\\u26ce\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n aries: {\n keywords: [ \"sign\", \"purple-square\", \"zodiac\", \"astrology\" ],\n char: \"\\u2648\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n taurus: {\n keywords: [ \"purple-square\", \"sign\", \"zodiac\", \"astrology\" ],\n char: \"\\u2649\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n gemini: {\n keywords: [ \"sign\", \"zodiac\", \"purple-square\", \"astrology\" ],\n char: \"\\u264a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n cancer: {\n keywords: [ \"sign\", \"zodiac\", \"purple-square\", \"astrology\" ],\n char: \"\\u264b\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n leo: {\n keywords: [ \"sign\", \"purple-square\", \"zodiac\", \"astrology\" ],\n char: \"\\u264c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n virgo: {\n keywords: [ \"sign\", \"zodiac\", \"purple-square\", \"astrology\" ],\n char: \"\\u264d\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n libra: {\n keywords: [ \"sign\", \"purple-square\", \"zodiac\", \"astrology\" ],\n char: \"\\u264e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n scorpius: {\n keywords: [ \"sign\", \"zodiac\", \"purple-square\", \"astrology\", \"scorpio\" ],\n char: \"\\u264f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n sagittarius: {\n keywords: [ \"sign\", \"zodiac\", \"purple-square\", \"astrology\" ],\n char: \"\\u2650\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n capricorn: {\n keywords: [ \"sign\", \"zodiac\", \"purple-square\", \"astrology\" ],\n char: \"\\u2651\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n aquarius: {\n keywords: [ \"sign\", \"purple-square\", \"zodiac\", \"astrology\" ],\n char: \"\\u2652\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n pisces: {\n keywords: [ \"purple-square\", \"sign\", \"zodiac\", \"astrology\" ],\n char: \"\\u2653\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n id: {\n keywords: [ \"purple-square\", \"words\" ],\n char: \"\\ud83c\\udd94\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n atom_symbol: {\n keywords: [ \"science\", \"physics\", \"chemistry\" ],\n char: \"\\u269b\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u7a7a: {\n keywords: [ \"kanji\", \"japanese\", \"chinese\", \"empty\", \"sky\", \"blue-square\" ],\n char: \"\\ud83c\\ude33\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u5272: {\n keywords: [ \"cut\", \"divide\", \"chinese\", \"kanji\", \"pink-square\" ],\n char: \"\\ud83c\\ude39\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n radioactive: {\n keywords: [ \"nuclear\", \"danger\" ],\n char: \"\\u2622\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n biohazard: {\n keywords: [ \"danger\" ],\n char: \"\\u2623\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n mobile_phone_off: {\n keywords: [ \"mute\", \"orange-square\", \"silence\", \"quiet\" ],\n char: \"\\ud83d\\udcf4\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n vibration_mode: {\n keywords: [ \"orange-square\", \"phone\" ],\n char: \"\\ud83d\\udcf3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u6709: {\n keywords: [ \"orange-square\", \"chinese\", \"have\", \"kanji\" ],\n char: \"\\ud83c\\ude36\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u7121: {\n keywords: [ \"nothing\", \"chinese\", \"kanji\", \"japanese\", \"orange-square\" ],\n char: \"\\ud83c\\ude1a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u7533: {\n keywords: [ \"chinese\", \"japanese\", \"kanji\", \"orange-square\" ],\n char: \"\\ud83c\\ude38\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u55b6: {\n keywords: [ \"japanese\", \"opening hours\", \"orange-square\" ],\n char: \"\\ud83c\\ude3a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u6708: {\n keywords: [ \"chinese\", \"month\", \"moon\", \"japanese\", \"orange-square\", \"kanji\" ],\n char: \"\\ud83c\\ude37\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n eight_pointed_black_star: {\n keywords: [ \"orange-square\", \"shape\", \"polygon\" ],\n char: \"\\u2734\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n vs: {\n keywords: [ \"words\", \"orange-square\" ],\n char: \"\\ud83c\\udd9a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n accept: {\n keywords: [ \"ok\", \"good\", \"chinese\", \"kanji\", \"agree\", \"yes\", \"orange-circle\" ],\n char: \"\\ud83c\\ude51\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_flower: {\n keywords: [ \"japanese\", \"spring\" ],\n char: \"\\ud83d\\udcae\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n ideograph_advantage: {\n keywords: [ \"chinese\", \"kanji\", \"obtain\", \"get\", \"circle\" ],\n char: \"\\ud83c\\ude50\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n secret: {\n keywords: [ \"privacy\", \"chinese\", \"sshh\", \"kanji\", \"red-circle\" ],\n char: \"\\u3299\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n congratulations: {\n keywords: [ \"chinese\", \"kanji\", \"japanese\", \"red-circle\" ],\n char: \"\\u3297\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u5408: {\n keywords: [ \"japanese\", \"chinese\", \"join\", \"kanji\", \"red-square\" ],\n char: \"\\ud83c\\ude34\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u6e80: {\n keywords: [ \"full\", \"chinese\", \"japanese\", \"red-square\", \"kanji\" ],\n char: \"\\ud83c\\ude35\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u7981: {\n keywords: [ \"kanji\", \"japanese\", \"chinese\", \"forbidden\", \"limit\", \"restricted\", \"red-square\" ],\n char: \"\\ud83c\\ude32\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n a: {\n keywords: [ \"red-square\", \"alphabet\", \"letter\" ],\n char: \"\\ud83c\\udd70\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n b: {\n keywords: [ \"red-square\", \"alphabet\", \"letter\" ],\n char: \"\\ud83c\\udd71\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n ab: {\n keywords: [ \"red-square\", \"alphabet\" ],\n char: \"\\ud83c\\udd8e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n cl: {\n keywords: [ \"alphabet\", \"words\", \"red-square\" ],\n char: \"\\ud83c\\udd91\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n o2: {\n keywords: [ \"alphabet\", \"red-square\", \"letter\" ],\n char: \"\\ud83c\\udd7e\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n sos: {\n keywords: [ \"help\", \"red-square\", \"words\", \"emergency\", \"911\" ],\n char: \"\\ud83c\\udd98\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n no_entry: {\n keywords: [ \"limit\", \"security\", \"privacy\", \"bad\", \"denied\", \"stop\", \"circle\" ],\n char: \"\\u26d4\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n name_badge: {\n keywords: [ \"fire\", \"forbid\" ],\n char: \"\\ud83d\\udcdb\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n no_entry_sign: {\n keywords: [ \"forbid\", \"stop\", \"limit\", \"denied\", \"disallow\", \"circle\" ],\n char: \"\\ud83d\\udeab\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n x: {\n keywords: [ \"no\", \"delete\", \"remove\", \"cancel\", \"red\" ],\n char: \"\\u274c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n o: {\n keywords: [ \"circle\", \"round\" ],\n char: \"\\u2b55\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n stop_sign: {\n keywords: [ \"stop\" ],\n char: \"\\ud83d\\uded1\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n anger: {\n keywords: [ \"angry\", \"mad\" ],\n char: \"\\ud83d\\udca2\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n hotsprings: {\n keywords: [ \"bath\", \"warm\", \"relax\" ],\n char: \"\\u2668\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n no_pedestrians: {\n keywords: [ \"rules\", \"crossing\", \"walking\", \"circle\" ],\n char: \"\\ud83d\\udeb7\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n do_not_litter: {\n keywords: [ \"trash\", \"bin\", \"garbage\", \"circle\" ],\n char: \"\\ud83d\\udeaf\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n no_bicycles: {\n keywords: [ \"cyclist\", \"prohibited\", \"circle\" ],\n char: \"\\ud83d\\udeb3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n \"non-potable_water\": {\n keywords: [ \"drink\", \"faucet\", \"tap\", \"circle\" ],\n char: \"\\ud83d\\udeb1\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n underage: {\n keywords: [ \"18\", \"drink\", \"pub\", \"night\", \"minor\", \"circle\" ],\n char: \"\\ud83d\\udd1e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n no_mobile_phones: {\n keywords: [ \"iphone\", \"mute\", \"circle\" ],\n char: \"\\ud83d\\udcf5\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n exclamation: {\n keywords: [ \"heavy_exclamation_mark\", \"danger\", \"surprise\", \"punctuation\", \"wow\", \"warning\" ],\n char: \"\\u2757\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n grey_exclamation: {\n keywords: [ \"surprise\", \"punctuation\", \"gray\", \"wow\", \"warning\" ],\n char: \"\\u2755\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n question: {\n keywords: [ \"doubt\", \"confused\" ],\n char: \"\\u2753\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n grey_question: {\n keywords: [ \"doubts\", \"gray\", \"huh\", \"confused\" ],\n char: \"\\u2754\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n bangbang: {\n keywords: [ \"exclamation\", \"surprise\" ],\n char: \"\\u203c\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n interrobang: {\n keywords: [ \"wat\", \"punctuation\", \"surprise\" ],\n char: \"\\u2049\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n 100: {\n keywords: [ \"score\", \"perfect\", \"numbers\", \"century\", \"exam\", \"quiz\", \"test\", \"pass\", \"hundred\" ],\n char: \"\\ud83d\\udcaf\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n low_brightness: {\n keywords: [ \"sun\", \"afternoon\", \"warm\", \"summer\" ],\n char: \"\\ud83d\\udd05\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n high_brightness: {\n keywords: [ \"sun\", \"light\" ],\n char: \"\\ud83d\\udd06\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n trident: {\n keywords: [ \"weapon\", \"spear\" ],\n char: \"\\ud83d\\udd31\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n fleur_de_lis: {\n keywords: [ \"decorative\", \"scout\" ],\n char: \"\\u269c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n part_alternation_mark: {\n keywords: [ \"graph\", \"presentation\", \"stats\", \"business\", \"economics\", \"bad\" ],\n char: \"\\u303d\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n warning: {\n keywords: [ \"exclamation\", \"wip\", \"alert\", \"error\", \"problem\", \"issue\" ],\n char: \"\\u26a0\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n children_crossing: {\n keywords: [ \"school\", \"warning\", \"danger\", \"sign\", \"driving\", \"yellow-diamond\" ],\n char: \"\\ud83d\\udeb8\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n beginner: {\n keywords: [ \"badge\", \"shield\" ],\n char: \"\\ud83d\\udd30\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n recycle: {\n keywords: [ \"arrow\", \"environment\", \"garbage\", \"trash\" ],\n char: \"\\u267b\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n u6307: {\n keywords: [ \"chinese\", \"point\", \"green-square\", \"kanji\" ],\n char: \"\\ud83c\\ude2f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n chart: {\n keywords: [ \"green-square\", \"graph\", \"presentation\", \"stats\" ],\n char: \"\\ud83d\\udcb9\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n sparkle: {\n keywords: [ \"stars\", \"green-square\", \"awesome\", \"good\", \"fireworks\" ],\n char: \"\\u2747\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n eight_spoked_asterisk: {\n keywords: [ \"star\", \"sparkle\", \"green-square\" ],\n char: \"\\u2733\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n negative_squared_cross_mark: {\n keywords: [ \"x\", \"green-square\", \"no\", \"deny\" ],\n char: \"\\u274e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_check_mark: {\n keywords: [ \"green-square\", \"ok\", \"agree\", \"vote\", \"election\", \"answer\", \"tick\" ],\n char: \"\\u2705\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n diamond_shape_with_a_dot_inside: {\n keywords: [ \"jewel\", \"blue\", \"gem\", \"crystal\", \"fancy\" ],\n char: \"\\ud83d\\udca0\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n cyclone: {\n keywords: [ \"weather\", \"swirl\", \"blue\", \"cloud\", \"vortex\", \"spiral\", \"whirlpool\", \"spin\", \"tornado\", \"hurricane\", \"typhoon\" ],\n char: \"\\ud83c\\udf00\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n loop: {\n keywords: [ \"tape\", \"cassette\" ],\n char: \"\\u27bf\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n globe_with_meridians: {\n keywords: [ \"earth\", \"international\", \"world\", \"internet\", \"interweb\", \"i18n\" ],\n char: \"\\ud83c\\udf10\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n m: {\n keywords: [ \"alphabet\", \"blue-circle\", \"letter\" ],\n char: \"\\u24c2\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n atm: {\n keywords: [ \"money\", \"sales\", \"cash\", \"blue-square\", \"payment\", \"bank\" ],\n char: \"\\ud83c\\udfe7\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n sa: {\n keywords: [ \"japanese\", \"blue-square\", \"katakana\" ],\n char: \"\\ud83c\\ude02\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n passport_control: {\n keywords: [ \"custom\", \"blue-square\" ],\n char: \"\\ud83d\\udec2\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n customs: {\n keywords: [ \"passport\", \"border\", \"blue-square\" ],\n char: \"\\ud83d\\udec3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n baggage_claim: {\n keywords: [ \"blue-square\", \"airport\", \"transport\" ],\n char: \"\\ud83d\\udec4\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n left_luggage: {\n keywords: [ \"blue-square\", \"travel\" ],\n char: \"\\ud83d\\udec5\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n wheelchair: {\n keywords: [ \"blue-square\", \"disabled\", \"a11y\", \"accessibility\" ],\n char: \"\\u267f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n no_smoking: {\n keywords: [ \"cigarette\", \"blue-square\", \"smell\", \"smoke\" ],\n char: \"\\ud83d\\udead\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n wc: {\n keywords: [ \"toilet\", \"restroom\", \"blue-square\" ],\n char: \"\\ud83d\\udebe\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n parking: {\n keywords: [ \"cars\", \"blue-square\", \"alphabet\", \"letter\" ],\n char: \"\\ud83c\\udd7f\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n potable_water: {\n keywords: [ \"blue-square\", \"liquid\", \"restroom\", \"cleaning\", \"faucet\" ],\n char: \"\\ud83d\\udeb0\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n mens: {\n keywords: [ \"toilet\", \"restroom\", \"wc\", \"blue-square\", \"gender\", \"male\" ],\n char: \"\\ud83d\\udeb9\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n womens: {\n keywords: [ \"purple-square\", \"woman\", \"female\", \"toilet\", \"loo\", \"restroom\", \"gender\" ],\n char: \"\\ud83d\\udeba\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n baby_symbol: {\n keywords: [ \"orange-square\", \"child\" ],\n char: \"\\ud83d\\udebc\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n restroom: {\n keywords: [ \"blue-square\", \"toilet\", \"refresh\", \"wc\", \"gender\" ],\n char: \"\\ud83d\\udebb\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n put_litter_in_its_place: {\n keywords: [ \"blue-square\", \"sign\", \"human\", \"info\" ],\n char: \"\\ud83d\\udeae\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n cinema: {\n keywords: [ \"blue-square\", \"record\", \"film\", \"movie\", \"curtain\", \"stage\", \"theater\" ],\n char: \"\\ud83c\\udfa6\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n signal_strength: {\n keywords: [ \"blue-square\", \"reception\", \"phone\", \"internet\", \"connection\", \"wifi\", \"bluetooth\", \"bars\" ],\n char: \"\\ud83d\\udcf6\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n koko: {\n keywords: [ \"blue-square\", \"here\", \"katakana\", \"japanese\", \"destination\" ],\n char: \"\\ud83c\\ude01\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n ng: {\n keywords: [ \"blue-square\", \"words\", \"shape\", \"icon\" ],\n char: \"\\ud83c\\udd96\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n ok: {\n keywords: [ \"good\", \"agree\", \"yes\", \"blue-square\" ],\n char: \"\\ud83c\\udd97\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n up: {\n keywords: [ \"blue-square\", \"above\", \"high\" ],\n char: \"\\ud83c\\udd99\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n cool: {\n keywords: [ \"words\", \"blue-square\" ],\n char: \"\\ud83c\\udd92\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n new: {\n keywords: [ \"blue-square\", \"words\", \"start\" ],\n char: \"\\ud83c\\udd95\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n free: {\n keywords: [ \"blue-square\", \"words\" ],\n char: \"\\ud83c\\udd93\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n zero: {\n keywords: [ \"0\", \"numbers\", \"blue-square\", \"null\" ],\n char: \"0\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n one: {\n keywords: [ \"blue-square\", \"numbers\", \"1\" ],\n char: \"1\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n two: {\n keywords: [ \"numbers\", \"2\", \"prime\", \"blue-square\" ],\n char: \"2\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n three: {\n keywords: [ \"3\", \"numbers\", \"prime\", \"blue-square\" ],\n char: \"3\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n four: {\n keywords: [ \"4\", \"numbers\", \"blue-square\" ],\n char: \"4\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n five: {\n keywords: [ \"5\", \"numbers\", \"blue-square\", \"prime\" ],\n char: \"5\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n six: {\n keywords: [ \"6\", \"numbers\", \"blue-square\" ],\n char: \"6\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n seven: {\n keywords: [ \"7\", \"numbers\", \"blue-square\", \"prime\" ],\n char: \"7\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n eight: {\n keywords: [ \"8\", \"blue-square\", \"numbers\" ],\n char: \"8\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n nine: {\n keywords: [ \"blue-square\", \"numbers\", \"9\" ],\n char: \"9\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n keycap_ten: {\n keywords: [ \"numbers\", \"10\", \"blue-square\" ],\n char: \"\\ud83d\\udd1f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n asterisk: {\n keywords: [ \"star\", \"keycap\" ],\n char: \"*\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n 1234: {\n keywords: [ \"numbers\", \"blue-square\" ],\n char: \"\\ud83d\\udd22\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n eject_button: {\n keywords: [ \"blue-square\" ],\n char: \"\\u23cf\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_forward: {\n keywords: [ \"blue-square\", \"right\", \"direction\", \"play\" ],\n char: \"\\u25b6\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n pause_button: {\n keywords: [ \"pause\", \"blue-square\" ],\n char: \"\\u23f8\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n next_track_button: {\n keywords: [ \"forward\", \"next\", \"blue-square\" ],\n char: \"\\u23ed\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n stop_button: {\n keywords: [ \"blue-square\" ],\n char: \"\\u23f9\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n record_button: {\n keywords: [ \"blue-square\" ],\n char: \"\\u23fa\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n play_or_pause_button: {\n keywords: [ \"blue-square\", \"play\", \"pause\" ],\n char: \"\\u23ef\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n previous_track_button: {\n keywords: [ \"backward\" ],\n char: \"\\u23ee\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n fast_forward: {\n keywords: [ \"blue-square\", \"play\", \"speed\", \"continue\" ],\n char: \"\\u23e9\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n rewind: {\n keywords: [ \"play\", \"blue-square\" ],\n char: \"\\u23ea\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n twisted_rightwards_arrows: {\n keywords: [ \"blue-square\", \"shuffle\", \"music\", \"random\" ],\n char: \"\\ud83d\\udd00\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n repeat: {\n keywords: [ \"loop\", \"record\" ],\n char: \"\\ud83d\\udd01\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n repeat_one: {\n keywords: [ \"blue-square\", \"loop\" ],\n char: \"\\ud83d\\udd02\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_backward: {\n keywords: [ \"blue-square\", \"left\", \"direction\" ],\n char: \"\\u25c0\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_up_small: {\n keywords: [ \"blue-square\", \"triangle\", \"direction\", \"point\", \"forward\", \"top\" ],\n char: \"\\ud83d\\udd3c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_down_small: {\n keywords: [ \"blue-square\", \"direction\", \"bottom\" ],\n char: \"\\ud83d\\udd3d\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_double_up: {\n keywords: [ \"blue-square\", \"direction\", \"top\" ],\n char: \"\\u23eb\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_double_down: {\n keywords: [ \"blue-square\", \"direction\", \"bottom\" ],\n char: \"\\u23ec\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_right: {\n keywords: [ \"blue-square\", \"next\" ],\n char: \"\\u27a1\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_left: {\n keywords: [ \"blue-square\", \"previous\", \"back\" ],\n char: \"\\u2b05\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_up: {\n keywords: [ \"blue-square\", \"continue\", \"top\", \"direction\" ],\n char: \"\\u2b06\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_down: {\n keywords: [ \"blue-square\", \"direction\", \"bottom\" ],\n char: \"\\u2b07\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_upper_right: {\n keywords: [ \"blue-square\", \"point\", \"direction\", \"diagonal\", \"northeast\" ],\n char: \"\\u2197\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_lower_right: {\n keywords: [ \"blue-square\", \"direction\", \"diagonal\", \"southeast\" ],\n char: \"\\u2198\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_lower_left: {\n keywords: [ \"blue-square\", \"direction\", \"diagonal\", \"southwest\" ],\n char: \"\\u2199\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_upper_left: {\n keywords: [ \"blue-square\", \"point\", \"direction\", \"diagonal\", \"northwest\" ],\n char: \"\\u2196\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_up_down: {\n keywords: [ \"blue-square\", \"direction\", \"way\", \"vertical\" ],\n char: \"\\u2195\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n left_right_arrow: {\n keywords: [ \"shape\", \"direction\", \"horizontal\", \"sideways\" ],\n char: \"\\u2194\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrows_counterclockwise: {\n keywords: [ \"blue-square\", \"sync\", \"cycle\" ],\n char: \"\\ud83d\\udd04\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_right_hook: {\n keywords: [ \"blue-square\", \"return\", \"rotate\", \"direction\" ],\n char: \"\\u21aa\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n leftwards_arrow_with_hook: {\n keywords: [ \"back\", \"return\", \"blue-square\", \"undo\", \"enter\" ],\n char: \"\\u21a9\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_heading_up: {\n keywords: [ \"blue-square\", \"direction\", \"top\" ],\n char: \"\\u2934\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrow_heading_down: {\n keywords: [ \"blue-square\", \"direction\", \"bottom\" ],\n char: \"\\u2935\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n hash: {\n keywords: [ \"symbol\", \"blue-square\", \"twitter\" ],\n char: \"#\\ufe0f\\u20e3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n information_source: {\n keywords: [ \"blue-square\", \"alphabet\", \"letter\" ],\n char: \"\\u2139\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n abc: {\n keywords: [ \"blue-square\", \"alphabet\" ],\n char: \"\\ud83d\\udd24\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n abcd: {\n keywords: [ \"blue-square\", \"alphabet\" ],\n char: \"\\ud83d\\udd21\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n capital_abcd: {\n keywords: [ \"alphabet\", \"words\", \"blue-square\" ],\n char: \"\\ud83d\\udd20\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n symbols: {\n keywords: [ \"blue-square\", \"music\", \"note\", \"ampersand\", \"percent\", \"glyphs\", \"characters\" ],\n char: \"\\ud83d\\udd23\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n musical_note: {\n keywords: [ \"score\", \"tone\", \"sound\" ],\n char: \"\\ud83c\\udfb5\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n notes: {\n keywords: [ \"music\", \"score\" ],\n char: \"\\ud83c\\udfb6\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n wavy_dash: {\n keywords: [ \"draw\", \"line\", \"moustache\", \"mustache\", \"squiggle\", \"scribble\" ],\n char: \"\\u3030\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n curly_loop: {\n keywords: [ \"scribble\", \"draw\", \"shape\", \"squiggle\" ],\n char: \"\\u27b0\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heavy_check_mark: {\n keywords: [ \"ok\", \"nike\", \"answer\", \"yes\", \"tick\" ],\n char: \"\\u2714\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n arrows_clockwise: {\n keywords: [ \"sync\", \"cycle\", \"round\", \"repeat\" ],\n char: \"\\ud83d\\udd03\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heavy_plus_sign: {\n keywords: [ \"math\", \"calculation\", \"addition\", \"more\", \"increase\" ],\n char: \"\\u2795\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heavy_minus_sign: {\n keywords: [ \"math\", \"calculation\", \"subtract\", \"less\" ],\n char: \"\\u2796\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heavy_division_sign: {\n keywords: [ \"divide\", \"math\", \"calculation\" ],\n char: \"\\u2797\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heavy_multiplication_x: {\n keywords: [ \"math\", \"calculation\" ],\n char: \"\\u2716\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n infinity: {\n keywords: [ \"forever\" ],\n char: \"\\u267e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n heavy_dollar_sign: {\n keywords: [ \"money\", \"sales\", \"payment\", \"currency\", \"buck\" ],\n char: \"\\ud83d\\udcb2\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n currency_exchange: {\n keywords: [ \"money\", \"sales\", \"dollar\", \"travel\" ],\n char: \"\\ud83d\\udcb1\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n copyright: {\n keywords: [ \"ip\", \"license\", \"circle\", \"law\", \"legal\" ],\n char: \"\\xa9\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n registered: {\n keywords: [ \"alphabet\", \"circle\" ],\n char: \"\\xae\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n tm: {\n keywords: [ \"trademark\", \"brand\", \"law\", \"legal\" ],\n char: \"\\u2122\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n end: {\n keywords: [ \"words\", \"arrow\" ],\n char: \"\\ud83d\\udd1a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n back: {\n keywords: [ \"arrow\", \"words\", \"return\" ],\n char: \"\\ud83d\\udd19\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n on: {\n keywords: [ \"arrow\", \"words\" ],\n char: \"\\ud83d\\udd1b\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n top: {\n keywords: [ \"words\", \"blue-square\" ],\n char: \"\\ud83d\\udd1d\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n soon: {\n keywords: [ \"arrow\", \"words\" ],\n char: \"\\ud83d\\udd1c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n ballot_box_with_check: {\n keywords: [ \"ok\", \"agree\", \"confirm\", \"black-square\", \"vote\", \"election\", \"yes\", \"tick\" ],\n char: \"\\u2611\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n radio_button: {\n keywords: [ \"input\", \"old\", \"music\", \"circle\" ],\n char: \"\\ud83d\\udd18\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_circle: {\n keywords: [ \"shape\", \"round\" ],\n char: \"\\u26aa\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_circle: {\n keywords: [ \"shape\", \"button\", \"round\" ],\n char: \"\\u26ab\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n red_circle: {\n keywords: [ \"shape\", \"error\", \"danger\" ],\n char: \"\\ud83d\\udd34\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n large_blue_circle: {\n keywords: [ \"shape\", \"icon\", \"button\" ],\n char: \"\\ud83d\\udd35\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n small_orange_diamond: {\n keywords: [ \"shape\", \"jewel\", \"gem\" ],\n char: \"\\ud83d\\udd38\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n small_blue_diamond: {\n keywords: [ \"shape\", \"jewel\", \"gem\" ],\n char: \"\\ud83d\\udd39\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n large_orange_diamond: {\n keywords: [ \"shape\", \"jewel\", \"gem\" ],\n char: \"\\ud83d\\udd36\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n large_blue_diamond: {\n keywords: [ \"shape\", \"jewel\", \"gem\" ],\n char: \"\\ud83d\\udd37\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n small_red_triangle: {\n keywords: [ \"shape\", \"direction\", \"up\", \"top\" ],\n char: \"\\ud83d\\udd3a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_small_square: {\n keywords: [ \"shape\", \"icon\" ],\n char: \"\\u25aa\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_small_square: {\n keywords: [ \"shape\", \"icon\" ],\n char: \"\\u25ab\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_large_square: {\n keywords: [ \"shape\", \"icon\", \"button\" ],\n char: \"\\u2b1b\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_large_square: {\n keywords: [ \"shape\", \"icon\", \"stone\", \"button\" ],\n char: \"\\u2b1c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n small_red_triangle_down: {\n keywords: [ \"shape\", \"direction\", \"bottom\" ],\n char: \"\\ud83d\\udd3b\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_medium_square: {\n keywords: [ \"shape\", \"button\", \"icon\" ],\n char: \"\\u25fc\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_medium_square: {\n keywords: [ \"shape\", \"stone\", \"icon\" ],\n char: \"\\u25fb\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_medium_small_square: {\n keywords: [ \"icon\", \"shape\", \"button\" ],\n char: \"\\u25fe\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_medium_small_square: {\n keywords: [ \"shape\", \"stone\", \"icon\", \"button\" ],\n char: \"\\u25fd\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_square_button: {\n keywords: [ \"shape\", \"input\", \"frame\" ],\n char: \"\\ud83d\\udd32\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n white_square_button: {\n keywords: [ \"shape\", \"input\" ],\n char: \"\\ud83d\\udd33\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n speaker: {\n keywords: [ \"sound\", \"volume\", \"silence\", \"broadcast\" ],\n char: \"\\ud83d\\udd08\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n sound: {\n keywords: [ \"volume\", \"speaker\", \"broadcast\" ],\n char: \"\\ud83d\\udd09\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n loud_sound: {\n keywords: [ \"volume\", \"noise\", \"noisy\", \"speaker\", \"broadcast\" ],\n char: \"\\ud83d\\udd0a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n mute: {\n keywords: [ \"sound\", \"volume\", \"silence\", \"quiet\" ],\n char: \"\\ud83d\\udd07\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n mega: {\n keywords: [ \"sound\", \"speaker\", \"volume\" ],\n char: \"\\ud83d\\udce3\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n loudspeaker: {\n keywords: [ \"volume\", \"sound\" ],\n char: \"\\ud83d\\udce2\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n bell: {\n keywords: [ \"sound\", \"notification\", \"christmas\", \"xmas\", \"chime\" ],\n char: \"\\ud83d\\udd14\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n no_bell: {\n keywords: [ \"sound\", \"volume\", \"mute\", \"quiet\", \"silent\" ],\n char: \"\\ud83d\\udd15\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n black_joker: {\n keywords: [ \"poker\", \"cards\", \"game\", \"play\", \"magic\" ],\n char: \"\\ud83c\\udccf\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n mahjong: {\n keywords: [ \"game\", \"play\", \"chinese\", \"kanji\" ],\n char: \"\\ud83c\\udc04\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n spades: {\n keywords: [ \"poker\", \"cards\", \"suits\", \"magic\" ],\n char: \"\\u2660\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clubs: {\n keywords: [ \"poker\", \"cards\", \"magic\", \"suits\" ],\n char: \"\\u2663\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n hearts: {\n keywords: [ \"poker\", \"cards\", \"magic\", \"suits\" ],\n char: \"\\u2665\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n diamonds: {\n keywords: [ \"poker\", \"cards\", \"magic\", \"suits\" ],\n char: \"\\u2666\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n flower_playing_cards: {\n keywords: [ \"game\", \"sunset\", \"red\" ],\n char: \"\\ud83c\\udfb4\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n thought_balloon: {\n keywords: [ \"bubble\", \"cloud\", \"speech\", \"thinking\", \"dream\" ],\n char: \"\\ud83d\\udcad\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n right_anger_bubble: {\n keywords: [ \"caption\", \"speech\", \"thinking\", \"mad\" ],\n char: \"\\ud83d\\uddef\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n speech_balloon: {\n keywords: [ \"bubble\", \"words\", \"message\", \"talk\", \"chatting\" ],\n char: \"\\ud83d\\udcac\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n left_speech_bubble: {\n keywords: [ \"words\", \"message\", \"talk\", \"chatting\" ],\n char: \"\\ud83d\\udde8\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock1: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd50\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock2: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd51\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock3: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd52\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock4: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd53\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock5: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd54\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock6: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\", \"dawn\", \"dusk\" ],\n char: \"\\ud83d\\udd55\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock7: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd56\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock8: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd57\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock9: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd58\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock10: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd59\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock11: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd5a\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock12: {\n keywords: [ \"time\", \"noon\", \"midnight\", \"midday\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd5b\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock130: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd5c\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock230: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd5d\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock330: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd5e\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock430: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd5f\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock530: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd60\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock630: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd61\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock730: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd62\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock830: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd63\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock930: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd64\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock1030: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd65\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock1130: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd66\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n clock1230: {\n keywords: [ \"time\", \"late\", \"early\", \"schedule\" ],\n char: \"\\ud83d\\udd67\",\n fitzpatrick_scale: false,\n category: \"symbols\"\n },\n afghanistan: {\n keywords: [ \"af\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n aland_islands: {\n keywords: [ \"\\xc5land\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddfd\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n albania: {\n keywords: [ \"al\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n algeria: {\n keywords: [ \"dz\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde9\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n american_samoa: {\n keywords: [ \"american\", \"ws\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n andorra: {\n keywords: [ \"ad\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n angola: {\n keywords: [ \"ao\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n anguilla: {\n keywords: [ \"ai\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n antarctica: {\n keywords: [ \"aq\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddf6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n antigua_barbuda: {\n keywords: [ \"antigua\", \"barbuda\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n argentina: {\n keywords: [ \"ar\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n armenia: {\n keywords: [ \"am\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n aruba: {\n keywords: [ \"aw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n australia: {\n keywords: [ \"au\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n austria: {\n keywords: [ \"at\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n azerbaijan: {\n keywords: [ \"az\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bahamas: {\n keywords: [ \"bs\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bahrain: {\n keywords: [ \"bh\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bangladesh: {\n keywords: [ \"bd\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n barbados: {\n keywords: [ \"bb\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\udde7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n belarus: {\n keywords: [ \"by\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n belgium: {\n keywords: [ \"be\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n belize: {\n keywords: [ \"bz\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n benin: {\n keywords: [ \"bj\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddef\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bermuda: {\n keywords: [ \"bm\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bhutan: {\n keywords: [ \"bt\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bolivia: {\n keywords: [ \"bo\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n caribbean_netherlands: {\n keywords: [ \"bonaire\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bosnia_herzegovina: {\n keywords: [ \"bosnia\", \"herzegovina\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n botswana: {\n keywords: [ \"bw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n brazil: {\n keywords: [ \"br\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n british_indian_ocean_territory: {\n keywords: [ \"british\", \"indian\", \"ocean\", \"territory\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n british_virgin_islands: {\n keywords: [ \"british\", \"virgin\", \"islands\", \"bvi\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfb\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n brunei: {\n keywords: [ \"bn\", \"darussalam\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n bulgaria: {\n keywords: [ \"bg\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n burkina_faso: {\n keywords: [ \"burkina\", \"faso\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n burundi: {\n keywords: [ \"bi\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cape_verde: {\n keywords: [ \"cabo\", \"verde\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddfb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cambodia: {\n keywords: [ \"kh\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cameroon: {\n keywords: [ \"cm\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n canada: {\n keywords: [ \"ca\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n canary_islands: {\n keywords: [ \"canary\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cayman_islands: {\n keywords: [ \"cayman\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n central_african_republic: {\n keywords: [ \"central\", \"african\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n chad: {\n keywords: [ \"td\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n chile: {\n keywords: [ \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cn: {\n keywords: [ \"china\", \"chinese\", \"prc\", \"flag\", \"country\", \"nation\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n christmas_island: {\n keywords: [ \"christmas\", \"island\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddfd\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cocos_islands: {\n keywords: [ \"cocos\", \"keeling\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n colombia: {\n keywords: [ \"co\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n comoros: {\n keywords: [ \"km\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n congo_brazzaville: {\n keywords: [ \"congo\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n congo_kinshasa: {\n keywords: [ \"congo\", \"democratic\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cook_islands: {\n keywords: [ \"cook\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n costa_rica: {\n keywords: [ \"costa\", \"rica\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n croatia: {\n keywords: [ \"hr\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udded\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cuba: {\n keywords: [ \"cu\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n curacao: {\n keywords: [ \"cura\\xe7ao\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cyprus: {\n keywords: [ \"cy\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n czech_republic: {\n keywords: [ \"cz\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n denmark: {\n keywords: [ \"dk\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde9\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n djibouti: {\n keywords: [ \"dj\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde9\\ud83c\\uddef\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n dominica: {\n keywords: [ \"dm\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde9\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n dominican_republic: {\n keywords: [ \"dominican\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde9\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n ecuador: {\n keywords: [ \"ec\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n egypt: {\n keywords: [ \"eg\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n el_salvador: {\n keywords: [ \"el\", \"salvador\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddfb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n equatorial_guinea: {\n keywords: [ \"equatorial\", \"gn\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n eritrea: {\n keywords: [ \"er\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n estonia: {\n keywords: [ \"ee\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n ethiopia: {\n keywords: [ \"et\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n eu: {\n keywords: [ \"european\", \"union\", \"flag\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n falkland_islands: {\n keywords: [ \"falkland\", \"islands\", \"malvinas\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddeb\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n faroe_islands: {\n keywords: [ \"faroe\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddeb\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n fiji: {\n keywords: [ \"fj\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddeb\\ud83c\\uddef\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n finland: {\n keywords: [ \"fi\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddeb\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n fr: {\n keywords: [ \"banner\", \"flag\", \"nation\", \"france\", \"french\", \"country\" ],\n char: \"\\ud83c\\uddeb\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n french_guiana: {\n keywords: [ \"french\", \"guiana\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n french_polynesia: {\n keywords: [ \"french\", \"polynesia\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n french_southern_territories: {\n keywords: [ \"french\", \"southern\", \"territories\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n gabon: {\n keywords: [ \"ga\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n gambia: {\n keywords: [ \"gm\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n georgia: {\n keywords: [ \"ge\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n de: {\n keywords: [ \"german\", \"nation\", \"flag\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde9\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n ghana: {\n keywords: [ \"gh\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n gibraltar: {\n keywords: [ \"gi\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n greece: {\n keywords: [ \"gr\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n greenland: {\n keywords: [ \"gl\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n grenada: {\n keywords: [ \"gd\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n guadeloupe: {\n keywords: [ \"gp\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf5\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n guam: {\n keywords: [ \"gu\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n guatemala: {\n keywords: [ \"gt\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n guernsey: {\n keywords: [ \"gg\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n guinea: {\n keywords: [ \"gn\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n guinea_bissau: {\n keywords: [ \"gw\", \"bissau\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n guyana: {\n keywords: [ \"gy\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n haiti: {\n keywords: [ \"ht\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udded\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n honduras: {\n keywords: [ \"hn\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udded\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n hong_kong: {\n keywords: [ \"hong\", \"kong\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udded\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n hungary: {\n keywords: [ \"hu\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udded\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n iceland: {\n keywords: [ \"is\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n india: {\n keywords: [ \"in\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n indonesia: {\n keywords: [ \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n iran: {\n keywords: [ \"iran,\", \"islamic\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n iraq: {\n keywords: [ \"iq\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n ireland: {\n keywords: [ \"ie\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n isle_of_man: {\n keywords: [ \"isle\", \"man\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n israel: {\n keywords: [ \"il\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n it: {\n keywords: [ \"italy\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddee\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n cote_divoire: {\n keywords: [ \"ivory\", \"coast\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n jamaica: {\n keywords: [ \"jm\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddef\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n jp: {\n keywords: [ \"japanese\", \"nation\", \"flag\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddef\\ud83c\\uddf5\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n jersey: {\n keywords: [ \"je\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddef\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n jordan: {\n keywords: [ \"jo\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddef\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n kazakhstan: {\n keywords: [ \"kz\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n kenya: {\n keywords: [ \"ke\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n kiribati: {\n keywords: [ \"ki\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n kosovo: {\n keywords: [ \"xk\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfd\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n kuwait: {\n keywords: [ \"kw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n kyrgyzstan: {\n keywords: [ \"kg\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n laos: {\n keywords: [ \"lao\", \"democratic\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n latvia: {\n keywords: [ \"lv\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddfb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n lebanon: {\n keywords: [ \"lb\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\udde7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n lesotho: {\n keywords: [ \"ls\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n liberia: {\n keywords: [ \"lr\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n libya: {\n keywords: [ \"ly\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n liechtenstein: {\n keywords: [ \"li\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n lithuania: {\n keywords: [ \"lt\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n luxembourg: {\n keywords: [ \"lu\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n macau: {\n keywords: [ \"macao\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n macedonia: {\n keywords: [ \"macedonia,\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n madagascar: {\n keywords: [ \"mg\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n malawi: {\n keywords: [ \"mw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n malaysia: {\n keywords: [ \"my\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n maldives: {\n keywords: [ \"mv\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddfb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n mali: {\n keywords: [ \"ml\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n malta: {\n keywords: [ \"mt\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n marshall_islands: {\n keywords: [ \"marshall\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n martinique: {\n keywords: [ \"mq\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n mauritania: {\n keywords: [ \"mr\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n mauritius: {\n keywords: [ \"mu\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n mayotte: {\n keywords: [ \"yt\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfe\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n mexico: {\n keywords: [ \"mx\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddfd\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n micronesia: {\n keywords: [ \"micronesia,\", \"federated\", \"states\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddeb\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n moldova: {\n keywords: [ \"moldova,\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n monaco: {\n keywords: [ \"mc\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n mongolia: {\n keywords: [ \"mn\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n montenegro: {\n keywords: [ \"me\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n montserrat: {\n keywords: [ \"ms\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n morocco: {\n keywords: [ \"ma\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n mozambique: {\n keywords: [ \"mz\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n myanmar: {\n keywords: [ \"mm\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n namibia: {\n keywords: [ \"na\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n nauru: {\n keywords: [ \"nr\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n nepal: {\n keywords: [ \"np\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddf5\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n netherlands: {\n keywords: [ \"nl\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n new_caledonia: {\n keywords: [ \"new\", \"caledonia\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n new_zealand: {\n keywords: [ \"new\", \"zealand\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n nicaragua: {\n keywords: [ \"ni\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n niger: {\n keywords: [ \"ne\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n nigeria: {\n keywords: [ \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n niue: {\n keywords: [ \"nu\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n norfolk_island: {\n keywords: [ \"norfolk\", \"island\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n northern_mariana_islands: {\n keywords: [ \"northern\", \"mariana\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf2\\ud83c\\uddf5\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n north_korea: {\n keywords: [ \"north\", \"korea\", \"nation\", \"flag\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddf5\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n norway: {\n keywords: [ \"no\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf3\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n oman: {\n keywords: [ \"om_symbol\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf4\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n pakistan: {\n keywords: [ \"pk\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n palau: {\n keywords: [ \"pw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n palestinian_territories: {\n keywords: [ \"palestine\", \"palestinian\", \"territories\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n panama: {\n keywords: [ \"pa\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n papua_new_guinea: {\n keywords: [ \"papua\", \"new\", \"guinea\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n paraguay: {\n keywords: [ \"py\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n peru: {\n keywords: [ \"pe\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n philippines: {\n keywords: [ \"ph\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n pitcairn_islands: {\n keywords: [ \"pitcairn\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n poland: {\n keywords: [ \"pl\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n portugal: {\n keywords: [ \"pt\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n puerto_rico: {\n keywords: [ \"puerto\", \"rico\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n qatar: {\n keywords: [ \"qa\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf6\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n reunion: {\n keywords: [ \"r\\xe9union\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf7\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n romania: {\n keywords: [ \"ro\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf7\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n ru: {\n keywords: [ \"russian\", \"federation\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf7\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n rwanda: {\n keywords: [ \"rw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf7\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n st_barthelemy: {\n keywords: [ \"saint\", \"barth\\xe9lemy\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde7\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n st_helena: {\n keywords: [ \"saint\", \"helena\", \"ascension\", \"tristan\", \"cunha\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n st_kitts_nevis: {\n keywords: [ \"saint\", \"kitts\", \"nevis\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n st_lucia: {\n keywords: [ \"saint\", \"lucia\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n st_pierre_miquelon: {\n keywords: [ \"saint\", \"pierre\", \"miquelon\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf5\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n st_vincent_grenadines: {\n keywords: [ \"saint\", \"vincent\", \"grenadines\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfb\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n samoa: {\n keywords: [ \"ws\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfc\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n san_marino: {\n keywords: [ \"san\", \"marino\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n sao_tome_principe: {\n keywords: [ \"sao\", \"tome\", \"principe\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n saudi_arabia: {\n keywords: [ \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n senegal: {\n keywords: [ \"sn\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n serbia: {\n keywords: [ \"rs\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf7\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n seychelles: {\n keywords: [ \"sc\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n sierra_leone: {\n keywords: [ \"sierra\", \"leone\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n singapore: {\n keywords: [ \"sg\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n sint_maarten: {\n keywords: [ \"sint\", \"maarten\", \"dutch\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddfd\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n slovakia: {\n keywords: [ \"sk\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n slovenia: {\n keywords: [ \"si\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n solomon_islands: {\n keywords: [ \"solomon\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\udde7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n somalia: {\n keywords: [ \"so\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n south_africa: {\n keywords: [ \"south\", \"africa\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddff\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n south_georgia_south_sandwich_islands: {\n keywords: [ \"south\", \"georgia\", \"sandwich\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddec\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n kr: {\n keywords: [ \"south\", \"korea\", \"nation\", \"flag\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf0\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n south_sudan: {\n keywords: [ \"south\", \"sd\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n es: {\n keywords: [ \"spain\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n sri_lanka: {\n keywords: [ \"sri\", \"lanka\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf1\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n sudan: {\n keywords: [ \"sd\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\udde9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n suriname: {\n keywords: [ \"sr\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n swaziland: {\n keywords: [ \"sz\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n sweden: {\n keywords: [ \"se\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n switzerland: {\n keywords: [ \"ch\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde8\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n syria: {\n keywords: [ \"syrian\", \"arab\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf8\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n taiwan: {\n keywords: [ \"tw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n tajikistan: {\n keywords: [ \"tj\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddef\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n tanzania: {\n keywords: [ \"tanzania,\", \"united\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n thailand: {\n keywords: [ \"th\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n timor_leste: {\n keywords: [ \"timor\", \"leste\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddf1\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n togo: {\n keywords: [ \"tg\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n tokelau: {\n keywords: [ \"tk\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddf0\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n tonga: {\n keywords: [ \"to\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddf4\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n trinidad_tobago: {\n keywords: [ \"trinidad\", \"tobago\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddf9\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n tunisia: {\n keywords: [ \"tn\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n tr: {\n keywords: [ \"turkey\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddf7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n turkmenistan: {\n keywords: [ \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n turks_caicos_islands: {\n keywords: [ \"turks\", \"caicos\", \"islands\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\udde8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n tuvalu: {\n keywords: [ \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddf9\\ud83c\\uddfb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n uganda: {\n keywords: [ \"ug\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfa\\ud83c\\uddec\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n ukraine: {\n keywords: [ \"ua\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfa\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n united_arab_emirates: {\n keywords: [ \"united\", \"arab\", \"emirates\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\udde6\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n uk: {\n keywords: [ \"united\", \"kingdom\", \"great\", \"britain\", \"northern\", \"ireland\", \"flag\", \"nation\", \"country\", \"banner\", \"british\", \"UK\", \"english\", \"england\", \"union jack\" ],\n char: \"\\ud83c\\uddec\\ud83c\\udde7\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n england: {\n keywords: [ \"flag\", \"english\" ],\n char: \"\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n scotland: {\n keywords: [ \"flag\", \"scottish\" ],\n char: \"\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n wales: {\n keywords: [ \"flag\", \"welsh\" ],\n char: \"\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n us: {\n keywords: [ \"united\", \"states\", \"america\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfa\\ud83c\\uddf8\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n us_virgin_islands: {\n keywords: [ \"virgin\", \"islands\", \"us\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfb\\ud83c\\uddee\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n uruguay: {\n keywords: [ \"uy\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfa\\ud83c\\uddfe\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n uzbekistan: {\n keywords: [ \"uz\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfa\\ud83c\\uddff\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n vanuatu: {\n keywords: [ \"vu\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfb\\ud83c\\uddfa\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n vatican_city: {\n keywords: [ \"vatican\", \"city\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfb\\ud83c\\udde6\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n venezuela: {\n keywords: [ \"ve\", \"bolivarian\", \"republic\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfb\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n vietnam: {\n keywords: [ \"viet\", \"nam\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfb\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n wallis_futuna: {\n keywords: [ \"wallis\", \"futuna\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfc\\ud83c\\uddeb\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n western_sahara: {\n keywords: [ \"western\", \"sahara\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddea\\ud83c\\udded\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n yemen: {\n keywords: [ \"ye\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddfe\\ud83c\\uddea\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n zambia: {\n keywords: [ \"zm\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddff\\ud83c\\uddf2\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n zimbabwe: {\n keywords: [ \"zw\", \"flag\", \"nation\", \"country\", \"banner\" ],\n char: \"\\ud83c\\uddff\\ud83c\\uddfc\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n united_nations: {\n keywords: [ \"un\", \"flag\", \"banner\" ],\n char: \"\\ud83c\\uddfa\\ud83c\\uddf3\",\n fitzpatrick_scale: false,\n category: \"flags\"\n },\n pirate_flag: {\n keywords: [ \"skull\", \"crossbones\", \"flag\", \"banner\" ],\n char: \"\\ud83c\\udff4\\u200d\\u2620\\ufe0f\",\n fitzpatrick_scale: false,\n category: \"flags\"\n }\n});","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","// Exports the \"emoticons\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/emoticons')\n// ES2015:\n// import 'tinymce/plugins/emoticons'\nrequire('./plugin.js');","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var applyListFormat = function (editor, listName, styleValue) {\n var cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n\n var register$1 = function (editor) {\n editor.addCommand('ApplyUnorderedListStyle', function (ui, value) {\n applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', function (ui, value) {\n applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getNumberStyles = function (editor) {\n var styles = editor.getParam('advlist_number_styles', 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var getBulletStyles = function (editor) {\n var styles = editor.getParam('advlist_bullet_styles', 'default,circle,square');\n return styles ? styles.split(/[ ,]/) : [];\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\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 call = function (thunk) {\n return thunk();\n };\n var id = identity;\n var me = {\n fold: function (n, _s) {\n return n();\n },\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: function () {\n return none();\n },\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 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 };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var isChildOfBody = function (editor, elm) {\n return editor.$.contains(editor.getBody(), elm);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isListNode = function (editor) {\n return function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName) && isChildOfBody(editor, node);\n };\n };\n var getSelectedStyleType = function (editor) {\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n var style = editor.dom.getStyle(listElm, 'listStyleType');\n return Optional.from(style);\n };\n\n var findIndex = function (list, predicate) {\n for (var index = 0; index < list.length; index++) {\n var element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n var styleValueToText = function (styleValue) {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, function (chr) {\n return chr.toUpperCase();\n });\n };\n var isWithinList = function (editor, e, nodeName) {\n var tableCellIndex = findIndex(e.parents, isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global.grep(parents, isListNode(editor));\n return lists.length > 0 && lists[0].nodeName === nodeName;\n };\n var makeSetupHandler = function (editor, nodeName) {\n return function (api) {\n var nodeChangeHandler = function (e) {\n api.setActive(isWithinList(editor, e, nodeName));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n };\n var addSplitButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.ui.registry.addSplitButton(id, {\n tooltip: tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n presets: 'listpreview',\n columns: 3,\n fetch: function (callback) {\n var items = global.map(styles, function (styleValue) {\n var iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n var iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n var itemValue = styleValue === 'default' ? '' : styleValue;\n var displayText = styleValueToText(styleValue);\n return {\n type: 'choiceitem',\n value: itemValue,\n icon: 'list-' + iconStyle + '-' + iconName,\n text: displayText\n };\n });\n callback(items);\n },\n onAction: function () {\n return editor.execCommand(cmd);\n },\n onItemAction: function (_splitButtonApi, value) {\n applyListFormat(editor, nodeName, value);\n },\n select: function (value) {\n var listStyleType = getSelectedStyleType(editor);\n return listStyleType.map(function (listStyle) {\n return value === listStyle;\n }).getOr(false);\n },\n onSetup: makeSetupHandler(editor, nodeName)\n });\n };\n var addButton = function (editor, id, tooltip, cmd, nodeName, _styles) {\n editor.ui.registry.addToggleButton(id, {\n active: false,\n tooltip: tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n onSetup: makeSetupHandler(editor, nodeName),\n onAction: function () {\n return editor.execCommand(cmd);\n }\n });\n };\n var addControl = function (editor, id, tooltip, cmd, nodeName, styles) {\n if (styles.length > 1) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName);\n }\n };\n var register = function (editor) {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor));\n };\n\n function Plugin () {\n global$1.add('advlist', function (editor) {\n if (editor.hasPlugin('lists')) {\n register(editor);\n register$1(editor);\n } else {\n console.error('Please use the Lists plugin together with the Advanced List plugin.');\n }\n });\n }\n\n Plugin();\n\n}());\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"modalContent\",staticClass:\"modal fade\",attrs:{\"tabindex\":\"-1\",\"role\":\"dialog\",\"data-backdrop\":\"static\",\"aria-hidden\":\"true\",\"data-keyboard\":\"false\"}},[_c('div',{staticClass:\"modal-dialog\",class:[\n 'modal-dialog',\n _vm.sizeClass\n ],attrs:{\"role\":\"document\"}},[_c('div',{staticClass:\"modal-content\"},[_c('div',{staticClass:\"modal-header\"},[_c('h5',{staticClass:\"modal-title\"},[_vm._v(_vm._s(_vm.title))]),(_vm.hasCloseButton)?_c('button',{staticClass:\"close\",attrs:{\"type\":\"button\",\"aria-label\":\"Close\"},on:{\"click\":_vm.hide}},[_c('span',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"×\")])]):_vm._e()]),_c('div',{staticClass:\"modal-body\"},[_vm._t(\"content\")],2),_c('div',{staticClass:\"modal-footer\"},[_vm._t(\"footer\")],2)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.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!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=dfd924ce&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType$1 = 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$2 = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType$1('string');\n var isObject = isType$1('object');\n var isArray = isType$1('array');\n var isNull = eq$2(null);\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq$2(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var tripleEquals = function (a, b) {\n return a === b;\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$2 = function () {\n return NONE;\n };\n var NONE = function () {\n var call = function (thunk) {\n return thunk();\n };\n var id = identity;\n var me = {\n fold: function (n, _s) {\n return n();\n },\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$2,\n each: noop,\n bind: none$2,\n exists: never,\n forall: always,\n filter: function () {\n return none$2();\n },\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 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 };\n return me;\n };\n var from$1 = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none$2,\n from: from$1\n };\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains$2 = 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$1 = 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$1 = 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$2 = 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$2 = 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, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each$2(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n var find$1 = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten$1 = 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$2 = function (xs, f) {\n return flatten$1(map$1(xs, f));\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var pure = function (x) {\n return [x];\n };\n var sort$1 = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get$d = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get$d(xs, 0);\n };\n var last$2 = function (xs) {\n return get$d(xs, xs.length - 1);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2)\n for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar)\n ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find = 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$2(group(1), group(2));\n };\n var detect$6 = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n var unknown$2 = function () {\n return nu$2(0, 0);\n };\n var nu$2 = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$2,\n detect: detect$6,\n unknown: unknown$2\n };\n\n var detectBrowser$1 = function (browsers, userAgentData) {\n return findMap(userAgentData.brands, function (uaBrand) {\n var lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, function (browser) {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(function (info) {\n return {\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n };\n });\n });\n };\n\n var detect$5 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find$1(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$5(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$5(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\n var removeFromStart = function (str, numChars) {\n return str.substring(numChars);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var removeLeading = function (str, prefix) {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var 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 var isEmpty$1 = function (s) {\n return !isNotEmpty(s);\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$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 brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown = function () {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu = 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,\n nu: nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$4 = function (userAgent, userAgentDataOpt, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = userAgentDataOpt.bind(function (userAgentData) {\n return detectBrowser$1(browsers, userAgentData);\n }).orThunk(function () {\n return detectBrowser(browsers, userAgent);\n }).fold(Browser.unknown, Browser.nu);\n var os = 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$4 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);\n });\n var detect$3 = function () {\n return platform();\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var COMMENT = 8;\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom$1(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom$1(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n var fromDom$1 = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint$1 = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n };\n var SugarElement = {\n fromHtml: fromHtml$1,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom$1,\n fromPoint: fromPoint$1\n };\n\n var is$2 = 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$1 = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq$1 = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom;\n var d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom, e2.dom);\n };\n var contains = function (e1, e2) {\n return detect$3().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n var is$1 = is$2;\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 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each$1(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var values = function (obj) {\n return mapToArray(obj, identity);\n };\n var size = function (obj) {\n return keys(obj).length;\n };\n var get$c = function (obj, key) {\n return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has$1 = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n var isEmpty = function (r) {\n for (var x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n var validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n var isValidSection = function (parentName) {\n return contains$2(validSectionList, parentName);\n };\n var grid = function (rows, columns) {\n return {\n rows: rows,\n columns: columns\n };\n };\n var address = function (row, column) {\n return {\n row: row,\n column: column\n };\n };\n var detail = function (element, rowspan, colspan) {\n return {\n element: element,\n rowspan: rowspan,\n colspan: colspan\n };\n };\n var detailnew = function (element, rowspan, colspan, isNew) {\n return {\n element: element,\n rowspan: rowspan,\n colspan: colspan,\n isNew: isNew\n };\n };\n var extended = function (element, rowspan, colspan, row, column, isLocked) {\n return {\n element: element,\n rowspan: rowspan,\n colspan: colspan,\n row: row,\n column: column,\n isLocked: isLocked\n };\n };\n var rowdetail = function (element, cells, section) {\n return {\n element: element,\n cells: cells,\n section: section\n };\n };\n var rowdetailnew = function (element, cells, section, isNew) {\n return {\n element: element,\n cells: cells,\n section: section,\n isNew: isNew\n };\n };\n var elementnew = function (element, isNew, isLocked) {\n return {\n element: element,\n isNew: isNew,\n isLocked: isLocked\n };\n };\n var rowcells = function (element, cells, section, isNew) {\n return {\n element: element,\n cells: cells,\n section: section,\n isNew: isNew\n };\n };\n var bounds = function (startRow, startCol, finishRow, finishCol) {\n return {\n startRow: startRow,\n startCol: startCol,\n finishRow: finishRow,\n finishCol: finishCol\n };\n };\n var columnext = function (element, colspan, column) {\n return {\n element: element,\n colspan: colspan,\n column: column\n };\n };\n var colgroup = function (element, columns) {\n return {\n element: element,\n columns: columns\n };\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type$1 = function (element) {\n return element.dom.nodeType;\n };\n var isType = function (t) {\n return function (element) {\n return type$1(element) === t;\n };\n };\n var isComment = function (element) {\n return type$1(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType(ELEMENT);\n var isText = isType(TEXT);\n var isDocument = isType(DOCUMENT);\n var isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n var isTag = function (tag) {\n return function (e) {\n return isElement(e) && name(e) === tag;\n };\n };\n\n var owner = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner(dos);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom;\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var offsetParent = function (element) {\n return Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n };\n var prevSibling = function (element) {\n return Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var children$3 = function (element) {\n return map$1(element.dom.childNodes, SugarElement.fromDom);\n };\n var child$3 = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child$3(element, 0);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported$1 = constant(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported$1() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var body$1 = function () {\n return getBody$1(SugarElement.fromDom(document));\n };\n var getBody$1 = function (doc) {\n var b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n var ancestors$4 = function (scope, predicate, isRoot) {\n return filter$2(parents(scope, isRoot), predicate);\n };\n var children$2 = function (scope, predicate) {\n return filter$2(children$3(scope), predicate);\n };\n var descendants$1 = function (scope, predicate) {\n var result = [];\n each$2(children$3(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n var ancestors$3 = function (scope, selector, isRoot) {\n return ancestors$4(scope, function (e) {\n return is$2(e, selector);\n }, isRoot);\n };\n var children$1 = function (scope, selector) {\n return children$2(scope, function (e) {\n return is$2(e, selector);\n });\n };\n var descendants = function (scope, selector) {\n return all$1(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n }\n\n var ancestor$2 = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n var closest$2 = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n };\n var child$2 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(SugarElement.fromDom(node));\n };\n var result = find$1(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n var descendant$1 = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Optional.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor$2(scope, function (e) {\n return is$2(e, selector);\n }, isRoot);\n };\n var child$1 = function (scope, selector) {\n return child$2(scope, function (e) {\n return is$2(e, selector);\n });\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$2(element, selector);\n };\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set$2 = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll$1 = 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$b = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$b(element, key));\n };\n var remove$7 = function (element, key) {\n element.dom.removeAttribute(key);\n };\n var clone$2 = 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 is = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lhs.exists(function (left) {\n return comparator(left, rhs);\n });\n };\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var bindFrom = function (a, f) {\n return a !== undefined && a !== null ? f(a) : Optional.none();\n };\n var flatten = function (oot) {\n return oot.bind(identity);\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var 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 = 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$a = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw$2 = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var remove$6 = function (element, property) {\n var dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$7(element, 'style');\n }\n };\n var copy$2 = 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 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$a(element, property), 10);\n };\n var minWidth = constant(10);\n var minHeight = constant(10);\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, always);\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind$2(children$3(scope), function (x) {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n var isRootOrUpperTable = function (elm) {\n return is$2(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$1 = function (ancestor) {\n return firstLayer(ancestor, 'th,td');\n };\n var columns$1 = function (ancestor) {\n if (is$2(ancestor, 'colgroup')) {\n return children$1(ancestor, 'col');\n } else {\n return bind$2(columnGroups(ancestor), function (columnGroup) {\n return children$1(columnGroup, 'col');\n });\n }\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var rows$1 = function (ancestor) {\n return firstLayer(ancestor, 'tr');\n };\n var columnGroups = function (ancestor) {\n return table(ancestor).fold(constant([]), function (table) {\n return children$1(table, 'colgroup');\n });\n };\n\n var fromRowsOrColGroups = function (elems, getSection) {\n return map$1(elems, function (row) {\n if (name(row) === 'colgroup') {\n var cells = map$1(columns$1(row), function (column) {\n var colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n var cells = map$1(cells$1(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 rowdetail(row, cells, getSection(row));\n }\n });\n };\n var getParentSection = function (group) {\n return parent(group).map(function (parent) {\n var parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n };\n var fromTable$1 = function (table) {\n var rows = rows$1(table);\n var columnGroups$1 = columnGroups(table);\n var elems = __spreadArray(__spreadArray([], columnGroups$1), rows);\n return fromRowsOrColGroups(elems, getParentSection);\n };\n var fromPastedRows = function (elems, section) {\n return fromRowsOrColGroups(elems, function () {\n return section;\n });\n };\n\n var addCells = function (gridRow, index, cells) {\n var existingCells = gridRow.cells;\n var before = existingCells.slice(0, index);\n var after = existingCells.slice(index);\n var newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n var addCell = function (gridRow, index, cell) {\n return addCells(gridRow, index, [cell]);\n };\n var mutateCell = function (gridRow, index, cell) {\n var cells = gridRow.cells;\n cells[index] = cell;\n };\n var setCells = function (gridRow, cells) {\n return rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n };\n var mapCells = function (gridRow, f) {\n var cells = gridRow.cells;\n var r = map$1(cells, f);\n return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n };\n var getCell = function (gridRow, index) {\n return gridRow.cells[index];\n };\n var getCellElement = function (gridRow, index) {\n return getCell(gridRow, index).element;\n };\n var cellLength = function (gridRow) {\n return gridRow.cells.length;\n };\n var extractGridDetails = function (grid) {\n var result = partition(grid, function (row) {\n return row.section === 'colgroup';\n });\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n var clone$1 = function (gridRow, cloneRow, cloneCell) {\n var newCells = map$1(gridRow.cells, cloneCell);\n return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n };\n\n var LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n var getLockedColumnsFromTable = function (table) {\n return getOpt(table, LOCKED_COL_ATTR).bind(function (lockedColStr) {\n return Optional.from(lockedColStr.match(/\\d+/g));\n }).map(function (lockedCols) {\n return mapToObject(lockedCols, always);\n });\n };\n var getLockedColumnsFromGrid = function (grid) {\n var locked = foldl(extractGridDetails(grid).rows, function (acc, row) {\n each$2(row.cells, function (cell, idx) {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n var lockedArr = mapToArray(locked, function (_val, key) {\n return parseInt(key, 10);\n });\n return sort$1(lockedArr);\n };\n\n var key = function (row, column) {\n return row + ',' + column;\n };\n var getAt = function (warehouse, row, column) {\n return Optional.from(warehouse.access[key(row, column)]);\n };\n var findItem = function (warehouse, item, comparator) {\n var filtered = filterItems(warehouse, function (detail) {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n var filterItems = function (warehouse, predicate) {\n var all = bind$2(warehouse.all, function (r) {\n return r.cells;\n });\n return filter$2(all, predicate);\n };\n var generateColumns = function (rowData) {\n var columnsGroup = {};\n var index = 0;\n each$2(rowData.cells, function (column) {\n var colspan = column.colspan;\n range$1(colspan, function (columnIndex) {\n var colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n var generate$1 = function (list) {\n var access = {};\n var cells = [];\n var columns = {};\n var colgroups = [];\n var tableOpt = head(list).map(function (rowData) {\n return rowData.element;\n }).bind(table);\n var lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n var maxRows = 0;\n var maxColumns = 0;\n var rowCount = 0;\n each$2(list, function (rowData) {\n if (rowData.section === 'colgroup') {\n columns = generateColumns(rowData);\n colgroups = [colgroup(rowData.element, values(columns))];\n } else {\n var currentRow_1 = [];\n each$2(rowData.cells, function (rowCell) {\n var start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n var isLocked = hasNonNullableKey(lockedColumns, start.toString());\n var current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (var occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (var occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n var rowPosition = rowCount + occupiedRowPosition;\n var columnPosition = start + occupiedColumnPosition;\n var newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow_1.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow_1, rowData.section));\n rowCount++;\n }\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access: access,\n all: cells,\n columns: columns,\n colgroups: colgroups\n };\n };\n var fromTable = function (table) {\n var list = fromTable$1(table);\n return generate$1(list);\n };\n var justCells = function (warehouse) {\n return bind$2(warehouse.all, function (w) {\n return w.cells;\n });\n };\n var justColumns = function (warehouse) {\n return values(warehouse.columns);\n };\n var hasColumns = function (warehouse) {\n return keys(warehouse.columns).length > 0;\n };\n var getColumnAt = function (warehouse, columnIndex) {\n return Optional.from(warehouse.columns[columnIndex]);\n };\n var Warehouse = {\n fromTable: fromTable,\n generate: generate$1,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells,\n justColumns: justColumns,\n hasColumns: hasColumns,\n getColumnAt: getColumnAt\n };\n\n var inSelection = function (bounds, detail) {\n var leftEdge = detail.column;\n var rightEdge = detail.column + detail.colspan - 1;\n var topEdge = detail.row;\n var bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n var isWithin = function (bounds, detail) {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n var isRectangular = function (warehouse, bounds) {\n var isRect = true;\n var detailIsWithin = curry(isWithin, bounds);\n for (var i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (var j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n var getBounds = function (detailA, detailB) {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n var getAnyBox = function (warehouse, startCell, finishCell) {\n var startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(function (sc) {\n return finishCoords.map(function (fc) {\n return getBounds(sc, fc);\n });\n });\n };\n var getBox$1 = function (warehouse, startCell, finishCell) {\n return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\n return isRectangular(warehouse, bounds);\n });\n };\n\n var moveBy$1 = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(function (detail) {\n var startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n var startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(function (d) {\n return d.element;\n });\n });\n };\n var intercepts$1 = 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$1(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(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element;\n });\n };\n\n var moveBy = function (cell, deltaRow, deltaColumn) {\n return table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return intercepts$1(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n var optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return intercepts$1(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n var getWarehouse = Warehouse.fromTable;\n\n var before$4 = 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$5 = 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$1(v, element);\n });\n }, function (v) {\n before$4(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append$1(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append$1 = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var appendAt = function (parent, element, index) {\n child$3(parent, index).fold(function () {\n append$1(parent, element);\n }, function (v) {\n before$4(v, element);\n });\n };\n var wrap = function (element, wrapper) {\n before$4(element, wrapper);\n append$1(wrapper, element);\n };\n\n var before$3 = function (marker, elements) {\n each$2(elements, function (x) {\n before$4(marker, x);\n });\n };\n var after$4 = function (marker, elements) {\n each$2(elements, function (x, i) {\n var e = i === 0 ? marker : elements[i - 1];\n after$5(e, x);\n });\n };\n var append = function (parent, elements) {\n each$2(elements, function (x) {\n append$1(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each$2(children$3(element), function (rogue) {\n remove$5(rogue);\n });\n };\n var remove$5 = 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 = children$3(wrapper);\n if (children.length > 0) {\n before$3(wrapper, children);\n }\n remove$5(wrapper);\n };\n\n var NodeValue = function (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api$2 = NodeValue(isText, 'text');\n var get$9 = function (element) {\n return api$2.get(element);\n };\n var getOption = function (element) {\n return api$2.getOption(element);\n };\n var set = function (element, value) {\n return api$2.set(element, value);\n };\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n function DomUniverse () {\n var clone = function (element) {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n var document = function (element) {\n return documentOrOwner(element).dom;\n };\n var isBoundary = function (element) {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains$2(TagBoundaries, name(element));\n };\n var isEmptyTag = function (element) {\n if (!isElement(element)) {\n return false;\n }\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n var isNonEditable = function (element) {\n return isElement(element) && get$b(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$2(source);\n setAll$1(destination, as);\n };\n var isSpecial = function (element) {\n var tag = name(element);\n return contains$2([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n var getLanguage = function (element) {\n return isElement(element) ? getOpt(element, 'lang') : Optional.none();\n };\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor$2,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$a,\n getRaw: getRaw$2,\n set: set$1,\n remove: remove$6\n }),\n attrs: constant({\n get: get$b,\n set: set$2,\n remove: remove$7,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before$4,\n after: after$5,\n afterAll: after$4,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$5\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone: clone,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition: comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$3,\n name: name,\n parent: parent,\n document: document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial: isSpecial,\n getLanguage: getLanguage,\n getText: get$9,\n setText: set,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag,\n isNonEditable: isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n }\n\n var all = 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(universe, look, elements, unsafeOne) : Optional.none();\n };\n var unsafeOne = function (universe, look, head, tail) {\n var start = look(universe, head);\n return foldr(tail, function (b, a) {\n var current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n var commonElement = function (universe, start, end) {\n return start.bind(function (s) {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n var eq = 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$1(pruned1, function (x) {\n return exists(pruned2, eq(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared: shared\n };\n };\n\n var sharedOne$1 = oneAll;\n var ancestors$1 = ancestors$2;\n\n var universe$3 = DomUniverse();\n var sharedOne = function (look, elements) {\n return sharedOne$1(universe$3, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var ancestors = function (start, finish, isRoot) {\n return ancestors$1(universe$3, start, finish, isRoot);\n };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (element) {\n return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n };\n };\n if (eq$1(start, finish)) {\n return Optional.some({\n boxes: Optional.some([start]),\n start: start,\n finish: finish\n });\n } else {\n return lookupTable(start).bind(function (startTable) {\n return lookupTable(finish).bind(function (finishTable) {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts(startTable, start, finish),\n start: start,\n finish: finish\n });\n } else if (contains(startTable, finishTable)) {\n var ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n });\n } else if (contains(finishTable, startTable)) {\n var ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n });\n } else {\n return ancestors(start, finish).shared.bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n var retrieve$1 = function (container, selector) {\n var sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n var getLast = function (boxes, lastSelectedSelector) {\n return find$1(boxes, function (box) {\n return is$2(box, lastSelectedSelector);\n });\n };\n var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\n return descendant(container, firstSelectedSelector).bind(function (first) {\n return descendant(container, lastSelectedSelector).bind(function (last) {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(function (table) {\n return {\n first: first,\n last: last,\n table: table\n };\n });\n });\n });\n };\n var expandTo = function (finish, firstSelectedSelector) {\n return ancestor$1(finish, 'table').bind(function (table) {\n return descendant(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(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n var retrieve = function (container, selector) {\n return retrieve$1(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq$1(container, ancestor);\n };\n var sectionSelector = 'thead,tfoot,tbody,table';\n var firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n var lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\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$2(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate };\n\n var type = Adt.generate([\n { none: [] },\n { multiple: ['elements'] },\n { single: ['element'] }\n ]);\n var cata$2 = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var none$1 = type.none;\n var multiple = type.multiple;\n var single = type.single;\n\n var Selections = function (lazyRoot, getStart, selectedSelector) {\n var get = function () {\n return retrieve(lazyRoot(), selectedSelector).fold(function () {\n return getStart().fold(none$1, single);\n }, function (cells) {\n return multiple(cells);\n });\n };\n return { get: get };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var clone = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone(original, false);\n };\n var deep = function (original) {\n return clone(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = SugarElement.fromTag(tag);\n var attributes = clone$2(original);\n setAll$1(nu, attributes);\n return nu;\n };\n var copy$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n var cloneChildren = children$3(deep(original));\n append(nu, cloneChildren);\n return nu;\n };\n var mutate$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n before$4(original, nu);\n var children = children$3(original);\n append(nu, children);\n remove$5(original);\n return nu;\n };\n\n var Dimension = function (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom;\n if (isSupported(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$a(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$a(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n };\n\n var api$1 = Dimension('width', function (element) {\n return element.dom.offsetWidth;\n });\n var get$8 = function (element) {\n return api$1.get(element);\n };\n var getOuter$2 = function (element) {\n return api$1.getOuter(element);\n };\n\n var columns = function (warehouse, isValidCell) {\n if (isValidCell === void 0) {\n isValidCell = always;\n }\n var grid = warehouse.grid;\n var cols = range$1(grid.columns, identity);\n var rowsArr = range$1(grid.rows, identity);\n return map$1(cols, function (col) {\n var getBlock = function () {\n return bind$2(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column === col;\n }).toArray();\n });\n };\n var isValid = function (detail) {\n return detail.colspan === 1 && isValidCell(detail.element);\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isValid, getFallback);\n });\n };\n var decide = function (getBlock, isValid, getFallback) {\n var inBlock = getBlock();\n var validInBlock = find$1(inBlock, isValid);\n var detailOption = validInBlock.orThunk(function () {\n return Optional.from(inBlock[0]).orThunk(getFallback);\n });\n return detailOption.map(function (detail) {\n return detail.element;\n });\n };\n var rows = function (warehouse) {\n var grid = warehouse.grid;\n var rowsArr = range$1(grid.rows, identity);\n var cols = range$1(grid.columns, identity);\n return map$1(rowsArr, function (row) {\n var getBlock = function () {\n return bind$2(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n var current = xs[index].fold(function () {\n var rest = reverse(xs.slice(0, index));\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (c) {\n return Optional.some({\n value: c,\n delta: 0\n });\n });\n var next = xs[index + 1].fold(function () {\n var rest = xs.slice(index + 1);\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (n) {\n return Optional.some({\n value: n,\n delta: 1\n });\n });\n return current.bind(function (c) {\n return next.map(function (n) {\n var extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n });\n });\n };\n\n var onDirection = function (isLtr, isRtl) {\n return function (element) {\n return getDirection(element) === 'rtl' ? isRtl : isLtr;\n };\n };\n var getDirection = function (element) {\n return get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var api = Dimension('height', function (element) {\n var dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$7 = function (element) {\n return api.get(element);\n };\n var getOuter$1 = function (element) {\n return api.getOuter(element);\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n var rowInfo = function (row, y) {\n return {\n row: row,\n y: y\n };\n };\n var colInfo = function (col, x) {\n return {\n col: col,\n x: x\n };\n };\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left + getOuter$2(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$1 = function (cell) {\n return absolute(cell).top;\n };\n var getTopEdge = function (index, cell) {\n return rowInfo(index, getTop$1(cell));\n };\n var getBottomEdge = function (index, cell) {\n return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n };\n var findPositions = function (getInnerEdge, getOuterEdge, array) {\n if (array.length === 0) {\n return [];\n }\n var lines = map$1(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$1\n };\n var ltr$1 = {\n delta: identity,\n edge: ltrEdge,\n positions: function (optElements) {\n return findPositions(getLeftEdge, getRightEdge, optElements);\n }\n };\n var rtl$1 = {\n delta: negate,\n edge: rtlEdge,\n positions: function (optElements) {\n return findPositions(getRightEdge, getLeftEdge, optElements);\n }\n };\n var detect$2 = onDirection(ltr$1, rtl$1);\n var width = {\n delta: function (amount, table) {\n return detect$2(table).delta(amount, table);\n },\n positions: function (cols, table) {\n return detect$2(table).positions(cols, table);\n },\n edge: function (cell) {\n return detect$2(cell).edge(cell);\n }\n };\n\n var units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n var pattern = function () {\n var decimalDigits = '[0-9]+';\n var signedInteger = '[+-]?' + decimalDigits;\n var exponentPart = '[eE]' + signedInteger;\n var dot = '\\\\.';\n var opt = function (input) {\n return '(?:' + input + ')?';\n };\n var unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n var float = '[+-]?(?:' + unsignedDecimalLiteral + ')';\n return new RegExp('^(' + float + ')(.*)$');\n }();\n var isUnit = function (unit, accepted) {\n return exists(accepted, function (acc) {\n return exists(units[acc], function (check) {\n return unit === check;\n });\n });\n };\n var parse = function (input, accepted) {\n var match = Optional.from(pattern.exec(input));\n return match.bind(function (array) {\n var value = Number(array[1]);\n var unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value: value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n var needManualCalc = function () {\n var browser = detect$3().browser;\n return browser.isIE() || browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$a(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var height = cell.dom.getBoundingClientRect().height;\n var boxSizing = get$a(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$a(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$1 = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$7(cell));\n };\n var getWidth = function (cell) {\n return needManualCalc() ? getCalculatedWidth(cell) : getProp(cell, 'width', get$8(cell));\n };\n\n var rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var getPercentSize = function (elm, getter) {\n var relativeParent = offsetParent(elm).getOr(getBody$1(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$2(cell, 'height').getOrThunk(function () {\n return getHeight$1(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$7(cell);\n }\n return normalizePixelSize(value, cell, get$7, 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$1 = function (element) {\n var cssWidth = getRaw$2(element, 'width');\n return cssWidth.fold(function () {\n return Optional.from(get$b(element, 'width'));\n }, function (width) {\n return Optional.some(width);\n });\n };\n var normalizePercentageWidth = function (cellWidth, tableSize) {\n return cellWidth / tableSize.pixelWidth() * 100;\n };\n var choosePercentageSize = function (element, width, tableSize) {\n var percentMatch = rPercentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = getWidth(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth$1(cell);\n return width.fold(function () {\n var intWidth = get$8(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$1 = function (cell, tableSize) {\n var width = getRawWidth$1(cell);\n return width.fold(function () {\n return getWidth(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight = function (cell) {\n return get$6(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth$1(cell);\n return width.bind(function (w) {\n return parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]);\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var getPixelTableWidth = function (table) {\n return get$8(table) + 'px';\n };\n var getPercentTableWidth$1 = function (table) {\n return getPercentSize(table, get$8) + '%';\n };\n var isPercentSizing$1 = function (table) {\n return getRawWidth$1(table).exists(function (size) {\n return rPercentageBasedSizeRegex.test(size);\n });\n };\n var isPixelSizing$1 = function (table) {\n return getRawWidth$1(table).exists(function (size) {\n return rPixelBasedSizeRegex.test(size);\n });\n };\n var isNoneSizing$1 = function (table) {\n return getRawWidth$1(table).isNone();\n };\n var percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n var pixelBasedSizeRegex = constant(rPixelBasedSizeRegex);\n\n var isCol$1 = isTag('col');\n var getRaw$1 = function (cell, property, getter) {\n return getRaw$2(cell, property).getOrThunk(function () {\n return getter(cell) + 'px';\n });\n };\n var getRawW = function (cell, tableSize) {\n var fallback = function (e) {\n return isCol$1(e) ? get$8(e) : getPixelWidth$1(e, tableSize);\n };\n return getRaw$1(cell, 'width', fallback);\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', getHeight);\n };\n var justCols = function (warehouse) {\n return map$1(Warehouse.justColumns(warehouse), function (column) {\n return Optional.from(column.element);\n });\n };\n var hasRawStyle = function (cell, prop) {\n return getRaw$2(cell, prop).isSome();\n };\n var isValidColumn = function (cell) {\n return !isCol$1(cell) || hasRawStyle(cell, 'width');\n };\n var getDimension = function (cellOpt, index, backups, filter, getter, fallback) {\n return cellOpt.filter(filter).fold(function () {\n return fallback(deduce(backups, index));\n }, function (cell) {\n return getter(cell);\n });\n };\n var getWidthFrom = function (warehouse, table, getWidth, fallback, tableSize) {\n var columnCells = columns(warehouse, function (cell) {\n return hasRawStyle(cell, 'width');\n });\n var columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n var backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), function (pos) {\n return pos.map(function (p) {\n return p.x;\n });\n }));\n var colFilter = not(hasColspan);\n return map$1(columns$1, function (cellOption, c) {\n return getDimension(cellOption, c, backups, colFilter, function (column) {\n if (isValidColumn(column)) {\n return getWidth(column, tableSize);\n } else {\n var cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, function (cell) {\n return fallback(Optional.some(get$8(cell)));\n }, fallback);\n }\n }, fallback);\n });\n };\n var getDeduced = function (deduced) {\n return deduced.map(function (d) {\n return d + 'px';\n }).getOr('');\n };\n var getRawWidths = function (warehouse, table, tableSize) {\n return getWidthFrom(warehouse, table, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, table, tableSize) {\n return getWidthFrom(warehouse, table, getPercentageWidth, function (deduced) {\n return deduced.fold(function () {\n return tableSize.minCellWidth();\n }, function (cellWidth) {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n }, tableSize);\n };\n var getPixelWidths = function (warehouse, table, tableSize) {\n return getWidthFrom(warehouse, table, getPixelWidth$1, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, table, direction, getHeight, fallback) {\n var rows$1 = rows(warehouse);\n var backups = [Optional.some(direction.edge(table))].concat(map$1(direction.positions(rows$1, table), function (pos) {\n return pos.map(function (p) {\n return p.y;\n });\n }));\n return map$1(rows$1, function (cellOption, c) {\n return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);\n });\n };\n var getPixelHeights = function (warehouse, table, direction) {\n return getHeightFrom(warehouse, table, direction, getHeight, function (deduced) {\n return deduced.getOrThunk(minHeight);\n });\n };\n var getRawHeights = function (warehouse, table, direction) {\n return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var noneSize = function (table) {\n var getWidth = function () {\n return get$8(table);\n };\n var zero = constant(0);\n var getWidths = function (warehouse, tableSize) {\n return getPixelWidths(warehouse, table, tableSize);\n };\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths: getWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n isRelative: true,\n label: 'none'\n };\n };\n var percentageSize = function (initialWidth, table) {\n var floatWidth = Cell(parseFloat(initialWidth));\n var pixelWidth = Cell(get$8(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$8(table));\n };\n var getWidths = function (warehouse, tableSize) {\n return getPercentageWidths(warehouse, table, tableSize);\n };\n return {\n width: floatWidth.get,\n pixelWidth: pixelWidth.get,\n getWidths: getWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth: adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n var pixelSize = function (initialWidth, table) {\n var width = Cell(initialWidth);\n var getWidth = width.get;\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n var adjustTableWidth = function (delta) {\n var newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n width.set(newWidth);\n };\n var getWidths = function (warehouse, tableSize) {\n return getPixelWidths(warehouse, table, tableSize);\n };\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths: getWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth: adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth, element);\n }\n var fallbackWidth = get$8(element);\n return pixelSize(fallbackWidth, element);\n };\n var getTableSize = function (table) {\n var width = getRawWidth$1(table);\n return width.fold(function () {\n return noneSize(table);\n }, function (w) {\n return chooseSize(table, w);\n });\n };\n var TableSize = {\n getTableSize: getTableSize,\n pixelSize: pixelSize,\n percentageSize: percentageSize,\n noneSize: noneSize\n };\n\n var statsStruct = function (minRow, minCol, maxRow, maxCol, allCells, selectedCells) {\n return {\n minRow: minRow,\n minCol: minCol,\n maxRow: maxRow,\n maxCol: maxCol,\n allCells: allCells,\n selectedCells: selectedCells\n };\n };\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid.columns;\n var totalRows = house.grid.rows;\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n var allCells = [];\n var selectedCells = [];\n each$1(house.access, function (detail) {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n var startRow = detail.row;\n var endRow = startRow + detail.rowspan - 1;\n var startCol = detail.column;\n var endCol = startCol + detail.colspan - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n };\n var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element;\n var td = SugarElement.fromTag('td');\n append$1(td, SugarElement.fromTag('br'));\n var f = seenSelected ? append$1 : prepend;\n f(row, td);\n };\n var fillInGaps = function (list, house, stats, isSelected) {\n var totalColumns = house.grid.columns;\n var totalRows = house.grid.rows;\n for (var i = 0; i < totalRows; i++) {\n var seenSelected = false;\n for (var j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(list, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n var clean = function (replica, stats, house, widthDelta) {\n each$1(house.columns, function (col) {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$5(col.element);\n }\n });\n var emptyRows = filter$2(firstLayer(replica, 'tr'), function (row) {\n return row.dom.childElementCount === 0;\n });\n each$2(emptyRows, remove$5);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each$2(firstLayer(replica, 'th,td'), function (cell) {\n remove$7(cell, 'rowspan');\n remove$7(cell, 'colspan');\n });\n }\n remove$7(replica, LOCKED_COL_ATTR);\n remove$7(replica, 'data-snooker-col-series');\n var tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n var getTableWidthDelta = function (table, warehouse, tableSize, stats) {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n var colWidths = getPixelWidths(warehouse, table, tableSize);\n var allColsWidth = foldl(colWidths, function (acc, width) {\n return acc + width;\n }, 0);\n var selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), function (acc, width) {\n return acc + width;\n }, 0);\n var newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n var delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n var extract$1 = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is$2(detail.element, selectedSelector);\n };\n var replica = deep(table);\n var list = fromTable$1(replica);\n var tableSize = TableSize.getTableSize(table);\n var replicaHouse = Warehouse.generate(list);\n var replicaStats = findSelectedStats(replicaHouse, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = filterFirstLayer(replica, 'th,td', function (cell) {\n return is$2(cell, selector);\n });\n each$2(unselectedCells, remove$5);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n var house = Warehouse.fromTable(table);\n var widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n var nbsp = '\\xA0';\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children$3(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$2(elementsWithCursorPosition, name(elem));\n };\n\n var first = function (element) {\n return descendant$1(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 = children$3(element);\n for (var i = children.length - 1; i >= 0; i--) {\n var child = children[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n var transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n var createCell = function (doc) {\n return function () {\n var td = SugarElement.fromTag('td', doc.dom);\n append$1(td, SugarElement.fromTag('br', doc.dom));\n return td;\n };\n };\n var createCol = function (doc) {\n return function () {\n return SugarElement.fromTag('col', doc.dom);\n };\n };\n var createColgroup = function (doc) {\n return function () {\n return SugarElement.fromTag('colgroup', doc.dom);\n };\n };\n var createRow$1 = function (doc) {\n return function () {\n return SugarElement.fromTag('tr', doc.dom);\n };\n };\n var replace$1 = function (cell, tag, attrs) {\n var replica = copy$1(cell, tag);\n each$1(attrs, function (v, k) {\n if (v === null) {\n remove$7(replica, k);\n } else {\n set$2(replica, k, v);\n }\n });\n return replica;\n };\n var pasteReplace = function (cell) {\n return cell;\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$3(firstText, formatSelector, function (element) {\n return eq$1(element, oldCell);\n });\n return foldr(parents, function (last, parent) {\n var clonedFormat = shallow(parent);\n remove$7(clonedFormat, 'contenteditable');\n append$1(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n var cloneAppropriateAttributes = function (original, clone) {\n each$1(transferableAttributes, function (validAttributes, attributeName) {\n return getOpt(original, attributeName).filter(function (attribute) {\n return contains$2(validAttributes, attribute);\n }).each(function (attribute) {\n return set$2(clone, attributeName, attribute);\n });\n });\n };\n var cellOperations = function (mutate, doc, formatsToClone) {\n var cloneCss = function (prev, clone) {\n copy$2(prev.element, clone);\n remove$6(clone, 'height');\n if (prev.colspan !== 1) {\n remove$6(clone, 'width');\n }\n };\n var newCell = function (prev) {\n var td = SugarElement.fromTag(name(prev.element), doc.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$1(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n var newCol = function (prev) {\n var col = SugarElement.fromTag(name(prev.element), doc.dom);\n cloneCss(prev, col);\n mutate(prev.element, col);\n return col;\n };\n return {\n col: newCol,\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: newCell,\n replace: replace$1,\n gap: createCell(doc)\n };\n };\n var paste$1 = function (doc) {\n return {\n col: createCol(doc),\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: createCell(doc),\n replace: pasteReplace,\n gap: createCell(doc)\n };\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children$3(SugarElement.fromDom(div));\n };\n var fromDom = function (nodes) {\n return map$1(nodes, SugarElement.fromDom);\n };\n\n var getNodeName = function (elm) {\n return elm.nodeName.toLowerCase();\n };\n var getBody = function (editor) {\n return SugarElement.fromDom(editor.getBody());\n };\n var getPixelWidth = function (elm) {\n return elm.getBoundingClientRect().width;\n };\n var getPixelHeight = function (elm) {\n return elm.getBoundingClientRect().height;\n };\n var getIsRoot = function (editor) {\n return function (element) {\n return eq$1(element, getBody(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$7(table, 'data-mce-style');\n var removeStyleAttribute = function (element) {\n return remove$7(element, 'data-mce-style');\n };\n each$2(cells$1(table), removeStyleAttribute);\n each$2(columns$1(table), removeStyleAttribute);\n };\n var getRawWidth = function (editor, elm) {\n var raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Optional.from(raw).filter(isNotEmpty);\n };\n var isPercentage$1 = function (value) {\n return /^(\\d+(\\.\\d+)?)%$/.test(value);\n };\n var isPixel = function (value) {\n return /^(\\d+(\\.\\d+)?)px$/.test(value);\n };\n var getSelectionStart = function (editor) {\n return SugarElement.fromDom(editor.selection.getStart());\n };\n var getSelectionEnd = function (editor) {\n return SugarElement.fromDom(editor.selection.getEnd());\n };\n\n var selection = function (selections) {\n return cata$2(selections.get(), constant([]), identity, pure);\n };\n var unmergable = function (selections) {\n var hasSpan = function (elem, type) {\n return getOpt(elem, type).exists(function (span) {\n return parseInt(span, 10) > 1;\n });\n };\n var hasRowOrColSpan = function (elem) {\n return hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n };\n var candidates = selection(selections);\n return candidates.length > 0 && forall(candidates, hasRowOrColSpan) ? Optional.some(candidates) : Optional.none();\n };\n var mergable = function (table, selections, ephemera) {\n return cata$2(selections.get(), Optional.none, function (cells) {\n if (cells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(function (bounds) {\n return {\n bounds: bounds,\n cells: cells\n };\n });\n }\n }, Optional.none);\n };\n\n var strSelected = 'data-mce-selected';\n var strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n var strAttributeSelector = '[' + strSelected + ']';\n var strFirstSelected = 'data-mce-first-selected';\n var strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n var strLastSelected = 'data-mce-last-selected';\n var strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n var attributeSelector = strAttributeSelector;\n var ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n var noMenu = function (cell) {\n return {\n element: cell,\n mergable: Optional.none(),\n unmergable: Optional.none(),\n selection: [cell]\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: cell,\n mergable: mergable(table, selections, ephemera),\n unmergable: unmergable(selections),\n selection: selection(selections)\n };\n };\n var paste = function (element, clipboard, generators) {\n return {\n element: element,\n clipboard: clipboard,\n generators: generators\n };\n };\n var pasteRows = function (selections, cell, clipboard, generators) {\n return {\n selection: selection(selections),\n clipboard: clipboard,\n generators: generators\n };\n };\n\n var getSelectionCellFallback = function (element) {\n return table(element).bind(function (table) {\n return retrieve(table, ephemera.firstSelectedSelector);\n }).fold(constant(element), function (cells) {\n return cells[0];\n });\n };\n var getSelectionFromSelector = function (selector) {\n return function (initCell, isRoot) {\n var cellName = name(initCell);\n var cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest$1(cell, selector, isRoot);\n };\n };\n var getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n var getSelectionCell = getSelectionFromSelector('th,td');\n var getCellsFromSelection = function (selections) {\n return selection(selections);\n };\n var getRowsFromSelection = function (selected, selector) {\n var cellOpt = getSelectionCell(selected);\n var rowsOpt = cellOpt.bind(function (cell) {\n return table(cell);\n }).map(function (table) {\n return rows$1(table);\n });\n return lift2(cellOpt, rowsOpt, function (cell, rows) {\n return filter$2(rows, function (row) {\n return exists(fromDom(row.dom.cells), function (rowCell) {\n return get$b(rowCell, selector) === '1' || eq$1(rowCell, cell);\n });\n });\n }).getOr([]);\n };\n\n var extractSelected = function (cells) {\n return table(cells[0]).map(function (table) {\n var replica = extract$1(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n var serializeElements = function (editor, elements) {\n return map$1(elements, function (elm) {\n return editor.selection.serializer.serialize(elm.dom, {});\n }).join('');\n };\n var getTextContent = function (elements) {\n return map$1(elements, function (element) {\n return element.dom.innerText;\n }).join('');\n };\n var registerEvents = function (editor, selections, actions) {\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$2(selections.get(), noop, multiCellContext, noop);\n }\n });\n editor.on('BeforeSetContent', function (e) {\n if (e.selection === true && e.paste === true) {\n var selectedCells = getCellsFromSelection(selections);\n head(selectedCells).each(function (cell) {\n table(cell).each(function (table) {\n var elements = filter$2(fromHtml(e.content), function (content) {\n return name(content) !== 'meta';\n });\n var isTable = isTag('table');\n if (elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n var doc = SugarElement.fromDom(editor.getDoc());\n var generators = paste$1(doc);\n var targets = paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function () {\n editor.focus();\n });\n }\n });\n });\n }\n });\n };\n\n var adt$7 = 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$7);\n\n var neighbours = function (input, index) {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n var determine = function (input, column, step, tableSize, resize) {\n var result = input.slice(0);\n var context = neighbours(input, column);\n var onNone = constant(map$1(result, constant(0)));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onLeft = function (index, next) {\n return resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n };\n var onMiddle = function (prev, index, next) {\n return resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n };\n var onRight = function (prev, index) {\n return resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n var total = function (start, end, measures) {\n var r = 0;\n for (var i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n var recalculateWidthForCells = function (warehouse, widths) {\n var all = Warehouse.justCells(warehouse);\n return map$1(all, function (cell) {\n var width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width: width,\n colspan: cell.colspan\n };\n });\n };\n var recalculateWidthForColumns = function (warehouse, widths) {\n var groups = Warehouse.justColumns(warehouse);\n return map$1(groups, function (column, index) {\n return {\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n };\n });\n };\n var recalculateHeightForCells = function (warehouse, heights) {\n var all = Warehouse.justCells(warehouse);\n return map$1(all, function (cell) {\n var height = total(cell.row, cell.row + cell.rowspan, heights);\n return {\n element: cell.element,\n height: height,\n rowspan: cell.rowspan\n };\n });\n };\n var matchRowHeight = function (warehouse, heights) {\n return map$1(warehouse.all, function (row, i) {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var recalculate = function (warehouse, widths) {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n var recalculateAndApply = function (warehouse, widths, tableSize) {\n var newSizes = recalculate(warehouse, widths);\n each$2(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n var adjustWidth = function (table, delta, index, resizing, tableSize) {\n var warehouse = Warehouse.fromTable(table);\n var step = tableSize.getCellDelta(delta);\n var widths = tableSize.getWidths(warehouse, tableSize);\n var isLastColumn = index === warehouse.grid.columns - 1;\n var clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n var deltas = determine(widths, index, clampedStep, tableSize, resizing);\n var newWidths = map$1(deltas, function (dx, i) {\n return dx + widths[i];\n });\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = Warehouse.fromTable(table);\n var heights = getPixelHeights(warehouse, table, direction);\n var newHeights = map$1(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, minHeight()) : dy;\n });\n var newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n var newRowSizes = matchRowHeight(warehouse, newHeights);\n each$2(newRowSizes, function (row) {\n setHeight(row.element, row.height);\n });\n each$2(newCellSizes, function (cell) {\n setHeight(cell.element, cell.height);\n });\n var total = sumUp(newHeights);\n setHeight(table, total);\n };\n var adjustAndRedistributeWidths$1 = function (_table, list, details, tableSize, resizeBehaviour) {\n var warehouse = Warehouse.generate(list);\n var sizes = tableSize.getWidths(warehouse, tableSize);\n var tablePixelWidth = tableSize.pixelWidth();\n var _a = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative), newSizes = _a.newSizes, delta = _a.delta;\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n var adjustWidthTo = function (_table, list, _info, tableSize) {\n var warehouse = Warehouse.generate(list);\n var widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n var zero = function (array) {\n return map$1(array, constant(0));\n };\n var surround = function (sizes, startIndex, endIndex, results, f) {\n return f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n };\n var clampDeltaHelper = function (predicate) {\n return function (sizes, index, delta, minCellSize) {\n if (!predicate(delta)) {\n return delta;\n } else {\n var newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n var diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n };\n var clampNegativeDelta = clampDeltaHelper(function (delta) {\n return delta < 0;\n });\n var clampDelta = clampDeltaHelper(always);\n var resizeTable = function () {\n var calcFixedDeltas = function (sizes, index, next, delta, minCellSize) {\n var clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n var calcRelativeDeltas = function (sizes, index, delta, minCellSize) {\n var ratio = (100 + delta) / 100;\n var newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map$1(sizes, function (size, idx) {\n var newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n var calcLeftEdgeDeltas = function (sizes, index, next, delta, minCellSize, isRelative) {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n }\n };\n var calcMiddleDeltas = function (sizes, _prev, index, next, delta, minCellSize, isRelative) {\n return calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n };\n var resizeTable = function (resizer, delta) {\n return resizer(delta);\n };\n var calcRightEdgeDeltas = function (sizes, _prev, index, delta, minCellSize, isRelative) {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n var clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n var calcRedestributedWidths = function (sizes, totalWidth, pixelDelta, isRelative) {\n if (isRelative) {\n var tableWidth = totalWidth + pixelDelta;\n var ratio_1 = tableWidth / totalWidth;\n var newSizes = map$1(sizes, function (size) {\n return size / ratio_1;\n });\n return {\n delta: ratio_1 * 100 - 100,\n newSizes: newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable: resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas: calcLeftEdgeDeltas,\n calcMiddleDeltas: calcMiddleDeltas,\n calcRightEdgeDeltas: calcRightEdgeDeltas,\n calcRedestributedWidths: calcRedestributedWidths\n };\n };\n var preserveTable = function () {\n var calcLeftEdgeDeltas = function (sizes, index, next, delta, minCellSize) {\n var idx = delta >= 0 ? next : index;\n var clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n var calcMiddleDeltas = function (sizes, _prev, index, next, delta, minCellSize) {\n return calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n };\n var resizeTable = function (resizer, delta, isLastColumn) {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n var calcRightEdgeDeltas = function (sizes, _prev, _index, delta, _minCellSize, isRelative) {\n if (isRelative) {\n return zero(sizes);\n } else {\n var diff = delta / sizes.length;\n return map$1(sizes, constant(diff));\n }\n };\n var clampTableDelta = function (sizes, index, delta, minCellSize, isLastColumn) {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n var maxDelta = foldl(sizes, function (a, b) {\n return a + b - minCellSize;\n }, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n var calcRedestributedWidths = function (sizes, _totalWidth, _pixelDelta, _isRelative) {\n return {\n delta: 0,\n newSizes: sizes\n };\n };\n return {\n resizeTable: resizeTable,\n clampTableDelta: clampTableDelta,\n calcLeftEdgeDeltas: calcLeftEdgeDeltas,\n calcMiddleDeltas: calcMiddleDeltas,\n calcRightEdgeDeltas: calcRightEdgeDeltas,\n calcRedestributedWidths: calcRedestributedWidths\n };\n };\n\n var only = function (element, isResizable) {\n var parent = Optional.from(element.dom.documentElement).map(SugarElement.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(SugarPosition(0, 0)),\n isResizable: isResizable\n };\n };\n var detached = function (editable, chrome, isResizable) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin,\n isResizable: isResizable\n };\n };\n var body = function (editable, chrome, isResizable) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(SugarPosition(0, 0)),\n isResizable: isResizable\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body\n };\n\n var adt$6 = 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$6.invalid(value);\n };\n var from = function (value) {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$6.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$6.pixels, value);\n }\n return adt$6.invalid(value);\n };\n var Size = __assign(__assign({}, adt$6), { from: from });\n\n var redistributeToPercent = function (widths, totalWidth) {\n return map$1(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$1(widths, function (w) {\n var colType = Size.from(w);\n return colType.fold(function () {\n return w;\n }, function (px) {\n return px * scale + 'px';\n }, function (pc) {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n var redistributeEmpty = function (newWidthType, columns) {\n var f = newWidthType.fold(function () {\n return constant('');\n }, function (pixels) {\n var num = pixels / columns;\n return constant(num + 'px');\n }, function () {\n var num = 100 / columns;\n return constant(num + '%');\n });\n return range$1(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$1 = 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$3 = 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$3(r[r.length - 1], Math.round(scan.remainder))]);\n };\n var validate = Size.from;\n\n var redistributeToW = function (newWidths, cells, unit) {\n each$2(cells, function (cell) {\n var widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n var w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n var redistributeToColumns = function (newWidths, columns, unit) {\n each$2(columns, function (column, index) {\n var width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n var redistributeToH = function (newHeights, rows, cells, unit) {\n each$2(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$2(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 = function (table, optWidth, optHeight, tableSize) {\n var warehouse = Warehouse.fromTable(table);\n var rows = warehouse.all;\n var cells = Warehouse.justCells(warehouse);\n var columns = Warehouse.justColumns(warehouse);\n optWidth.each(function (newWidth) {\n var widthUnit = getUnit(newWidth);\n var totalWidth = get$8(table);\n var oldWidths = getRawWidths(warehouse, table, tableSize);\n var nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n if (Warehouse.hasColumns(warehouse)) {\n redistributeToColumns(nuWidths, columns, widthUnit);\n } else {\n redistributeToW(nuWidths, cells, widthUnit);\n }\n set$1(table, 'width', newWidth);\n });\n optHeight.each(function (newHeight) {\n var hUnit = getUnit(newHeight);\n var totalHeight = get$7(table);\n var oldHeights = getRawHeights(warehouse, table, height);\n var nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells, hUnit);\n set$1(table, 'height', newHeight);\n });\n };\n var isPercentSizing = isPercentSizing$1;\n var isPixelSizing = isPixelSizing$1;\n var isNoneSizing = isNoneSizing$1;\n var getPercentTableWidth = getPercentTableWidth$1;\n\n var getGridSize = function (table) {\n var warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n var Event = function (fields) {\n var handlers = [];\n var bind = function (handler) {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n var unbind = function (handler) {\n handlers = filter$2(handlers, function (h) {\n return h !== handler;\n });\n };\n var trigger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var event = {};\n each$2(fields, function (name, i) {\n event[name] = args[i];\n });\n each$2(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$4 = function (typeDefs) {\n var registry = map(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n cancel();\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\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$2(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$1(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$2(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter$2(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$2(keys, function (key) {\n return !contains$2(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var InDrag = function () {\n var previous = Optional.none();\n var reset = function () {\n previous = Optional.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n var onEvent = function (event, mode) {\n var dataOption = mode.extract(event);\n dataOption.each(function (data) {\n var offset = update(mode, data);\n offset.each(function (d) {\n events.trigger.move(d);\n });\n });\n };\n var events = create$4({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n };\n\n var NoDrag = function () {\n var events = create$4({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n var Movement = function () {\n var noDragState = NoDrag();\n var inDragState = InDrag();\n var dragState = noDragState;\n var on = function () {\n dragState.reset();\n dragState = inDragState;\n };\n var off = function () {\n dragState.reset();\n dragState = noDragState;\n };\n var onEvent = function (event, mode) {\n dragState.onEvent(event, mode);\n };\n var isOn = function () {\n return dragState === inDragState;\n };\n return {\n on: on,\n off: off,\n isOn: isOn,\n onEvent: onEvent,\n events: inDragState.events\n };\n };\n\n var setup = function (mutation, mode, settings) {\n var active = false;\n var events = create$4({\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(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info);\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: target,\n x: x,\n y: y,\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: raw\n };\n };\n var fromRawEvent$1 = function (rawEvent) {\n var target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle$2 = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle$2(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 = always;\n var bind = function (element, event, handler) {\n return bind$1(element, event, filter, handler);\n };\n var fromRawEvent = fromRawEvent$1;\n\n var read = function (element, attr) {\n var value = get$b(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$2 = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n var remove$4 = function (element, attr, id) {\n var nu = filter$2(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n 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$1 = function (element, clazz) {\n return add$2(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$4(element, 'class', clazz);\n };\n\n var add = 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$5(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n var remove$2 = 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 = 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$1 = css('ephox-dragster');\n var resolve$1 = styles$1.resolve;\n\n var Blocker = function (options) {\n var settings = __assign({ layerClass: resolve$1('blocker') }, options);\n var div = SugarElement.fromTag('div');\n set$2(div, 'role', 'presentation');\n setAll(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add(div, resolve$1('blocker'));\n add(div, settings.layerClass);\n var element = constant(div);\n var destroy = function () {\n remove$5(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var compare = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n var extract = function (event) {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n var mutate = function (mutation, info) {\n mutation.mutate(info.left, info.top);\n };\n var sink = function (dragApi, settings) {\n var blocker = Blocker(settings);\n var mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n var mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n var mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n var mout = bind(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$1(parent, blocker.element());\n };\n var stop = function () {\n remove$5(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,\n sink: sink,\n mutate: mutate\n });\n\n var transform$1 = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n var closest = function (target) {\n return closest$1(target, '[contenteditable]');\n };\n var isEditable$1 = function (element, assumeEditable) {\n if (assumeEditable === void 0) {\n assumeEditable = false;\n }\n if (!detect$3().browser.isIE() && inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), function (editable) {\n return getRaw(editable) === 'true';\n });\n }\n };\n var getRaw = function (element) {\n return element.dom.contentEditable;\n };\n\n var styles = css('ephox-snooker');\n var resolve = styles.resolve;\n\n var Mutation = function () {\n var events = create$4({\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$4({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Optional.none();\n var delegate = Mutation();\n delegate.events.drag.bind(function (event) {\n target.each(function (t) {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n var assign = function (t) {\n target = Optional.some(t);\n };\n var get = function () {\n return target;\n };\n return {\n assign: assign,\n get: get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n var col = function (column, x, y, w, h) {\n var bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n var row = function (r, x, y, w, h) {\n var bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n var resizeBar = resolve('resizer-bar');\n var resizeRowBar = resolve('resizer-rows');\n var resizeColBar = resolve('resizer-cols');\n var BAR_THICKNESS = 7;\n var resizableRows = function (warehouse, isResizable) {\n return bind$2(warehouse.all, function (row, i) {\n return isResizable(row.element) ? [i] : [];\n });\n };\n var resizableColumns = function (warehouse, isResizable) {\n var resizableCols = [];\n range$1(warehouse.grid.columns, function (index) {\n var colElmOpt = Warehouse.getColumnAt(warehouse, index).map(function (col) {\n return col.element;\n });\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter$2(resizableCols, function (colIndex) {\n var columnCells = Warehouse.filterItems(warehouse, function (cell) {\n return cell.column === colIndex;\n });\n return forall(columnCells, function (cell) {\n return isResizable(cell.element);\n });\n });\n };\n var destroy = function (wire) {\n var previous = descendants(wire.parent(), '.' + resizeBar);\n each$2(previous, remove$5);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each$2(positions, function (cpOption) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add(bar, resizeBar);\n append$1(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(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(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (warhouse, wire, table, rows, cols) {\n var position = absolute(table);\n var isResizable = wire.isResizable;\n var rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n var resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n var resizableRowPositions = filter$2(rowPositions, function (_pos, i) {\n return exists(resizableRowBars, function (barIndex) {\n return i === barIndex;\n });\n });\n refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n var colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n var resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n var resizableColPositions = filter$2(colPositions, function (_pos, i) {\n return exists(resizableColBars, function (barIndex) {\n return i === barIndex;\n });\n });\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n var refresh = function (wire, table) {\n destroy(wire);\n if (wire.isResizable(table)) {\n var warehouse = Warehouse.fromTable(table);\n var rows$1 = rows(warehouse);\n var cols = columns(warehouse);\n refreshGrid(warehouse, wire, table, rows$1, cols);\n }\n };\n var each = function (wire, f) {\n var bars = descendants(wire.parent(), '.' + resizeBar);\n each$2(bars, f);\n };\n var hide = function (wire) {\n each(wire, function (bar) {\n set$1(bar, 'display', 'none');\n });\n };\n var show = function (wire) {\n each(wire, function (bar) {\n set$1(bar, 'display', 'block');\n });\n };\n var isRowBar = function (element) {\n return has(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has(element, resizeColBar);\n };\n\n var resizeBarDragging = resolve('resizer-bar-dragging');\n var BarManager = function (wire) {\n var mutation = BarMutation();\n var resizing = transform$1(mutation, {});\n var hoverTable = Optional.none();\n var getResizer = function (element, type) {\n return Optional.from(get$b(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$7(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$7(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n add(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind(wire.parent(), 'mousedown', function (event) {\n if (isRowBar(event.target)) {\n handler(event.target, 'top');\n }\n if (isColBar(event.target)) {\n handler(event.target, 'left');\n }\n });\n var isRoot = function (e) {\n return eq$1(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(isEditable$1);\n };\n var mouseover = bind(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target).fold(function () {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, function (table) {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n });\n });\n var destroy$1 = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n var refresh$1 = function (tbl) {\n refresh(wire, tbl);\n };\n var events = create$4({\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$3 = function (wire, resizing, lazySizing) {\n var hdirection = height;\n var vdirection = width;\n var manager = BarManager(wire);\n var events = create$4({\n beforeResize: Event([\n 'table',\n 'type'\n ]),\n afterResize: Event([\n 'table',\n 'type'\n ]),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n var table = event.table;\n events.trigger.beforeResize(table, 'row');\n var delta = hdirection.delta(event.delta, table);\n adjustHeight(table, delta, event.row, hdirection);\n events.trigger.afterResize(table, 'row');\n });\n manager.events.startAdjust.bind(function (_event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n var table = event.table;\n events.trigger.beforeResize(table, 'col');\n var delta = vdirection.delta(event.delta, table);\n var tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column, resizing, tableSize);\n events.trigger.afterResize(table, 'col');\n });\n return {\n on: manager.on,\n off: manager.off,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n var TableResize = { create: create$3 };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\n };\n var fireObjectResizeStart = function (editor, target, width, height, origin) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var fireObjectResized = function (editor, target, width, height, origin) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var fireTableSelectionChange = function (editor, cells, start, finish, otherCells) {\n editor.fire('TableSelectionChange', {\n cells: cells,\n start: start,\n finish: finish,\n otherCells: otherCells\n });\n };\n var fireTableSelectionClear = function (editor) {\n editor.fire('TableSelectionClear');\n };\n var fireTableModified = function (editor, table, data) {\n editor.fire('TableModified', __assign(__assign({}, data), { table: table }));\n };\n var styleModified = {\n structure: false,\n style: true\n };\n var structureModified = {\n structure: true,\n style: false\n };\n var styleAndStructureModified = {\n structure: true,\n style: true\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 defaultCellBorderWidths = range$1(5, function (i) {\n var size = i + 1 + 'px';\n return {\n title: size,\n value: size\n };\n });\n var defaultCellBorderStyles = map$1([\n 'Solid',\n 'Dotted',\n 'Dashed',\n 'Double',\n 'Groove',\n 'Ridge',\n 'Inset',\n 'Outset',\n 'None',\n 'Hidden'\n ], function (type) {\n return {\n title: type,\n value: type.toLowerCase()\n };\n });\n var determineDefaultStyles = function (editor) {\n if (isPixelsForced(editor)) {\n var editorWidth = editor.getBody().offsetWidth;\n return __assign(__assign({}, defaultStyles), { width: editorWidth + 'px' });\n } else if (isResponsiveForced(editor)) {\n return filter$1(defaultStyles, function (_value, key) {\n return key !== 'width';\n });\n } else {\n return defaultStyles;\n }\n };\n var defaultAttributes = { border: '1' };\n var defaultColumnResizingBehaviour = 'preservetable';\n var getTableSizingMode = function (editor) {\n return editor.getParam('table_sizing_mode', 'auto');\n };\n var getTableResponseWidth = function (editor) {\n return editor.getParam('table_responsive_width');\n };\n var getTableBorderWidths = function (editor) {\n return editor.getParam('table_border_widths', defaultCellBorderWidths, 'array');\n };\n var getTableBorderStyles = function (editor) {\n return editor.getParam('table_border_styles', defaultCellBorderStyles, 'array');\n };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', determineDefaultStyles(editor), 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var isPercentagesForced = function (editor) {\n return getTableSizingMode(editor) === 'relative' || getTableResponseWidth(editor) === true;\n };\n var isPixelsForced = function (editor) {\n return getTableSizingMode(editor) === 'fixed' || getTableResponseWidth(editor) === false;\n };\n var isResponsiveForced = function (editor) {\n return getTableSizingMode(editor) === 'responsive';\n };\n var getToolbar = function (editor) {\n return editor.getParam('table_toolbar', defaultTableToolbar);\n };\n var useColumnGroup = function (editor) {\n return editor.getParam('table_use_colgroups', false, 'boolean');\n };\n var getTableHeaderType = function (editor) {\n var defaultValue = 'section';\n var value = editor.getParam('table_header_type', defaultValue, 'string');\n var validValues = [\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ];\n if (!contains$2(validValues, value)) {\n return defaultValue;\n } else {\n return value;\n }\n };\n var getColumnResizingBehaviour = function (editor) {\n var validModes = [\n 'preservetable',\n 'resizetable'\n ];\n var givenMode = editor.getParam('table_column_resizing', defaultColumnResizingBehaviour, 'string');\n return find$1(validModes, function (mode) {\n return mode === givenMode;\n }).getOr(defaultColumnResizingBehaviour);\n };\n var isPreserveTableColumnResizing = function (editor) {\n return getColumnResizingBehaviour(editor) === 'preservetable';\n };\n var isResizeTableColumnResizing = function (editor) {\n return getColumnResizingBehaviour(editor) === 'resizetable';\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Optional.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Optional.some(cloneElements);\n } else {\n return Optional.none();\n }\n };\n var hasObjectResizing = function (editor) {\n var objectResizing = editor.getParam('object_resizing', true);\n return isString(objectResizing) ? objectResizing === 'table' : objectResizing;\n };\n var getTableBackgroundColorMap = function (editor) {\n return editor.getParam('table_background_color_map', [], 'array');\n };\n var getTableBorderColorMap = function (editor) {\n return editor.getParam('table_border_color_map', [], 'array');\n };\n\n var get$4 = function (editor, table) {\n if (isPercentagesForced(editor)) {\n var width = getRawWidth(editor, table.dom).filter(isPercentage$1).getOrThunk(function () {\n return getPercentTableWidth(table);\n });\n return TableSize.percentageSize(width, table);\n } else if (isPixelsForced(editor)) {\n return TableSize.pixelSize(get$8(table), table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n var cleanupLegacyAttributes = function (element) {\n remove$7(element, 'width');\n };\n var convertToPercentSize = function (table, tableSize) {\n var newWidth = getPercentTableWidth$1(table);\n redistribute(table, Optional.some(newWidth), Optional.none(), tableSize);\n cleanupLegacyAttributes(table);\n };\n var convertToPixelSize = function (table, tableSize) {\n var newWidth = getPixelTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none(), tableSize);\n cleanupLegacyAttributes(table);\n };\n var convertToNoneSize = function (table) {\n remove$6(table, 'width');\n var columns = columns$1(table);\n var rowElements = columns.length > 0 ? columns : cells$1(table);\n each$2(rowElements, function (cell) {\n remove$6(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n var enforcePercentage = function (editor, table) {\n var tableSizing = get$4(editor, table);\n convertToPercentSize(table, tableSizing);\n };\n var enforcePixels = function (editor, table) {\n var tableSizing = get$4(editor, table);\n convertToPixelSize(table, tableSizing);\n };\n var enforceNone = convertToNoneSize;\n var syncPixels = function (table) {\n var warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each$2(cells$1(table), function (cell) {\n var computedWidth = get$a(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove$7(cell, 'width');\n });\n }\n };\n\n var createContainer = function () {\n var container = SugarElement.fromTag('div');\n setAll(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append$1(body$1(), container);\n return container;\n };\n var get$3 = function (editor, isResizable) {\n return editor.inline ? ResizeWire.body(getBody(editor), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n var remove$1 = function (editor, wire) {\n if (editor.inline) {\n remove$5(wire.parent());\n }\n };\n\n var barResizerPrefix = 'bar-';\n var isResizable = function (elm) {\n return get$b(elm, 'data-mce-resize') !== 'false';\n };\n var getResizeHandler = function (editor) {\n var selectionRng = Optional.none();\n var resize = Optional.none();\n var wire = Optional.none();\n var startW;\n var startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(SugarElement.fromDom(editor.getBody()), isResizable));\n };\n var lazySizing = function (table) {\n return get$4(editor, table);\n };\n var lazyResizingBehaviour = function () {\n return isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n };\n var getNumColumns = function (table) {\n return getGridSize(table).columns;\n };\n var afterCornerResize = function (table, origin, width) {\n var isRightEdgeResize = endsWith(origin, 'e');\n if (startRawW === '') {\n enforcePercentage(editor, table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n var resizing = lazyResizingBehaviour();\n var tableSize = lazySizing(table);\n var col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage$1(startRawW)) {\n var percentW = parseFloat(startRawW.replace('%', ''));\n var targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncPixels(table);\n }\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n remove$1(editor, w);\n });\n };\n editor.on('init', function () {\n var rawWire = get$3(editor, isResizable);\n wire = Optional.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var resizing = lazyResizingBehaviour();\n var sz = TableResize.create(rawWire, resizing, lazySizing);\n sz.on();\n sz.events.startDrag.bind(function (_event) {\n selectionRng = Optional.some(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(function (event) {\n var rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(function (event) {\n var table = event.table;\n var rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n resize = Optional.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = SugarElement.fromDom(targetElm);\n each$2(editor.dom.select('.mce-clonedresizable'), function (clone) {\n editor.dom.addClass(clone, 'mce-' + getColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing(table) && isPixelsForced(editor)) {\n enforcePixels(editor, table);\n } else if (!isPercentSizing(table) && isPercentagesForced(editor)) {\n enforcePercentage(editor, table);\n }\n if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n enforcePercentage(editor, table);\n }\n startW = e.width;\n startRawW = isResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = SugarElement.fromDom(targetElm);\n var origin_1 = e.origin;\n if (startsWith(origin_1, 'corner-')) {\n afterCornerResize(table, origin_1, e.width);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n editor.on('SwitchMode', function () {\n lazyResize().each(function (resize) {\n if (editor.mode.isReadOnly()) {\n resize.hideBars();\n } else {\n resize.showBars();\n }\n });\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var point = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n\n var scan$1 = 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$1(universe, elem, direction).orThunk(function () {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n var toEnd = function (universe, element) {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n var children = universe.property().children(element);\n return children.length;\n };\n var freefallRtl$2 = function (universe, element) {\n var candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n var children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n var freefallRtl$1 = freefallRtl$2;\n\n var universe$2 = DomUniverse();\n var freefallRtl = function (element) {\n return freefallRtl$1(universe$2, element);\n };\n\n var halve = function (main, other) {\n var colspan = getSpan(main, 'colspan');\n if (colspan === 1) {\n var width = getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n var isTableHeaderCell = isTag('th');\n var getRowHeaderType = function (isHeaderRow, isHeaderCells) {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n var getRowType$1 = function (row) {\n var isHeaderRow = row.section === 'thead';\n var isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else {\n return { type: 'body' };\n }\n };\n var findCommonCellType = function (cells) {\n var headerCells = filter$2(cells, function (cell) {\n return isTableHeaderCell(cell.element);\n });\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n var findCommonRowType = function (rows) {\n var rowTypes = map$1(rows, function (row) {\n return getRowType$1(row).type;\n });\n var hasHeader = contains$2(rowTypes, 'header');\n var hasFooter = contains$2(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n var hasBody = contains$2(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n var findTableRowHeaderType = function (warehouse) {\n return findMap(warehouse.all, function (row) {\n var rowType = getRowType$1(row);\n return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n });\n };\n\n var transformCell = function (cell, comparator, substitution) {\n return elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n };\n var transformRow = function (row, section) {\n return row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n };\n var section = function () {\n return {\n transformRow: transformRow,\n transformCell: function (cell, comparator, substitution) {\n var newCell = substitution(cell.element, comparator);\n var fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n return elementnew(fixedCell, cell.isNew, cell.isLocked);\n }\n };\n };\n var sectionCells = function () {\n return {\n transformRow: transformRow,\n transformCell: transformCell\n };\n };\n var cells = function () {\n return {\n transformRow: function (row, section) {\n var newSection = section === 'thead' ? 'tbody' : section;\n return transformRow(row, newSection);\n },\n transformCell: transformCell\n };\n };\n var fallback = function () {\n return {\n transformRow: identity,\n transformCell: transformCell\n };\n };\n var getTableSectionType = function (table, fallback) {\n var warehouse = Warehouse.fromTable(table);\n var type = findTableRowHeaderType(warehouse).getOr(fallback);\n switch (type) {\n case 'section':\n return section();\n case 'sectionCells':\n return sectionCells();\n case 'cells':\n return cells();\n }\n };\n var TableSection = {\n getTableSectionType: getTableSectionType,\n section: section,\n sectionCells: sectionCells,\n cells: cells,\n fallback: fallback\n };\n\n var setIfNot = function (element, property, value, ignore) {\n if (value === ignore) {\n remove$7(element, property);\n } else {\n set$2(element, property, value);\n }\n };\n var insert$1 = function (table, selector, element) {\n last$2(children$1(table, selector)).fold(function () {\n return prepend(table, element);\n }, function (child) {\n return after$5(child, element);\n });\n };\n var generateSection = function (table, sectionName) {\n var section = child$1(table, sectionName).getOrThunk(function () {\n var newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert$1(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert$1(table, 'caption', newSection);\n } else {\n append$1(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n var render$1 = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var syncRows = function (gridSection) {\n return map$1(gridSection, function (row) {\n if (row.isNew) {\n newRows.push(row.element);\n }\n var tr = row.element;\n empty(tr);\n each$2(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$1(tr, cell.element);\n });\n return tr;\n });\n };\n var syncColGroup = function (gridSection) {\n return bind$2(gridSection, function (colGroup) {\n return map$1(colGroup.cells, function (col) {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n });\n });\n };\n var renderSection = function (gridSection, sectionName) {\n var section = generateSection(table, sectionName);\n var sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n var sectionElems = sync(gridSection);\n append(section, sectionElems);\n };\n var removeSection = function (sectionName) {\n child$1(table, sectionName).each(remove$5);\n };\n var renderOrRemoveSection = function (gridSection, sectionName) {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n var headSection = [];\n var bodySection = [];\n var footSection = [];\n var columnGroupsSection = [];\n each$2(grid, function (row) {\n switch (row.section) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n case 'colgroup':\n columnGroupsSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(columnGroupsSection, 'colgroup');\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows: newRows,\n newCells: newCells\n };\n };\n var copy = function (grid) {\n return map$1(grid, function (row) {\n var tr = shallow(row.element);\n each$2(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$1(tr, clonedCell);\n });\n return tr;\n });\n };\n\n var getColumn = function (grid, index) {\n return map$1(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.getOr(xs.length);\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$1(grid, function (row) {\n return map$1(row.cells, never);\n });\n var updateSeen = function (rowIndex, columnIndex, rowspan, colspan) {\n for (var row = rowIndex; row < rowIndex + rowspan; row++) {\n for (var column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map$1(grid, function (row, rowIndex) {\n var details = bind$2(row.cells, function (cell, columnIndex) {\n if (seen[rowIndex][columnIndex] === false) {\n var result = subgrid(grid, rowIndex, columnIndex, comparator);\n updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n } else {\n return [];\n }\n });\n return rowdetailnew(row.element, details, row.section, row.isNew);\n });\n };\n var toGrid = function (warehouse, generators, isNew) {\n var grid = [];\n each$2(warehouse.colgroups, function (colgroup) {\n var cols = map$1(colgroup.columns, function (column) {\n return elementnew(column.element, isNew, false);\n });\n grid.push(rowcells(colgroup.element, cols, 'colgroup', isNew));\n });\n for (var rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n var rowCells = [];\n for (var columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n var element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(function (item) {\n return elementnew(item.element, isNew, item.isLocked);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true, false);\n });\n rowCells.push(element);\n }\n var rowDetail = warehouse.all[rowIndex];\n var row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\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 toDetailList = function (grid) {\n return toDetails(grid, eq$1);\n };\n var findInWarehouse = function (warehouse, element) {\n return findMap(warehouse.all, function (r) {\n return find$1(r.cells, function (e) {\n return eq$1(element, e.element);\n });\n });\n };\n var extractCells = function (warehouse, target, predicate) {\n var details = map$1(target.selection, function (cell$1) {\n return cell(cell$1).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n }).filter(predicate);\n });\n var cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, behaviours) {\n var warehouse = Warehouse.fromTable(table);\n var tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n var lockedColumns = getLockedColumnsFromGrid(result.grid);\n var grid = toDetailList(result.grid);\n return {\n info: info,\n grid: grid,\n cursor: result.cursor,\n lockedColumns: lockedColumns\n };\n });\n return output.bind(function (out) {\n var newElements = render$1(table, out.grid);\n var tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(function () {\n return TableSize.getTableSize(table);\n });\n var resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, {\n sizing: tableSizing,\n resize: resizing,\n section: tableSection\n });\n postAction(table);\n refresh(wire, table);\n remove$7(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n }\n return Optional.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n };\n var onPaste = function (warehouse, target) {\n return cell(target.element).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteByEditor = function (warehouse, target) {\n return extractCells(warehouse, target, always).map(function (cells) {\n return {\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n };\n });\n };\n var onMergable = function (_warehouse, target) {\n return target.mergable;\n };\n var onUnmergable = function (_warehouse, target) {\n return target.unmergable;\n };\n var onCells = function (warehouse, target) {\n return extractCells(warehouse, target, always);\n };\n var onUnlockedCells = function (warehouse, target) {\n return extractCells(warehouse, target, function (detail) {\n return !detail.isLocked;\n });\n };\n var isUnlockedTableCell = function (warehouse, cell) {\n return findInWarehouse(warehouse, cell).exists(function (detail) {\n return !detail.isLocked;\n });\n };\n var allUnlocked = function (warehouse, cells) {\n return forall(cells, function (cell) {\n return isUnlockedTableCell(warehouse, cell);\n });\n };\n var onUnlockedMergable = function (warehouse, target) {\n return onMergable(warehouse, target).filter(function (mergeable) {\n return allUnlocked(warehouse, mergeable.cells);\n });\n };\n var onUnlockedUnmergable = function (warehouse, target) {\n return onUnmergable(warehouse, target).filter(function (cells) {\n return allUnlocked(warehouse, cells);\n });\n };\n\n var merge$2 = function (grid, bounds, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (var i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (var j = bounds.startCol; j <= bounds.finishCol; j++) {\n var row = rows[i];\n var isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n var first = true;\n for (var i = 0; i < rows.length; i++) {\n for (var j = 0; j < cellLength(rows[0]); j++) {\n var row = rows[i];\n var currentCell = getCell(row, j);\n var currentCellElm = currentCell.element;\n var isToReplace = comparator(currentCellElm, target);\n if (isToReplace === true && first === false) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace === true) {\n first = false;\n }\n }\n }\n return grid;\n };\n var uniqueCells = function (row, comparator) {\n return foldl(row, function (rest, cell) {\n return exists(rest, function (currentCell) {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n var splitCols = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid[0].cells.length) {\n each$2(grid, function (row) {\n var prevCell = row.cells[index - 1];\n var current = row.cells[index];\n var isToReplace = comparator(current.element, prevCell.element);\n if (isToReplace) {\n mutateCell(row, index, elementnew(substitution(), true, current.isLocked));\n }\n });\n }\n return grid;\n };\n var splitRows = function (grid, index, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n var rowPrevCells = rows[index - 1].cells;\n var cells = uniqueCells(rowPrevCells, comparator);\n each$2(cells, function (cell) {\n var replacement = Optional.none();\n for (var i = index; i < rows.length; i++) {\n var _loop_1 = function (j) {\n var row = rows[i];\n var current = getCell(row, j);\n var isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(function (sub) {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n };\n for (var j = 0; j < cellLength(rows[0]); j++) {\n _loop_1(j);\n }\n }\n });\n }\n return grid;\n };\n\n var value$1 = function (o) {\n var or = function (_opt) {\n return value$1(o);\n };\n var orThunk = function (_f) {\n return value$1(o);\n };\n var map = function (f) {\n return value$1(f(o));\n };\n var mapError = function (_f) {\n return value$1(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = identity;\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 isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value$1);\n };\n var Result = {\n value: value$1,\n error: error,\n fromOption: fromOption\n };\n\n var measure = function (startAddress, gridA, gridB) {\n if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n }\n var rowRemainder = gridA.slice(startAddress.row);\n var colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n var colRequired = cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = cellLength(gridA[0]);\n var colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n var measureHeight = function (gridA, gridB) {\n var rowLengthA = gridA.length;\n var rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n var generateElements = function (amount, row, generators, isLocked) {\n var generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range$1(amount, function (idx) {\n return elementnew(generator(), true, isLocked(idx));\n });\n };\n var rowFill = function (grid, amount, generators, lockedColumns) {\n var exampleRow = grid[grid.length - 1];\n return grid.concat(range$1(amount, function () {\n var generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n var row = clone$1(exampleRow, generator, identity);\n var elements = generateElements(row.cells.length, row, generators, function (idx) {\n return has$1(lockedColumns, idx.toString());\n });\n return setCells(row, elements);\n }));\n };\n var colFill = function (grid, amount, generators, startIndex) {\n return map$1(grid, function (row) {\n var newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n };\n var lockedColFill = function (grid, generators, lockedColumns) {\n return map$1(grid, function (row) {\n return foldl(lockedColumns, function (acc, colNum) {\n var newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n };\n var tailor = function (gridA, delta, generators) {\n var fillCols = delta.colDelta < 0 ? colFill : identity;\n var fillRows = delta.rowDelta < 0 ? rowFill : identity;\n var lockedColumns = getLockedColumnsFromGrid(gridA);\n var gridWidth = cellLength(gridA[0]);\n var isLastColLocked = exists(lockedColumns, function (locked) {\n return locked === gridWidth - 1;\n });\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n var newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = getCell(grid[row], col);\n var matching = curry(comparator, candidate.element);\n var currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator, lockedColumns) {\n var startRow = startAddress.row;\n var startCol = startAddress.column;\n var mergeHeight = gridB.length;\n var mergeWidth = cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth + lockedColumns.length;\n var lockedColumnObj = mapToObject(lockedColumns, always);\n for (var r = startRow; r < endRow; r++) {\n var skippedCol = 0;\n for (var c = startCol; c < endCol; c++) {\n if (lockedColumnObj[c]) {\n skippedCol++;\n continue;\n }\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var gridBColIndex = c - startCol - skippedCol;\n var newCell = getCell(gridB[r - startRow], gridBColIndex);\n var newCellElm = newCell.element;\n var replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n var getValidStartAddress = function (currentStartAddress, grid, lockedColumns) {\n var gridColLength = cellLength(grid[0]);\n var adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n var possibleColAddresses = range$1(gridColLength - currentStartAddress.column, function (num) {\n return num + currentStartAddress.column;\n });\n var validColAddress = find$1(possibleColAddresses, function (num) {\n return forall(lockedColumns, function (col) {\n return col !== num;\n });\n }).getOr(gridColLength - 1);\n return {\n row: adjustedRowAddress,\n column: validColAddress\n };\n };\n var getLockedColumnsWithinBounds = function (startAddress, grid, lockedColumns) {\n return filter$2(lockedColumns, function (colNum) {\n return colNum >= startAddress.column && colNum <= cellLength(grid[0]) + startAddress.column;\n });\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var lockedColumns = getLockedColumnsFromGrid(gridA);\n var validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n var gridBRows = extractGridDetails(gridB).rows;\n var lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n var result = measure(validStartAddress, gridA, gridBRows);\n return result.map(function (diff) {\n var delta = __assign(__assign({}, diff), { colDelta: diff.colDelta - lockedColumnsWithinBounds.length });\n var fittedGrid = tailor(gridA, delta, generator);\n var newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n var newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n var insertCols = function (index, gridA, gridB, generator, comparator) {\n splitCols(gridA, index, comparator, generator.cell);\n var delta = measureHeight(gridB, gridA);\n var fittedNewGrid = tailor(gridB, delta, generator);\n var secondDelta = measureHeight(gridA, fittedNewGrid);\n var fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map$1(fittedOldGrid, function (gridRow, i) {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n var insertRows = function (index, gridA, gridB, generator, comparator) {\n splitRows(gridA, index, comparator, generator.cell);\n var locked = getLockedColumnsFromGrid(gridA);\n var diff = measureWidth(gridA, gridB);\n var delta = __assign(__assign({}, diff), { colDelta: diff.colDelta - locked.length });\n var fittedOldGrid = tailor(gridA, delta, generator);\n var _a = extractGridDetails(fittedOldGrid), oldCols = _a.cols, oldRows = _a.rows;\n var newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n var secondDiff = measureWidth(gridB, gridA);\n var secondDelta = __assign(__assign({}, secondDiff), { colDelta: secondDiff.colDelta + newLocked.length });\n var fittedGridB = lockedColFill(gridB, generator, newLocked);\n var fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return oldCols.concat(oldRows.slice(0, index)).concat(fittedNewGrid).concat(oldRows.slice(index, oldRows.length));\n };\n\n var cloneRow = function (row, cloneCell, comparator, substitution) {\n return clone$1(row, function (elem) {\n return substitution(elem, comparator);\n }, cloneCell);\n };\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var _a = extractGridDetails(grid), rows = _a.rows, cols = _a.cols;\n var before = rows.slice(0, index);\n var after = rows.slice(index);\n var newRow = cloneRow(rows[example], function (ex, c) {\n var withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n var ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n }, comparator, substitution);\n return cols.concat(before).concat([newRow]).concat(after);\n };\n var getElementFor = function (row, column, section, withinSpan, example, comparator, substitution) {\n if (section === 'colgroup' || !withinSpan) {\n var cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map$1(grid, function (row) {\n var withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n var sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n };\n var deleteColumnsAt = function (grid, columns) {\n return bind$2(grid, function (row) {\n var existingCells = row.cells;\n var cells = foldr(columns, function (acc, column) {\n return column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc;\n }, existingCells);\n return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n var _a = extractGridDetails(grid), rows = _a.rows, cols = _a.cols;\n return cols.concat(rows.slice(0, start)).concat(rows.slice(finish + 1));\n };\n\n var replace = function (cell, comparator, substitute) {\n return elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n };\n var replaceIn = function (grid, targets, comparator, substitute, replacer) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element, target.element);\n });\n };\n return map$1(grid, function (row) {\n return mapCells(row, function (cell) {\n return isTarget(cell) ? replacer(cell, comparator, substitute) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n var targets = bind$2(rows, function (row, i) {\n var alreadyAdded = notStartRow(rows, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution, replace);\n };\n var replaceRow = function (grid, index, section, comparator, substitution, tableSection) {\n var _a = extractGridDetails(grid), cols = _a.cols, rows = _a.rows;\n var targetRow = rows[index];\n var targets = bind$2(targetRow.cells, function (item, i) {\n var alreadyAdded = notStartRow(rows, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n var newRows = __spreadArray([], rows);\n newRows[index] = tableSection.transformRow(targetRow, section);\n return replaceIn(cols.concat(newRows), targets, comparator, substitution, tableSection.transformCell);\n };\n var replaceCell = function (grid, rowIndex, columnIndex, comparator, substitution) {\n var rows = extractGridDetails(grid).rows;\n var targetRow = rows[rowIndex];\n var targetCell = getCell(targetRow, columnIndex);\n return replaceIn(grid, [targetCell], comparator, substitution, replace);\n };\n\n var uniqueColumns = function (details) {\n var uniqueCheck = function (rest, detail) {\n var columnExists = exists(rest, function (currentDetail) {\n return currentDetail.column === detail.column;\n });\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort(function (detailA, detailB) {\n return detailA.column - detailB.column;\n });\n };\n\n var isCol = isTag('col');\n var isColgroup = isTag('colgroup');\n var isRow$1 = function (element) {\n return name(element) === 'tr' || isColgroup(element);\n };\n var elementToData = function (element) {\n var colspan = getAttrValue(element, 'colspan', 1);\n var rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element: element,\n colspan: colspan,\n rowspan: rowspan\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n var nuCell = function (data) {\n return isCol(data.element) ? generators.col(data) : generators.cell(data);\n };\n var nuRow = function (data) {\n return isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n };\n var add = function (element) {\n if (isRow$1(element)) {\n return nuRow({ element: element });\n } else {\n var replacement = nuCell(toData(element));\n recent = Optional.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n }\n };\n var recent = Optional.none();\n var getOrInit = function (element, comparator) {\n return recent.fold(function () {\n return add(element);\n }, function (p) {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return { getOrInit: getOrInit };\n };\n var transform = function (tag, scope) {\n return function (generators) {\n var list = [];\n var find = function (element, comparator) {\n return find$1(list, function (x) {\n return comparator(x.item, element);\n });\n };\n var makeNew = function (element) {\n var attrs = isUndefined(scope) ? {} : { scope: scope };\n var cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\n if (isRow$1(element) || isCol(element)) {\n return element;\n } else {\n return find(element, comparator).fold(function () {\n return makeNew(element);\n }, function (p) {\n return comparator(element, p.item) ? p.sub : makeNew(element);\n });\n }\n };\n return { replaceOrInit: replaceOrInit };\n };\n };\n var getScopeAttribute = function (cell) {\n return getOpt(cell, 'scope').map(function (attribute) {\n return attribute.substr(0, 3);\n });\n };\n var merging = function (generators) {\n var unmerge = function (cell) {\n var scope = getScopeAttribute(cell);\n scope.each(function (attribute) {\n return set$2(cell, 'scope', attribute);\n });\n return function () {\n var raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$6(raw, 'width');\n remove$6(cell, 'width');\n scope.each(function (attribute) {\n return set$2(raw, 'scope', attribute);\n });\n return raw;\n };\n };\n var merge = function (cells) {\n var getScopeProperty = function () {\n var stringAttributes = cat(map$1(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n var baseScope_1 = stringAttributes[0];\n var scopes_1 = [\n 'row',\n 'col'\n ];\n var isMixed = exists(stringAttributes, function (attribute) {\n return attribute !== baseScope_1 && contains$2(scopes_1, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope_1);\n }\n };\n remove$6(cells[0], 'width');\n getScopeProperty().fold(function () {\n return remove$7(cells[0], 'scope');\n }, function (attribute) {\n return set$2(cells[0], 'scope', attribute + 'group');\n });\n return constant(cells[0]);\n };\n return {\n unmerge: unmerge,\n merge: merge\n };\n };\n var Generators = {\n modification: modification,\n transform: transform,\n merging: merging\n };\n\n var blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n var isList$1 = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains$2([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock$1 = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains$2(blockList, tagName);\n };\n var isEmptyTag$1 = function (universe, item) {\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n var universe$1 = DomUniverse();\n var isBlock = function (element) {\n return isBlock$1(universe$1, element);\n };\n var isList = function (element) {\n return isList$1(universe$1, element);\n };\n var isEmptyTag = function (element) {\n return isEmptyTag$1(universe$1, element);\n };\n\n var merge = 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$9(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor$2(el, isList).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (isBlock(rightSibling)) {\n return true;\n }\n if (isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n 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(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n var markContent = function () {\n var content = bind$2(cells, function (cell) {\n var children = children$3(cell);\n return advancedBr(children) ? [] : children.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append(cells[0], contents);\n };\n\n var isEditable = function (elem) {\n return isEditable$1(elem, true);\n };\n var prune = function (table) {\n var cells = cells$1(table);\n if (cells.length === 0) {\n remove$5(table);\n }\n };\n var outcome = function (grid, cursor) {\n return {\n grid: grid,\n cursor: cursor\n };\n };\n var findEditableCursorPosition = function (rows) {\n return findMap(rows, function (row) {\n return findMap(row.cells, function (cell) {\n var elem = cell.element;\n return someIf(isEditable(elem), elem);\n });\n });\n };\n var elementFromGrid = function (grid, row, column) {\n var _a, _b;\n var rows = extractGridDetails(grid).rows;\n return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(function () {\n return findEditableCursorPosition(rows);\n });\n };\n var bundle = function (grid, row, column) {\n var cursorElement = elementFromGrid(grid, row, column);\n return outcome(grid, cursorElement);\n };\n var uniqueRows = function (details) {\n var rowCompilation = function (rest, detail) {\n var rowExists = exists(rest, function (currentDetail) {\n return currentDetail.row === detail.row;\n });\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort(function (detailA, detailB) {\n return detailA.row - detailB.row;\n });\n };\n var opInsertRowsBefore = function (grid, details, comparator, genWrappers) {\n var targetIndex = details[0].row;\n var rows = uniqueRows(details);\n var newGrid = foldr(rows, function (acc, row) {\n var newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid: grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n var opInsertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var target = rows[rows.length - 1];\n var targetIndex = target.row + target.rowspan;\n var newGrid = foldr(rows, function (newG, row) {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n var opInsertColumnsBefore = function (grid, extractDetail, comparator, genWrappers) {\n var details = extractDetail.details;\n var columns = uniqueColumns(details);\n var targetIndex = columns[0].column;\n var newGrid = foldr(columns, function (acc, col) {\n var newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid: grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n var opInsertColumnsAfter = function (grid, extractDetail, comparator, genWrappers) {\n var details = extractDetail.details;\n var target = details[details.length - 1];\n var targetIndex = target.column + target.colspan;\n var columns = uniqueColumns(details);\n var newGrid = foldr(columns, function (newG, col) {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n var opMakeColumnsHeader = function (initialGrid, details, comparator, genWrappers) {\n var replacer = function (currentGrid, column) {\n return replaceColumn(currentGrid, column.column, comparator, genWrappers.replaceOrInit);\n };\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var opMakeCellsHeader = function (initialGrid, details, comparator, genWrappers) {\n var replacer = function (currentGrid, detail) {\n return replaceCell(currentGrid, detail.row, detail.column, comparator, genWrappers.replaceOrInit);\n };\n var newGrid = foldl(details, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var opUnmakeColumnsHeader = function (initialGrid, details, comparator, genWrappers) {\n var replacer = function (currentGrid, column) {\n return replaceColumn(currentGrid, column.column, comparator, genWrappers.replaceOrInit);\n };\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var opUnmakeCellsHeader = function (initialGrid, details, comparator, genWrappers) {\n var replacer = function (currentGrid, detail) {\n return replaceCell(currentGrid, detail.row, detail.column, comparator, genWrappers.replaceOrInit);\n };\n var newGrid = foldl(details, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n var makeRowsSection = function (section) {\n return function (initialGrid, details, comparator, genWrappers, tableSection) {\n var replacer = function (currentGrid, detail) {\n return replaceRow(currentGrid, detail.row, section, comparator, genWrappers.replaceOrInit, tableSection);\n };\n var rows = uniqueRows(details);\n var newGrid = foldl(rows, replacer, initialGrid);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n };\n var opMakeRowsHeader = makeRowsSection('thead');\n var opMakeRowsBody = makeRowsSection('tbody');\n var opMakeRowsFooter = makeRowsSection('tfoot');\n var opEraseColumns = function (grid, extractDetail, _comparator, _genWrappers) {\n var columns = uniqueColumns(extractDetail.details);\n var newGrid = deleteColumnsAt(grid, map$1(columns, function (column) {\n return column.column;\n }));\n var maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n };\n 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 maxRowIndex = newGrid.length > 0 ? newGrid.length - 1 : 0;\n return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n };\n var opMergeCells = function (grid, mergable, comparator, genWrappers) {\n var cells = mergable.cells;\n merge(cells);\n var newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n var opUnmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var unmerge$1 = function (b, cell) {\n return unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n };\n var newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n var opPasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n var startAddress = address(pasteDetails.row, pasteDetails.column);\n var mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Optional.some(pasteDetails.element));\n }, function (newGrid) {\n return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n });\n };\n var gridifyRows = function (rows, generators, context) {\n var pasteDetails = fromPastedRows(rows, context.section);\n var wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n var opPasteColsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[0].column;\n var context = rows[pasteDetails.cells[0].row];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n var opPasteColsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n var context = rows[pasteDetails.cells[0].row];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n var opPasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[0].row;\n var context = rows[index];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n var opPasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var rows = extractGridDetails(grid).rows;\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n var context = rows[pasteDetails.cells[0].row];\n var gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n var mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n var opGetColumnsType = 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$1(map$1(house.all, function (row) {\n return filter$2(row.cells, function (cell) {\n return cell.column >= minColRange && cell.column < maxColRange;\n });\n }));\n return findCommonCellType(selectedColumnCells);\n }).getOr('');\n };\n var opGetCellsType = function (table, target) {\n var house = Warehouse.fromTable(table);\n var details = onCells(house, target);\n return details.bind(findCommonCellType).getOr('');\n };\n var opGetRowsType = 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 minRowRange = selectedCells[0].row;\n var maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n var selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n var resize = function (table, list, details, behaviours) {\n return adjustWidthTo(table, list, details, behaviours.sizing);\n };\n var adjustAndRedistributeWidths = function (table, list, details, behaviours) {\n return adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n };\n var firstColumnIsLocked = function (_warehouse, details) {\n return exists(details, function (detail) {\n return detail.column === 0 && detail.isLocked;\n });\n };\n var lastColumnIsLocked = function (warehouse, details) {\n return exists(details, function (detail) {\n return detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked;\n });\n };\n var getColumnsWidth = function (warehouse, details) {\n var columns$1 = columns(warehouse);\n var uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, function (acc, detail) {\n var column = columns$1[detail.column];\n var colWidth = column.map(getOuter$2).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n var insertColumnsExtractor = function (before) {\n return function (warehouse, target) {\n return onCells(warehouse, target).filter(function (details) {\n var checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(function (details) {\n return {\n details: details,\n pixelDelta: getColumnsWidth(warehouse, details)\n };\n });\n };\n };\n var eraseColumnsExtractor = function (warehouse, target) {\n return onUnlockedCells(warehouse, target).map(function (details) {\n return {\n details: details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n };\n });\n };\n var pasteColumnsExtractor = function (before) {\n return function (warehouse, target) {\n return onPasteByEditor(warehouse, target).filter(function (details) {\n var checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n };\n };\n var insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n var insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n var insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n var insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n var eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n var eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n var makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, Generators.transform('th', 'row'));\n var unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, Generators.transform('td', null));\n var makeRowsHeader = run(opMakeRowsHeader, onUnlockedCells, noop, noop, Generators.transform('th', 'col'));\n var makeRowsBody = run(opMakeRowsBody, onUnlockedCells, noop, noop, Generators.transform('td', null));\n var makeRowsFooter = run(opMakeRowsFooter, onUnlockedCells, noop, noop, Generators.transform('td', null));\n var makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, Generators.transform('th'));\n var unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, Generators.transform('td'));\n var mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n var unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n var pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n var pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n var pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n var pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n var pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n var getColumnsType = opGetColumnsType;\n var getCellsType = opGetCellsType;\n var getRowsType = opGetRowsType;\n\n var TableActions = function (editor, cellSelection, lazyWire) {\n var isTableBody = function (editor) {\n return name(getBody(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n return isTableBody(editor) === false || getGridSize(table).rows > 1;\n };\n var lastColumnGuard = function (table) {\n return isTableBody(editor) === false || getGridSize(table).columns > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n var getTableSectionType = function (table) {\n switch (getTableHeaderType(editor)) {\n case 'section':\n return TableSection.section();\n case 'sectionCells':\n return TableSection.sectionCells();\n case 'cells':\n return TableSection.cells();\n default:\n return TableSection.getTableSectionType(table, 'section');\n }\n };\n var setSelectionFromAction = function (table, result) {\n return result.cursor.fold(function () {\n var cells = cells$1(table);\n return head(cells).filter(inBody).map(function (firstCell) {\n cellSelection.clear(table);\n var rng = editor.dom.createRng();\n rng.selectNode(firstCell.dom);\n editor.selection.setRng(rng);\n set$2(firstCell, 'data-mce-selected', '1');\n return rng;\n });\n }, function (cell) {\n var des = freefallRtl(cell);\n var rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n editor.selection.setRng(rng);\n cellSelection.clear(table);\n return Optional.some(rng);\n });\n };\n var execute = function (operation, guard, mutate, lazyWire, effect) {\n return function (table, target, noEvents) {\n if (noEvents === void 0) {\n noEvents = false;\n }\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = SugarElement.fromDom(editor.getDoc());\n var generators = cellOperations(mutate, doc, cloneFormats);\n var behaviours = {\n sizing: get$4(editor, table),\n resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n section: getTableSectionType(table)\n };\n return guard(table) ? operation(wire, table, target, generators, behaviours).bind(function (result) {\n each$2(result.newRows, function (row) {\n fireNewRow(editor, row.dom);\n });\n each$2(result.newCells, function (cell) {\n fireNewCell(editor, cell.dom);\n });\n var range = setSelectionFromAction(table, result);\n if (inBody(table)) {\n removeDataStyle(table);\n if (!noEvents) {\n fireTableModified(editor, table.dom, effect);\n }\n }\n return range.map(function (rng) {\n return {\n rng: rng,\n effect: effect\n };\n });\n }) : Optional.none();\n };\n };\n var deleteRow = execute(eraseRows, lastRowGuard, noop, lazyWire, structureModified);\n var deleteColumn = execute(eraseColumns, lastColumnGuard, noop, lazyWire, structureModified);\n var insertRowsBefore$1 = execute(insertRowsBefore, always, noop, lazyWire, structureModified);\n var insertRowsAfter$1 = execute(insertRowsAfter, always, noop, lazyWire, structureModified);\n var insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, lazyWire, structureModified);\n var insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, lazyWire, structureModified);\n var mergeCells$1 = execute(mergeCells, always, noop, lazyWire, structureModified);\n var unmergeCells$1 = execute(unmergeCells, always, noop, lazyWire, structureModified);\n var pasteColsBefore$1 = execute(pasteColsBefore, always, noop, lazyWire, structureModified);\n var pasteColsAfter$1 = execute(pasteColsAfter, always, noop, lazyWire, structureModified);\n var pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, lazyWire, structureModified);\n var pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, lazyWire, structureModified);\n var pasteCells$1 = execute(pasteCells, always, noop, lazyWire, styleAndStructureModified);\n var makeCellsHeader$1 = execute(makeCellsHeader, always, noop, lazyWire, structureModified);\n var unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, lazyWire, structureModified);\n var makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, lazyWire, structureModified);\n var unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, lazyWire, structureModified);\n var makeRowsHeader$1 = execute(makeRowsHeader, always, noop, lazyWire, structureModified);\n var makeRowsBody$1 = execute(makeRowsBody, always, noop, lazyWire, structureModified);\n var makeRowsFooter$1 = execute(makeRowsFooter, always, noop, lazyWire, structureModified);\n var getTableCellType = getCellsType;\n var getTableColType = getColumnsType;\n var getTableRowType = getRowsType;\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 makeCellsHeader: makeCellsHeader$1,\n unmakeCellsHeader: unmakeCellsHeader$1,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n makeRowsHeader: makeRowsHeader$1,\n makeRowsBody: makeRowsBody$1,\n makeRowsFooter: makeRowsFooter$1,\n getTableRowType: getTableRowType,\n getTableCellType: getTableCellType,\n getTableColType: getTableColType\n };\n };\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n var tableHeaderCell = function () {\n return SugarElement.fromTag('th');\n };\n var tableCell = function () {\n return SugarElement.fromTag('td');\n };\n var tableColumn = function () {\n return SugarElement.fromTag('col');\n };\n var createRow = function (columns, rowHeaders, columnHeaders, rowIndex) {\n var tr = SugarElement.fromTag('tr');\n for (var j = 0; j < columns; j++) {\n var td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set$2(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set$2(td, 'scope', 'col');\n }\n append$1(td, SugarElement.fromTag('br'));\n append$1(tr, td);\n }\n return tr;\n };\n var createGroupRow = function (columns) {\n var columnGroup = SugarElement.fromTag('colgroup');\n range$1(columns, function () {\n return append$1(columnGroup, tableColumn());\n });\n return columnGroup;\n };\n var createRows = function (rows, columns, rowHeaders, columnHeaders) {\n return range$1(rows, function (r) {\n return createRow(columns, rowHeaders, columnHeaders, r);\n });\n };\n var render = function (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = SugarElement.fromTag('table');\n var rowHeadersGoInThead = headerType !== 'cells';\n setAll(table, renderOpts.styles);\n setAll$1(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append$1(table, createGroupRow(columns));\n }\n var actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n var thead = SugarElement.fromTag('thead');\n append$1(table, thead);\n var theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n var theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append(thead, theadRows);\n }\n var tbody = SugarElement.fromTag('tbody');\n append$1(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(tbody, tbodyRows);\n return table;\n };\n\n var get$2 = function (element) {\n return element.dom.innerHTML;\n };\n var getOuter = function (element) {\n var container = SugarElement.fromTag('div');\n var clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$2(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(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each$2(descendants(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom);\n each$2(descendants(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n var isPercentage = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert = function (editor, columns, rows, colHeaders, rowHeaders) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n colGroups: useColumnGroup(editor)\n };\n editor.undoManager.ignore(function () {\n var table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set$2(table, 'data-mce-id', '__mce');\n var html = getOuter(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant(getBody(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(defaultStyles.width)) {\n enforcePercentage(editor, table);\n }\n removeDataStyle(table);\n remove$7(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).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$1(elems, function (e) {\n return e.dom;\n });\n });\n };\n };\n var setClipboardElements = function (setClipboard) {\n return function (elems) {\n var elmsOpt = elems.length > 0 ? Optional.some(fromDom(elems)) : Optional.none();\n setClipboard(elmsOpt);\n };\n };\n var insertTable = function (editor) {\n return function (columns, rows, options) {\n if (options === void 0) {\n options = {};\n }\n var table = insertTableWithDataValidation(editor, rows, columns, options, 'Invalid values for insertTable - rows and columns values are required to insert a table.');\n editor.undoManager.add();\n return table;\n };\n };\n var getApi = function (editor, clipboard, resizeHandler, selectionTargets) {\n return {\n insertTable: insertTable(editor),\n setClipboardRows: setClipboardElements(clipboard.setRows),\n getClipboardRows: getClipboardElements(clipboard.getRows),\n setClipboardCols: setClipboardElements(clipboard.setColumns),\n getClipboardCols: getClipboardElements(clipboard.getColumns),\n resizeHandler: resizeHandler,\n selectionTargets: selectionTargets\n };\n };\n\n var constrainSpan = function (element, property, value) {\n var currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove$7(element, property);\n } else {\n set$2(element, property, Math.min(value, currentColspan));\n }\n };\n var generateColGroup = function (house, minColRange, maxColRange) {\n if (Warehouse.hasColumns(house)) {\n var colsToCopy = filter$2(Warehouse.justColumns(house), function (col) {\n return col.column >= minColRange && col.column < maxColRange;\n });\n var copiedCols = map$1(colsToCopy, function (c) {\n var clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n var fakeColgroup = SugarElement.fromTag('colgroup');\n append(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n var generateRows = function (house, minColRange, maxColRange) {\n return map$1(house.all, function (row) {\n var cellsToCopy = filter$2(row.cells, function (cell) {\n return cell.column >= minColRange && cell.column < maxColRange;\n });\n var copiedCells = map$1(cellsToCopy, function (cell) {\n var clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n var fakeTR = SugarElement.fromTag('tr');\n append(fakeTR, copiedCells);\n return fakeTR;\n });\n };\n var copyCols = function (table, target) {\n var house = Warehouse.fromTable(table);\n var details = onUnlockedCells(house, target);\n return details.map(function (selectedCells) {\n var lastSelectedCell = selectedCells[selectedCells.length - 1];\n var minColRange = selectedCells[0].column;\n var maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n var fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n var fakeRows = generateRows(house, minColRange, maxColRange);\n return __spreadArray(__spreadArray([], fakeColGroups), fakeRows);\n });\n };\n\n var copyRows = function (table, target, generators) {\n var warehouse = Warehouse.fromTable(table);\n var details = onCells(warehouse, target);\n return details.bind(function (selectedCells) {\n var grid = toGrid(warehouse, generators, false);\n var rows = extractGridDetails(grid).rows;\n var slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n var filteredGrid = bind$2(slicedGrid, function (row) {\n var newCells = filter$2(row.cells, function (cell) {\n return !cell.isLocked;\n });\n return newCells.length > 0 ? [__assign(__assign({}, row), { cells: newCells })] : [];\n });\n var slicedDetails = toDetailList(filteredGrid);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(function (slicedDetails) {\n return copy(slicedDetails);\n });\n };\n\n var global$2 = 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$2.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$2.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n\n var verticalAlignValues = [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ];\n\n 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 normalizeHex = function (hex) {\n return removeLeading(hex, '#').toUpperCase();\n };\n var fromString$1 = function (hex) {\n return isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n };\n var toHex = function (component) {\n var hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n var fromRgba = function (rgbaColour) {\n var value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n var 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 fromStringValues = function (red, green, blue, alpha) {\n var r = parseInt(red, 10);\n var g = parseInt(green, 10);\n var b = parseInt(blue, 10);\n var a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n var fromString = function (rgbaString) {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n var rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n var rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n\n var anyToHex = function (color) {\n return fromString$1(color).orThunk(function () {\n return fromString(color).map(fromRgba);\n }).getOrThunk(function () {\n var canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n var canvasContext = canvas.getContext('2d');\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.fillStyle = '#FFFFFF';\n canvasContext.fillStyle = color;\n canvasContext.fillRect(0, 0, 1, 1);\n var rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n var r = rgba[0];\n var g = rgba[1];\n var b = rgba[2];\n var a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\n };\n\n var singleton = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var get = function () {\n return subject.get();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n get: get,\n set: set\n };\n };\n var unbindable = function () {\n return singleton(function (s) {\n return s.unbind();\n });\n };\n var value = function () {\n var subject = singleton(noop);\n var on = function (f) {\n return subject.get().each(f);\n };\n return __assign(__assign({}, subject), { on: on });\n };\n\n var onSetupToggle = function (editor, selections, formatName, formatValue) {\n return function (api) {\n var boundCallback = unbindable();\n var isNone = isEmpty$1(formatValue);\n var init = function () {\n var selectedCells = getCellsFromSelection(selections);\n var checkNode = function (cell) {\n return editor.formatter.match(formatName, { value: formatValue }, cell.dom, isNone);\n };\n if (isNone) {\n api.setActive(!exists(selectedCells, checkNode));\n boundCallback.set(editor.formatter.formatChanged(formatName, function (match) {\n return api.setActive(!match);\n }, true));\n } else {\n api.setActive(forall(selectedCells, checkNode));\n boundCallback.set(editor.formatter.formatChanged(formatName, api.setActive, false, { value: formatValue }));\n }\n };\n editor.initialized ? init() : editor.on('init', init);\n return boundCallback.clear;\n };\n };\n var isListGroup = function (item) {\n return hasNonNullableKey(item, 'menu');\n };\n var buildListItems = function (items) {\n return map$1(items, function (item) {\n var text = item.text || item.title;\n if (isListGroup(item)) {\n return {\n text: text,\n items: buildListItems(item.menu)\n };\n } else {\n return {\n text: text,\n value: item.value\n };\n }\n });\n };\n var buildMenuItems = function (editor, selections, items, format, onAction) {\n return map$1(items, function (item) {\n var text = item.text || item.title;\n if (isListGroup(item)) {\n return {\n type: 'nestedmenuitem',\n text: text,\n getSubmenuItems: function () {\n return buildMenuItems(editor, selections, item.menu, format, onAction);\n }\n };\n } else {\n return {\n text: text,\n type: 'togglemenuitem',\n onAction: function () {\n return onAction(item.value);\n },\n onSetup: onSetupToggle(editor, selections, format, item.value)\n };\n }\n });\n };\n var applyTableCellStyle = function (editor, style) {\n return function (value) {\n var _a;\n editor.execCommand('mceTableApplyCellStyle', false, (_a = {}, _a[style] = value, _a));\n };\n };\n var filterNoneItem = function (list) {\n return bind$2(list, function (item) {\n if (isListGroup(item)) {\n return [__assign(__assign({}, item), { menu: filterNoneItem(item.menu) })];\n } else {\n return isNotEmpty(item.value) ? [item] : [];\n }\n });\n };\n var generateMenuItemsCallback = function (editor, selections, items, format, onAction) {\n return function (callback) {\n return callback(buildMenuItems(editor, selections, items, format, onAction));\n };\n };\n var buildColorMenu = function (editor, colorList, style) {\n var colorMap = map$1(colorList, function (entry) {\n return {\n text: entry.title,\n value: '#' + anyToHex(entry.value).value,\n type: 'choiceitem'\n };\n });\n return [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n initData: {\n colors: colorMap.length > 0 ? colorMap : undefined,\n allowCustomColors: false\n },\n onAction: function (data) {\n var _a;\n var value = data.value === 'remove' ? '' : data.value;\n editor.execCommand('mceTableApplyCellStyle', false, (_a = {}, _a[style] = value, _a));\n }\n }];\n };\n var changeRowHeader = function (editor) {\n return function () {\n var currentType = editor.queryCommandValue('mceTableRowType');\n var newType = currentType === 'header' ? 'body' : 'header';\n editor.execCommand('mceTableRowType', false, { type: newType });\n };\n };\n var changeColumnHeader = function (editor) {\n return function () {\n var currentType = editor.queryCommandValue('mceTableColType');\n var newType = currentType === 'th' ? 'td' : 'th';\n editor.execCommand('mceTableColType', false, { type: newType });\n };\n };\n\n var getClassList$1 = function (editor) {\n var classes = buildListItems(getCellClassList(editor));\n if (classes.length > 0) {\n return Optional.some({\n name: 'class',\n type: 'listbox',\n label: 'Class',\n items: classes\n });\n }\n return Optional.none();\n };\n var children = [\n {\n name: 'width',\n type: 'input',\n label: 'Width'\n },\n {\n name: 'height',\n type: 'input',\n label: 'Height'\n },\n {\n name: 'celltype',\n type: 'listbox',\n label: 'Cell type',\n items: [\n {\n text: 'Cell',\n value: 'td'\n },\n {\n text: 'Header cell',\n value: 'th'\n }\n ]\n },\n {\n name: 'scope',\n type: 'listbox',\n label: 'Scope',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Row',\n value: 'row'\n },\n {\n text: 'Column',\n value: 'col'\n },\n {\n text: 'Row group',\n value: 'rowgroup'\n },\n {\n text: 'Column group',\n value: 'colgroup'\n }\n ]\n },\n {\n name: 'halign',\n type: 'listbox',\n label: 'Horizontal align',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n name: 'valign',\n type: 'listbox',\n label: 'Vertical align',\n items: verticalAlignValues\n }\n ];\n var getItems$2 = function (editor) {\n return children.concat(getClassList$1(editor).toArray());\n };\n\n var getAdvancedTab = function (editor, dialogName) {\n var emptyBorderStyle = [{\n text: 'Select...',\n value: ''\n }];\n var advTabItems = [\n {\n name: 'borderstyle',\n type: 'listbox',\n label: 'Border style',\n items: emptyBorderStyle.concat(buildListItems(getTableBorderStyles(editor)))\n },\n {\n name: 'bordercolor',\n type: 'colorinput',\n label: 'Border color'\n },\n {\n name: 'backgroundcolor',\n type: 'colorinput',\n label: 'Background color'\n }\n ];\n 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\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 rgbToHex = function (dom) {\n return function (value) {\n return startsWith(value, 'rgb') ? dom.toHex(value) : value;\n };\n };\n var extractAdvancedStyles = function (dom, elm) {\n var element = SugarElement.fromDom(elm);\n return {\n borderwidth: getRaw$2(element, 'border-width').getOr(''),\n borderstyle: getRaw$2(element, 'border-style').getOr(''),\n bordercolor: getRaw$2(element, 'border-color').map(rgbToHex(dom)).getOr(''),\n backgroundcolor: getRaw$2(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$2(comparisonData, function (items) {\n each$2(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 getAlignment = function (formats, formatName, editor, elm) {\n return find$1(formats, function (name) {\n return !isUndefined(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$c(style, 'border-style').getOr(''),\n bordercolor: rgbToHex(dom)(get$c(style, 'border-color').getOr('')),\n backgroundcolor: rgbToHex(dom)(get$c(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$c(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$c(style, 'border-spacing').or(get$c(attrs, 'cellspacing')).fold(function () {\n return {};\n }, function (cellspacing) {\n return { cellspacing: cellspacing };\n });\n var padding = get$c(style, 'border-padding').or(get$c(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 getRowType = function (elm) {\n return table(SugarElement.fromDom(elm)).map(function (table) {\n var target = { selection: fromDom(elm.cells) };\n return getRowsType(table, target);\n }).getOr('');\n };\n var extractDataFromTableElement = function (editor, elm, hasAdvTableTab) {\n var getBorder = function (dom, elm) {\n var optBorderWidth = getRaw$2(SugarElement.fromDom(elm), 'border-width');\n if (shouldStyleWithCss(editor) && optBorderWidth.isSome()) {\n return optBorderWidth.getOr('');\n }\n return dom.getAttrib(elm, 'border') || getTDTHOverallStyle(editor.dom, elm, 'border-width') || getTDTHOverallStyle(editor.dom, elm, 'border');\n };\n var dom = editor.dom;\n var cellspacing = shouldStyleWithCss(editor) ? dom.getStyle(elm, 'border-spacing') || dom.getAttrib(elm, 'cellspacing') : dom.getAttrib(elm, 'cellspacing') || dom.getStyle(elm, 'border-spacing');\n var cellpadding = shouldStyleWithCss(editor) ? getTDTHOverallStyle(dom, elm, 'padding') || dom.getAttrib(elm, 'cellpadding') : dom.getAttrib(elm, 'cellpadding') || getTDTHOverallStyle(dom, elm, 'padding');\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: cellspacing,\n cellpadding: cellpadding,\n border: getBorder(dom, elm),\n caption: !!dom.select('caption', elm)[0],\n class: dom.getAttrib(elm, 'class', ''),\n align: getHAlignment(editor, elm)\n }, hasAdvTableTab ? extractAdvancedStyles(dom, elm) : {});\n };\n var extractDataFromRowElement = function (editor, elm, hasAdvancedRowTab) {\n var dom = editor.dom;\n return __assign({\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n class: dom.getAttrib(elm, 'class', ''),\n type: getRowType(elm),\n align: getHAlignment(editor, elm)\n }, hasAdvancedRowTab ? extractAdvancedStyles(dom, elm) : {});\n };\n var extractDataFromCellElement = function (editor, cell, hasAdvancedCellTab, column) {\n var dom = editor.dom;\n var colElm = column.getOr(cell);\n var getStyle = function (element, style) {\n return dom.getStyle(element, style) || dom.getAttrib(element, style);\n };\n return __assign({\n width: getStyle(colElm, 'width'),\n height: getStyle(cell, 'height'),\n scope: dom.getAttrib(cell, 'scope'),\n celltype: getNodeName(cell),\n class: dom.getAttrib(cell, 'class', ''),\n halign: getHAlignment(editor, cell),\n valign: getVAlignment(editor, cell)\n }, hasAdvancedCellTab ? extractAdvancedStyles(dom, cell) : {});\n };\n\n var getSelectedCells = function (table, cells) {\n var warehouse = Warehouse.fromTable(table);\n var allCells = Warehouse.justCells(warehouse);\n var filtered = filter$2(allCells, function (cellA) {\n return exists(cells, function (cellB) {\n return eq$1(cellA.element, cellB);\n });\n });\n return map$1(filtered, function (cell) {\n return {\n element: cell.element.dom,\n column: Warehouse.getColumnAt(warehouse, cell.column).map(function (col) {\n return col.element.dom;\n })\n };\n });\n };\n var updateSimpleProps$1 = function (modifier, colModifier, data) {\n modifier.setAttrib('scope', data.scope);\n modifier.setAttrib('class', data.class);\n modifier.setStyle('height', addPxSuffix(data.height));\n colModifier.setStyle('width', addPxSuffix(data.width));\n };\n var updateAdvancedProps$1 = 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 applyStyleData$1 = function (editor, cells, data) {\n var isSingleCell = cells.length === 1;\n each$2(cells, function (item) {\n var cellElm = item.element;\n var modifier = isSingleCell ? DomModifier.normal(editor, cellElm) : DomModifier.ifTruthy(editor, cellElm);\n var colModifier = item.column.map(function (col) {\n return isSingleCell ? DomModifier.normal(editor, col) : DomModifier.ifTruthy(editor, col);\n }).getOr(modifier);\n updateSimpleProps$1(modifier, colModifier, data);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps$1(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 applyStructureData$1 = function (editor, data) {\n editor.execCommand('mceTableCellType', false, {\n type: data.celltype,\n no_events: true\n });\n };\n var applyCellData = function (editor, cells, oldData, data) {\n var modifiedData = filter$1(data, function (value, key) {\n return oldData[key] !== value;\n });\n if (size(modifiedData) > 0 && cells.length >= 1) {\n table(cells[0]).each(function (table) {\n var selectedCells = getSelectedCells(table, cells);\n var styleModified = size(filter$1(modifiedData, function (_value, key) {\n return key !== 'scope' && key !== 'celltype';\n })) > 0;\n var structureModified = has$1(modifiedData, 'celltype');\n if (styleModified || has$1(modifiedData, 'scope')) {\n applyStyleData$1(editor, selectedCells, data);\n }\n if (structureModified) {\n applyStructureData$1(editor, data);\n }\n fireTableModified(editor, table.dom, {\n structure: structureModified,\n style: styleModified\n });\n });\n }\n };\n var onSubmitCellForm = function (editor, cells, oldData, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n applyCellData(editor, cells, oldData, data);\n editor.focus();\n });\n };\n var getData = function (editor, cells) {\n var cellsData = table(cells[0]).map(function (table) {\n return map$1(getSelectedCells(table, cells), function (item) {\n return extractDataFromCellElement(editor, item.element, hasAdvancedCellTab(editor), item.column);\n });\n });\n return getSharedValues(cellsData.getOrDie());\n };\n var open$2 = function (editor, selections) {\n var cells = getCellsFromSelection(selections);\n if (cells.length === 0) {\n return;\n }\n var data = getData(editor, cells);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems$2(editor)\n },\n getAdvancedTab(editor, 'cell')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: getItems$2(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Cell Properties',\n size: 'normal',\n body: hasAdvancedCellTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitCellForm, editor, cells, data)\n });\n };\n\n var getClassList = function (editor) {\n var classes = buildListItems(getRowClassList(editor));\n if (classes.length > 0) {\n return Optional.some({\n name: 'class',\n type: 'listbox',\n label: 'Class',\n items: classes\n });\n }\n return Optional.none();\n };\n var formChildren = [\n {\n type: 'listbox',\n name: 'type',\n label: 'Row type',\n items: [\n {\n text: 'Header',\n value: 'header'\n },\n {\n text: 'Body',\n value: 'body'\n },\n {\n text: 'Footer',\n value: 'footer'\n }\n ]\n },\n {\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'Height',\n name: 'height',\n type: 'input'\n }\n ];\n var getItems$1 = function (editor) {\n return formChildren.concat(getClassList(editor).toArray());\n };\n\n var updateSimpleProps = function (modifier, data) {\n modifier.setAttrib('class', data.class);\n modifier.setStyle('height', addPxSuffix(data.height));\n };\n var updateAdvancedProps = 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 applyStyleData = function (editor, rows, data, oldData) {\n var isSingleRow = rows.length === 1;\n each$2(rows, function (rowElm) {\n var modifier = isSingleRow ? DomModifier.normal(editor, rowElm) : DomModifier.ifTruthy(editor, rowElm);\n updateSimpleProps(modifier, data);\n if (hasAdvancedRowTab(editor)) {\n updateAdvancedProps(modifier, data);\n }\n if (data.align !== oldData.align) {\n unApplyAlign(editor, rowElm);\n applyAlign(editor, rowElm, data.align);\n }\n });\n };\n var applyStructureData = function (editor, data) {\n editor.execCommand('mceTableRowType', false, {\n type: data.type,\n no_events: true\n });\n };\n var applyRowData = function (editor, rows, oldData, data) {\n var modifiedData = filter$1(data, function (value, key) {\n return oldData[key] !== value;\n });\n if (size(modifiedData) > 0) {\n var typeModified_1 = has$1(modifiedData, 'type');\n var styleModified_1 = typeModified_1 ? size(modifiedData) > 1 : true;\n if (styleModified_1) {\n applyStyleData(editor, rows, data, oldData);\n }\n if (typeModified_1) {\n applyStructureData(editor, data);\n }\n table(SugarElement.fromDom(rows[0])).each(function (table) {\n return fireTableModified(editor, table.dom, {\n structure: typeModified_1,\n style: styleModified_1\n });\n });\n }\n };\n var onSubmitRowForm = function (editor, rows, oldData, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n applyRowData(editor, rows, oldData, data);\n editor.focus();\n });\n };\n var open$1 = function (editor) {\n var rows = getRowsFromSelection(getSelectionStart(editor), ephemera.selected);\n if (rows.length === 0) {\n return;\n }\n var rowsData = map$1(rows, function (rowElm) {\n return extractDataFromRowElement(editor, rowElm.dom, hasAdvancedRowTab(editor));\n });\n var data = getSharedValues(rowsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: getItems$1(editor)\n },\n getAdvancedTab(editor, 'row')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: getItems$1(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Row Properties',\n size: 'normal',\n body: hasAdvancedRowTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitRowForm, editor, map$1(rows, function (r) {\n return r.dom;\n }), data)\n });\n };\n\n var getItems = function (editor, classes, insertNewTable) {\n var rowColCountItems = !insertNewTable ? [] : [\n {\n type: 'input',\n name: 'cols',\n label: 'Cols',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'rows',\n label: 'Rows',\n inputMode: 'numeric'\n }\n ];\n var alwaysItems = [\n {\n type: 'input',\n name: 'width',\n label: 'Width'\n },\n {\n type: 'input',\n name: 'height',\n label: 'Height'\n }\n ];\n var appearanceItems = hasAppearanceOptions(editor) ? [\n {\n type: 'input',\n name: 'cellspacing',\n label: 'Cell spacing',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'cellpadding',\n label: 'Cell padding',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'border',\n label: 'Border width'\n },\n {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n }\n ] : [];\n var alignmentItem = [{\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n }];\n var classListItem = classes.length > 0 ? [{\n type: 'listbox',\n name: 'class',\n label: 'Class',\n items: classes\n }] : [];\n return rowColCountItems.concat(alwaysItems).concat(appearanceItems).concat(alignmentItem).concat(classListItem);\n };\n\n var styleTDTH = function (dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n if (isString(name)) {\n dom.setStyle(elm, name, value);\n } else {\n dom.setStyle(elm, name);\n }\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addPxSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addPxSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addPxSuffix(data.border);\n styles['border-spacing'] = addPxSuffix(data.cellspacing);\n } else {\n attrs.border = data.border;\n attrs.cellpadding = data.cellpadding;\n attrs.cellspacing = data.cellspacing;\n }\n if (shouldStyleWithCss(editor) && tableElm.children) {\n for (var i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addPxSuffix(data.border),\n 'padding': addPxSuffix(data.cellpadding)\n });\n if (hasAdvancedTableTab(editor)) {\n styleTDTH(dom, tableElm.children[i], { 'border-color': data.bordercolor });\n }\n }\n }\n if (hasAdvancedTableTab(editor)) {\n styles['background-color'] = data.backgroundcolor;\n styles['border-color'] = data.bordercolor;\n styles['border-style'] = data.borderstyle;\n }\n attrs.style = dom.serializeStyle(__assign(__assign({}, getDefaultStyles(editor)), styles));\n dom.setAttribs(tableElm, __assign(__assign({}, getDefaultAttributes(editor)), attrs));\n };\n var onSubmitTableForm = function (editor, tableElm, oldData, api) {\n var dom = editor.dom;\n var data = api.getData();\n var modifiedData = filter$1(data, function (value, key) {\n return oldData[key] !== value;\n });\n api.close();\n if (data.class === '') {\n delete data.class;\n }\n editor.undoManager.transact(function () {\n if (!tableElm) {\n var cols = parseInt(data.cols, 10) || 1;\n var rows = parseInt(data.rows, 10) || 1;\n tableElm = insert(editor, cols, rows, 0, 0);\n }\n if (size(modifiedData) > 0) {\n applyDataToElement(editor, tableElm, data);\n var captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption || !captionElm && data.caption) {\n editor.execCommand('mceTableToggleCaption');\n }\n if (data.align === '') {\n unApplyAlign(editor, tableElm);\n } else {\n applyAlign(editor, tableElm, data.align);\n }\n }\n editor.focus();\n editor.addVisual();\n if (size(modifiedData) > 0) {\n var captionModified = has$1(modifiedData, 'caption');\n var styleModified = captionModified ? size(modifiedData) > 1 : true;\n fireTableModified(editor, tableElm, {\n structure: captionModified,\n style: styleModified\n });\n }\n });\n };\n var open = function (editor, insertNewTable) {\n var dom = editor.dom;\n var tableElm;\n var data = extractDataFromSettings(editor, hasAdvancedTableTab(editor));\n if (insertNewTable === false) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table', editor.getBody());\n if (tableElm) {\n data = extractDataFromTableElement(editor, tableElm, hasAdvancedTableTab(editor));\n } else {\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n } else {\n data.cols = '1';\n data.rows = '1';\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n var classes = buildListItems(getTableClassList(editor));\n if (classes.length > 0) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n }\n var generalPanel = {\n type: 'grid',\n columns: 2,\n items: getItems(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(editor, 'table')\n ]\n };\n };\n var dialogBody = hasAdvancedTableTab(editor) ? advancedForm() : nonAdvancedForm();\n editor.windowManager.open({\n title: 'Table Properties',\n size: 'normal',\n body: dialogBody,\n onSubmit: curry(onSubmitTableForm, editor, tableElm, data),\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data\n });\n };\n\n var getSelectionStartCellOrCaption = function (editor) {\n return getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor));\n };\n var getSelectionStartCell = function (editor) {\n return getSelectionCell(getSelectionStart(editor), getIsRoot(editor));\n };\n var registerCommands = function (editor, actions, cellSelection, selections, clipboard) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n return getSelectionStartCellOrCaption(editor).each(function (cellOrCaption) {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(function (table) {\n var cursor = SugarElement.fromText('');\n after$5(table, cursor);\n remove$5(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(table)) {\n enforcePercentage(editor, table);\n } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n enforcePixels(editor, table);\n } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n enforceNone(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n };\n var getTableFromCell = function (cell) {\n return table(cell, isRoot);\n };\n var performActionOnSelection = function (action) {\n return getSelectionStartCell(editor).bind(function (cell) {\n return getTableFromCell(cell).map(function (table) {\n return action(table, cell);\n });\n });\n };\n var toggleTableClass = function (_ui, clazz) {\n performActionOnSelection(function (table) {\n editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n var toggleTableCellClass = function (_ui, clazz) {\n performActionOnSelection(function (table) {\n var selectedCells = getCellsFromSelection(selections);\n var allHaveClass = forall(selectedCells, function (cell) {\n return editor.formatter.match('tablecellclass', { value: clazz }, cell.dom);\n });\n var formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n each$2(selectedCells, function (cell) {\n return formatterAction('tablecellclass', { value: clazz }, cell.dom);\n });\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n var toggleCaption = function () {\n getSelectionStartCellOrCaption(editor).each(function (cellOrCaption) {\n table(cellOrCaption, isRoot).each(function (table) {\n child$1(table, 'caption').fold(function () {\n var caption = SugarElement.fromTag('caption');\n append$1(caption, SugarElement.fromText('Caption'));\n appendAt(table, caption, 0);\n editor.selection.setCursorLocation(caption.dom, 0);\n }, function (caption) {\n if (isTag('caption')(cellOrCaption)) {\n one('td', table).each(function (td) {\n return editor.selection.setCursorLocation(td.dom, 0);\n });\n }\n remove$5(caption);\n });\n fireTableModified(editor, table.dom, structureModified);\n });\n });\n };\n var postExecute = function (_data) {\n editor.focus();\n };\n var actOnSelection = function (execute, noEvents) {\n if (noEvents === void 0) {\n noEvents = false;\n }\n return performActionOnSelection(function (table, startCell) {\n var targets = forMenu(selections, table, startCell);\n execute(table, targets, noEvents).each(postExecute);\n });\n };\n var copyRowSelection = function () {\n return performActionOnSelection(function (table, startCell) {\n var targets = forMenu(selections, table, startCell);\n var generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n };\n var copyColSelection = function () {\n return performActionOnSelection(function (table, startCell) {\n var targets = forMenu(selections, table, startCell);\n return copyCols(table, targets);\n });\n };\n var pasteOnSelection = function (execute, getRows) {\n return getRows().each(function (rows) {\n var clonedRows = map$1(rows, function (row) {\n return deep(row);\n });\n performActionOnSelection(function (table, startCell) {\n var generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n var targets = pasteRows(selections, startCell, clonedRows, generators);\n execute(table, targets).each(postExecute);\n });\n });\n };\n var actOnType = function (getAction) {\n return function (_ui, args) {\n return get$c(args, 'type').each(function (type) {\n actOnSelection(getAction(type), args.no_events);\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 () {\n return copyColSelection().each(function (selection) {\n clipboard.setColumns(selection);\n actOnSelection(actions.deleteColumn);\n });\n },\n mceTableCutRow: function () {\n return copyRowSelection().each(function (selection) {\n clipboard.setRows(selection);\n actOnSelection(actions.deleteRow);\n });\n },\n mceTableCopyCol: function () {\n return copyColSelection().each(function (selection) {\n return clipboard.setColumns(selection);\n });\n },\n mceTableCopyRow: function () {\n return copyRowSelection().each(function (selection) {\n return clipboard.setRows(selection);\n });\n },\n mceTablePasteColBefore: function () {\n return pasteOnSelection(actions.pasteColsBefore, clipboard.getColumns);\n },\n mceTablePasteColAfter: function () {\n return pasteOnSelection(actions.pasteColsAfter, clipboard.getColumns);\n },\n mceTablePasteRowBefore: function () {\n return pasteOnSelection(actions.pasteRowsBefore, clipboard.getRows);\n },\n mceTablePasteRowAfter: function () {\n return pasteOnSelection(actions.pasteRowsAfter, clipboard.getRows);\n },\n mceTableDelete: eraseTable,\n mceTableCellToggleClass: toggleTableCellClass,\n mceTableToggleClass: toggleTableClass,\n mceTableToggleCaption: toggleCaption,\n mceTableSizingMode: function (_ui, sizing) {\n return setSizingMode(sizing);\n },\n mceTableCellType: actOnType(function (type) {\n return type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader;\n }),\n mceTableColType: actOnType(function (type) {\n return type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader;\n }),\n mceTableRowType: actOnType(function (type) {\n switch (type) {\n case 'header':\n return actions.makeRowsHeader;\n case 'footer':\n return actions.makeRowsFooter;\n default:\n return actions.makeRowsBody;\n }\n })\n }, function (func, name) {\n return editor.addCommand(name, func);\n });\n each$1({\n mceTableProps: curry(open, editor, false),\n mceTableRowProps: curry(open$1, editor),\n mceTableCellProps: curry(open$2, editor, selections)\n }, function (func, name) {\n return editor.addCommand(name, function () {\n return func();\n });\n });\n editor.addCommand('mceInsertTable', function (_ui, args) {\n if (isObject(args) && keys(args).length > 0) {\n insertTableWithDataValidation(editor, args.rows, args.columns, args.options, 'Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n } else {\n open(editor, true);\n }\n });\n editor.addCommand('mceTableApplyCellStyle', function (_ui, args) {\n var getFormatName = function (style) {\n return 'tablecell' + style.toLowerCase().replace('-', '');\n };\n if (!isObject(args)) {\n return;\n }\n var cells = getCellsFromSelection(selections);\n if (cells.length === 0) {\n return;\n }\n var validArgs = filter$1(args, function (value, style) {\n return editor.formatter.has(getFormatName(style)) && isString(value);\n });\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, function (value, style) {\n each$2(cells, function (cell) {\n DomModifier.normal(editor, cell.dom).setFormat(getFormatName(style), value);\n });\n });\n getTableFromCell(cells[0]).each(function (table) {\n return fireTableModified(editor, table.dom, styleModified);\n });\n });\n };\n\n var registerQueryCommands = function (editor, actions, selections) {\n var isRoot = getIsRoot(editor);\n var lookupOnSelection = function (action) {\n return getSelectionCell(getSelectionStart(editor)).bind(function (cell) {\n return table(cell, isRoot).map(function (table) {\n var targets = forMenu(selections, table, cell);\n return action(table, targets);\n });\n }).getOr('');\n };\n each$1({\n mceTableRowType: function () {\n return lookupOnSelection(actions.getTableRowType);\n },\n mceTableCellType: function () {\n return lookupOnSelection(actions.getTableCellType);\n },\n mceTableColType: function () {\n return lookupOnSelection(actions.getTableColType);\n }\n }, function (func, name) {\n return editor.addQueryValueHandler(name, func);\n });\n };\n\n var Clipboard = function () {\n var rows = value();\n var cols = value();\n return {\n getRows: rows.get,\n setRows: function (r) {\n r.fold(rows.clear, rows.set);\n cols.clear();\n },\n clearRows: rows.clear,\n getColumns: cols.get,\n setColumns: function (c) {\n c.fold(cols.clear, cols.set);\n rows.clear();\n },\n clearColumns: cols.clear\n };\n };\n\n var genericBase = {\n remove_similar: true,\n inherit: false\n };\n var cellBase = __assign({ selector: 'td,th' }, genericBase);\n var cellFormats = {\n tablecellbackgroundcolor: __assign({ styles: { backgroundColor: '%value' } }, cellBase),\n tablecellverticalalign: __assign({ styles: { 'vertical-align': '%value' } }, cellBase),\n tablecellbordercolor: __assign({ styles: { borderColor: '%value' } }, cellBase),\n tablecellclass: __assign({ classes: ['%value'] }, cellBase),\n tableclass: __assign({\n selector: 'table',\n classes: ['%value']\n }, genericBase),\n tablecellborderstyle: __assign({ styles: { borderStyle: '%value' } }, cellBase),\n tablecellborderwidth: __assign({ styles: { borderWidth: '%value' } }, cellBase)\n };\n var registerFormats = function (editor) {\n editor.formatter.register(cellFormats);\n };\n\n var adt$5 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$5.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$5), { none: none });\n\n var walk = function (all, current, index, direction, isEligible) {\n if (isEligible === void 0) {\n isEligible = always;\n }\n var forwards = direction === 1;\n if (!forwards && index <= 0) {\n return CellLocation.first(all[0]);\n } else if (forwards && index >= all.length - 1) {\n return CellLocation.last(all[all.length - 1]);\n } else {\n var newIndex = index + direction;\n var elem = all[newIndex];\n return isEligible(elem) ? CellLocation.middle(current, elem) : walk(all, current, newIndex, direction, isEligible);\n }\n };\n var detect$1 = function (current, isRoot) {\n return table(current, isRoot).bind(function (table) {\n var all = cells$1(table);\n var index = findIndex(all, function (x) {\n return eq$1(current, x);\n });\n return index.map(function (index) {\n return {\n index: index,\n all: all\n };\n });\n });\n };\n var next = function (current, isEligible, isRoot) {\n var detection = detect$1(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none(current);\n }, function (info) {\n return walk(info.all, current, info.index, 1, isEligible);\n });\n };\n var prev = function (current, isEligible, isRoot) {\n var detection = detect$1(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none();\n }, function (info) {\n return walk(info.all, current, info.index, -1, isEligible);\n });\n };\n\n var create$2 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$2 };\n\n var adt$4 = 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$1 = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$4.before;\n var on = adt$4.on;\n var after$3 = adt$4.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$3,\n cata: cata$1,\n getStart: getStart$1\n };\n\n var adt$3 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$3.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt$3.domRange;\n var relative = adt$3.relative;\n var exact = adt$3.exact;\n var getWin = function (selection) {\n var start = getStart(selection);\n return defaultView(start);\n };\n var range = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var selectNode = function (win, element) {\n var rng = win.document.createRange();\n rng.selectNode(element.dom);\n return rng;\n };\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n return rng.selectNodeContents(element.dom);\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom);\n }, function (e, o) {\n rng.setStart(e.dom, o);\n }, function (e) {\n rng.setStartAfter(e.dom);\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom);\n }, function (e, o) {\n rng.setEnd(e.dom, o);\n }, function (e) {\n rng.setEndAfter(e.dom);\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n };\n };\n var getFirstRect$1 = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n var adt$2 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Optional.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Optional.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$2.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$2.ltr, rng);\n });\n } else {\n return fromRange(win, adt$2.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 adt$2.ltr;\n adt$2.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$9(textnode).length;\n var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\n return rangeForOffset(offset);\n };\n var locate$1 = function (doc, node, x, y) {\n var r = doc.dom.createRange();\n r.selectNode(node.dom);\n var rects = r.getClientRects();\n var foundRect = findMap(rects, function (rect) {\n return inRect(rect, x, y) ? Optional.some(rect) : Optional.none();\n });\n return foundRect.map(function (rect) {\n return locateOffset(doc, node, x, y, rect);\n });\n };\n\n var searchInChildren = function (doc, node, x, y) {\n var r = doc.dom.createRange();\n var nodes = children$3(node);\n return findMap(nodes, function (n) {\n r.selectNode(n.dom);\n return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Optional.none();\n });\n };\n var locateNode = function (doc, node, x, y) {\n return isText(node) ? locate$1(doc, node, x, y) : searchInChildren(doc, node, x, y);\n };\n var locate = function (doc, node, x, y) {\n var r = doc.dom.createRange();\n r.selectNode(node.dom);\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locateNode(doc, node, boundedX, boundedY);\n };\n\n var COLLAPSE_TO_LEFT = true;\n var COLLAPSE_TO_RIGHT = false;\n var getCollapseDirection = function (rect, x) {\n return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\n };\n var createCollapsedNode = function (doc, target, collapseDirection) {\n var r = doc.dom.createRange();\n r.selectNode(target.dom);\n r.collapse(collapseDirection);\n return r;\n };\n var locateInElement = function (doc, node, x) {\n var cursorRange = doc.dom.createRange();\n cursorRange.selectNode(node.dom);\n var rect = cursorRange.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\n return f(node).map(function (target) {\n return createCollapsedNode(doc, target, collapseDirection);\n });\n };\n var locateInEmpty = function (doc, node, x) {\n var rect = node.dom.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n return Optional.some(createCollapsedNode(doc, node, collapseDirection));\n };\n var search = function (doc, node, x) {\n var f = children$3(node).length === 0 ? locateInEmpty : locateInElement;\n return f(doc, node, x);\n };\n\n var caretPositionFromPoint = function (doc, x, y) {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n var r = doc.dom.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n };\n 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(doc, node, boundedX, boundedY);\n };\n var searchFromPoint = function (doc, x, y) {\n return SugarElement.fromPoint(doc, x, y).bind(function (elem) {\n var fallback = function () {\n return search(doc, elem, x);\n };\n return children$3(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\n });\n };\n var availableSearch = function () {\n if (document.caretPositionFromPoint) {\n return caretPositionFromPoint;\n } else if (document.caretRangeFromPoint) {\n return caretRangeFromPoint;\n } else {\n return searchFromPoint;\n }\n }();\n var fromPoint = function (win, x, y) {\n var doc = SugarElement.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n });\n };\n\n var beforeSpecial = function (element, offset) {\n var name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n var preprocessRelative = function (startSitu, finishSitu) {\n var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n var preprocessExact = function (start, soffset, finish, foffset) {\n var startSitu = beforeSpecial(start, soffset);\n var finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = SugarElement.fromDom(rng.startContainer);\n var finish = SugarElement.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var after$2 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var getNativeSelection = function (win) {\n return Optional.from(win.getSelection());\n };\n var doSetNativeRange = function (win, rng) {\n getNativeSelection(win).each(function (selection) {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n var doSetRange = function (win, start, soffset, finish, foffset) {\n var rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n var setRangeFromRelative = function (win, relative) {\n return diagnose(win, relative).match({\n ltr: function (start, soffset, finish, foffset) {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: function (start, soffset, finish, foffset) {\n getNativeSelection(win).each(function (selection) {\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n });\n }\n });\n };\n var setExact = function (win, start, soffset, finish, foffset) {\n var relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n var setRelative = function (win, startSitu, finishSitu) {\n var relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n var toNative = function (selection) {\n var win = SimSelection.getWin(selection).dom;\n var getDomRange = function (start, soffset, finish, foffset) {\n return exactToNative(win, start, soffset, finish, foffset);\n };\n var filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n var doGetExact = function (selection) {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n var anchor = SugarElement.fromDom(selection.anchorNode);\n var focus_1 = SugarElement.fromDom(selection.focusNode);\n return after$2(anchor, selection.anchorOffset, focus_1, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus_1, selection.focusOffset)) : readRange(selection);\n }\n };\n var setToElement = function (win, element, selectNodeContents$1) {\n if (selectNodeContents$1 === void 0) {\n selectNodeContents$1 = true;\n }\n var rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n var rng = rngGetter(win, element);\n doSetNativeRange(win, rng);\n };\n var getExact = function (win) {\n return getNativeSelection(win).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$1 = function (win) {\n return getExact(win).map(function (range) {\n return SimSelection.exact(range.start, range.soffset, range.finish, range.foffset);\n });\n };\n var getFirstRect = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n var getAtPoint = function (win, x, y) {\n return fromPoint(win, x, y);\n };\n var clear = function (win) {\n getNativeSelection(win).each(function (selection) {\n return selection.removeAllRanges();\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell) {\n return go$1(editor, isRoot, next(cell, isEditable$1));\n };\n var backward = function (editor, isRoot, cell) {\n return go$1(editor, isRoot, prev(cell, isEditable$1));\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = SimSelection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var go$1 = function (editor, isRoot, cell) {\n return cell.fold(Optional.none, Optional.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n editor.execCommand('mceTableInsertRowAfter');\n return forward(editor, isRoot, current);\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, cellSelection) {\n if (event.keyCode === global$1.TAB) {\n var body_1 = getBody(editor);\n var isRoot_1 = function (element) {\n var name$1 = name(element);\n return eq$1(element, body_1) || contains$2(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n var container = SugarElement.fromDom(event.shiftKey ? rng.startContainer : rng.endContainer);\n cell(container, isRoot_1).each(function (cell) {\n event.preventDefault();\n table(cell, isRoot_1).each(cellSelection.clear);\n editor.selection.collapse(event.shiftKey);\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n };\n\n var create$1 = function (selection, kill) {\n return {\n selection: selection,\n kill: kill\n };\n };\n var Response = { create: create$1 };\n\n var create = function (start, soffset, finish, foffset) {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n var Situs = { create: create };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(function (s) {\n return closest$1(finish, 'td,th', isRoot).bind(function (f) {\n return detect(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n var detect = function (container, isRoot, start, finish, selectRange) {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(function (cellSel) {\n var boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1) {\n selectRange(container, boxes, cellSel.start, cellSel.finish);\n return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Optional.none();\n }\n });\n } else {\n return Optional.none();\n }\n };\n var update = function (rows, columns, container, selected, annotations) {\n var updateSelection = function (newSels) {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n return newSels.boxes;\n };\n return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n var traverse = function (item, mode) {\n return {\n item: item,\n mode: mode\n };\n };\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Optional.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Optional.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Optional.some(sidestep)\n }\n ];\n var go = function (universe, item, mode, direction, rules) {\n if (rules === void 0) {\n rules = successors;\n }\n var ruleOpt = find$1(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(universe, item, fb, direction);\n });\n });\n });\n };\n\n var left$1 = function () {\n var sibling = function (universe, item) {\n return universe.query().prevSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var right$1 = function () {\n var sibling = function (universe, item) {\n return universe.query().nextSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var Walkers = {\n left: left$1,\n right: right$1\n };\n\n var hone = function (universe, item, predicate, mode, direction, isRoot) {\n var next = go(universe, item, mode, direction);\n return next.bind(function (n) {\n if (isRoot(n.item)) {\n return Optional.none();\n } else {\n return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n }\n });\n };\n var left = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n var right = 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$1 = function (universe, item, isRoot) {\n return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n };\n var after$1 = function (universe, item, isRoot) {\n return seekRight$1(universe, item, isLeaf(universe), isRoot);\n };\n var seekLeft$1 = left;\n var seekRight$1 = right;\n\n var universe = DomUniverse();\n var before = function (element, isRoot) {\n return before$1(universe, element, isRoot);\n };\n var after = function (element, isRoot) {\n return after$1(universe, element, isRoot);\n };\n var seekLeft = function (element, predicate, isRoot) {\n return seekLeft$1(universe, element, predicate, isRoot);\n };\n var seekRight = function (element, predicate, isRoot) {\n return seekRight$1(universe, element, predicate, isRoot);\n };\n\n var ancestor = function (scope, predicate, isRoot) {\n return ancestor$2(scope, predicate, isRoot).isSome();\n };\n\n var adt$1 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$1.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$1.none('in same cell');\n }\n });\n }).getOr(adt$1.none('default'));\n };\n var cata = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$1), {\n verify: verify,\n cata: cata\n });\n\n var inParent = function (parent, children, element, index) {\n return {\n parent: parent,\n children: children,\n element: element,\n index: index\n };\n };\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children = children$3(parent);\n return indexOf(children, element).map(function (index) {\n return inParent(parent, children, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq$1, element));\n };\n\n var isBr = function (elem) {\n return name(elem) === 'br';\n };\n var gatherer = function (cand, gather, isRoot) {\n return gather(cand, isRoot).bind(function (target) {\n return isText(target) && get$9(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n var handleBr = function (isRoot, element, direction) {\n return direction.traverse(element).orThunk(function () {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n var findBr = function (element, offset) {\n return child$3(element, offset).filter(isBr).orThunk(function () {\n return child$3(element, offset - 1).filter(isBr);\n });\n };\n var handleParent = function (isRoot, element, offset, direction) {\n return findBr(element, offset).bind(function (br) {\n return direction.traverse(br).fold(function () {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, function (adjacent) {\n return indexInParent(adjacent).map(function (info) {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n var tryBr = function (isRoot, element, offset, direction) {\n var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(function (tgt) {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (_message) {\n return Optional.none();\n }, function () {\n return Optional.none();\n }, function (cell) {\n return Optional.some(point(cell, 0));\n }, function (cell) {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n var moveDown = function (caret, amount) {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n var moveUp = function (caret, amount) {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n var translate = function (caret, xDelta, yDelta) {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n var getTop = function (caret) {\n return caret.top;\n };\n var getBottom = function (caret) {\n return caret.bottom;\n };\n\n var getPartialBox = function (bridge, element, offset) {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Optional.none();\n };\n var toCaret = function (rect) {\n return {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n };\n };\n var getElemBox = function (bridge, element) {\n return Optional.some(bridge.getRect(element));\n };\n var getBoxAt = function (bridge, element, offset) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n var getEntireBox = function (bridge, element) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt = 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$2(element, isBlock).fold(never, function (cell) {\n return getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt.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.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt.none();\n }\n };\n var upMovement = {\n point: getTop,\n adjuster: adjustUp,\n move: moveUp,\n gather: before\n };\n var downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (bridge, movement, original, caret, numRetries) {\n if (numRetries === 0) {\n return Optional.some(caret);\n }\n if (isAtTable(bridge, caret.left, movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(function (guess) {\n return guess.start.fold(Optional.none, function (element) {\n return getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n var ieTryDown = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left, caret.bottom + JUMP_SIZE);\n };\n var ieTryUp = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left, caret.top - JUMP_SIZE);\n };\n var checkScroll = function (movement, adjusted, bridge) {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Optional.some(-movement.point(adjusted));\n } else {\n return Optional.none();\n }\n };\n var retry = function (movement, bridge, caret) {\n var moved = movement.move(caret, JUMP_SIZE);\n var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(function () {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, function (delta) {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n var Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n ieTryUp: ieTryUp,\n ieTryDown: ieTryDown,\n getJumpSize: constant(JUMP_SIZE)\n };\n\n var MAX_RETRIES = 20;\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(function () {\n return Optional.some(point(sel.finish, sel.foffset));\n }, function (brNeighbour) {\n var range = bridge.fromSitus(brNeighbour);\n var analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n var scan = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\n var range = bridge.fromSitus(situs);\n var analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, function () {\n return Optional.none();\n }, function () {\n return Optional.some(situs);\n }, function (cell) {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n var browser = detect$3().browser;\n if (browser.isChrome() || browser.isSafari() || browser.isFirefox() || browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n var inSameTable = function (elem, table) {\n return ancestor(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq$1(p, table);\n });\n });\n };\n var simulate = function (bridge, isRoot, direction, initial, anchor) {\n return closest$1(initial, 'td,th', isRoot).bind(function (start) {\n return closest$1(start, 'table', isRoot).bind(function (table) {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish, 'td,th', isRoot).map(function (finish) {\n return {\n start: start,\n finish: finish,\n range: range\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detect$3().browser.isIE()) {\n return Optional.none();\n } else {\n return precheck(initial, isRoot).orThunk(function () {\n return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\n var range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n }\n };\n var firstUpCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft(table, function (element) {\n return last$1(element).isSome();\n }, isRoot).map(function (last) {\n var lastOffset = getEnd(last);\n return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n var lastDownCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight(table, function (element) {\n return first(element).isSome();\n }, isRoot).map(function (first) {\n return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\n return detect(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 var MouseSelection = function (bridge, container, isRoot, annotations) {\n var cursor = value();\n var clearstate = cursor.clear;\n var applySelection = function (event) {\n cursor.on(function (start) {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(function (finish) {\n identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes.getOr([]);\n if (boxes.length === 1) {\n var singleCell = boxes[0];\n var isNonEditableCell = getRaw(singleCell) === 'false';\n var isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n if (isNonEditableCell && isCellClosestContentEditable) {\n annotations.selectRange(container, boxes, singleCell, singleCell);\n bridge.selectContents(singleCell);\n }\n } else if (boxes.length > 1) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mousedown = function (event) {\n annotations.clear(container);\n findCell(event.target, isRoot).each(cursor.set);\n };\n var mouseover = function (event) {\n applySelection(event);\n };\n var mouseup = function (event) {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate: clearstate,\n mousedown: mousedown,\n mouseover: mouseover,\n mouseup: mouseup\n };\n };\n\n var down = {\n traverse: nextSibling,\n gather: after,\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,\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 = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n var rtl = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n var get = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n var getRect = function (element) {\n return element.dom.getBoundingClientRect();\n };\n var getRangedRect = function (start, soffset, finish, foffset) {\n var sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect(win, sel);\n };\n var getSelection = function () {\n return get$1(win).map(function (exactAdt) {\n return convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var collapseSelection = function (toStart) {\n if (toStart === void 0) {\n toStart = false;\n }\n get$1(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 selectNode = function (element) {\n setToElement(win, element, false);\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(SugarElement.fromDom(win.document));\n return pos.top;\n };\n var scrollBy = function (x, y) {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint: elementFromPoint,\n getRect: getRect,\n getRangedRect: getRangedRect,\n getSelection: getSelection,\n fromSitus: fromSitus,\n situsFromPoint: situsFromPoint,\n clearSelection: clearSelection,\n collapseSelection: collapseSelection,\n setSelection: setSelection,\n setRelativeSelection: setRelativeSelection,\n selectNode: selectNode,\n selectContents: selectContents,\n getInnerHeight: getInnerHeight,\n getScrollY: getScrollY,\n scrollBy: scrollBy\n };\n };\n\n var rc = function (rows, cols) {\n return {\n rows: rows,\n cols: cols\n };\n };\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n clearstate: handlers.clearstate,\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n var keyboard = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var clearToNavigate = function () {\n annotations.clear(container);\n return Optional.none();\n };\n var keydown = function (event, start, soffset, finish, foffset, direction) {\n var realEvent = event.raw;\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n var handler = retrieve$1(container, annotations.selectedSelector).fold(function () {\n if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Optional.none;\n }\n }, function (selected) {\n var update$1 = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(function () {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(function (edges) {\n var relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n annotations.clear(container);\n return Response.create(Optional.none(), true);\n });\n }, function (_) {\n return Optional.some(Response.create(Optional.none(), true));\n });\n };\n };\n if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return retrieve$1(container, annotations.selectedSelector).fold(function () {\n var realEvent = event.raw;\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\n return Optional.none();\n }\n if (isNavigation(keycode)) {\n return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Optional.none();\n }\n }, Optional.none);\n };\n return {\n keydown: keydown,\n keyup: keyup\n };\n };\n var external = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n return function (start, finish) {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n var remove = function (element, classes) {\n each$2(classes, function (x) {\n remove$2(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove(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(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each$2(cells, addSelectionClass);\n add(start, ephemera.firstSelected);\n add(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear: 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$7(element, ephemera.selected);\n remove$7(element, ephemera.firstSelected);\n remove$7(element, ephemera.lastSelected);\n };\n var addSelectionAttribute = function (element) {\n set$2(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(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each$2(cells, addSelectionAttribute);\n set$2(start, ephemera.firstSelected, '1');\n set$2(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate: 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) {\n var upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n var upDetails = toDetailList(upGrid);\n return bind$2(upDetails, function (detail) {\n var slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map$1(slicedCells, function (cell) {\n return cell.element;\n });\n });\n };\n var getDownOrRightCells = function (grid, selectedCells) {\n var downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n var downDetails = toDetailList(downGrid);\n return bind$2(downDetails, function (detail) {\n var slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map$1(slicedCells, function (cell) {\n return cell.element;\n });\n });\n };\n var getOtherCells = function (table, target, generators) {\n var warehouse = Warehouse.fromTable(table);\n var details = onCells(warehouse, target);\n return details.map(function (selectedCells) {\n var grid = toGrid(warehouse, generators, false);\n var upOrLeftCells = getUpOrLeftCells(grid, selectedCells);\n var downOrRightCells = getDownOrRightCells(grid, selectedCells);\n return {\n upOrLeftCells: upOrLeftCells,\n downOrRightCells: downOrRightCells\n };\n });\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n var hasInternalTarget = function (e) {\n return has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection (editor, lazyResize, selectionTargets) {\n var onSelection = function (cells, start, finish) {\n selectionTargets.targets().each(function (targets) {\n var tableOpt = table(start);\n tableOpt.each(function (table) {\n var cloneFormats = getCloneElements(editor);\n var generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n var otherCells = getOtherCells(table, targets, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n });\n };\n var onClear = function () {\n return fireTableSelectionClear(editor);\n };\n var annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', function (_e) {\n var win = editor.getWin();\n var body = getBody(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = SugarElement.fromDom(sel.getStart());\n var end = SugarElement.fromDom(sel.getEnd());\n var shared = sharedOne(table, [\n start,\n end\n ]);\n shared.fold(function () {\n return annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = mouse(win, body, isRoot, annotations);\n var keyHandlers = keyboard(win, body, isRoot, annotations);\n var external$1 = external(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw.shiftKey === true;\n };\n editor.on('TableSelectorChange', function (e) {\n return external$1(e.start, e.finish);\n });\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(function (ns) {\n var relative = SimSelection.relative(ns.start, ns.finish);\n var rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n var keyup = function (event) {\n var wrappedEvent = fromRawEvent(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n var rng = editor.selection.getRng();\n var start = SugarElement.fromDom(rng.startContainer);\n var end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n var keydown = function (event) {\n var wrappedEvent = fromRawEvent(event);\n lazyResize().each(function (resize) {\n return resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var start = SugarElement.fromDom(rng.startContainer);\n var end = SugarElement.fromDom(rng.endContainer);\n var direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n return resize.showBars();\n });\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global.browser.isEdge() && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var dragStart = function (_e) {\n mouseHandlers.clearstate();\n };\n var mouseDown = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent(e));\n }\n };\n var mouseOver = function (e) {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent(e));\n }\n };\n var mouseUp = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent(e));\n }\n };\n var getDoubleTap = function () {\n var lastTarget = Cell(SugarElement.fromDom(body));\n var lastTimeStamp = Cell(0);\n var touchEnd = function (t) {\n var target = SugarElement.fromDom(t.target);\n if (name(target) === 'td' || name(target) === 'th') {\n var lT = lastTarget.get();\n var lTS = lastTimeStamp.get();\n if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd: touchEnd };\n };\n var doubleTap = getDoubleTap();\n editor.on('dragstart', dragStart);\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n return { clear: annotations.clear };\n }\n\n var child = function (scope, selector) {\n return child$1(scope, selector).isSome();\n };\n\n var getSelectionTargets = function (editor, selections) {\n var targets = Cell(Optional.none());\n var changeHandlers = Cell([]);\n var selectionDetails = Optional.none();\n var isCaption = isTag('caption');\n var isDisabledForSelection = function (key) {\n return selectionDetails.forall(function (details) {\n return !details[key];\n });\n };\n var getStart = function () {\n return getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor));\n };\n var getEnd = function () {\n return getSelectionCellOrCaption(getSelectionEnd(editor), getIsRoot(editor));\n };\n var findTargets = function () {\n return getStart().bind(function (startCellOrCaption) {\n return flatten(lift2(table(startCellOrCaption), getEnd().bind(table), function (startTable, endTable) {\n if (eq$1(startTable, endTable)) {\n if (isCaption(startCellOrCaption)) {\n return Optional.some(noMenu(startCellOrCaption));\n } else {\n return Optional.some(forMenu(selections, startTable, startCellOrCaption));\n }\n }\n return Optional.none();\n }));\n });\n };\n var getExtractedDetails = function (targets) {\n var tableOpt = table(targets.element);\n return tableOpt.map(function (table) {\n var warehouse = Warehouse.fromTable(table);\n var selectedCells = onCells(warehouse, targets).getOr([]);\n var locked = foldl(selectedCells, function (acc, cell) {\n if (cell.isLocked) {\n acc.onAny = true;\n if (cell.column === 0) {\n acc.onFirst = true;\n } else if (cell.column + cell.colspan >= warehouse.grid.columns) {\n acc.onLast = true;\n }\n }\n return acc;\n }, {\n onAny: false,\n onFirst: false,\n onLast: false\n });\n return {\n mergeable: onUnlockedMergable(warehouse, targets).isSome(),\n unmergeable: onUnlockedUnmergable(warehouse, targets).isSome(),\n locked: locked\n };\n });\n };\n var resetTargets = function () {\n targets.set(cached(findTargets)());\n selectionDetails = targets.get().bind(getExtractedDetails);\n each$2(changeHandlers.get(), function (handler) {\n return handler();\n });\n };\n var setupHandler = function (handler) {\n handler();\n changeHandlers.set(changeHandlers.get().concat([handler]));\n return function () {\n changeHandlers.set(filter$2(changeHandlers.get(), function (h) {\n return h !== handler;\n }));\n };\n };\n var onSetup = function (api, isDisabled) {\n return setupHandler(function () {\n return targets.get().fold(function () {\n api.setDisabled(true);\n }, function (targets) {\n api.setDisabled(isDisabled(targets));\n });\n });\n };\n var onSetupWithToggle = function (api, isDisabled, isActive) {\n return setupHandler(function () {\n return targets.get().fold(function () {\n api.setDisabled(true);\n api.setActive(false);\n }, function (targets) {\n api.setDisabled(isDisabled(targets));\n api.setActive(isActive(targets));\n });\n });\n };\n var isDisabledFromLocked = function (lockedDisable) {\n return selectionDetails.exists(function (details) {\n return details.locked[lockedDisable];\n });\n };\n var onSetupTable = function (api) {\n return onSetup(api, function (_) {\n return false;\n });\n };\n var onSetupCellOrRow = function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element);\n });\n };\n var onSetupColumn = function (lockedDisable) {\n return function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element) || isDisabledFromLocked(lockedDisable);\n });\n };\n };\n var onSetupPasteable = function (getClipboardData) {\n return function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element) || getClipboardData().isNone();\n });\n };\n };\n var onSetupPasteableColumn = function (getClipboardData, lockedDisable) {\n return function (api) {\n return onSetup(api, function (targets) {\n return isCaption(targets.element) || getClipboardData().isNone() || isDisabledFromLocked(lockedDisable);\n });\n };\n };\n var onSetupMergeable = function (api) {\n return onSetup(api, function (_targets) {\n return isDisabledForSelection('mergeable');\n });\n };\n var onSetupUnmergeable = function (api) {\n return onSetup(api, function (_targets) {\n return isDisabledForSelection('unmergeable');\n });\n };\n var onSetupTableWithCaption = function (api) {\n return onSetupWithToggle(api, never, function (targets) {\n var tableOpt = table(targets.element, getIsRoot(editor));\n return tableOpt.exists(function (table) {\n return child(table, 'caption');\n });\n });\n };\n var onSetupTableHeaders = function (command, headerType) {\n return function (api) {\n return onSetupWithToggle(api, function (targets) {\n return isCaption(targets.element);\n }, function () {\n return editor.queryCommandValue(command) === headerType;\n });\n };\n };\n var onSetupTableRowHeaders = onSetupTableHeaders('mceTableRowType', 'header');\n var onSetupTableColumnHeaders = onSetupTableHeaders('mceTableColType', 'th');\n editor.on('NodeChange ExecCommand TableSelectorChange', resetTargets);\n return {\n onSetupTable: onSetupTable,\n onSetupCellOrRow: onSetupCellOrRow,\n onSetupColumn: onSetupColumn,\n onSetupPasteable: onSetupPasteable,\n onSetupPasteableColumn: onSetupPasteableColumn,\n onSetupMergeable: onSetupMergeable,\n onSetupUnmergeable: onSetupUnmergeable,\n resetTargets: resetTargets,\n onSetupTableWithCaption: onSetupTableWithCaption,\n onSetupTableRowHeaders: onSetupTableRowHeaders,\n onSetupTableColumnHeaders: onSetupTableColumnHeaders,\n targets: targets.get\n };\n };\n\n var addButtons = function (editor, selections, selectionTargets, clipboard) {\n editor.ui.registry.addMenuButton('table', {\n tooltip: 'Table',\n icon: 'table',\n fetch: function (callback) {\n return callback('inserttable | cell row column | advtablesort | tableprops deletetable');\n }\n });\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n editor.ui.registry.addButton('tableprops', {\n tooltip: 'Table properties',\n onAction: cmd('mceTableProps'),\n icon: 'table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tabledelete', {\n tooltip: 'Delete table',\n onAction: cmd('mceTableDelete'),\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tablecellprops', {\n tooltip: 'Cell properties',\n onAction: cmd('mceTableCellProps'),\n icon: 'table-cell-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablemergecells', {\n tooltip: 'Merge cells',\n onAction: cmd('mceTableMergeCells'),\n icon: 'table-merge-cells',\n onSetup: selectionTargets.onSetupMergeable\n });\n editor.ui.registry.addButton('tablesplitcells', {\n tooltip: 'Split cell',\n onAction: cmd('mceTableSplitCells'),\n icon: 'table-split-cells',\n onSetup: selectionTargets.onSetupUnmergeable\n });\n editor.ui.registry.addButton('tableinsertrowbefore', {\n tooltip: 'Insert row before',\n onAction: cmd('mceTableInsertRowBefore'),\n icon: 'table-insert-row-above',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertrowafter', {\n tooltip: 'Insert row after',\n onAction: cmd('mceTableInsertRowAfter'),\n icon: 'table-insert-row-after',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tabledeleterow', {\n tooltip: 'Delete row',\n onAction: cmd('mceTableDeleteRow'),\n icon: 'table-delete-row',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablerowprops', {\n tooltip: 'Row properties',\n onAction: cmd('mceTableRowProps'),\n icon: 'table-row-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertcolbefore', {\n tooltip: 'Insert column before',\n onAction: cmd('mceTableInsertColBefore'),\n icon: 'table-insert-column-before',\n onSetup: selectionTargets.onSetupColumn('onFirst')\n });\n editor.ui.registry.addButton('tableinsertcolafter', {\n tooltip: 'Insert column after',\n onAction: cmd('mceTableInsertColAfter'),\n icon: 'table-insert-column-after',\n onSetup: selectionTargets.onSetupColumn('onLast')\n });\n editor.ui.registry.addButton('tabledeletecol', {\n tooltip: 'Delete column',\n onAction: cmd('mceTableDeleteCol'),\n icon: 'table-delete-column',\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addButton('tablecutrow', {\n tooltip: 'Cut row',\n icon: 'cut-row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecopyrow', {\n tooltip: 'Copy row',\n icon: 'duplicate-row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepasterowbefore', {\n tooltip: 'Paste row before',\n icon: 'paste-row-before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addButton('tablepasterowafter', {\n tooltip: 'Paste row after',\n icon: 'paste-row-after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addButton('tablecutcol', {\n tooltip: 'Cut column',\n icon: 'cut-column',\n onAction: cmd('mceTableCutCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addButton('tablecopycol', {\n tooltip: 'Copy column',\n icon: 'duplicate-column',\n onAction: cmd('mceTableCopyCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addButton('tablepastecolbefore', {\n tooltip: 'Paste column before',\n icon: 'paste-column-before',\n onAction: cmd('mceTablePasteColBefore'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onFirst')\n });\n editor.ui.registry.addButton('tablepastecolafter', {\n tooltip: 'Paste column after',\n icon: 'paste-column-after',\n onAction: cmd('mceTablePasteColAfter'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onLast')\n });\n editor.ui.registry.addButton('tableinsertdialog', {\n tooltip: 'Insert table',\n onAction: cmd('mceInsertTable'),\n icon: 'table'\n });\n var tableClassList = filterNoneItem(getTableClassList(editor));\n if (tableClassList.length !== 0) {\n editor.ui.registry.addMenuButton('tableclass', {\n icon: 'table-classes',\n tooltip: 'Table styles',\n fetch: generateMenuItemsCallback(editor, selections, tableClassList, 'tableclass', function (value) {\n return editor.execCommand('mceTableToggleClass', false, value);\n }),\n onSetup: selectionTargets.onSetupTable\n });\n }\n var tableCellClassList = filterNoneItem(getCellClassList(editor));\n if (tableCellClassList.length !== 0) {\n editor.ui.registry.addMenuButton('tablecellclass', {\n icon: 'table-cell-classes',\n tooltip: 'Cell styles',\n fetch: generateMenuItemsCallback(editor, selections, tableCellClassList, 'tablecellclass', function (value) {\n return editor.execCommand('mceTableCellToggleClass', false, value);\n }),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n }\n editor.ui.registry.addMenuButton('tablecellvalign', {\n icon: 'vertical-align',\n tooltip: 'Vertical align',\n fetch: generateMenuItemsCallback(editor, selections, verticalAlignValues, 'tablecellverticalalign', applyTableCellStyle(editor, 'vertical-align')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuButton('tablecellborderwidth', {\n icon: 'border-width',\n tooltip: 'Border width',\n fetch: generateMenuItemsCallback(editor, selections, getTableBorderWidths(editor), 'tablecellborderwidth', applyTableCellStyle(editor, 'border-width')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuButton('tablecellborderstyle', {\n icon: 'border-style',\n tooltip: 'Border style',\n fetch: generateMenuItemsCallback(editor, selections, getTableBorderStyles(editor), 'tablecellborderstyle', applyTableCellStyle(editor, 'border-style')),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addToggleButton('tablecaption', {\n tooltip: 'Table caption',\n onAction: cmd('mceTableToggleCaption'),\n icon: 'table-caption',\n onSetup: selectionTargets.onSetupTableWithCaption\n });\n editor.ui.registry.addMenuButton('tablecellbackgroundcolor', {\n icon: 'cell-background-color',\n tooltip: 'Background color',\n fetch: function (callback) {\n return callback(buildColorMenu(editor, getTableBackgroundColorMap(editor), 'background-color'));\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuButton('tablecellbordercolor', {\n icon: 'cell-border-color',\n tooltip: 'Border color',\n fetch: function (callback) {\n return callback(buildColorMenu(editor, getTableBorderColorMap(editor), 'border-color'));\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addToggleButton('tablerowheader', {\n tooltip: 'Row header',\n icon: 'table-top-header',\n onAction: changeRowHeader(editor),\n onSetup: selectionTargets.onSetupTableRowHeaders\n });\n editor.ui.registry.addToggleButton('tablecolheader', {\n tooltip: 'Column header',\n icon: 'table-left-header',\n onAction: changeColumnHeader(editor),\n onSetup: selectionTargets.onSetupTableColumnHeaders\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, selections, selectionTargets, clipboard) {\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n var insertTableAction = function (data) {\n editor.execCommand('mceInsertTable', false, {\n rows: data.numRows,\n columns: data.numColumns\n });\n };\n var tableProperties = {\n text: 'Table properties',\n onSetup: selectionTargets.onSetupTable,\n onAction: cmd('mceTableProps')\n };\n var deleteTable = {\n text: 'Delete table',\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable,\n onAction: cmd('mceTableDelete')\n };\n editor.ui.registry.addMenuItem('tableinsertrowbefore', {\n text: 'Insert row before',\n icon: 'table-insert-row-above',\n onAction: cmd('mceTableInsertRowBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tableinsertrowafter', {\n text: 'Insert row after',\n icon: 'table-insert-row-after',\n onAction: cmd('mceTableInsertRowAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tabledeleterow', {\n text: 'Delete row',\n icon: 'table-delete-row',\n onAction: cmd('mceTableDeleteRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablerowprops', {\n text: 'Row properties',\n icon: 'table-row-properties',\n onAction: cmd('mceTableRowProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecutrow', {\n text: 'Cut row',\n icon: 'cut-row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablecopyrow', {\n text: 'Copy row',\n icon: 'duplicate-row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addMenuItem('tablepasterowbefore', {\n text: 'Paste row before',\n icon: 'paste-row-before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n editor.ui.registry.addMenuItem('tablepasterowafter', {\n text: 'Paste row after',\n icon: 'paste-row-after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupPasteable(clipboard.getRows)\n });\n var row = {\n type: 'nestedmenuitem',\n text: 'Row',\n getSubmenuItems: constant('tableinsertrowbefore tableinsertrowafter tabledeleterow tablerowprops | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter')\n };\n editor.ui.registry.addMenuItem('tableinsertcolumnbefore', {\n text: 'Insert column before',\n icon: 'table-insert-column-before',\n onAction: cmd('mceTableInsertColBefore'),\n onSetup: selectionTargets.onSetupColumn('onFirst')\n });\n editor.ui.registry.addMenuItem('tableinsertcolumnafter', {\n text: 'Insert column after',\n icon: 'table-insert-column-after',\n onAction: cmd('mceTableInsertColAfter'),\n onSetup: selectionTargets.onSetupColumn('onLast')\n });\n editor.ui.registry.addMenuItem('tabledeletecolumn', {\n text: 'Delete column',\n icon: 'table-delete-column',\n onAction: cmd('mceTableDeleteCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addMenuItem('tablecutcolumn', {\n text: 'Cut column',\n icon: 'cut-column',\n onAction: cmd('mceTableCutCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addMenuItem('tablecopycolumn', {\n text: 'Copy column',\n icon: 'duplicate-column',\n onAction: cmd('mceTableCopyCol'),\n onSetup: selectionTargets.onSetupColumn('onAny')\n });\n editor.ui.registry.addMenuItem('tablepastecolumnbefore', {\n text: 'Paste column before',\n icon: 'paste-column-before',\n onAction: cmd('mceTablePasteColBefore'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onFirst')\n });\n editor.ui.registry.addMenuItem('tablepastecolumnafter', {\n text: 'Paste column after',\n icon: 'paste-column-after',\n onAction: cmd('mceTablePasteColAfter'),\n onSetup: selectionTargets.onSetupPasteableColumn(clipboard.getColumns, 'onLast')\n });\n var column = {\n type: 'nestedmenuitem',\n text: 'Column',\n getSubmenuItems: constant('tableinsertcolumnbefore tableinsertcolumnafter tabledeletecolumn | tablecutcolumn tablecopycolumn tablepastecolumnbefore tablepastecolumnafter')\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: constant('tablecellprops tablemergecells tablesplitcells')\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(constant(''), 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 var tableClassList = filterNoneItem(getTableClassList(editor));\n if (tableClassList.length !== 0) {\n editor.ui.registry.addNestedMenuItem('tableclass', {\n icon: 'table-classes',\n text: 'Table styles',\n getSubmenuItems: function () {\n return buildMenuItems(editor, selections, tableClassList, 'tableclass', function (value) {\n return editor.execCommand('mceTableToggleClass', false, value);\n });\n },\n onSetup: selectionTargets.onSetupTable\n });\n }\n var tableCellClassList = filterNoneItem(getCellClassList(editor));\n if (tableCellClassList.length !== 0) {\n editor.ui.registry.addNestedMenuItem('tablecellclass', {\n icon: 'table-cell-classes',\n text: 'Cell styles',\n getSubmenuItems: function () {\n return buildMenuItems(editor, selections, tableCellClassList, 'tablecellclass', function (value) {\n return editor.execCommand('mceTableCellToggleClass', false, value);\n });\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n }\n editor.ui.registry.addNestedMenuItem('tablecellvalign', {\n icon: 'vertical-align',\n text: 'Vertical align',\n getSubmenuItems: function () {\n return buildMenuItems(editor, selections, verticalAlignValues, 'tablecellverticalalign', applyTableCellStyle(editor, 'vertical-align'));\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addNestedMenuItem('tablecellborderwidth', {\n icon: 'border-width',\n text: 'Border width',\n getSubmenuItems: function () {\n return buildMenuItems(editor, selections, getTableBorderWidths(editor), 'tablecellborderwidth', applyTableCellStyle(editor, 'border-width'));\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addNestedMenuItem('tablecellborderstyle', {\n icon: 'border-style',\n text: 'Border style',\n getSubmenuItems: function () {\n return buildMenuItems(editor, selections, getTableBorderStyles(editor), 'tablecellborderstyle', applyTableCellStyle(editor, 'border-style'));\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addToggleMenuItem('tablecaption', {\n icon: 'table-caption',\n text: 'Table caption',\n onAction: cmd('mceTableToggleCaption'),\n onSetup: selectionTargets.onSetupTableWithCaption\n });\n editor.ui.registry.addNestedMenuItem('tablecellbackgroundcolor', {\n icon: 'cell-background-color',\n text: 'Background color',\n getSubmenuItems: function () {\n return buildColorMenu(editor, getTableBackgroundColorMap(editor), 'background-color');\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addNestedMenuItem('tablecellbordercolor', {\n icon: 'cell-border-color',\n text: 'Border color',\n getSubmenuItems: function () {\n return buildColorMenu(editor, getTableBorderColorMap(editor), 'border-color');\n },\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addToggleMenuItem('tablerowheader', {\n text: 'Row header',\n icon: 'table-top-header',\n onAction: changeRowHeader(editor),\n onSetup: selectionTargets.onSetupTableRowHeaders\n });\n editor.ui.registry.addToggleMenuItem('tablecolheader', {\n text: 'Column header',\n icon: 'table-left-header',\n onAction: changeColumnHeader(editor),\n onSetup: selectionTargets.onSetupTableColumnHeaders\n });\n };\n\n var Plugin = function (editor) {\n var selections = Selections(function () {\n return getBody(editor);\n }, function () {\n return getSelectionCell(getSelectionStart(editor), getIsRoot(editor));\n }, ephemera.selectedSelector);\n var selectionTargets = getSelectionTargets(editor, selections);\n var resizeHandler = getResizeHandler(editor);\n var cellSelection = CellSelection(editor, resizeHandler.lazyResize, selectionTargets);\n var actions = TableActions(editor, cellSelection, resizeHandler.lazyWire);\n var clipboard = Clipboard();\n registerCommands(editor, actions, cellSelection, selections, clipboard);\n registerQueryCommands(editor, actions, selections);\n registerEvents(editor, selections, actions);\n addMenuItems(editor, selections, selectionTargets, clipboard);\n addButtons(editor, selections, selectionTargets, clipboard);\n addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n registerFormats(editor);\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n handle$1(e, editor, cellSelection);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n });\n return getApi(editor, clipboard, resizeHandler, selectionTargets);\n };\n function Plugin$1 () {\n global$3.add('table', Plugin);\n }\n\n Plugin$1();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isNull = eq(null);\n var isBoolean = isSimpleType('boolean');\n var isFunction = isSimpleType('function');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var tripleEquals = function (a, b) {\n return a === b;\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 call = function (thunk) {\n return thunk();\n };\n var id = identity;\n var me = {\n fold: function (n, _s) {\n return n();\n },\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: function () {\n return none();\n },\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 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 };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each$1 = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var foldl = function (xs, f, acc) {\n each$1(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n return flatten(map(xs, f));\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var is = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lhs.exists(function (left) {\n return comparator(left, rhs);\n });\n };\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var assumeExternalTargets = function (editor) {\n var externalTargets = editor.getParam('link_assume_external_targets', false);\n if (isBoolean(externalTargets) && externalTargets) {\n return 1;\n } else if (isString(externalTargets) && (externalTargets === 'http' || externalTargets === 'https')) {\n return externalTargets;\n }\n return 0;\n };\n var hasContextToolbar = function (editor) {\n return editor.getParam('link_context_toolbar', false, 'boolean');\n };\n var getLinkList = function (editor) {\n return editor.getParam('link_list');\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target');\n };\n var getTargetList = function (editor) {\n return editor.getParam('target_list', true);\n };\n var getRelList = function (editor) {\n return editor.getParam('rel_list', [], 'array');\n };\n var getLinkClassList = function (editor) {\n return editor.getParam('link_class_list', [], 'array');\n };\n var shouldShowLinkTitle = function (editor) {\n return editor.getParam('link_title', true, 'boolean');\n };\n var allowUnsafeLinkTarget = function (editor) {\n return editor.getParam('allow_unsafe_link_target', false, 'boolean');\n };\n var useQuickLink = function (editor) {\n return editor.getParam('link_quicklink', false, 'boolean');\n };\n var getDefaultLinkProtocol = function (editor) {\n return editor.getParam('link_default_protocol', 'http', 'string');\n };\n\n var 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 getText = function (item) {\n if (isString(item.text)) {\n return item.text;\n } else if (isString(item.title)) {\n return item.title;\n } else {\n return '';\n }\n };\n var sanitizeList = function (list, extractValue) {\n var out = [];\n global$4.each(list, function (item) {\n var text = getText(item);\n if (item.menu !== undefined) {\n var items = sanitizeList(item.menu, extractValue);\n out.push({\n text: text,\n items: items\n });\n } else {\n var value = extractValue(item);\n out.push({\n text: text,\n value: value\n });\n }\n });\n return out;\n };\n var sanitizeWith = function (extracter) {\n if (extracter === void 0) {\n extracter = getValue;\n }\n return function (list) {\n return Optional.from(list).map(function (list) {\n return sanitizeList(list, extracter);\n });\n };\n };\n var sanitize = function (list) {\n return sanitizeWith(getValue)(list);\n };\n var createUi = function (name, label) {\n return function (items) {\n return {\n name: name,\n type: 'listbox',\n label: label,\n items: items\n };\n };\n };\n var ListOptions = {\n sanitize: sanitize,\n sanitizeWith: sanitizeWith,\n createUi: createUi,\n getValue: getValue\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var isAnchor = function (elm) {\n return elm && elm.nodeName.toLowerCase() === 'a';\n };\n var isLink = function (elm) {\n return isAnchor(elm) && !!getHref(elm);\n };\n var collectNodesInRange = function (rng, predicate) {\n if (rng.collapsed) {\n return [];\n } else {\n var contents = rng.cloneContents();\n var walker = new global$3(contents.firstChild, contents);\n var elements = [];\n var current = contents.firstChild;\n do {\n if (predicate(current)) {\n elements.push(current);\n }\n } while (current = walker.next());\n return elements;\n }\n };\n var hasProtocol = function (url) {\n return /^\\w+:/i.test(url);\n };\n var getHref = function (elm) {\n var href = elm.getAttribute('data-mce-href');\n return href ? href : elm.getAttribute('href');\n };\n var applyRelTargetRules = function (rel, isUnsafe) {\n var rules = ['noopener'];\n var rels = rel ? rel.split(/\\s+/) : [];\n var toString = function (rels) {\n return global$4.trim(rels.sort().join(' '));\n };\n var addTargetRules = function (rels) {\n rels = removeTargetRules(rels);\n return rels.length > 0 ? rels.concat(rules) : rules;\n };\n var removeTargetRules = function (rels) {\n return rels.filter(function (val) {\n return global$4.inArray(rules, val) === -1;\n });\n };\n var newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n return newRels.length > 0 ? toString(newRels) : '';\n };\n var trimCaretContainers = function (text) {\n return text.replace(/\\uFEFF/g, '');\n };\n var getAnchorElement = function (editor, selectedElm) {\n selectedElm = selectedElm || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return editor.dom.select('a[href]', selectedElm)[0];\n } else {\n return editor.dom.getParent(selectedElm, 'a[href]');\n }\n };\n var getAnchorText = function (selection, anchorElm) {\n var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });\n return trimCaretContainers(text);\n };\n var hasLinks = function (elements) {\n return global$4.grep(elements, isLink).length > 0;\n };\n var hasLinksInSelection = function (rng) {\n return collectNodesInRange(rng, isLink).length > 0;\n };\n var isOnlyTextSelected = function (editor) {\n var inlineTextElements = editor.schema.getTextInlineElements();\n var isElement = function (elm) {\n return elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase());\n };\n var elements = collectNodesInRange(editor.selection.getRng(), isElement);\n return elements.length === 0;\n };\n var isImageFigure = function (elm) {\n return elm && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n };\n var getLinkAttrs = function (data) {\n var attrs = [\n 'title',\n 'rel',\n 'class',\n 'target'\n ];\n return foldl(attrs, function (acc, key) {\n data[key].each(function (value) {\n acc[key] = value.length > 0 ? value : null;\n });\n return acc;\n }, { href: data.href });\n };\n var handleExternalTargets = function (href, assumeExternalTargets) {\n if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n return assumeExternalTargets + '://' + href;\n }\n return href;\n };\n var applyLinkOverrides = function (editor, linkAttrs) {\n var newLinkAttrs = __assign({}, linkAttrs);\n if (!(getRelList(editor).length > 0) && allowUnsafeLinkTarget(editor) === false) {\n var newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n newLinkAttrs.rel = newRel ? newRel : null;\n }\n if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) {\n newLinkAttrs.target = getDefaultLinkTarget(editor);\n }\n newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor));\n return newLinkAttrs;\n };\n var updateLink = function (editor, anchorElm, text, linkAttrs) {\n text.each(function (text) {\n if (has(anchorElm, 'innerText')) {\n anchorElm.innerText = text;\n } else {\n anchorElm.textContent = text;\n }\n });\n editor.dom.setAttribs(anchorElm, linkAttrs);\n editor.selection.select(anchorElm);\n };\n var createLink = function (editor, selectedElm, text, linkAttrs) {\n if (isImageFigure(selectedElm)) {\n linkImageFigure(editor, selectedElm, linkAttrs);\n } else {\n text.fold(function () {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n }, function (text) {\n editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(text)));\n });\n }\n };\n var linkDomMutation = function (editor, attachState, data) {\n var selectedElm = editor.selection.getNode();\n var anchorElm = getAnchorElement(editor, selectedElm);\n var linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n editor.undoManager.transact(function () {\n if (data.href === attachState.href) {\n attachState.attach();\n }\n if (anchorElm) {\n editor.focus();\n updateLink(editor, anchorElm, data.text, linkAttrs);\n } else {\n createLink(editor, selectedElm, data.text, linkAttrs);\n }\n });\n };\n var unlinkSelection = function (editor) {\n var dom = editor.dom, selection = editor.selection;\n var bookmark = selection.getBookmark();\n var rng = selection.getRng().cloneRange();\n var startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody());\n var endAnchorElm = dom.getParent(rng.endContainer, 'a[href]', editor.getBody());\n if (startAnchorElm) {\n rng.setStartBefore(startAnchorElm);\n }\n if (endAnchorElm) {\n rng.setEndAfter(endAnchorElm);\n }\n selection.setRng(rng);\n editor.execCommand('unlink');\n selection.moveToBookmark(bookmark);\n };\n var unlinkDomMutation = function (editor) {\n editor.undoManager.transact(function () {\n var node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n unlinkSelection(editor);\n }\n editor.focus();\n });\n };\n var unwrapOptions = function (data) {\n var cls = data.class, href = data.href, rel = data.rel, target = data.target, text = data.text, title = data.title;\n return filter({\n class: cls.getOrNull(),\n href: href,\n rel: rel.getOrNull(),\n target: target.getOrNull(),\n text: text.getOrNull(),\n title: title.getOrNull()\n }, function (v, _k) {\n return isNull(v) === false;\n });\n };\n var link = function (editor, attachState, data) {\n editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(data)) : linkDomMutation(editor, attachState, data);\n };\n var unlink = function (editor) {\n editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor);\n };\n var unlinkImageFigure = function (editor, fig) {\n var img = editor.dom.select('img', fig)[0];\n if (img) {\n var a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n a.parentNode.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n var linkImageFigure = function (editor, fig, attrs) {\n var img = editor.dom.select('img', fig)[0];\n if (img) {\n var a = editor.dom.create('a', attrs);\n img.parentNode.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n\n var isListGroup = function (item) {\n return hasNonNullableKey(item, 'items');\n };\n var findTextByValue = function (value, catalog) {\n return findMap(catalog, function (item) {\n if (isListGroup(item)) {\n return findTextByValue(value, item.items);\n } else {\n return someIf(item.value === value, item);\n }\n });\n };\n var getDelta = function (persistentText, fieldName, catalog, data) {\n var value = data[fieldName];\n var hasPersistentText = persistentText.length > 0;\n return value !== undefined ? findTextByValue(value, catalog).map(function (i) {\n return {\n url: {\n value: i.value,\n meta: {\n text: hasPersistentText ? persistentText : i.text,\n attach: noop\n }\n },\n text: hasPersistentText ? persistentText : i.text\n };\n }) : Optional.none();\n };\n var findCatalog = function (catalogs, fieldName) {\n if (fieldName === 'link') {\n return catalogs.link;\n } else if (fieldName === 'anchor') {\n return catalogs.anchor;\n } else {\n return Optional.none();\n }\n };\n var init = function (initialData, linkCatalog) {\n var persistentData = {\n text: initialData.text,\n title: initialData.title\n };\n var getTitleFromUrlChange = function (url) {\n return someIf(persistentData.title.length <= 0, Optional.from(url.meta.title).getOr(''));\n };\n var getTextFromUrlChange = function (url) {\n return someIf(persistentData.text.length <= 0, Optional.from(url.meta.text).getOr(url.value));\n };\n var onUrlChange = function (data) {\n var text = getTextFromUrlChange(data.url);\n var title = getTitleFromUrlChange(data.url);\n if (text.isSome() || title.isSome()) {\n return Optional.some(__assign(__assign({}, text.map(function (text) {\n return { text: text };\n }).getOr({})), title.map(function (title) {\n return { title: title };\n }).getOr({})));\n } else {\n return Optional.none();\n }\n };\n var onCatalogChange = function (data, change) {\n var catalog = findCatalog(linkCatalog, change.name).getOr([]);\n return getDelta(persistentData.text, change.name, catalog, data);\n };\n var onChange = function (getData, change) {\n var name = change.name;\n if (name === 'url') {\n return onUrlChange(getData());\n } else if (contains([\n 'anchor',\n 'link'\n ], name)) {\n return onCatalogChange(getData(), change);\n } else if (name === 'text' || name === 'title') {\n persistentData[name] = getData()[name];\n return Optional.none();\n } else {\n return Optional.none();\n }\n };\n return { onChange: onChange };\n };\n var DialogChanges = {\n init: init,\n getDelta: getDelta\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var delayedConfirm = function (editor, message, callback) {\n var rng = editor.selection.getRng();\n global$2.setEditorTimeout(editor, function () {\n editor.windowManager.confirm(message, function (state) {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n var tryEmailTransform = function (data) {\n var url = data.href;\n var suggestMailTo = url.indexOf('@') > 0 && url.indexOf('/') === -1 && url.indexOf('mailto:') === -1;\n return suggestMailTo ? Optional.some({\n message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',\n preprocess: function (oldData) {\n return __assign(__assign({}, oldData), { href: 'mailto:' + url });\n }\n }) : Optional.none();\n };\n var tryProtocolTransform = function (assumeExternalTargets, defaultLinkProtocol) {\n return function (data) {\n var url = data.href;\n var suggestProtocol = assumeExternalTargets === 1 && !hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www(\\.|\\d\\.)/i.test(url);\n return suggestProtocol ? Optional.some({\n message: 'The URL you entered seems to be an external link. Do you want to add the required ' + defaultLinkProtocol + ':// prefix?',\n preprocess: function (oldData) {\n return __assign(__assign({}, oldData), { href: defaultLinkProtocol + '://' + url });\n }\n }) : Optional.none();\n };\n };\n var preprocess = function (editor, data) {\n return findMap([\n tryEmailTransform,\n tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n ], function (f) {\n return f(data);\n }).fold(function () {\n return global$1.resolve(data);\n }, function (transform) {\n return new global$1(function (callback) {\n delayedConfirm(editor, transform.message, function (state) {\n callback(state ? transform.preprocess(data) : data);\n });\n });\n });\n };\n var DialogConfirms = { preprocess: preprocess };\n\n var getAnchors = function (editor) {\n var anchorNodes = editor.dom.select('a:not([href])');\n var anchors = bind(anchorNodes, function (anchor) {\n var id = anchor.name || anchor.id;\n return id ? [{\n text: id,\n value: '#' + id\n }] : [];\n });\n return anchors.length > 0 ? Optional.some([{\n text: 'None',\n value: ''\n }].concat(anchors)) : Optional.none();\n };\n var AnchorListOptions = { getAnchors: getAnchors };\n\n var getClasses = function (editor) {\n var list = getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Optional.none();\n };\n var ClassListOptions = { getClasses: getClasses };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var parseJson = function (text) {\n try {\n return Optional.some(JSON.parse(text));\n } catch (err) {\n return Optional.none();\n }\n };\n var getLinks = function (editor) {\n var extractor = function (item) {\n return editor.convertURL(item.value || item.url, 'href');\n };\n var linkList = getLinkList(editor);\n return new global$1(function (callback) {\n if (isString(linkList)) {\n global.send({\n url: linkList,\n success: function (text) {\n return callback(parseJson(text));\n },\n error: function (_) {\n return callback(Optional.none());\n }\n });\n } else if (isFunction(linkList)) {\n linkList(function (output) {\n return callback(Optional.some(output));\n });\n } else {\n callback(Optional.from(linkList));\n }\n }).then(function (optItems) {\n return optItems.bind(ListOptions.sanitizeWith(extractor)).map(function (items) {\n if (items.length > 0) {\n var noneItem = [{\n text: 'None',\n value: ''\n }];\n return noneItem.concat(items);\n } else {\n return items;\n }\n });\n });\n };\n var LinkListOptions = { getLinks: getLinks };\n\n var getRels = function (editor, initialTarget) {\n var list = getRelList(editor);\n if (list.length > 0) {\n var isTargetBlank_1 = is(initialTarget, '_blank');\n var enforceSafe = allowUnsafeLinkTarget(editor) === false;\n var safeRelExtractor = function (item) {\n return applyRelTargetRules(ListOptions.getValue(item), isTargetBlank_1);\n };\n var sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Optional.none();\n };\n var RelOptions = { getRels: getRels };\n\n var fallbacks = [\n {\n text: 'Current window',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ];\n var getTargets = function (editor) {\n var list = getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(function () {\n return Optional.some(fallbacks);\n });\n } else if (list === false) {\n return Optional.none();\n }\n return Optional.some(fallbacks);\n };\n var TargetOptions = { getTargets: getTargets };\n\n var nonEmptyAttr = function (dom, elem, name) {\n var val = dom.getAttrib(elem, name);\n return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n };\n var extractFromAnchor = function (editor, anchor) {\n var dom = editor.dom;\n var onlyText = isOnlyTextSelected(editor);\n var text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n var url = anchor ? Optional.some(dom.getAttrib(anchor, 'href')) : Optional.none();\n var target = anchor ? Optional.from(dom.getAttrib(anchor, 'target')) : Optional.none();\n var rel = nonEmptyAttr(dom, anchor, 'rel');\n var linkClass = nonEmptyAttr(dom, anchor, 'class');\n var title = nonEmptyAttr(dom, anchor, 'title');\n return {\n url: url,\n text: text,\n title: title,\n target: target,\n rel: rel,\n linkClass: linkClass\n };\n };\n var collect = function (editor, linkNode) {\n return LinkListOptions.getLinks(editor).then(function (links) {\n var anchor = extractFromAnchor(editor, linkNode);\n return {\n anchor: anchor,\n catalogs: {\n targets: TargetOptions.getTargets(editor),\n rels: RelOptions.getRels(editor, anchor.target),\n classes: ClassListOptions.getClasses(editor),\n anchor: AnchorListOptions.getAnchors(editor),\n link: links\n },\n optNode: Optional.from(linkNode),\n flags: { titleEnabled: shouldShowLinkTitle(editor) }\n };\n });\n };\n var DialogInfo = { collect: collect };\n\n var handleSubmit = function (editor, info) {\n return function (api) {\n var data = api.getData();\n if (!data.url.value) {\n unlink(editor);\n api.close();\n return;\n }\n var getChangedValue = function (key) {\n return Optional.from(data[key]).filter(function (value) {\n return !is(info.anchor[key], value);\n });\n };\n var changedData = {\n href: data.url.value,\n text: getChangedValue('text'),\n target: getChangedValue('target'),\n rel: getChangedValue('rel'),\n class: getChangedValue('linkClass'),\n title: getChangedValue('title')\n };\n var attachState = {\n href: data.url.value,\n attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : noop\n };\n DialogConfirms.preprocess(editor, changedData).then(function (pData) {\n link(editor, attachState, pData);\n });\n api.close();\n };\n };\n var collectData = function (editor) {\n var anchorNode = getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n var getInitialData = function (info, defaultTarget) {\n var anchor = info.anchor;\n var url = anchor.url.getOr('');\n return {\n url: {\n value: url,\n meta: { original: { value: url } }\n },\n text: anchor.text.getOr(''),\n title: anchor.title.getOr(''),\n anchor: url,\n link: url,\n rel: anchor.rel.getOr(''),\n target: anchor.target.or(defaultTarget).getOr(''),\n linkClass: anchor.linkClass.getOr('')\n };\n };\n var makeDialog = function (settings, onSubmit, editor) {\n var urlInput = [{\n name: 'url',\n type: 'urlinput',\n filetype: 'file',\n label: 'URL'\n }];\n var displayText = settings.anchor.text.map(function () {\n return {\n name: 'text',\n type: 'input',\n label: 'Text to display'\n };\n }).toArray();\n var titleText = settings.flags.titleEnabled ? [{\n name: 'title',\n type: 'input',\n label: 'Title'\n }] : [];\n var defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n var initialData = getInitialData(settings, defaultTarget);\n var catalogs = settings.catalogs;\n var dialogDelta = DialogChanges.init(initialData, catalogs);\n var body = {\n type: 'panel',\n items: flatten([\n urlInput,\n displayText,\n titleText,\n cat([\n catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),\n catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),\n catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),\n catalogs.link.map(ListOptions.createUi('link', 'Link list')),\n catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))\n ])\n ])\n };\n return {\n title: 'Insert/Edit Link',\n size: 'normal',\n body: body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: initialData,\n onChange: function (api, _a) {\n var name = _a.name;\n dialogDelta.onChange(api.getData, { name: name }).each(function (newData) {\n api.setData(newData);\n });\n },\n onSubmit: onSubmit\n };\n };\n var open$1 = function (editor) {\n var data = collectData(editor);\n data.then(function (info) {\n var onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).then(function (spec) {\n editor.windowManager.open(spec);\n });\n };\n\n var appendClickRemove = function (link, evt) {\n document.body.appendChild(link);\n link.dispatchEvent(evt);\n document.body.removeChild(link);\n };\n var open = function (url) {\n var link = document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n var evt = document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n appendClickRemove(link, evt);\n };\n\n var getLink = function (editor, elm) {\n return editor.dom.getParent(elm, 'a[href]');\n };\n var getSelectedLink = function (editor) {\n return getLink(editor, editor.selection.getStart());\n };\n var hasOnlyAltModifier = function (e) {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n var gotoLink = function (editor, a) {\n if (a) {\n var href = getHref(a);\n if (/^#/.test(href)) {\n var targetEl = editor.$(href);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n open(a.href);\n }\n }\n };\n var openDialog = function (editor) {\n return function () {\n open$1(editor);\n };\n };\n var gotoSelectedLink = function (editor) {\n return function () {\n gotoLink(editor, getSelectedLink(editor));\n };\n };\n var setupGotoLinks = function (editor) {\n editor.on('click', function (e) {\n var link = getLink(editor, e.target);\n if (link && global$5.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n editor.on('keydown', function (e) {\n var link = getSelectedLink(editor);\n if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n };\n var toggleState = function (editor, toggler) {\n editor.on('NodeChange', toggler);\n return function () {\n return editor.off('NodeChange', toggler);\n };\n };\n var toggleActiveState = function (editor) {\n return function (api) {\n var updateState = function () {\n return api.setActive(!editor.mode.isReadOnly() && getAnchorElement(editor, editor.selection.getNode()) !== null);\n };\n updateState();\n return toggleState(editor, updateState);\n };\n };\n var toggleEnabledState = function (editor) {\n return function (api) {\n var updateState = function () {\n return api.setDisabled(getAnchorElement(editor, editor.selection.getNode()) === null);\n };\n updateState();\n return toggleState(editor, updateState);\n };\n };\n var toggleUnlinkState = function (editor) {\n return function (api) {\n var hasLinks$1 = function (parents) {\n return hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());\n };\n var parents = editor.dom.getParents(editor.selection.getStart());\n api.setDisabled(!hasLinks$1(parents));\n return toggleState(editor, function (e) {\n return api.setDisabled(!hasLinks$1(e.parents));\n });\n };\n };\n\n var register = function (editor) {\n editor.addCommand('mceLink', function () {\n if (useQuickLink(editor)) {\n editor.fire('contexttoolbar-show', { toolbarKey: 'quicklink' });\n } else {\n openDialog(editor)();\n }\n });\n };\n\n var setup = function (editor) {\n editor.addShortcut('Meta+K', '', function () {\n editor.execCommand('mceLink');\n });\n };\n\n var setupButtons = function (editor) {\n editor.ui.registry.addToggleButton('link', {\n icon: 'link',\n tooltip: 'Insert/edit link',\n onAction: openDialog(editor),\n onSetup: toggleActiveState(editor)\n });\n editor.ui.registry.addButton('openlink', {\n icon: 'new-tab',\n tooltip: 'Open link',\n onAction: gotoSelectedLink(editor),\n onSetup: toggleEnabledState(editor)\n });\n editor.ui.registry.addButton('unlink', {\n icon: 'unlink',\n tooltip: 'Remove link',\n onAction: function () {\n return unlink(editor);\n },\n onSetup: toggleUnlinkState(editor)\n });\n };\n var setupMenuItems = function (editor) {\n editor.ui.registry.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'new-tab',\n onAction: gotoSelectedLink(editor),\n onSetup: toggleEnabledState(editor)\n });\n editor.ui.registry.addMenuItem('link', {\n icon: 'link',\n text: 'Link...',\n shortcut: 'Meta+K',\n onAction: openDialog(editor)\n });\n editor.ui.registry.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onAction: function () {\n return unlink(editor);\n },\n onSetup: toggleUnlinkState(editor)\n });\n };\n var setupContextMenu = function (editor) {\n var inLink = 'link unlink openlink';\n var noLink = 'link';\n editor.ui.registry.addContextMenu('link', {\n update: function (element) {\n return hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;\n }\n });\n };\n var setupContextToolbars = function (editor) {\n var collapseSelectionToEnd = function (editor) {\n editor.selection.collapse(false);\n };\n var onSetupLink = function (buttonApi) {\n var node = editor.selection.getNode();\n buttonApi.setDisabled(!getAnchorElement(editor, node));\n return noop;\n };\n var getLinkText = function (value) {\n var anchor = getAnchorElement(editor);\n var onlyText = isOnlyTextSelected(editor);\n if (!anchor && onlyText) {\n var text = getAnchorText(editor.selection, anchor);\n return Optional.some(text.length > 0 ? text : value);\n } else {\n return Optional.none();\n }\n };\n editor.ui.registry.addContextForm('quicklink', {\n launch: {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n onSetup: toggleActiveState(editor)\n },\n label: 'Link',\n predicate: function (node) {\n return !!getAnchorElement(editor, node) && hasContextToolbar(editor);\n },\n initValue: function () {\n var elm = getAnchorElement(editor);\n return !!elm ? getHref(elm) : '';\n },\n commands: [\n {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n primary: true,\n onSetup: function (buttonApi) {\n var node = editor.selection.getNode();\n buttonApi.setActive(!!getAnchorElement(editor, node));\n return toggleActiveState(editor)(buttonApi);\n },\n onAction: function (formApi) {\n var value = formApi.getValue();\n var text = getLinkText(value);\n var attachState = {\n href: value,\n attach: noop\n };\n link(editor, attachState, {\n href: value,\n text: text,\n title: Optional.none(),\n rel: Optional.none(),\n target: Optional.none(),\n class: Optional.none()\n });\n collapseSelectionToEnd(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: function (formApi) {\n unlink(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'new-tab',\n tooltip: 'Open link',\n onSetup: onSetupLink,\n onAction: function (formApi) {\n gotoSelectedLink(editor)();\n formApi.hide();\n }\n }\n ]\n });\n };\n\n function Plugin () {\n global$6.add('link', function (editor) {\n setupButtons(editor);\n setupMenuItems(editor);\n setupContextMenu(editor);\n setupContextToolbars(editor);\n setupGotoLinks(editor);\n register(editor);\n setup(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var eq = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isNull = eq(null);\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var call = function (thunk) {\n return thunk();\n };\n var id = identity;\n var me = {\n fold: function (n, _s) {\n return n();\n },\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: function () {\n return none();\n },\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 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 };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from\n };\n\n var 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$1 = 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$1 = 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\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n cancel();\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var insertEmoticon = function (editor, ch) {\n editor.insertContent(ch);\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (has(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var singleton = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var get = function () {\n return subject.get();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n get: get,\n set: set\n };\n };\n var value = function () {\n var subject = singleton(noop);\n var on = function (f) {\n return subject.get().each(f);\n };\n return __assign(__assign({}, subject), { on: on });\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var DEFAULT_ID = 'tinymce.plugins.emoticons';\n var getEmoticonDatabase = function (editor) {\n return editor.getParam('emoticons_database', 'emojis', 'string');\n };\n var getEmoticonDatabaseUrl = function (editor, pluginUrl) {\n var database = getEmoticonDatabase(editor);\n return editor.getParam('emoticons_database_url', pluginUrl + '/js/' + database + editor.suffix + '.js', 'string');\n };\n var getEmoticonDatabaseId = function (editor) {\n return editor.getParam('emoticons_database_id', DEFAULT_ID, 'string');\n };\n var getAppendedEmoticons = function (editor) {\n return editor.getParam('emoticons_append', {}, 'object');\n };\n var getEmotionsImageUrl = function (editor) {\n return editor.getParam('emoticons_images_url', 'https://twemoji.maxcdn.com/v/13.0.1/72x72/', 'string');\n };\n\n var ALL_CATEGORY = 'All';\n var categoryNameMap = {\n symbols: 'Symbols',\n people: 'People',\n animals_and_nature: 'Animals and Nature',\n food_and_drink: 'Food and Drink',\n activity: 'Activity',\n travel_and_places: 'Travel and Places',\n objects: 'Objects',\n flags: 'Flags',\n user: 'User Defined'\n };\n var translateCategory = function (categories, name) {\n return has(categories, name) ? categories[name] : name;\n };\n var getUserDefinedEmoticons = function (editor) {\n var userDefinedEmoticons = getAppendedEmoticons(editor);\n return map(userDefinedEmoticons, function (value) {\n return __assign({\n keywords: [],\n category: 'user'\n }, value);\n });\n };\n var initDatabase = function (editor, databaseUrl, databaseId) {\n var categories = value();\n var all = value();\n var emojiImagesUrl = getEmotionsImageUrl(editor);\n var getEmoji = function (lib) {\n if (startsWith(lib.char, '= max;\n };\n });\n for (var i = 0; i < list.length; i++) {\n if (pattern.length === 0 || emojiMatches(list[i], lowerCasePattern)) {\n matches.push({\n value: list[i].char,\n text: list[i].title,\n icon: list[i].char\n });\n if (reachedLimit(matches.length)) {\n break;\n }\n }\n }\n return matches;\n };\n\n var patternName = 'pattern';\n var open = function (editor, database) {\n var initialState = {\n pattern: '',\n results: emojisFrom(database.listAll(), '', Optional.some(300))\n };\n var currentTab = Cell(ALL_CATEGORY);\n var scan = function (dialogApi) {\n var dialogData = dialogApi.getData();\n var category = currentTab.get();\n var candidates = database.listCategory(category);\n var results = emojisFrom(candidates, dialogData[patternName], category === ALL_CATEGORY ? Optional.some(300) : Optional.none());\n dialogApi.setData({ results: results });\n };\n var updateFilter = last(function (dialogApi) {\n scan(dialogApi);\n }, 200);\n var searchField = {\n label: 'Search',\n type: 'input',\n name: patternName\n };\n var resultsField = {\n type: 'collection',\n name: 'results'\n };\n var getInitialState = function () {\n var body = {\n type: 'tabpanel',\n tabs: map$1(database.listCategories(), function (cat) {\n return {\n title: cat,\n name: cat,\n items: [\n searchField,\n resultsField\n ]\n };\n })\n };\n return {\n title: 'Emoticons',\n size: 'normal',\n body: body,\n initialData: initialState,\n onTabChange: function (dialogApi, details) {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: updateFilter.throttle,\n onAction: function (dialogApi, actionData) {\n if (actionData.name === 'results') {\n insertEmoticon(editor, actionData.value);\n dialogApi.close();\n }\n },\n buttons: [{\n type: 'cancel',\n text: 'Close',\n primary: true\n }]\n };\n };\n var dialogApi = editor.windowManager.open(getInitialState());\n dialogApi.focus(patternName);\n if (!database.hasLoaded()) {\n dialogApi.block('Loading emoticons...');\n database.waitForLoad().then(function () {\n dialogApi.redial(getInitialState());\n updateFilter.throttle(dialogApi);\n dialogApi.focus(patternName);\n dialogApi.unblock();\n }).catch(function (_err) {\n dialogApi.redial({\n title: 'Emoticons',\n body: {\n type: 'panel',\n items: [{\n type: 'alertbanner',\n level: 'error',\n icon: 'warning',\n text: '

Could not load emoticons

'\n }]\n },\n buttons: [{\n type: 'cancel',\n text: 'Close',\n primary: true\n }],\n initialData: {\n pattern: '',\n results: []\n }\n });\n dialogApi.focus(patternName);\n dialogApi.unblock();\n });\n }\n };\n\n var register$1 = function (editor, database) {\n editor.addCommand('mceEmoticons', function () {\n return open(editor, database);\n });\n };\n\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addAttributeFilter('data-emoticon', function (nodes) {\n each$1(nodes, function (node) {\n node.attr('data-mce-resize', 'false');\n node.attr('data-mce-placeholder', '1');\n });\n });\n });\n };\n\n var init = function (editor, database) {\n editor.ui.registry.addAutocompleter('emoticons', {\n ch: ':',\n columns: 'auto',\n minChars: 2,\n fetch: function (pattern, maxResults) {\n return database.waitForLoad().then(function () {\n var candidates = database.listAll();\n return emojisFrom(candidates, pattern, Optional.some(maxResults));\n });\n },\n onAction: function (autocompleteApi, rng, value) {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n var register = function (editor) {\n var onAction = function () {\n return editor.execCommand('mceEmoticons');\n };\n editor.ui.registry.addButton('emoticons', {\n tooltip: 'Emoticons',\n icon: 'emoji',\n onAction: onAction\n });\n editor.ui.registry.addMenuItem('emoticons', {\n text: 'Emoticons...',\n icon: 'emoji',\n onAction: onAction\n });\n };\n\n function Plugin () {\n global$3.add('emoticons', function (editor, pluginUrl) {\n var databaseUrl = getEmoticonDatabaseUrl(editor, pluginUrl);\n var databaseId = getEmoticonDatabaseId(editor);\n var database = initDatabase(editor, databaseUrl, databaseId);\n register$1(editor, database);\n register(editor);\n init(editor, database);\n setup(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var typeOf$1 = function (x) {\n if (x === null) {\n return 'null';\n }\n if (x === undefined) {\n return 'undefined';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isEquatableType = function (x) {\n return [\n 'undefined',\n 'boolean',\n 'number',\n 'string',\n 'function',\n 'xml',\n 'null'\n ].indexOf(x) !== -1;\n };\n\n var sort$1 = function (xs, compareFn) {\n var clone = Array.prototype.slice.call(xs);\n return clone.sort(compareFn);\n };\n\n var contramap = function (eqa, f) {\n return eq$2(function (x, y) {\n return eqa.eq(f(x), f(y));\n });\n };\n var eq$2 = function (f) {\n return { eq: f };\n };\n var tripleEq = eq$2(function (x, y) {\n return x === y;\n });\n var eqString = tripleEq;\n var eqArray = function (eqa) {\n return eq$2(function (x, y) {\n if (x.length !== y.length) {\n return false;\n }\n var len = x.length;\n for (var i = 0; i < len; i++) {\n if (!eqa.eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqSortedArray = function (eqa, compareFn) {\n return contramap(eqArray(eqa), function (xs) {\n return sort$1(xs, compareFn);\n });\n };\n var eqRecord = function (eqa) {\n return eq$2(function (x, y) {\n var kx = Object.keys(x);\n var ky = Object.keys(y);\n if (!eqSortedArray(eqString).eq(kx, ky)) {\n return false;\n }\n var len = kx.length;\n for (var i = 0; i < len; i++) {\n var q = kx[i];\n if (!eqa.eq(x[q], y[q])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqAny = eq$2(function (x, y) {\n if (x === y) {\n return true;\n }\n var tx = typeOf$1(x);\n var ty = typeOf$1(y);\n if (tx !== ty) {\n return false;\n }\n if (isEquatableType(tx)) {\n return x === y;\n } else if (tx === 'array') {\n return eqArray(eqAny).eq(x, y);\n } else if (tx === 'object') {\n return eqRecord(eqAny).eq(x, y);\n }\n return false;\n });\n\n 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$1 = 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$1 = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString$1 = isType$1('string');\n var isObject = isType$1('object');\n var isArray$1 = isType$1('array');\n var isNull = eq$1(null);\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq$1(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var tripleEquals = function (a, b) {\n return a === b;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var apply = function (f) {\n return f();\n };\n var call = function (f) {\n f();\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var call = function (thunk) {\n return thunk();\n };\n var id = identity;\n var me = {\n fold: function (n, _s) {\n return n();\n },\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: function () {\n return none();\n },\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 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 };\n return me;\n };\n var from$1 = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from$1\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$2 = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n var contains$3 = 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$3 = 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$k = 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$4 = 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, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each$k(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var findUntil$1 = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n var find$3 = function (xs, pred) {\n return findUntil$1(xs, pred, never);\n };\n var findIndex$2 = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray$1(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n return flatten(map$3(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$4(a1, function (x) {\n return !contains$3(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get$a = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get$a(xs, 0);\n };\n var last$2 = function (xs) {\n return get$a(xs, xs.length - 1);\n };\n var from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each$j = 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$j(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$j(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$3 = 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$j(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var values = function (obj) {\n return mapToArray(obj, identity);\n };\n var get$9 = function (obj, key) {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has$2 = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n var equal$1 = 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 = Array.isArray;\n var toArray$1 = function (obj) {\n if (!isArray(obj)) {\n var array = [];\n for (var i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n return array;\n } else {\n return obj;\n }\n };\n var each$i = function (o, cb, s) {\n var n, l;\n if (!o) {\n return false;\n }\n s = s || o;\n if (o.length !== undefined) {\n for (n = 0, l = o.length; n < l; n++) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n } else {\n for (n in o) {\n if (has$2(o, n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n }\n }\n return true;\n };\n var map$1 = function (array, callback) {\n var out = [];\n each$i(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$i(a, function (v, index) {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n var indexOf$1 = function (a, v) {\n if (a) {\n for (var i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n var reduce = function (collection, iteratee, accumulator, thisArg) {\n var acc = isUndefined(accumulator) ? collection[0] : accumulator;\n for (var i = 0; i < collection.length; i++) {\n acc = iteratee.call(thisArg, acc, collection[i], i);\n }\n return acc;\n };\n var findIndex$1 = function (array, predicate, thisArg) {\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n if (predicate.call(thisArg, array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n var last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2)\n for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar)\n ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$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$4(group(1), group(2));\n };\n var detect$3 = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find$2(versionRegexes, cleanedAgent);\n };\n var unknown$2 = function () {\n return nu$4(0, 0);\n };\n var nu$4 = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$4,\n detect: detect$3,\n unknown: unknown$2\n };\n\n var detectBrowser$1 = function (browsers, userAgentData) {\n return findMap(userAgentData.brands, function (uaBrand) {\n var lcBrand = uaBrand.brand.toLowerCase();\n return find$3(browsers, function (browser) {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(function (info) {\n return {\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n };\n });\n });\n };\n\n var detect$2 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find$3(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$2(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$2(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\n var removeFromStart = function (str, numChars) {\n return str.substring(numChars);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var removeLeading = function (str, prefix) {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n var contains$2 = 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$4 = blank(/^\\s+|\\s+$/g);\n var lTrim = blank(/^\\s+/g);\n var rTrim = blank(/\\s+$/g);\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n var isEmpty$3 = function (s) {\n return !isNotEmpty(s);\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$2(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$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$2(uastring, 'chrome') && !contains$2(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$2(uastring, 'msie') || contains$2(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$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(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$2(uastring, 'iphone') || contains$2(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie$1 = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = 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 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$1),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$3,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie$1),\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 = 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,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$1 = function (userAgent, userAgentDataOpt, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = userAgentDataOpt.bind(function (userAgentData) {\n return detectBrowser$1(browsers, userAgentData);\n }).orThunk(function () {\n return detectBrowser(browsers, userAgent);\n }).fold(Browser.unknown, Browser.nu);\n var os = 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$1 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform$2 = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);\n });\n var detect = function () {\n return platform$2();\n };\n\n var userAgent = navigator.userAgent;\n var platform$1 = detect();\n var browser$4 = platform$1.browser;\n var os = platform$1.os;\n var deviceType = platform$1.deviceType;\n var webkit = /WebKit/.test(userAgent) && !browser$4.isEdge();\n var fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!URL.createObjectURL;\n var windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n var Env = {\n opera: browser$4.isOpera(),\n webkit: webkit,\n ie: browser$4.isIE() || browser$4.isEdge() ? browser$4.version.major : false,\n gecko: browser$4.isFirefox(),\n mac: os.isOSX() || os.isiOS(),\n iOS: deviceType.isiPad() || deviceType.isiPhone(),\n android: os.isAndroid(),\n contentEditable: true,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: true,\n range: window.getSelection && 'Range' in window,\n documentMode: browser$4.isIE() ? document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: true,\n cacheSuffix: null,\n container: null,\n experimentalShadowDom: false,\n canHaveCSP: !browser$4.isIE(),\n desktop: deviceType.isDesktop(),\n windowsPhone: windowsPhone,\n browser: {\n current: browser$4.current,\n version: browser$4.version,\n isChrome: browser$4.isChrome,\n isEdge: browser$4.isEdge,\n isFirefox: browser$4.isFirefox,\n isIE: browser$4.isIE,\n isOpera: browser$4.isOpera,\n isSafari: browser$4.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$2 = /^\\s*|\\s*$/g;\n var trim$3 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$2, '');\n };\n var is$3 = function (obj, type) {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && isArray(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n var makeMap$4 = 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 = has$2;\n var create$9 = 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$6 = 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 (has$2(ext, 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$3 = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$i(o, function (o, i) {\n if (f.call(s, o, i, n) === false) {\n return false;\n }\n walk$3(o, f, n, s);\n });\n }\n };\n var createNS = function (n, o) {\n var i, v;\n o = o || window;\n n = n.split('.');\n for (i = 0; i < n.length; i++) {\n v = n[i];\n if (!o[v]) {\n o[v] = {};\n }\n o = o[v];\n }\n return o;\n };\n var resolve$3 = function (n, o) {\n var i, l;\n o = o || window;\n n = n.split('.');\n for (i = 0, l = n.length; i < l; i++) {\n o = o[n[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n var explode$4 = function (s, d) {\n if (!s || is$3(s, 'array')) {\n return s;\n }\n return map$1(s.split(d || ','), trim$3);\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$3,\n isArray: isArray,\n is: is$3,\n toArray: toArray$1,\n makeMap: makeMap$4,\n each: each$i,\n map: map$1,\n grep: filter$2,\n inArray: indexOf$1,\n hasOwn: hasOwnProperty,\n extend: extend$6,\n create: create$9,\n walk: walk$3,\n createNS: createNS,\n resolve: resolve$3,\n explode: explode$4,\n _addCacheSuffix: _addCacheSuffix\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom$2(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom$2(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom$2(node);\n };\n var fromDom$2 = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint$1 = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n };\n var SugarElement = {\n fromHtml: fromHtml$1,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom$2,\n fromPoint: fromPoint$1\n };\n\n var toArray = function (target, f) {\n var r = [];\n var recurse = function (e) {\n r.push(e);\n return f(e);\n };\n var cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var COMMENT = 8;\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var is$2 = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq = 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().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment$1 = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement$6 = isType(ELEMENT);\n var isText$8 = isType(TEXT);\n var isDocument$2 = isType(DOCUMENT);\n var isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n var isTag = function (tag) {\n return function (e) {\n return isElement$6(e) && name(e) === tag;\n };\n };\n\n var owner$1 = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument$2(dos) ? dos : owner$1(dos);\n };\n var documentElement = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parents$1 = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom;\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var siblings = function (element) {\n var filterSelf = function (elements) {\n return filter$4(elements, function (x) {\n return !eq(element, x);\n });\n };\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n var prevSibling = function (element) {\n return Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var prevSiblings = function (element) {\n return reverse(toArray(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return toArray(element, nextSibling);\n };\n var children = function (element) {\n return map$3(element.dom.childNodes, SugarElement.fromDom);\n };\n var child$1 = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child$1(element, 0);\n };\n var lastChild = function (element) {\n return child$1(element, element.dom.childNodes.length - 1);\n };\n var childNodesCount = function (element) {\n return element.dom.childNodes.length;\n };\n\n var getHead = function (doc) {\n var b = doc.dom.head;\n if (b === null || b === undefined) {\n throw new Error('Head is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported$1 = constant(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getStyleContainer = function (dos) {\n return isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported$1() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement$6(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var before$4 = 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$3 = 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$1(v, element);\n });\n }, function (v) {\n before$4(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append$1(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append$1 = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var wrap$3 = function (element, wrapper) {\n before$4(element, wrapper);\n append$1(wrapper, element);\n };\n\n var before$3 = function (marker, elements) {\n each$k(elements, function (x) {\n before$4(marker, x);\n });\n };\n var append = function (parent, elements) {\n each$k(elements, function (x) {\n append$1(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each$k(children(element), function (rogue) {\n remove$7(rogue);\n });\n };\n var remove$7 = 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$3(wrapper, children$1);\n }\n remove$7(wrapper);\n };\n\n var inBody = function (element) {\n var dom = isText$8(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n var get$8 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n var intoView = function (element, alignToTop) {\n var isSafari = detect().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$7 = function (_win) {\n var win = _win === undefined ? window : _win;\n return Optional.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? window : _win;\n var doc = win.document;\n var scroll = get$8(SugarElement.fromDom(doc));\n return get$7(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$5 = 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$3(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 if (isElement$5(node)) {\n for (var i = 0; i < items.length; i++) {\n var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n var 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$5(node) && node.hasAttribute(attrName);\n };\n };\n var hasAttributeValue = function (attrName, attrValue) {\n return function (node) {\n return isElement$5(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n var isBogus$2 = function (node) {\n return isElement$5(node) && node.hasAttribute('data-mce-bogus');\n };\n var isBogusAll$1 = function (node) {\n return isElement$5(node) && node.getAttribute('data-mce-bogus') === 'all';\n };\n var isTable$3 = function (node) {\n return isElement$5(node) && node.tagName === 'TABLE';\n };\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$5(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$7 = isNodeType(3);\n var isComment = isNodeType(8);\n var isDocument$1 = isNodeType(9);\n var isDocumentFragment = isNodeType(11);\n var isBr$5 = matchNodeNames(['br']);\n var isImg = matchNodeNames(['img']);\n var isContentEditableTrue$4 = hasContentEditableState('true');\n var isContentEditableFalse$b = hasContentEditableState('false');\n var isTableCell$5 = matchNodeNames([\n 'td',\n 'th'\n ]);\n var isMedia$2 = matchNodeNames([\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n\n var is$1 = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lhs.exists(function (left) {\n return comparator(left, rhs);\n });\n };\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var rawSet = function (dom, key, value) {\n if (isString$1(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set$1 = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll$1 = function (element, attrs) {\n var dom = element.dom;\n each$j(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$6 = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$6(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$6 = function (element, key) {\n element.dom.removeAttribute(key);\n };\n var clone$3 = 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$1(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var setAll = function (element, css) {\n var dom = element.dom;\n each$j(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$5 = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom;\n if (isSupported(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$3 = detect().browser;\n var firstElement = function (nodes) {\n return find$3(nodes, isElement$6);\n };\n var getTableCaptionDeltaY = function (elm) {\n if (browser$3.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$3(elm.children, child);\n };\n var getPos = function (body, elm, rootElm) {\n var x = 0, y = 0;\n var doc = body.ownerDocument;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$5(SugarElement.fromDom(body), 'position') === 'static') {\n var 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 var offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n var castOffsetParent = offsetParent;\n x += castOffsetParent.offsetLeft || 0;\n y += castOffsetParent.offsetTop || 0;\n offsetParent = castOffsetParent.offsetParent;\n }\n offsetParent = elm.parentNode;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n x -= offsetParent.scrollLeft || 0;\n y -= offsetParent.scrollTop || 0;\n offsetParent = offsetParent.parentNode;\n }\n y += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n }\n return {\n x: x,\n y: y\n };\n };\n\n var exports$1 = {}, module$1 = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module$1, undefined));\n var Promise$1 = module$1.exports.boltExport;\n\n var nu$1 = function (baseFn) {\n var data = Optional.none();\n var callbacks = [];\n var map = function (f) {\n return nu$1(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each$k(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure$1 = function (a) {\n return nu$1(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$1,\n pure: pure$1\n };\n\n var errorReporter = function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu = function (baseFn) {\n return make(function () {\n return new Promise$1(baseFn);\n });\n };\n var pure = function (a) {\n return make(function () {\n return Promise$1.resolve(a);\n });\n };\n var Future = {\n nu: nu,\n pure: pure\n };\n\n var par$1 = 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$k(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par = function (futures) {\n return par$1(futures, Future.nu);\n };\n\n var value$1 = function (o) {\n var or = function (_opt) {\n return value$1(o);\n };\n var orThunk = function (_f) {\n return value$1(o);\n };\n var map = function (f) {\n return value$1(f(o));\n };\n var mapError = function (_f) {\n return value$1(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = identity;\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 isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value$1);\n };\n var Result = {\n value: value$1,\n error: error,\n fromOption: fromOption\n };\n\n var generate$1 = function (cases) {\n if (!isArray$1(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each$k(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$1(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains$3(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n var unite = function (result) {\n return result.fold(identity, identity);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n }\n\n var ancestor$3 = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n var closest$3 = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n };\n var sibling$2 = function (scope, predicate) {\n var element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child(SugarElement.fromDom(element.parentNode), function (x) {\n return !eq(scope, x) && predicate(x);\n });\n };\n var child = function (scope, predicate) {\n var pred = function (node) {\n return predicate(SugarElement.fromDom(node));\n };\n var result = find$3(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$3(scope, function (e) {\n return is$2(e, selector);\n }, isRoot);\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$2 = function (scope, selector, isRoot) {\n var is = function (element, selector) {\n return is$2(element, selector);\n };\n return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n };\n\n var promise = function () {\n var bind = function (fn, thisArg) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n fn.apply(thisArg, args);\n };\n };\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n };\n var Promise = function (fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('not a function');\n }\n this._state = null;\n this._value = null;\n this._deferreds = [];\n doResolve(fn, bind(resolve, this), bind(reject, this));\n };\n var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) {\n return setTimeout(fn, 1);\n };\n function handle(deferred) {\n var me = this;\n if (this._state === null) {\n this._deferreds.push(deferred);\n return;\n }\n asap(function () {\n var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (me._state ? deferred.resolve : deferred.reject)(me._value);\n return;\n }\n var ret;\n try {\n ret = cb(me._value);\n } catch (e) {\n deferred.reject(e);\n return;\n }\n deferred.resolve(ret);\n });\n }\n function resolve(newValue) {\n try {\n if (newValue === this) {\n throw new TypeError('A promise cannot be resolved with itself.');\n }\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (typeof then === 'function') {\n doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n return;\n }\n }\n this._state = true;\n this._value = newValue;\n finale.call(this);\n } catch (e) {\n reject.call(this, e);\n }\n }\n function reject(newValue) {\n this._state = false;\n this._value = newValue;\n finale.call(this);\n }\n function finale() {\n for (var i = 0, len = this._deferreds.length; i < len; i++) {\n handle.call(this, this._deferreds[i]);\n }\n this._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, resolve, reject) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n }\n var doResolve = function (fn, onFulfilled, onRejected) {\n var done = false;\n try {\n fn(function (value) {\n if (done) {\n return;\n }\n done = true;\n onFulfilled(value);\n }, function (reason) {\n if (done) {\n return;\n }\n done = true;\n onRejected(reason);\n });\n } catch (ex) {\n if (done) {\n return;\n }\n done = true;\n onRejected(ex);\n }\n };\n Promise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var me = this;\n return new Promise(function (resolve, reject) {\n handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n });\n };\n Promise.all = function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\n var remaining = args.length;\n var res = function (i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n };\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var promiseObj = window.Promise ? window.Promise : promise();\n\n var requestAnimationFramePromise;\n var requestAnimationFrame = function (callback, element) {\n var requestAnimationFrameFunc = window.requestAnimationFrame;\n var vendors = [\n 'ms',\n 'moz',\n 'webkit'\n ];\n var featurefill = function (cb) {\n window.setTimeout(cb, 0);\n };\n for (var i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n requestAnimationFrameFunc = window[vendors[i] + 'RequestAnimationFrame'];\n }\n if (!requestAnimationFrameFunc) {\n requestAnimationFrameFunc = featurefill;\n }\n requestAnimationFrameFunc(callback, element);\n };\n var wrappedSetTimeout = function (callback, time) {\n if (typeof time !== 'number') {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer;\n var func = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n clearTimeout(timer);\n };\n return func;\n };\n var Delay = {\n requestAnimationFrame: function (callback, element) {\n if (requestAnimationFramePromise) {\n requestAnimationFramePromise.then(callback);\n return;\n }\n requestAnimationFramePromise = new promiseObj(function (resolve) {\n if (!element) {\n element = document.body;\n }\n requestAnimationFrame(resolve, element);\n }).then(callback);\n },\n setTimeout: wrappedSetTimeout,\n setInterval: wrappedSetInterval,\n setEditorTimeout: function (editor, callback, time) {\n return wrappedSetTimeout(function () {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: function (editor, callback, time) {\n var timer = wrappedSetInterval(function () {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n },\n debounce: debounce,\n throttle: debounce,\n clearInterval: wrappedClearInterval,\n clearTimeout: wrappedClearTimeout\n };\n\n var StyleSheetLoader = function (documentOrShadowRoot, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var edos = SugarElement.fromDom(documentOrShadowRoot);\n var doc = documentOrOwner(edos);\n var maxLoadTime = settings.maxLoadTime || 5000;\n var _setReferrerPolicy = function (referrerPolicy) {\n settings.referrerPolicy = referrerPolicy;\n };\n var addStyle = function (element) {\n append$1(getStyleContainer(edos), element);\n };\n var removeStyle = function (id) {\n var styleContainer = getStyleContainer(edos);\n descendant(styleContainer, '#' + id).each(remove$7);\n };\n var getOrCreateState = function (url) {\n return get$9(loadedStates, url).getOrThunk(function () {\n return {\n id: 'mce-u' + idCount++,\n passed: [],\n failed: [],\n count: 0\n };\n });\n };\n var load = function (url, success, failure) {\n var link;\n var urlWithSuffix = Tools._addCacheSuffix(url);\n var state = getOrCreateState(urlWithSuffix);\n loadedStates[urlWithSuffix] = state;\n state.count++;\n var resolve = function (callbacks, status) {\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n state.status = status;\n state.passed = [];\n state.failed = [];\n if (link) {\n link.onload = null;\n link.onerror = null;\n link = null;\n }\n };\n var passed = function () {\n return resolve(state.passed, 2);\n };\n var failed = function () {\n return resolve(state.failed, 3);\n };\n var wait = function (testCallback, waitCallback) {\n if (!testCallback()) {\n if (Date.now() - startTime < maxLoadTime) {\n Delay.setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n var waitForWebKitLinkLoaded = function () {\n wait(function () {\n var styleSheets = documentOrShadowRoot.styleSheets;\n var i = styleSheets.length;\n while (i--) {\n var styleSheet = styleSheets[i];\n var owner = styleSheet.ownerNode;\n if (owner && owner.id === link.id) {\n passed();\n return true;\n }\n }\n return false;\n }, waitForWebKitLinkLoaded);\n };\n if (success) {\n state.passed.push(success);\n }\n if (failure) {\n state.failed.push(failure);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n var linkElem = SugarElement.fromTag('link', doc.dom);\n setAll$1(linkElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n var startTime = Date.now();\n if (settings.contentCssCors) {\n set$1(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set$1(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n addStyle(linkElem);\n set$1(linkElem, 'href', urlWithSuffix);\n };\n var loadF = function (url) {\n return Future.nu(function (resolve) {\n load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n });\n };\n var loadAll = function (urls, success, failure) {\n par(map$3(urls, loadF)).get(function (result) {\n var parts = partition(result, function (r) {\n return r.isValue();\n });\n if (parts.fail.length > 0) {\n failure(parts.fail.map(unite));\n } else {\n success(parts.pass.map(unite));\n }\n });\n };\n var unload = function (url) {\n var urlWithSuffix = Tools._addCacheSuffix(url);\n get$9(loadedStates, urlWithSuffix).each(function (state) {\n var count = --state.count;\n if (count === 0) {\n delete loadedStates[urlWithSuffix];\n removeStyle(state.id);\n }\n });\n };\n var unloadAll = function (urls) {\n each$k(urls, function (url) {\n unload(url);\n });\n };\n return {\n load: load,\n loadAll: loadAll,\n unload: unload,\n unloadAll: unloadAll,\n _setReferrerPolicy: _setReferrerPolicy\n };\n };\n\n var create$8 = function () {\n var map = new WeakMap();\n var forElement = function (referenceElement, settings) {\n var root = getRootNode(referenceElement);\n var rootDom = root.dom;\n return Optional.from(map.get(rootDom)).getOrThunk(function () {\n var sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement: forElement };\n };\n var instance = create$8();\n\n var DomTreeWalker = function () {\n function DomTreeWalker(startNode, rootNode) {\n this.node = startNode;\n this.rootNode = rootNode;\n this.current = this.current.bind(this);\n this.next = this.next.bind(this);\n this.prev = this.prev.bind(this);\n this.prev2 = this.prev2.bind(this);\n }\n DomTreeWalker.prototype.current = function () {\n return this.node;\n };\n DomTreeWalker.prototype.next = function (shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.prev = function (shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.prev2 = function (shallow) {\n this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.findSibling = function (node, startName, siblingName, shallow) {\n var sibling, parent;\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== this.rootNode) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n };\n DomTreeWalker.prototype.findPreviousNode = function (node, startName, siblingName, shallow) {\n var sibling, parent, child;\n if (node) {\n sibling = node[siblingName];\n if (this.rootNode && sibling === this.rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (child = sibling[startName]; child; child = child[startName]) {\n if (!child[startName]) {\n return child;\n }\n }\n }\n return sibling;\n }\n parent = node.parentNode;\n if (parent && parent !== this.rootNode) {\n return parent;\n }\n }\n };\n return DomTreeWalker;\n }();\n\n var blocks = [\n 'article',\n 'aside',\n 'details',\n 'div',\n 'dt',\n 'figcaption',\n 'footer',\n 'form',\n 'fieldset',\n 'header',\n 'hgroup',\n 'html',\n 'main',\n 'nav',\n 'section',\n 'summary',\n 'body',\n 'p',\n 'dl',\n 'multicol',\n 'dd',\n 'figure',\n 'address',\n 'center',\n 'blockquote',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'listing',\n 'xmp',\n 'pre',\n 'plaintext',\n 'menu',\n 'dir',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'table',\n 'tbody',\n 'thead',\n 'tfoot',\n 'th',\n 'tr',\n 'td',\n 'caption'\n ];\n var tableCells = [\n 'td',\n 'th'\n ];\n var tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n var textBlocks = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div',\n 'address',\n 'pre',\n 'form',\n 'blockquote',\n 'center',\n 'dir',\n 'fieldset',\n 'header',\n 'footer',\n 'article',\n 'section',\n 'hgroup',\n 'aside',\n 'nav',\n 'figure'\n ];\n var headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n var listItems$1 = [\n 'li',\n 'dd',\n 'dt'\n ];\n var lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n var wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n var lazyLookup = function (items) {\n var lookup;\n return function (node) {\n lookup = lookup ? lookup : mapToObject(items, always);\n return has$2(lookup, name(node));\n };\n };\n var isHeading = lazyLookup(headings);\n var isBlock$2 = lazyLookup(blocks);\n var isTable$2 = function (node) {\n return name(node) === 'table';\n };\n var isInline$1 = function (node) {\n return isElement$6(node) && !isBlock$2(node);\n };\n var isBr$4 = function (node) {\n return isElement$6(node) && name(node) === 'br';\n };\n var isTextBlock$2 = lazyLookup(textBlocks);\n var isList = lazyLookup(lists);\n var isListItem = lazyLookup(listItems$1);\n var isTableSection = lazyLookup(tableSections);\n var isTableCell$4 = lazyLookup(tableCells);\n var isWsPreserveElement = lazyLookup(wsElements);\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor$2(scope, selector, isRoot).isSome();\n };\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n var isZwsp$1 = function (char) {\n return char === zeroWidth;\n };\n var removeZwsp = function (s) {\n return s.replace(/\\uFEFF/g, '');\n };\n\n var ZWSP$1 = zeroWidth;\n var isZwsp = isZwsp$1;\n var trim$2 = removeZwsp;\n\n var isElement$4 = isElement$5;\n var isText$6 = isText$7;\n var isCaretContainerBlock$1 = function (node) {\n if (isText$6(node)) {\n node = node.parentNode;\n }\n return isElement$4(node) && node.hasAttribute('data-mce-caret');\n };\n var isCaretContainerInline = function (node) {\n return isText$6(node) && isZwsp(node.data);\n };\n var isCaretContainer$2 = function (node) {\n return isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n };\n var hasContent = function (node) {\n return node.firstChild !== node.lastChild || !isBr$5(node.firstChild);\n };\n var insertInline$1 = function (node, before) {\n var doc = node.ownerDocument;\n var textNode = doc.createTextNode(ZWSP$1);\n var parentNode = node.parentNode;\n if (!before) {\n var sibling = node.nextSibling;\n if (isText$6(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer$1(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode.appendChild(textNode);\n }\n } else {\n var sibling = node.previousSibling;\n if (isText$6(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer$1(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n var isBeforeInline = function (pos) {\n var container = pos.container();\n if (!isText$7(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!isText$7(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = document.createElement('br');\n br.setAttribute('data-mce-bogus', '1');\n return br;\n };\n var insertBlock$1 = 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$1 = function (node) {\n return isText$6(node) && node.data[0] === ZWSP$1;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$6(node) && node.data[node.data.length - 1] === ZWSP$1;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (isBogus$2(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$1(range.startContainer);\n };\n\n var isContentEditableTrue$3 = isContentEditableTrue$4;\n var isContentEditableFalse$a = isContentEditableFalse$b;\n var isBr$3 = isBr$5;\n var isText$5 = isText$7;\n var isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n var isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n var isTable$1 = matchNodeNames(['table']);\n var isCaretContainer$1 = isCaretContainer$2;\n var isCaretCandidate$3 = function (node) {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$5(node)) {\n return !isInvalidTextElement(node.parentNode);\n }\n return isAtomicInline(node) || isBr$3(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n };\n var isUnselectable = function (node) {\n return isElement$5(node) && node.getAttribute('unselectable') === 'true';\n };\n var isNonUiContentEditableFalse = function (node) {\n return isUnselectable(node) === false && isContentEditableFalse$a(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$3(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(node.getElementsByTagName('*')), function (result, elm) {\n return result || isContentEditableTrue$3(elm);\n }, false) !== true;\n };\n var isAtomic$1 = function (node) {\n return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n };\n var isEditableCaretCandidate$1 = function (node, root) {\n return isCaretCandidate$3(node) && isInEditable(node, root);\n };\n\n var whiteSpaceRegExp$1 = /^[ \\t\\r\\n]*$/;\n var isWhitespaceText = function (text) {\n return whiteSpaceRegExp$1.test(text);\n };\n\n var hasWhitespacePreserveParent = function (node, rootNode) {\n var rootElement = SugarElement.fromDom(rootNode);\n var startNode = SugarElement.fromDom(node);\n return ancestor$1(startNode, 'pre,code', curry(eq, rootElement));\n };\n var isWhitespace = function (node, rootNode) {\n return isText$7(node) && isWhitespaceText(node.data) && hasWhitespacePreserveParent(node, rootNode) === false;\n };\n var isNamedAnchor = function (node) {\n return isElement$5(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n };\n var isContent$1 = function (node, rootNode) {\n return isCaretCandidate$3(node) && isWhitespace(node, rootNode) === false || isNamedAnchor(node) || isBookmark(node);\n };\n var isBookmark = hasAttribute('data-mce-bookmark');\n var isBogus$1 = hasAttribute('data-mce-bogus');\n var isBogusAll = hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode, skipBogus) {\n var brCount = 0;\n if (isContent$1(targetNode, targetNode)) {\n return false;\n } else {\n var node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n var walker = new DomTreeWalker(node, targetNode);\n do {\n if (skipBogus) {\n if (isBogusAll(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBogus$1(node)) {\n node = walker.next();\n continue;\n }\n }\n if (isBr$5(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent$1(node, targetNode)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty$2 = function (elm, skipBogus) {\n if (skipBogus === void 0) {\n skipBogus = true;\n }\n return isEmptyNode(elm.dom, skipBogus);\n };\n\n var isSpan = function (node) {\n return node.nodeName.toLowerCase() === 'span';\n };\n var isInlineContent = function (node, root) {\n return isNonNullable(node) && (isContent$1(node, root) || isInline$1(SugarElement.fromDom(node)));\n };\n var surroundedByInlineContent = function (node, root) {\n var prev = new DomTreeWalker(node, root).prev(false);\n var next = new DomTreeWalker(node, root).next(false);\n var prevIsInline = isUndefined(prev) || isInlineContent(prev, root);\n var nextIsInline = isUndefined(next) || isInlineContent(next, root);\n return prevIsInline && nextIsInline;\n };\n var isBookmarkNode$2 = function (node) {\n return isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var isKeepTextNode = function (node, root) {\n return isText$7(node) && node.data.length > 0 && surroundedByInlineContent(node, root);\n };\n var isKeepElement = function (node) {\n return isElement$5(node) ? node.childNodes.length > 0 : false;\n };\n var isDocument = function (node) {\n return isDocumentFragment(node) || isDocument$1(node);\n };\n var trimNode = function (dom, node, root) {\n var rootNode = root || node;\n if (isElement$5(node) && isBookmarkNode$2(node)) {\n return node;\n }\n var children = node.childNodes;\n for (var i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i], rootNode);\n }\n if (isElement$5(node)) {\n var currentChildren = node.childNodes;\n if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n node.parentNode.insertBefore(currentChildren[0], node);\n }\n }\n if (!isDocument(node) && !isContent$1(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) {\n dom.remove(node);\n }\n return node;\n };\n\n var makeMap$3 = Tools.makeMap;\n var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var rawCharsRegExp = /[<>&\\\"\\']/g;\n var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n var asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n var baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n var reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\n };\n var nativeDecode = function (text) {\n var elm = SugarElement.fromTag('div').dom;\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n var buildEntitiesLookup = function (items, radix) {\n var i, chr, entity;\n var lookup = {};\n if (items) {\n items = items.split(',');\n radix = radix || 10;\n for (i = 0; i < items.length; i += 2) {\n chr = String.fromCharCode(parseInt(items[i], radix));\n if (!baseEntities[chr]) {\n entity = '&' + items[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n }\n };\n var namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n var encodeRaw = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeAllRaw = function (text) {\n return ('' + text).replace(rawCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeNamed = function (text, attr, entities) {\n entities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || entities[chr] || chr;\n });\n };\n var getEncodeFunc = function (name, entities) {\n var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n var encodeNamedAndNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeCustomNamed = function (text, attr) {\n return encodeNamed(text, attr, entitiesMap);\n };\n var nameMap = makeMap$3(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n 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$h = Tools.each, extend$5 = Tools.extend, explode$3 = Tools.explode, inArray$2 = Tools.inArray;\n var split$1 = 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$1(children);\n }\n var names = split$1(name);\n ni = names.length;\n while (ni--) {\n attributesOrder = split$1([\n globalAttributes,\n attributes\n ].join(' '));\n element = {\n attributes: arrayToMap(attributesOrder),\n attributesOrder: attributesOrder,\n children: arrayToMap(children, dummyObj)\n };\n schema[names[ni]] = element;\n }\n };\n var addAttrs = function (name, attributes) {\n var ni, schemaItem, i, l;\n var names = split$1(name);\n ni = names.length;\n var attrs = split$1(attributes);\n while (ni--) {\n schemaItem = schema[names[ni]];\n for (i = 0, l = attrs.length; i < l; i++) {\n schemaItem.attributes[attrs[i]] = {};\n schemaItem.attributesOrder.push(attrs[i]);\n }\n }\n };\n if (mapCache[type]) {\n return mapCache[type];\n }\n globalAttributes = 'id accesskey class dir lang style tabindex title role';\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n if (type !== 'html4') {\n globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n }\n if (type !== 'html5-strict') {\n globalAttributes += ' xml:lang';\n html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$h(split$1(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$h(split$1(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$h(split$1('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$h(value, function (value, key) {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$3(value, /[, ]/);\n });\n }\n return styles;\n };\n var Schema = function (settings) {\n var elements = {};\n var children = {};\n var patternElements = [];\n var customElementsMap = {}, specialElements = {};\n var createLookupTable = function (option, defaultValue, extendWith) {\n var value = settings[option];\n if (!value) {\n value = mapCache[option];\n if (!value) {\n value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n value = extend$5(value, extendWith);\n mapCache[option] = value;\n }\n } else {\n value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n return value;\n };\n settings = settings || {};\n var schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n var validStyles = compileElementMap(settings.valid_styles);\n var invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n var validClasses = compileElementMap(settings.valid_classes, 'map');\n var whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n var selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n var shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n var boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n var nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n var nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', shortEndedElementsMap);\n var moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', shortEndedElementsMap);\n var textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n var blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n var textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\n each$h((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var patternToRegExp = function (str) {\n return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n };\n var addValidElements = function (validElements) {\n var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n var validElementsArr = split$1(validElements, ',');\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (ei = 0, el = validElementsArr.length; ei < el; ei++) {\n matches = elementRuleRegExp.exec(validElementsArr[ei]);\n if (matches) {\n prefix = matches[1];\n elementName = matches[2];\n outputName = matches[3];\n attrData = matches[5];\n attributes = {};\n attributesOrder = [];\n element = {\n attributes: attributes,\n attributesOrder: attributesOrder\n };\n if (prefix === '#') {\n element.paddEmpty = true;\n }\n if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (matches[4] === '!') {\n element.removeEmptyAttrs = true;\n }\n if (globalAttributes) {\n each$j(globalAttributes, function (value, key) {\n attributes[key] = value;\n });\n attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n }\n if (attrData) {\n attrData = split$1(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$2(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$h(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$h(split$1(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$5({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$h(children, function (element, elmName) {\n if (element[cloneName]) {\n children[elmName] = element = extend$5({}, 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$h(split$1(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$h(split$1(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$h(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$h(split$1('strong/b em/i'), function (item) {\n var items = split$1(item, '/');\n elements[items[1]].outputName = items[0];\n });\n }\n each$h(split$1('ol ul sub sup blockquote span font a table tbody strong em b i'), function (name) {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$h(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n elements[name].paddEmpty = true;\n });\n each$h(split$1('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$h({\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$1(parents);\n }\n });\n if (settings.invalid_elements) {\n each$h(explode$3(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 = constant(validStyles);\n var getInvalidStyles = constant(invalidStyles);\n var getValidClasses = constant(validClasses);\n var getBoolAttrs = constant(boolAttrMap);\n var getBlockElements = constant(blockElementsMap);\n var getTextBlockElements = constant(textBlockElementsMap);\n var getTextInlineElements = constant(textInlineElementsMap);\n var getShortEndedElements = constant(shortEndedElementsMap);\n var getSelfClosingElements = constant(selfClosingElementsMap);\n var getNonEmptyElements = constant(nonEmptyElementsMap);\n var getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n var getWhiteSpaceElements = constant(whiteSpaceElementsMap);\n var getSpecialElements = constant(specialElements);\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 = constant(customElementsMap);\n return {\n children: children,\n elements: elements,\n getValidStyles: getValidStyles,\n getValidClasses: getValidClasses,\n getBlockElements: getBlockElements,\n getInvalidStyles: getInvalidStyles,\n getShortEndedElements: getShortEndedElements,\n getTextBlockElements: getTextBlockElements,\n getTextInlineElements: getTextInlineElements,\n getBoolAttrs: getBoolAttrs,\n getElementRule: getElementRule,\n getSelfClosingElements: getSelfClosingElements,\n getNonEmptyElements: getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n getWhiteSpaceElements: getWhiteSpaceElements,\n getSpecialElements: getSpecialElements,\n isValidChild: isValidChild,\n isValid: isValid,\n getCustomElements: getCustomElements,\n addValidElements: addValidElements,\n setValidElements: setValidElements,\n addCustomElements: addCustomElements,\n addValidChildren: addValidChildren\n };\n };\n\n var toHex = function (match, r, g, b) {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var Styles = function (settings, schema) {\n var _this = this;\n var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n var trimRightRegExp = /\\s+$/;\n var i;\n var encodingLookup = {};\n var validStyles;\n var invalidStyles;\n var invisibleChar = zeroWidth;\n settings = settings || {};\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n var encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n for (i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n return {\n toHex: function (color) {\n return color.replace(rgbRegExp, toHex);\n },\n parse: function (css) {\n var styles = {};\n var matches, name, value, isEncoded;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope || _this;\n var compress = function (prefix, suffix, noJoin) {\n var top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n var right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n var bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n var left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n var box = [\n top,\n right,\n bottom,\n left\n ];\n i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n var canCompress = function (key) {\n var value = styles[key], i;\n if (!value) {\n return;\n }\n value = value.split(' ');\n i = value.length;\n while (i--) {\n if (value[i] !== value[0]) {\n return false;\n }\n }\n styles[key] = value[0];\n return true;\n };\n var compress2 = function (target, a, b, c) {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n var encode = function (str) {\n isEncoded = true;\n return encodingLookup[str];\n };\n var decode = function (str, keepSlashes) {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n var decodeSingleHexSequence = function (escSeq) {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n var decodeHexSequences = function (value) {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n var processUrl = function (match, url, url2, url3, str, str2) {\n str = str || str2;\n if (str) {\n str = decode(str);\n return '\\'' + str.replace(/\\'/g, '\\\\\\'') + '\\'';\n }\n url = decode(url || url2 || url3);\n if (!settings.allow_script_urls) {\n var scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return 'url(\\'' + url.replace(/\\'/g, '\\\\\\'') + '\\')';\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, function (str) {\n return str.replace(/[;:]/g, encode);\n });\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n value = value.replace(rgbRegExp, toHex);\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: function (styles, elementName) {\n var css = '';\n var serializeStyles = function (name) {\n var value;\n var styleList = validStyles[name];\n if (styleList) {\n for (var i_1 = 0, l = styleList.length; i_1 < l; i_1++) {\n name = styleList[i_1];\n value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n var isValid = function (name, elementName) {\n var styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n each$j(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 deprecated = {\n keyLocation: true,\n layerX: true,\n layerY: true,\n returnValue: true,\n webkitMovementX: true,\n webkitMovementY: true,\n keyIdentifier: true,\n mozPressure: true\n };\n var isNativeEvent = function (event) {\n return event instanceof Event || isFunction(event.initEvent);\n };\n var hasIsDefaultPrevented = function (event) {\n return event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n };\n var needsNormalizing = function (event) {\n return isNullable(event.preventDefault) || isNativeEvent(event);\n };\n var clone$2 = function (originalEvent, data) {\n var event = data !== null && data !== void 0 ? data : {};\n for (var name_1 in originalEvent) {\n if (!has$2(deprecated, name_1)) {\n event[name_1] = originalEvent[name_1];\n }\n }\n if (isNonNullable(event.composedPath)) {\n event.composedPath = function () {\n return originalEvent.composedPath();\n };\n }\n return event;\n };\n var normalize$3 = function (type, originalEvent, fallbackTarget, data) {\n var _a;\n var event = clone$2(originalEvent, data);\n event.type = type;\n if (isNullable(event.target)) {\n event.target = (_a = event.srcElement) !== null && _a !== void 0 ? _a : fallbackTarget;\n }\n if (needsNormalizing(originalEvent)) {\n event.preventDefault = function () {\n event.defaultPrevented = true;\n event.isDefaultPrevented = always;\n if (isFunction(originalEvent.preventDefault)) {\n originalEvent.preventDefault();\n } else if (isNativeEvent(originalEvent)) {\n originalEvent.returnValue = false;\n }\n };\n event.stopPropagation = function () {\n event.cancelBubble = true;\n event.isPropagationStopped = always;\n if (isFunction(originalEvent.stopPropagation)) {\n originalEvent.stopPropagation();\n } else if (isNativeEvent(originalEvent)) {\n originalEvent.cancelBubble = true;\n }\n };\n event.stopImmediatePropagation = function () {\n event.isImmediatePropagationStopped = always;\n event.stopPropagation();\n };\n if (!hasIsDefaultPrevented(event)) {\n event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n event.isPropagationStopped = event.cancelBubble === true ? always : never;\n event.isImmediatePropagationStopped = never;\n }\n }\n return event;\n };\n\n var eventExpandoPrefix = 'mce-data-';\n var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n var addEvent = function (target, name, callback, capture) {\n if (target.addEventListener) {\n target.addEventListener(name, callback, capture || false);\n } else if (target.attachEvent) {\n target.attachEvent('on' + name, callback);\n }\n };\n var removeEvent = function (target, name, callback, capture) {\n if (target.removeEventListener) {\n target.removeEventListener(name, callback, capture || false);\n } else if (target.detachEvent) {\n target.detachEvent('on' + name, callback);\n }\n };\n var isMouseEvent = function (event) {\n return isNonNullable(event) && mouseEventRe.test(event.type);\n };\n var fix = function (originalEvent, data) {\n var event = normalize$3(originalEvent.type, originalEvent, document, data);\n if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n var eventDoc = event.target.ownerDocument || document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n var mouseEvent = event;\n mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n if (isUndefined(event.metaKey)) {\n event.metaKey = false;\n }\n return event;\n };\n var bindOnReady = function (win, callback, eventUtils) {\n var doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n var isDocReady = function () {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n var readyHandler = function () {\n removeEvent(win, 'DOMContentLoaded', readyHandler);\n removeEvent(win, 'load', readyHandler);\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n win = null;\n };\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n if (!eventUtils.domLoaded) {\n addEvent(win, 'load', readyHandler);\n }\n };\n var EventUtils = function () {\n function EventUtils() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasMouseEnterLeave = 'onmouseenter' in document.documentElement;\n this.hasFocusIn = 'onfocusin' in document.documentElement;\n this.count = 1;\n }\n EventUtils.prototype.bind = function (target, names, callback, scope) {\n var self = this;\n var id, callbackList, i, name, fakeName, nativeHandler, capture;\n var win = window;\n var defaultNativeHandler = function (evt) {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return;\n }\n if (!target[self.expando]) {\n id = self.count++;\n target[self.expando] = id;\n self.events[id] = {};\n } else {\n id = target[self.expando];\n }\n scope = scope || target;\n var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[i];\n nativeHandler = defaultNativeHandler;\n fakeName = capture = false;\n if (name === 'DOMContentLoaded') {\n name = 'ready';\n }\n if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n callback.call(scope, fix({ type: name }));\n continue;\n }\n if (!self.hasMouseEnterLeave) {\n fakeName = self.mouseEnterLeave[name];\n if (fakeName) {\n nativeHandler = function (evt) {\n var current = evt.currentTarget;\n var related = evt.relatedTarget;\n if (related && current.contains) {\n related = current.contains(related);\n } else {\n while (related && related !== current) {\n related = related.parentNode;\n }\n }\n if (!related) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n evt.target = current;\n self.executeHandlers(evt, id);\n }\n };\n }\n }\n if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = function (evt) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(evt, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n scope: scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback(fix({ type: name }));\n } else {\n callbackList.push({\n func: callback,\n scope: scope\n });\n }\n }\n }\n target = callbackList = null;\n return callback;\n };\n EventUtils.prototype.unbind = function (target, names, callback) {\n var callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var id = target[this.expando];\n if (id) {\n eventMap = this.events[id];\n if (names) {\n var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[i];\n callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n var nativeHandler = callbackList.nativeHandler;\n var fakeName = callbackList.fakeName, capture = callbackList.capture;\n callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n callbackList.nativeHandler = nativeHandler;\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n eventMap[name] = callbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n each$j(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$2(eventMap, name)) {\n return this;\n }\n }\n delete this.events[id];\n try {\n delete target[this.expando];\n } catch (ex) {\n target[this.expando] = null;\n }\n }\n return this;\n };\n 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({\n type: name,\n target: target\n }, args);\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$1, outermostContext, sortInput, hasDuplicate, setDocument, document$1, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, expando = 'sizzle' + -new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push$1 = arr.push, slice$1 = arr.slice, indexOf = 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$1 = /^(?:#([\\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$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push$1 = {\n apply: arr.length ? function (target, els) {\n push_native.apply(target, slice$1.call(els));\n } : function (target, els) {\n var j = target.length, i = 0;\n while (target[j++] = els[i++]) {\n }\n target.length = j - 1;\n }\n };\n }\n var Sizzle = function (selector, context, results, seed) {\n var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n if ((context ? context.ownerDocument || context : preferredDoc) !== document$1) {\n setDocument(context);\n }\n context = context || document$1;\n results = results || [];\n if (!selector || typeof selector !== 'string') {\n return results;\n }\n if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n return [];\n }\n if (documentIsHTML && !seed) {\n if (match = rquickExpr$1.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(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n } else if (match[2]) {\n push$1.apply(results, context.getElementsByTagName(selector));\n return results;\n } else if ((m = match[3]) && support.getElementsByClassName) {\n push$1.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$1.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$1(selector.replace(rtrim, '$1'), context, results, seed);\n };\n function createCache() {\n var keys = [];\n function cache(key, value) {\n if (keys.push(key + ' ') > Expr.cacheLength) {\n delete cache[keys.shift()];\n }\n return cache[key + ' '] = value;\n }\n return cache;\n }\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n function siblingCheck(a, b) {\n var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n if (diff) {\n return diff;\n }\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n return a ? 1 : -1;\n }\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === type;\n };\n }\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === 'input' || name === 'button') && elem.type === type;\n };\n }\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== strundefined && context;\n }\n support = Sizzle.support = {};\n isXML = Sizzle.isXML = function (elem) {\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n };\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n function getTop(win) {\n try {\n return win.top;\n } catch (ex) {\n }\n return null;\n }\n if (doc === document$1 || doc.nodeType !== 9 || !doc.documentElement) {\n return document$1;\n }\n document$1 = doc;\n docElem = doc.documentElement;\n documentIsHTML = !isXML(doc);\n if (parent && parent !== getTop(parent)) {\n if (parent.addEventListener) {\n parent.addEventListener('unload', function () {\n setDocument();\n }, false);\n } else if (parent.attachEvent) {\n parent.attachEvent('onunload', function () {\n setDocument();\n });\n }\n }\n support.attributes = true;\n support.getElementsByTagName = true;\n support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n support.getById = true;\n Expr.find.ID = function (id, context) {\n if (typeof context.getElementById !== strundefined && documentIsHTML) {\n var m = context.getElementById(id);\n return m && m.parentNode ? [m] : [];\n }\n };\n Expr.filter.ID = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute('id') === attrId;\n };\n };\n Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== strundefined) {\n return context.getElementsByTagName(tag);\n }\n } : function (tag, context) {\n var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n if (tag === '*') {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n return tmp;\n }\n return results;\n };\n Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n if (documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n rbuggyMatches = [];\n rbuggyQSA = [];\n support.disconnectedMatch = true;\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n contains = 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(preferredDoc, a)) {\n return -1;\n }\n if (b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {\n return 1;\n }\n return sortInput ? indexOf.call(sortInput, a) - indexOf.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.call(sortInput, a) - indexOf.call(sortInput, b) : 0;\n } else if (aup === bup) {\n return siblingCheck(a, b);\n }\n cur = a;\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n cur = b;\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n }\n while (ap[i] === bp[i]) {\n i++;\n }\n return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n return doc;\n };\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n Sizzle.matchesSelector = function (elem, expr) {\n if ((elem.ownerDocument || elem) !== document$1) {\n setDocument(elem);\n }\n expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr);\n if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n }\n }\n return Sizzle(expr, document$1, null, [elem]).length > 0;\n };\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document$1) {\n setDocument(context);\n }\n return contains(context, elem);\n };\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document$1) {\n setDocument(elem);\n }\n var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n Sizzle.error = function (msg) {\n throw new Error('Syntax error, unrecognized expression: ' + msg);\n };\n Sizzle.uniqueSort = function (results) {\n var elem, duplicates = [], j = 0, i = 0;\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n }\n sortInput = null;\n return results;\n };\n getText = Sizzle.getText = function (elem) {\n var node, ret = '', i = 0, nodeType = elem.nodeType;\n if (!nodeType) {\n while (node = elem[i++]) {\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n if (typeof elem.textContent === 'string') {\n return elem.textContent;\n } else {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n }\n return ret;\n };\n Expr = Sizzle.selectors = {\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n '>': {\n dir: 'parentNode',\n first: true\n },\n ' ': { dir: 'parentNode' },\n '+': {\n dir: 'previousSibling',\n first: true\n },\n '~': { dir: 'previousSibling' }\n },\n preFilter: {\n ATTR: function (match) {\n match[1] = match[1].replace(runescape, funescape);\n match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n if (match[2] === '~=') {\n match[3] = ' ' + match[3] + ' ';\n }\n return match.slice(0, 4);\n },\n CHILD: function (match) {\n match[1] = match[1].toLowerCase();\n if (match[1].slice(0, 3) === 'nth') {\n if (!match[3]) {\n Sizzle.error(match[0]);\n }\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n match[5] = +(match[7] + match[8] || match[3] === 'odd');\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n return match;\n },\n PSEUDO: function (match) {\n var excess, unquoted = !match[6] && match[2];\n if (matchExpr.CHILD.test(match[0])) {\n return null;\n }\n if (match[3]) {\n match[2] = match[4] || match[5] || '';\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n }\n return match.slice(0, 3);\n }\n },\n filter: {\n TAG: function (nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === '*' ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n CLASS: function (className) {\n var pattern = classCache[className + ' '];\n return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n });\n },\n ATTR: function (name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n if (result == null) {\n return operator === '!=';\n }\n if (!operator) {\n return true;\n }\n result += '';\n return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n };\n },\n CHILD: function (type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n return first === 1 && last === 0 ? function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n if (parent) {\n if (simple) {\n while (dir) {\n node = elem;\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n }\n start = dir = type === 'only' && !start && 'nextSibling';\n }\n return true;\n }\n start = [forward ? parent.firstChild : parent.lastChild];\n if (forward && useCache) {\n outerCache = parent[expando] || (parent[expando] = {});\n cache = outerCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = cache[0] === dirruns && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if (node.nodeType === 1 && ++diff && node === elem) {\n outerCache[type] = [\n dirruns,\n nodeIndex,\n diff\n ];\n break;\n }\n }\n } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n diff = cache[1];\n } else {\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n if (useCache) {\n (node[expando] || (node[expando] = {}))[type] = [\n dirruns,\n diff\n ];\n }\n if (node === elem) {\n break;\n }\n }\n }\n }\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n PSEUDO: function (pseudo, argument) {\n var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n if (fn[expando]) {\n return fn(argument);\n }\n if (fn.length > 1) {\n args = [\n pseudo,\n pseudo,\n '',\n argument\n ];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx, matched = fn(seed, argument), i = matched.length;\n while (i--) {\n idx = indexOf.call(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n return fn;\n }\n },\n pseudos: {\n not: markFunction(function (selector) {\n var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results);\n input[0] = null;\n return !results.pop();\n };\n }),\n has: markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n contains: markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n };\n }),\n lang: markFunction(function (lang) {\n if (!ridentifier.test(lang || '')) {\n Sizzle.error('unsupported lang: ' + lang);\n }\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n return false;\n };\n }),\n target: function (elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n root: function (elem) {\n return elem === docElem;\n },\n focus: function (elem) {\n return elem === document$1.activeElement && (!document$1.hasFocus || document$1.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n enabled: function (elem) {\n return elem.disabled === false;\n },\n disabled: function (elem) {\n return elem.disabled === true;\n },\n checked: function (elem) {\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n },\n selected: function (elem) {\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n return elem.selected === true;\n },\n empty: function (elem) {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n return true;\n },\n parent: function (elem) {\n return !Expr.pseudos.empty(elem);\n },\n header: function (elem) {\n return rheader.test(elem.nodeName);\n },\n input: function (elem) {\n return rinputs.test(elem.nodeName);\n },\n button: function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === 'button' || name === 'button';\n },\n text: function (elem) {\n var attr;\n return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n },\n first: createPositionalPseudo(function () {\n return [0];\n }),\n last: createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n even: createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n odd: createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n })\n }\n };\n Expr.pseudos.nth = Expr.pseudos.eq;\n each$k([\n 'radio',\n 'checkbox',\n 'file',\n 'password',\n 'image'\n ], function (i) {\n Expr.pseudos[i] = createInputPseudo(i);\n });\n each$k([\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.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$1.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.call(checkContext, elem) > -1;\n }, implicitRelative, true), matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n checkContext = null;\n return ret;\n }];\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n if (matcher[expando]) {\n j = ++i;\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n matchers.push(matcher);\n }\n }\n return elementMatcher(matchers);\n }\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n if (outermost) {\n outermostContext = context !== document$1 && context;\n }\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context, xml)) {\n results.push(elem);\n break;\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n }\n if (bySet) {\n if (elem = !matcher && elem) {\n matchedCount--;\n }\n if (seed) {\n unmatched.push(elem);\n }\n }\n }\n matchedCount += i;\n if (bySet && i !== matchedCount) {\n j = 0;\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n if (seed) {\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n }\n setMatched = condense(setMatched);\n }\n push$1.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$1 = 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$1.apply(results, seed);\n return results;\n }\n break;\n }\n }\n }\n }\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n };\n support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n support.detectDuplicates = !!hasDuplicate;\n setDocument();\n support.sortDetached = true;\n\n var doc = document;\n var push = Array.prototype.push;\n var slice = Array.prototype.slice;\n var rquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n var Event$1 = 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 = function (obj) {\n return typeof obj === 'string';\n };\n var isWindow = function (obj) {\n return obj && obj === obj.window;\n };\n var createFragment$1 = 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(sourceItem)) {\n sourceItem = createFragment$1(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$2 = 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 = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var each$g = 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$2 = function (array, callback) {\n var out = [];\n each$g(array, function (i, item) {\n if (callback(item, i)) {\n out.push(item);\n }\n });\n return out;\n };\n var getElementDocument = function (element) {\n if (!element) {\n return doc;\n }\n if (element.nodeType === 9) {\n return element;\n }\n return element.ownerDocument;\n };\n DomQueryConstructor.fn = DomQueryConstructor.prototype = {\n constructor: DomQueryConstructor,\n selector: '',\n context: null,\n length: 0,\n init: function (selector, context) {\n var self = this;\n var match, node;\n if (!selector) {\n return self;\n }\n if (selector.nodeType) {\n self.context = self[0] = selector;\n self.length = 1;\n return self;\n }\n if (context && context.nodeType) {\n self.context = context;\n } else {\n if (context) {\n return DomQuery(selector).attr(context);\n }\n self.context = context = document;\n }\n if (isString(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.exec(selector);\n }\n if (match) {\n if (match[1]) {\n node = createFragment$1(selector, getElementDocument(context)).firstChild;\n while (node) {\n push.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(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.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$g(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$g(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$g(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$1.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$2(this, content);\n },\n wrapAll: function (content) {\n return wrap$2(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$g(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$1((' ' + 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$g(this, callback);\n },\n on: function (name, callback) {\n return this.each(function () {\n Event$1.bind(this, name, callback);\n });\n },\n off: function (name, callback) {\n return this.each(function () {\n Event$1.unbind(this, name, callback);\n });\n },\n trigger: function (name) {\n return this.each(function () {\n if (typeof name === 'object') {\n Event$1.fire(this, name.type, name);\n } else {\n Event$1.fire(this, name);\n }\n });\n },\n show: function () {\n return this.css('display', '');\n },\n hide: function () {\n return this.css('display', 'none');\n },\n slice: function () {\n return DomQuery(slice.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$2(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,\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$g,\n trim: trim$1,\n grep: grep$2,\n find: Sizzle,\n expr: Sizzle.selectors,\n unique: Sizzle.uniqueSort,\n text: Sizzle.getText,\n contains: Sizzle.contains,\n filter: function (expr, elems, not) {\n var i = elems.length;\n if (not) {\n expr = ':not(' + expr + ')';\n }\n while (i--) {\n if (elems[i].nodeType !== 1) {\n elems.splice(i, 1);\n }\n }\n if (elems.length === 1) {\n elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n } else {\n elems = DomQuery.find.matches(expr, elems);\n }\n return elems;\n }\n });\n var dir = function (el, prop, until) {\n var matched = [];\n var cur = el[prop];\n if (typeof until !== 'string' && until instanceof DomQuery) {\n until = until[0];\n }\n while (cur && cur.nodeType !== 9) {\n if (until !== undefined) {\n if (cur === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(cur).is(until)) {\n break;\n }\n }\n if (cur.nodeType === 1) {\n matched.push(cur);\n }\n cur = cur[prop];\n }\n return matched;\n };\n var sibling$1 = function (node, siblingName, nodeType, until) {\n var result = [];\n if (until instanceof DomQuery) {\n until = until[0];\n }\n for (; node; node = node[siblingName]) {\n if (nodeType && node.nodeType !== nodeType) {\n continue;\n }\n if (until !== undefined) {\n if (node === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(node).is(until)) {\n break;\n }\n }\n result.push(node);\n }\n return result;\n };\n var firstSibling = function (node, siblingName, nodeType) {\n for (node = node[siblingName]; node; node = node[siblingName]) {\n if (node.nodeType === nodeType) {\n return node;\n }\n }\n return null;\n };\n each$g({\n parent: function (node) {\n var parent = node.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function (node) {\n return dir(node, 'parentNode');\n },\n next: function (node) {\n return firstSibling(node, 'nextSibling', 1);\n },\n prev: function (node) {\n return firstSibling(node, 'previousSibling', 1);\n },\n children: function (node) {\n return sibling$1(node.firstChild, 'nextSibling', 1);\n },\n contents: function (node) {\n return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n }\n }, function (name, fn) {\n DomQueryConstructor.fn[name] = function (selector) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n if (!skipUniques[name]) {\n result = DomQuery.unique(result);\n }\n if (name.indexOf('parents') === 0) {\n result = result.reverse();\n }\n }\n var wrappedResult = DomQuery(result);\n if (selector) {\n return wrappedResult.filter(selector);\n }\n return wrappedResult;\n };\n });\n each$g({\n parentsUntil: function (node, until) {\n return dir(node, 'parentNode', until);\n },\n nextUntil: function (node, until) {\n return sibling$1(node, 'nextSibling', 1, until).slice(1);\n },\n prevUntil: function (node, until) {\n return sibling$1(node, 'previousSibling', 1, until).slice(1);\n }\n }, function (name, fn) {\n DomQueryConstructor.fn[name] = function (selector, filter) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n result = DomQuery.unique(result);\n if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n result = result.reverse();\n }\n }\n var wrappedResult = DomQuery(result);\n if (filter) {\n return wrappedResult.filter(filter);\n }\n return wrappedResult;\n };\n });\n DomQueryConstructor.fn.is = function (selector) {\n return !!selector && this.filter(selector).length > 0;\n };\n DomQueryConstructor.fn.init.prototype = DomQueryConstructor.fn;\n DomQueryConstructor.overrideDefaults = function (callback) {\n var defaults;\n var sub = function (selector, context) {\n defaults = defaults || callback();\n if (arguments.length === 0) {\n selector = defaults.element;\n }\n if (!context) {\n context = defaults.context;\n }\n return new sub.fn.init(selector, context);\n };\n DomQuery.extend(sub, this);\n return sub;\n };\n DomQueryConstructor.attrHooks = attrHooks;\n DomQueryConstructor.cssHooks = cssHooks;\n var DomQuery = DomQueryConstructor;\n\n var each$f = Tools.each;\n var grep$1 = Tools.grep;\n var isIE = Env.ie;\n var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n var setupAttrHooks = function (styles, settings, getContext) {\n var keepValues = settings.keep_values;\n var keepUrlHook = {\n set: function ($elm, value, name) {\n if (settings.url_converter) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n }\n $elm.attr('data-mce-' + name, value).attr(name, value);\n },\n get: function ($elm, name) {\n return $elm.attr('data-mce-' + name) || $elm.attr(name);\n }\n };\n var attrHooks = {\n style: {\n set: function ($elm, value) {\n if (value !== null && typeof value === 'object') {\n $elm.css(value);\n return;\n }\n if (keepValues) {\n $elm.attr('data-mce-style', value);\n }\n if (value !== null && typeof value === 'string') {\n $elm.removeAttr('style');\n $elm.css(styles.parse(value));\n } else {\n $elm.attr('style', value);\n }\n },\n get: function ($elm) {\n var value = $elm.attr('data-mce-style') || $elm.attr('style');\n value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n return value;\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n var updateInternalStyleAttr = function (styles, $elm) {\n var rawValue = $elm.attr('style');\n var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n if (!value) {\n value = null;\n }\n $elm.attr('data-mce-style', value);\n };\n var findNodeIndex = function (node, normalized) {\n var idx = 0, lastNodeType, nodeType;\n if (node) {\n for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n nodeType = node.nodeType;\n if (normalized && nodeType === 3) {\n if (nodeType === lastNodeType || !node.nodeValue.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n var DOMUtils = function (doc, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var addedStyles = {};\n var win = window;\n var files = {};\n var counter = 0;\n var stdMode = true;\n var boxModel = true;\n var styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n var boundEvents = [];\n var schema = settings.schema ? settings.schema : Schema({});\n var styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n var events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n var blockElementsMap = schema.getBlockElements();\n var $ = DomQuery.overrideDefaults(function () {\n return {\n context: doc,\n element: self.getRoot()\n };\n });\n var isBlock = function (node) {\n if (typeof node === 'string') {\n return !!blockElementsMap[node];\n } else if (node) {\n var type = node.nodeType;\n if (type) {\n return !!(type === 1 && blockElementsMap[node.nodeName]);\n }\n }\n return false;\n };\n var get = function (elm) {\n return elm && doc && isString$1(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$f(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$1(name) ? $$(elm).css(name, value) : $$(elm).css(name);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var setStyles = function (elm, stylesArg) {\n var $elm = $$(elm).css(stylesArg);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var getStyle = function (elm, name, computed) {\n var $elm = $$(elm);\n if (computed) {\n return $elm.css(name);\n }\n name = name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n if (name === 'float') {\n name = Env.browser.isIE() ? 'styleFloat' : 'cssFloat';\n }\n return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n };\n var getSize = function (elm) {\n var w, h;\n elm = get(elm);\n w = getStyle(elm, 'width');\n h = getStyle(elm, 'height');\n if (w.indexOf('px') === -1) {\n w = 0;\n }\n if (h.indexOf('px') === -1) {\n h = 0;\n }\n return {\n w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\n h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\n };\n };\n var getRect = function (elm) {\n elm = get(elm);\n var pos = getPos$1(elm);\n var size = getSize(elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n var is = function (elm, selector) {\n var i;\n if (!elm) {\n return false;\n }\n if (!Array.isArray(elm)) {\n if (selector === '*') {\n return elm.nodeType === 1;\n }\n if (simpleSelectorRe.test(selector)) {\n var selectors = selector.toLowerCase().split(/,/);\n var elmName = elm.nodeName.toLowerCase();\n for (i = selectors.length - 1; i >= 0; i--) {\n if (selectors[i] === elmName) {\n return true;\n }\n }\n return false;\n }\n if (elm.nodeType && elm.nodeType !== 1) {\n return false;\n }\n }\n var elms = !Array.isArray(elm) ? [elm] : elm;\n return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n };\n var getParents = function (elm, selector, root, collect) {\n var result = [];\n var selectorVal;\n var node = get(elm);\n collect = collect === undefined;\n root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (Tools.is(selector, 'string')) {\n selectorVal = selector;\n if (selector === '*') {\n selector = function (node) {\n return node.nodeType === 1;\n };\n } else {\n selector = function (node) {\n return is(node, selectorVal);\n };\n }\n }\n while (node) {\n if (node === root || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n break;\n }\n if (!selector || typeof selector === 'function' && selector(node)) {\n if (collect) {\n result.push(node);\n } else {\n return [node];\n }\n }\n node = node.parentNode;\n }\n return collect ? result : null;\n };\n var getParent = function (node, selector, root) {\n var parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n var _findSib = function (node, selector, name) {\n var func = selector;\n if (node) {\n if (typeof selector === 'string') {\n func = function (node) {\n return is(node, selector);\n };\n }\n for (node = node[name]; node; node = node[name]) {\n if (typeof func === 'function' && func(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getNext = function (node, selector) {\n return _findSib(node, selector, 'nextSibling');\n };\n var getPrev = function (node, selector) {\n return _findSib(node, selector, 'previousSibling');\n };\n var select = function (selector, scope) {\n return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n };\n var run = function (elm, func, scope) {\n var result;\n var node = typeof elm === 'string' ? get(elm) : elm;\n if (!node) {\n return false;\n }\n if (Tools.isArray(node) && (node.length || node.length === 0)) {\n result = [];\n each$f(node, function (elm, i) {\n if (elm) {\n result.push(func.call(scope, typeof elm === 'string' ? get(elm) : elm, i));\n }\n });\n return result;\n }\n var context = scope ? scope : this;\n return func.call(context, node);\n };\n var setAttribs = function (elm, attrs) {\n $$(elm).each(function (i, node) {\n each$f(attrs, function (value, name) {\n setAttrib(node, name, value);\n });\n });\n };\n var setHTML = function (elm, html) {\n var $elm = $$(elm);\n if (isIE) {\n $elm.each(function (i, target) {\n if (target.canHaveHTML === false) {\n return;\n }\n while (target.firstChild) {\n target.removeChild(target.firstChild);\n }\n try {\n target.innerHTML = '
' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('
').html('
' + html).contents().slice(1).appendTo(target);\n }\n return html;\n });\n } else {\n $elm.html(html);\n }\n };\n var add = function (parentElm, name, attrs, html, create) {\n return run(parentElm, function (parentElm) {\n var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n setAttribs(newElm, attrs);\n if (html) {\n if (typeof html !== 'string' && html.nodeType) {\n newElm.appendChild(html);\n } else if (typeof html === 'string') {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n };\n var create = function (name, attrs, html) {\n return add(doc.createElement(name), name, attrs, html, true);\n };\n var decode = Entities.decode;\n var encode = Entities.encodeAllRaw;\n var createHTML = function (name, attrs, html) {\n var outHtml = '', key;\n outHtml += '<' + name;\n for (key in attrs) {\n if (hasNonNullableKey(attrs, key)) {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (typeof html !== 'undefined') {\n return outHtml + '>' + html + '';\n }\n return outHtml + ' />';\n };\n var createFragment = function (html) {\n var node;\n var container = doc.createElement('div');\n var frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n var remove = function (node, keepChildren) {\n var $node = $$(node);\n if (keepChildren) {\n $node.each(function () {\n var child;\n while (child = this.firstChild) {\n if (child.nodeType === 3 && child.data.length === 0) {\n this.removeChild(child);\n } else {\n this.parentNode.insertBefore(child, this);\n }\n }\n }).remove();\n } else {\n $node.remove();\n }\n return $node.length > 1 ? $node.toArray() : $node[0];\n };\n var removeAllAttribs = function (e) {\n return run(e, function (e) {\n var i;\n var attrs = e.attributes;\n for (i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n };\n var parseStyle = function (cssText) {\n return styles.parse(cssText);\n };\n var serializeStyle = function (stylesArg, name) {\n return styles.serialize(stylesArg, name);\n };\n var addStyle = function (cssText) {\n var head, styleElm;\n if (self !== DOMUtils.DOM && doc === document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n head = doc.getElementsByTagName('head')[0];\n if (head.firstChild) {\n head.insertBefore(styleElm, head.firstChild);\n } else {\n head.appendChild(styleElm);\n }\n }\n if (styleElm.styleSheet) {\n styleElm.styleSheet.cssText += cssText;\n } else {\n styleElm.appendChild(doc.createTextNode(cssText));\n }\n };\n var loadCSS = function (urls) {\n if (!urls) {\n urls = '';\n }\n each$k(urls.split(','), function (url) {\n files[url] = true;\n styleSheetLoader.load(url, noop);\n });\n };\n var toggleClass = function (elm, cls, state) {\n $$(elm).toggleClass(cls, state).each(function () {\n if (this.className === '') {\n DomQuery(this).attr('class', null);\n }\n });\n };\n var addClass = function (elm, cls) {\n $$(elm).addClass(cls);\n };\n var removeClass = function (elm, cls) {\n toggleClass(elm, cls, false);\n };\n var hasClass = function (elm, cls) {\n return $$(elm).hasClass(cls);\n };\n var show = function (elm) {\n $$(elm).show();\n };\n var hide = function (elm) {\n $$(elm).hide();\n };\n var isHidden = function (elm) {\n return $$(elm).css('display') === 'none';\n };\n var uniqueId = function (prefix) {\n return (!prefix ? 'mce_' : prefix) + counter++;\n };\n var getOuterHTML = function (elm) {\n var node = typeof elm === 'string' ? get(elm) : elm;\n return isElement$5(node) ? node.outerHTML : DomQuery('
').append(DomQuery(node).clone()).html();\n };\n var setOuterHTML = function (elm, html) {\n $$(elm).each(function () {\n try {\n if ('outerHTML' in this) {\n this.outerHTML = html;\n return;\n }\n } catch (ex) {\n }\n remove(DomQuery(this).html(html), true);\n });\n };\n var insertAfter = function (node, reference) {\n var referenceNode = get(reference);\n return run(node, function (node) {\n var parent = referenceNode.parentNode;\n var nextSibling = referenceNode.nextSibling;\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n return node;\n });\n };\n var replace = function (newElm, oldElm, keepChildren) {\n return run(oldElm, function (oldElm) {\n if (Tools.is(oldElm, 'array')) {\n newElm = newElm.cloneNode(true);\n }\n if (keepChildren) {\n each$f(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$f(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$5(node)) {\n var isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n return true;\n }\n }\n return false;\n };\n var isEmpty = function (node, elements) {\n var type, name, brCount = 0;\n if (isNonEmptyElement(node)) {\n return false;\n }\n node = node.firstChild;\n if (node) {\n var walker = new DomTreeWalker(node, node.parentNode);\n var whitespace = schema ? schema.getWhiteSpaceElements() : {};\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\n do {\n type = node.nodeType;\n if (isElement$5(node)) {\n var bogusVal = node.getAttribute('data-mce-bogus');\n if (bogusVal) {\n node = walker.next(bogusVal === 'all');\n continue;\n }\n name = node.nodeName.toLowerCase();\n if (elements && elements[name]) {\n if (name === 'br') {\n brCount++;\n node = walker.next();\n continue;\n }\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (type === 8) {\n return false;\n }\n if (type === 3 && !isWhitespaceText(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && isWhitespaceText(node.nodeValue)) {\n return false;\n }\n node = walker.next();\n } while (node);\n }\n return brCount <= 1;\n };\n var createRng = function () {\n return doc.createRange();\n };\n var split = function (parentElm, splitElm, replacementElm) {\n var range = createRng();\n var beforeFragment;\n var afterFragment;\n var parentNode;\n if (parentElm && splitElm) {\n range.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n beforeFragment = range.extractContents();\n range = createRng();\n range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n range.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\n parentNode = parentElm.parentNode;\n parentNode.insertBefore(trimNode(self, beforeFragment), parentElm);\n if (replacementElm) {\n parentNode.insertBefore(replacementElm, parentElm);\n } else {\n parentNode.insertBefore(splitElm, parentElm);\n }\n parentNode.insertBefore(trimNode(self, afterFragment), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n }\n };\n var bind = function (target, name, func, scope) {\n if (Tools.isArray(target)) {\n var i = target.length;\n var rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n }\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n var output = events.bind(target, name, func, scope || self);\n return output;\n };\n var unbind = function (target, name, func) {\n if (Tools.isArray(target)) {\n var i = target.length;\n var rv = [];\n while (i--) {\n rv[i] = unbind(target[i], name, func);\n }\n return rv;\n } else {\n if (boundEvents.length > 0 && (target === doc || target === win)) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n events.unbind(item[0], item[1], item[2]);\n }\n }\n }\n return events.unbind(target, name, func);\n }\n };\n var fire = function (target, name, evt) {\n return events.fire(target, name, evt);\n };\n var getContentEditable = function (node) {\n if (node && isElement$5(node)) {\n var contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n var getContentEditableParent = function (node) {\n var root = getRoot();\n var state = null;\n for (; node && node !== root; node = node.parentNode) {\n state = getContentEditable(node);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n var destroy = function () {\n if (boundEvents.length > 0) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n events.unbind(item[0], item[1], item[2]);\n }\n }\n each$j(files, function (_, url) {\n styleSheetLoader.unload(url);\n delete files[url];\n });\n if (Sizzle.setDocument) {\n Sizzle.setDocument();\n }\n };\n var isChildOf = function (node, parent) {\n if (!isIE) {\n return node === parent || parent.contains(node);\n } else {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\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, constant(self));\n return self;\n };\n DOMUtils.DOM = DOMUtils(document);\n DOMUtils.nodeIndex = findNodeIndex;\n\n var DOM$a = DOMUtils.DOM;\n var each$e = Tools.each, grep = 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$a;\n var elm;\n var cleanup = function () {\n dom.remove(id);\n if (elm) {\n elm.onerror = elm.onload = elm = null;\n }\n };\n var done = function () {\n cleanup();\n success();\n };\n var error = function () {\n cleanup();\n if (isFunction(failure)) {\n failure();\n } else {\n if (typeof console !== 'undefined' && console.log) {\n console.log('Failed to load script: ' + url);\n }\n }\n };\n var id = dom.uniqueId();\n elm = document.createElement('script');\n elm.id = id;\n elm.type = 'text/javascript';\n elm.src = Tools._addCacheSuffix(url);\n if (this.settings.referrerPolicy) {\n dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n }\n elm.onload = done;\n elm.onerror = error;\n (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\n };\n ScriptLoader.prototype.isDone = function (url) {\n return this.states[url] === LOADED;\n };\n ScriptLoader.prototype.markDone = function (url) {\n this.states[url] = LOADED;\n };\n ScriptLoader.prototype.add = function (url, success, scope, failure) {\n var state = this.states[url];\n this.queue.push(url);\n if (state === undefined) {\n this.states[url] = QUEUED;\n }\n if (success) {\n if (!this.scriptLoadedCallbacks[url]) {\n this.scriptLoadedCallbacks[url] = [];\n }\n this.scriptLoadedCallbacks[url].push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n }\n };\n ScriptLoader.prototype.load = function (url, success, scope, failure) {\n return this.add(url, success, scope, failure);\n };\n ScriptLoader.prototype.remove = function (url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n };\n ScriptLoader.prototype.loadQueue = function (success, scope, failure) {\n this.loadScripts(this.queue, success, scope, failure);\n };\n ScriptLoader.prototype.loadScripts = function (scripts, success, scope, failure) {\n var self = this;\n var failures = [];\n var execCallbacks = function (name, url) {\n each$e(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(scripts);\n scripts.length = 0;\n each$e(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$e(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$2(str, 'raw');\n };\n var isTokenised = function (str) {\n return isArray$1(str) && str.length > 1;\n };\n var data = {};\n var currentCode = Cell('en');\n var getLanguageData = function () {\n return get$9(data, currentCode.get());\n };\n var getData = function () {\n return map$2(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$4 = function (code, items) {\n var langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n each$j(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$9(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n };\n var removeContext = function (str) {\n return str.replace(/{context:\\w+}$/, '');\n };\n if (isEmpty(text)) {\n return '';\n }\n if (isRaw(text)) {\n return toString(text.raw);\n }\n if (isTokenised(text)) {\n var values_1 = text.slice(1);\n var substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n return has$2(values_1, $2) ? toString(values_1[$2]) : $1;\n });\n return removeContext(substitued);\n }\n return removeContext(getLangData(text));\n };\n var isRtl$1 = function () {\n return getLanguageData().bind(function (items) {\n return get$9(items, '_dir');\n }).exists(function (dir) {\n return dir === 'rtl';\n });\n };\n var hasCode = function (code) {\n return has$2(data, code);\n };\n var I18n = {\n getData: getData,\n setCode: setCode,\n getCode: getCode,\n add: add$4,\n translate: translate,\n isRtl: isRtl$1,\n hasCode: hasCode\n };\n\n var AddOnManager = function () {\n var items = [];\n var urls = {};\n var lookup = {};\n var _listeners = [];\n var runListeners = function (name, state) {\n var matchedListeners = filter$4(_listeners, function (listener) {\n return listener.name === name && listener.state === state;\n });\n each$k(matchedListeners, function (listener) {\n return listener.callback();\n });\n };\n var get = function (name) {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n var dependencies = function (name) {\n var result;\n if (lookup[name]) {\n result = lookup[name].dependencies;\n }\n return result || [];\n };\n var requireLangPack = function (name, languages) {\n if (AddOnManager.languageLoad !== false) {\n waitFor(name, function () {\n var language = I18n.getCode();\n var wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n }, 'loaded');\n }\n };\n var add = function (id, addOn, dependencies) {\n var addOnConstructor = addOn;\n items.push(addOnConstructor);\n lookup[id] = {\n instance: addOnConstructor,\n dependencies: dependencies\n };\n runListeners(id, 'added');\n return addOnConstructor;\n };\n var remove = function (name) {\n delete urls[name];\n delete lookup[name];\n };\n var createUrl = function (baseUrl, dep) {\n if (typeof dep === 'object') {\n return dep;\n }\n return typeof baseUrl === 'string' ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n };\n var addComponents = function (pluginName, scripts) {\n var pluginUrl = urls[pluginName];\n each$k(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$k(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$2(lookup, name) && state === 'added') {\n callback();\n } else if (has$2(urls, name) && state === 'loaded') {\n callback();\n } else {\n _listeners.push({\n name: name,\n state: state,\n callback: callback\n });\n }\n };\n return {\n items: items,\n urls: urls,\n lookup: lookup,\n _listeners: _listeners,\n get: get,\n dependencies: dependencies,\n requireLangPack: requireLangPack,\n add: add,\n remove: remove,\n createUrl: createUrl,\n addComponents: addComponents,\n load: load,\n waitFor: waitFor\n };\n };\n AddOnManager.languageLoad = true;\n AddOnManager.baseURL = '';\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n\n var singleton = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var get = function () {\n return subject.get();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n get: get,\n set: set\n };\n };\n var value = function () {\n var subject = singleton(noop);\n var on = function (f) {\n return subject.get().each(f);\n };\n return __assign(__assign({}, subject), { on: on });\n };\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNull(timer)) {\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n cancel();\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var read$4 = function (element, attr) {\n var value = get$6(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$3 = function (element, attr, id) {\n var old = read$4(element, attr);\n var nu = old.concat([id]);\n set$1(element, attr, nu.join(' '));\n return true;\n };\n var remove$5 = function (element, attr, id) {\n var nu = filter$4(read$4(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$6(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$4 = function (element) {\n return read$4(element, 'class');\n };\n var add$2 = function (element, clazz) {\n return add$3(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$5(element, 'class', clazz);\n };\n\n var add$1 = 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$4(element);\n if (classList.length === 0) {\n remove$6(element, 'class');\n }\n };\n var remove$3 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has = function (element, clazz) {\n return supports(element) && element.dom.classList.contains(clazz);\n };\n\n var descendants$1 = function (scope, predicate) {\n var result = [];\n each$k(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var annotation = constant('mce-annotation');\n var dataAnnotation = constant('data-mce-annotation');\n var dataAnnotationId = constant('data-mce-annotation-uid');\n\n var identify = function (editor, annotationName) {\n var rng = editor.selection.getRng();\n var start = SugarElement.fromDom(rng.startContainer);\n var root = SugarElement.fromDom(editor.getBody());\n var selector = annotationName.fold(function () {\n return '.' + annotation();\n }, function (an) {\n return '[' + dataAnnotation() + '=\"' + an + '\"]';\n });\n var newStart = child$1(start, rng.startOffset).getOr(start);\n var closest = closest$2(newStart, selector, function (n) {\n return eq(n, root);\n });\n var getAttr = function (c, property) {\n if (has$1(c, property)) {\n return Optional.some(get$6(c, property));\n } else {\n return Optional.none();\n }\n };\n return closest.bind(function (c) {\n return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n return getAttr(c, '' + dataAnnotation()).map(function (name) {\n var elements = findMarkers(editor, uid);\n return {\n uid: uid,\n name: name,\n elements: elements\n };\n });\n });\n });\n };\n var isAnnotation = function (elem) {\n return isElement$6(elem) && has(elem, annotation());\n };\n var findMarkers = function (editor, uid) {\n var body = SugarElement.fromDom(editor.getBody());\n return descendants(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n };\n var findAll = function (editor, name) {\n var body = SugarElement.fromDom(editor.getBody());\n var markers = descendants(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n var directory = {};\n each$k(markers, function (m) {\n var uid = get$6(m, dataAnnotationId());\n var nodesAlready = get$9(directory, uid).getOr([]);\n directory[uid] = nodesAlready.concat([m]);\n });\n return directory;\n };\n\n var setup$n = function (editor, _registry) {\n var changeCallbacks = Cell({});\n var initData = function () {\n return {\n listeners: [],\n previous: value()\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 = get$9(callbackMap, name).getOrThunk(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$k(data.listeners, function (f) {\n return f(true, name, {\n uid: uid,\n nodes: map$3(elements, function (elem) {\n return elem.dom;\n })\n });\n });\n });\n };\n var fireNoAnnotation = function (name) {\n withCallbacks(name, function (data) {\n each$k(data.listeners, function (f) {\n return f(false, name);\n });\n });\n };\n var onNodeChange = last(function () {\n var callbackMap = changeCallbacks.get();\n var annotations = sort(keys(callbackMap));\n each$k(annotations, function (name) {\n updateCallbacks(name, function (data) {\n var prev = data.previous.get();\n identify(editor, Optional.some(name)).fold(function () {\n if (prev.isSome()) {\n fireNoAnnotation(name);\n data.previous.clear();\n }\n }, function (_a) {\n var uid = _a.uid, name = _a.name, elements = _a.elements;\n if (!is$1(prev, uid)) {\n fireCallbacks(name, uid, elements);\n data.previous.set(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$m = function (editor, registry) {\n var identifyParserNode = function (span) {\n return Optional.from(span.attr(dataAnnotation())).bind(registry.lookup);\n };\n editor.on('init', function () {\n editor.serializer.addNodeFilter('span', function (spans) {\n each$k(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$7 = 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 get$9(annotations, name).map(function (a) {\n return a.settings;\n });\n };\n return {\n register: register,\n lookup: lookup\n };\n };\n\n var unique = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var add = function (element, classes) {\n each$k(classes, function (x) {\n add$1(element, x);\n });\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n var fromDom$1 = function (nodes) {\n return map$3(nodes, SugarElement.fromDom);\n };\n\n var get$3 = function (element) {\n return element.dom.innerHTML;\n };\n var set = function (element, content) {\n var owner = owner$1(element);\n var docDom = owner.dom;\n var fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml(content, docDom);\n append(fragment, contentElements);\n empty(element);\n append$1(element, fragment);\n };\n\n var clone$1 = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep$1 = function (original) {\n return clone$1(original, true);\n };\n\n var TextWalker = function (startNode, rootNode, isBoundary) {\n if (isBoundary === void 0) {\n isBoundary = never;\n }\n var walker = new DomTreeWalker(startNode, rootNode);\n var walk = function (direction) {\n var next;\n do {\n next = walker[direction]();\n } while (next && !isText$7(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$7);\n };\n return {\n current: function () {\n return Optional.from(walker.current()).filter(isText$7);\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$5(node) || isContentEditableFalse$b(node);\n };\n var walk = function (node, offset, walker, process) {\n if (isText$7(node)) {\n var newOffset = process(node, offset, node.data);\n if (newOffset !== -1) {\n return Optional.some({\n container: node,\n offset: newOffset\n });\n }\n }\n return walker().bind(function (next) {\n return walk(next.container, next.offset, walker, process);\n });\n };\n var backwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.prev().map(function (prev) {\n return {\n container: prev,\n offset: prev.length\n };\n });\n }, process).getOrNull();\n };\n var forwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.next().map(function (next) {\n return {\n container: next,\n offset: 0\n };\n });\n }, process).getOrNull();\n };\n return {\n backwards: backwards,\n forwards: forwards\n };\n };\n\n var round$2 = Math.round;\n var clone = 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$2(rect.left),\n top: round$2(rect.top),\n bottom: round$2(rect.bottom),\n right: round$2(rect.right),\n width: round$2(rect.width),\n height: round$2(rect.height)\n };\n };\n var collapse = function (rect, toStart) {\n rect = clone(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$1 = function (rect1, rect2) {\n var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n if (rect1.bottom - halfHeight < rect2.top) {\n return true;\n }\n if (rect1.top > rect2.bottom) {\n return false;\n }\n return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n };\n var isBelow$1 = 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 clamp$2 = function (value, min, max) {\n return Math.min(Math.max(value, min), max);\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$1 = function (container, offset) {\n if (isElement$5(container) && container.hasChildNodes()) {\n var childNodes = container.childNodes;\n var safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n return childNodes[safeOffset];\n } else {\n return container;\n }\n };\n var getNodeUnsafe = function (container, offset) {\n if (offset < 0 && isElement$5(container) && container.hasChildNodes()) {\n return undefined;\n } else {\n return getNode$1(container, offset);\n }\n };\n\n var extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n var isExtendingChar = function (ch) {\n return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n };\n\n var or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n var and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n var isElement$3 = isElement$5;\n var isCaretCandidate$2 = isCaretCandidate$3;\n var isBlock$1 = matchStyleValues('display', 'block table');\n var isFloated = matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = and(isElement$3, isCaretCandidate$2, not(isFloated));\n var isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = isText$7;\n var isBr$2 = isBr$5;\n var nodeIndex$1 = DOMUtils.nodeIndex;\n var resolveIndex$1 = getNodeUnsafe;\n var createRange$1 = function (doc) {\n return 'createRange' in doc ? doc.createRange() : DOMUtils.DOM.createRng();\n };\n var isWhiteSpace$1 = 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 if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$7(container)) {\n var text = container.data;\n if (isWhiteSpace$1(text[offset - 1]) || isWhiteSpace$1(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n var getBrClientRect = function (brNode) {\n var doc = brNode.ownerDocument;\n var rng = createRange$1(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(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$7(ec) && so === 0 && eo === 1) {\n var newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect$1(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$1 = function (item) {\n var clientRect;\n var clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone(clientRects[0]);\n } else {\n clientRect = clone(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$2(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 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$1(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$1(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$1(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), true));\n }\n }\n };\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$4(container)) {\n addCharacterOffset(container, offset);\n return clientRects;\n }\n if (isElement$3(container)) {\n if (caretPosition.isAtEnd()) {\n var node = resolveIndex$1(container, offset);\n if (isText$4(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$2(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n }\n } else {\n var node = resolveIndex$1(container, offset);\n if (isText$4(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n return clientRects;\n }\n var beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$2(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n }\n }\n }\n return clientRects;\n };\n var CaretPosition = function (container, offset, clientRects) {\n var isAtStart = function () {\n if (isText$4(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n var isAtEnd = function () {\n if (isText$4(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n var toRange = function () {\n var range = createRange$1(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$1(container, before ? offset - 1 : offset);\n };\n return {\n container: constant(container),\n offset: constant(offset),\n toRange: toRange,\n getClientRects: getClientRects,\n isVisible: isVisible,\n isAtStart: isAtStart,\n isAtEnd: isAtEnd,\n isEqual: isEqual,\n getNode: getNode\n };\n };\n CaretPosition.fromRangeStart = function (range) {\n return CaretPosition(range.startContainer, range.startOffset);\n };\n CaretPosition.fromRangeEnd = function (range) {\n return CaretPosition(range.endContainer, range.endOffset);\n };\n CaretPosition.after = function (node) {\n return CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n };\n CaretPosition.before = function (node) {\n return CaretPosition(node.parentNode, nodeIndex$1(node));\n };\n CaretPosition.isAbove = function (pos1, pos2) {\n return lift2(head(pos2.getClientRects()), last$2(pos1.getClientRects()), isAbove$1).getOr(false);\n };\n CaretPosition.isBelow = function (pos1, pos2) {\n return lift2(last$2(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).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$7(pos.container()) : false;\n };\n CaretPosition.isElementPosition = function (pos) {\n return CaretPosition.isTextPosition(pos) === false;\n };\n\n var trimEmptyTextNode$1 = function (dom, node) {\n if (isText$7(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var insertNode = function (dom, rng, node) {\n rng.insertNode(node);\n trimEmptyTextNode$1(dom, node.previousSibling);\n trimEmptyTextNode$1(dom, node.nextSibling);\n };\n var insertFragment = function (dom, rng, frag) {\n var firstChild = Optional.from(frag.firstChild);\n var lastChild = Optional.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(function (child) {\n return trimEmptyTextNode$1(dom, child.previousSibling);\n });\n lastChild.each(function (child) {\n return trimEmptyTextNode$1(dom, child.nextSibling);\n });\n };\n var rangeInsertNode = function (dom, rng, node) {\n if (isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isText$3 = isText$7;\n var isBogus = isBogus$2;\n var nodeIndex = DOMUtils.nodeIndex;\n var normalizedParent = function (node) {\n var parentNode = node.parentNode;\n if (isBogus(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(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$3(node)) {\n break;\n }\n offset += node.data.length;\n }\n return offset;\n };\n var equal = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n var numTextFragments = reduce(nodes, function (result, node, i) {\n if (isText$3(node) && isText$3(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(node), node);\n return index - numTextFragments;\n };\n var createPathItem = function (node) {\n var name;\n if (isText$3(node)) {\n name = 'text()';\n } else {\n name = node.nodeName.toLowerCase();\n }\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n var parentsUntil$1 = 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$6 = function (root, caretPosition) {\n var container, offset, path = [], outputOffset, childNodes, parents;\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (isText$3(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$1(root, container);\n parents = filter$2(parents, not(isBogus$2));\n path = path.concat(map$1(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$3(node) || !isText$3(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$3(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$3(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$3(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition(container, offset);\n };\n var resolve$2 = function (root, path) {\n var offset;\n if (!path) {\n return null;\n }\n var parts = path.split(',');\n var paths = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n var container = reduce(paths, function (result, value) {\n var match = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!match) {\n return null;\n }\n if (match[1] === 'text()') {\n match[1] = '#text';\n }\n return resolvePathItem(result, match[1], parseInt(match[2], 10));\n }, root);\n if (!container) {\n return null;\n }\n if (!isText$3(container)) {\n if (offset === 'after') {\n offset = nodeIndex(container) + 1;\n } else {\n offset = nodeIndex(container);\n }\n return CaretPosition(container.parentNode, offset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n var isContentEditableFalse$9 = isContentEditableFalse$b;\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$7(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$7(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 if (isRangeInCaretContainerBlock(rng)) {\n bookmark.isFakeCaret = true;\n }\n return bookmark;\n };\n var findIndex = 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$1 = 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$5(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$1(rng, true);\n moveEndPoint$1(rng, false);\n return rng;\n };\n var findSibling = function (node, offset) {\n var sibling;\n if (isElement$5(node)) {\n node = getNode$1(node, offset);\n if (isContentEditableFalse$9(node)) {\n return node;\n }\n }\n if (isCaretContainer$2(node)) {\n if (isText$7(node) && isCaretContainerBlock$1(node)) {\n node = node.parentNode;\n }\n sibling = node.previousSibling;\n if (isContentEditableFalse$9(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$9(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$9(element) || name === 'IMG') {\n return {\n name: name,\n index: findIndex(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(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$6(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$6(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng))\n };\n };\n var getRangeBookmark = function (selection) {\n return { rng: selection.getRng() };\n };\n var createBookmarkSpan = function (dom, id, filled) {\n var args = {\n 'data-mce-type': 'bookmark',\n id: id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n var getPersistentBookmark = function (selection, filled) {\n var dom = selection.dom;\n var rng = selection.getRng();\n var id = dom.uniqueId();\n var collapsed = selection.isCollapsed();\n var element = selection.getNode();\n var name = element.nodeName;\n if (name === 'IMG') {\n return {\n name: name,\n index: findIndex(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$2 = function (selection, type, normalized) {\n if (type === 2) {\n return getOffsetBookmark(trim$2, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n var getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n var DOM$9 = DOMUtils.DOM;\n var defaultPreviewStyles = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow';\n var getBodySetting = function (editor, name, defaultValue) {\n var value = editor.getParam(name, defaultValue);\n if (value.indexOf('=') !== -1) {\n var bodyObj = editor.getParam(name, '', 'hash');\n return get$9(bodyObj, editor.id).getOr(defaultValue);\n } else {\n return value;\n }\n };\n var getIframeAttrs = function (editor) {\n return editor.getParam('iframe_attrs', {});\n };\n var getDocType = function (editor) {\n return editor.getParam('doctype', '');\n };\n var getDocumentBaseUrl = function (editor) {\n return editor.getParam('document_base_url', '');\n };\n var getBodyId = function (editor) {\n return getBodySetting(editor, 'body_id', 'tinymce');\n };\n var getBodyClass = function (editor) {\n return getBodySetting(editor, 'body_class', '');\n };\n var getContentSecurityPolicy = function (editor) {\n return editor.getParam('content_security_policy', '');\n };\n var shouldPutBrInPre$1 = function (editor) {\n return editor.getParam('br_in_pre', true);\n };\n var getForcedRootBlock = function (editor) {\n if (editor.getParam('force_p_newlines', false)) {\n return 'p';\n }\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n var getBrNewLineSelector = function (editor) {\n return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n };\n var getNoNewLineSelector = function (editor) {\n return editor.getParam('no_newline_selector', '');\n };\n var shouldKeepStyles = function (editor) {\n return editor.getParam('keep_styles', true);\n };\n var shouldEndContainerOnEmptyBlock = function (editor) {\n return editor.getParam('end_container_on_empty_block', false);\n };\n var getFontStyleValues = function (editor) {\n return Tools.explode(editor.getParam('font_size_style_values', 'xx-small,x-small,small,medium,large,x-large,xx-large'));\n };\n var getFontSizeClasses = function (editor) {\n return Tools.explode(editor.getParam('font_size_classes', ''));\n };\n var getImagesDataImgFilter = function (editor) {\n return editor.getParam('images_dataimg_filter', always, 'function');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n var shouldReuseFileName = function (editor) {\n return editor.getParam('images_reuse_filename', false, 'boolean');\n };\n var shouldReplaceBlobUris = function (editor) {\n return editor.getParam('images_replace_blob_uris', true, 'boolean');\n };\n var getIconPackName = function (editor) {\n return editor.getParam('icons', '', 'string');\n };\n var getIconsUrl = function (editor) {\n return editor.getParam('icons_url', '', 'string');\n };\n var getImageUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getImageUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', '', 'string');\n };\n var getImagesUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\n };\n var getImagesUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', null, 'function');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var getReferrerPolicy = function (editor) {\n return editor.getParam('referrer_policy', '', 'string');\n };\n var getLanguageCode = function (editor) {\n return editor.getParam('language', 'en', 'string');\n };\n var getLanguageUrl = function (editor) {\n return editor.getParam('language_url', '', 'string');\n };\n var shouldIndentUseMargin = function (editor) {\n return editor.getParam('indent_use_margin', false);\n };\n var getIndentation = function (editor) {\n return editor.getParam('indentation', '40px', 'string');\n };\n var getContentCss = function (editor) {\n var contentCss = editor.getParam('content_css');\n if (isString$1(contentCss)) {\n return map$3(contentCss.split(','), trim$4);\n } else if (isArray$1(contentCss)) {\n return contentCss;\n } else if (contentCss === false || editor.inline) {\n return [];\n } else {\n return ['default'];\n }\n };\n var getFontCss = function (editor) {\n var fontCss = editor.getParam('font_css', []);\n return isArray$1(fontCss) ? fontCss : map$3(fontCss.split(','), trim$4);\n };\n var getDirectionality = function (editor) {\n return editor.getParam('directionality', I18n.isRtl() ? 'rtl' : undefined);\n };\n var getInlineBoundarySelector = function (editor) {\n return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n };\n var getObjectResizing = function (editor) {\n var selector = editor.getParam('object_resizing');\n if (selector === false || Env.iOS) {\n return false;\n } else {\n return isString$1(selector) ? selector : 'table,img,figure.image,div,video,iframe';\n }\n };\n var getResizeImgProportional = function (editor) {\n return editor.getParam('resize_img_proportional', true, 'boolean');\n };\n var getPlaceholder = function (editor) {\n return editor.getParam('placeholder', DOM$9.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$1(style)) {\n return style;\n } else {\n return '';\n }\n };\n var canFormatEmptyLines = function (editor) {\n return editor.getParam('format_empty_lines', false, 'boolean');\n };\n var getCustomUiSelector = function (editor) {\n return editor.getParam('custom_ui_selector', '', 'string');\n };\n var getThemeUrl = function (editor) {\n return editor.getParam('theme_url');\n };\n var isInline = 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$1 = function (editor) {\n return editor.getParam('readonly');\n };\n var hasContentCssCors = function (editor) {\n return editor.getParam('content_css_cors');\n };\n var getPlugins = function (editor) {\n return editor.getParam('plugins', '', 'string');\n };\n var getExternalPlugins$1 = function (editor) {\n return editor.getParam('external_plugins');\n };\n var shouldBlockUnsupportedDrop = function (editor) {\n return editor.getParam('block_unsupported_drop', true, 'boolean');\n };\n var isVisualAidsEnabled = function (editor) {\n return editor.getParam('visual', true, 'boolean');\n };\n var getVisualAidsTableClass = function (editor) {\n return editor.getParam('visual_table_class', 'mce-item-table', 'string');\n };\n var getVisualAidsAnchorClass = function (editor) {\n return editor.getParam('visual_anchor_class', 'mce-item-anchor', 'string');\n };\n var getIframeTitle = function (editor) {\n return editor.getParam('iframe_aria_text', 'Rich Text Area. Press ALT-0 for help.', 'string');\n };\n\n var isElement$2 = isElement$5;\n var isText$2 = isText$7;\n var removeNode$1 = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var trimCount = function (text) {\n var trimmedText = trim$2(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n var deleteZwspChars = function (caretContainer) {\n var idx;\n while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n caretContainer.deleteData(idx, 1);\n }\n };\n var removeUnchanged = function (caretContainer, pos) {\n remove$2(caretContainer);\n return pos;\n };\n var removeTextAndReposition = function (caretContainer, pos) {\n var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n var after = trimCount(caretContainer.data.substr(pos.offset()));\n var text = before.text + after.text;\n if (text.length > 0) {\n deleteZwspChars(caretContainer);\n return CaretPosition(caretContainer, pos.offset() - before.count);\n } else {\n return pos;\n }\n };\n var removeElementAndReposition = function (caretContainer, pos) {\n var parentNode = pos.container();\n var newPosition = indexOf$2(from(parentNode.childNodes), caretContainer).map(function (index) {\n return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$2(caretContainer);\n return newPosition;\n };\n var removeTextCaretContainer = function (caretContainer, pos) {\n return isText$2(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeElementCaretContainer = function (caretContainer, pos) {\n return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeAndReposition = function (container, pos) {\n return CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n };\n var remove$2 = function (caretContainerNode) {\n if (isElement$2(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode$1(caretContainerNode);\n }\n }\n if (isText$2(caretContainerNode)) {\n deleteZwspChars(caretContainerNode);\n if (caretContainerNode.data.length === 0) {\n removeNode$1(caretContainerNode);\n }\n }\n };\n\n var browser$2 = detect().browser;\n var isContentEditableFalse$8 = isContentEditableFalse$b;\n var isMedia$1 = isMedia$2;\n var isTableCell$3 = isTableCell$5;\n var inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n var getAbsoluteClientRect = function (root, element, before) {\n var clientRect = collapse(element.getBoundingClientRect(), before);\n var scrollX;\n var scrollY;\n if (root.tagName === 'BODY') {\n var docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n var 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 var margin = element.offsetWidth - element.clientWidth;\n if (margin > 0) {\n if (before) {\n margin *= -1;\n }\n clientRect.left += margin;\n clientRect.right += margin;\n }\n return clientRect;\n };\n var trimInlineCaretContainers = function (root) {\n var fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n for (var i = 0; i < fakeCaretTargetNodes.length; i++) {\n var node = fakeCaretTargetNodes[i].dom;\n var sibling = node.previousSibling;\n if (endsWithCaretContainer$1(sibling)) {\n var data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer$1(sibling)) {\n var data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n var FakeCaret = function (editor, root, isBlock, hasFocus) {\n var lastVisualCaret = value();\n var cursorInterval;\n var caretContainerNode;\n var rootBlock = getForcedRootBlock(editor);\n var caretBlock = rootBlock.length > 0 ? rootBlock : 'p';\n var show = function (before, element) {\n var rng;\n hide();\n if (isTableCell$3(element)) {\n return null;\n }\n if (isBlock(element)) {\n caretContainerNode = insertBlock$1(caretBlock, element, before);\n var clientRect = getAbsoluteClientRect(root, element, before);\n DomQuery(caretContainerNode).css('top', clientRect.top);\n var caret = DomQuery('
').css(__assign({}, clientRect)).appendTo(root)[0];\n lastVisualCaret.set({\n caret: caret,\n element: element,\n before: before\n });\n if (before) {\n DomQuery(caret).addClass('mce-visual-caret-before');\n }\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n caretContainerNode = insertInline$1(element, before);\n rng = element.ownerDocument.createRange();\n if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n rng.setStart(caretContainerNode, 1);\n rng.setEnd(caretContainerNode, 1);\n }\n return rng;\n }\n return rng;\n };\n var hide = function () {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n remove$2(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.on(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.clear();\n });\n if (cursorInterval) {\n Delay.clearInterval(cursorInterval);\n cursorInterval = undefined;\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.on(function (caretState) {\n var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n DomQuery(caretState.caret).css(__assign({}, clientRect));\n });\n };\n var destroy = function () {\n return Delay.clearInterval(cursorInterval);\n };\n var getCss = function () {\n return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n };\n return {\n show: show,\n hide: hide,\n getCss: getCss,\n reposition: reposition,\n destroy: destroy\n };\n };\n var isFakeCaretTableBrowser = function () {\n return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n };\n var isInlineFakeCaretTarget = function (node) {\n return isContentEditableFalse$8(node) || isMedia$1(node);\n };\n var isFakeCaretTarget = function (node) {\n return isInlineFakeCaretTarget(node) || isTable$3(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$7 = isContentEditableFalse$b;\n var isMedia = isMedia$2;\n var isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer = isCaretContainer$2;\n var isCaretContainerBlock = isCaretContainerBlock$1;\n var isElement$1 = isElement$5;\n var isCaretCandidate$1 = isCaretCandidate$3;\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(node)) {\n return node;\n }\n }\n return null;\n };\n var findNode$1 = function (node, direction, predicateFn, rootNode, shallow) {\n var walker = new DomTreeWalker(node, rootNode);\n var isCefOrCaretContainer = isContentEditableFalse$7(node) || isCaretContainerBlock(node);\n if (isBackwards(direction)) {\n if (isCefOrCaretContainer) {\n node = skipCaretContainers(walker.prev.bind(walker), true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n if (isForwards(direction)) {\n if (isCefOrCaretContainer) {\n node = skipCaretContainers(walker.next.bind(walker), true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.next.bind(walker), shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getParentBlock$2 = 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$2(caretPosition1.container(), rootNode) === getParentBlock$2(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$1(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$2(node1, root) === getParentBlock$2(node2, root);\n };\n var lean = function (left, root, node) {\n var siblingName = left ? 'previousSibling' : 'nextSibling';\n while (node && node !== root) {\n var sibling = node[siblingName];\n if (isCaretContainer(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$7(sibling) || isMedia(sibling)) {\n if (isNodesInSameBlock(root, sibling, node)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$1(sibling)) {\n break;\n }\n node = node.parentNode;\n }\n return null;\n };\n var before$2 = curry(beforeAfter, true);\n var after$2 = curry(beforeAfter, false);\n var normalizeRange = function (direction, root, range) {\n var node;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n var container = range.startContainer;\n var offset = range.startOffset;\n if (isCaretContainerBlock$1(container)) {\n if (!isElement$1(container)) {\n container = container.parentNode;\n }\n var location_1 = container.getAttribute('data-mce-caret');\n if (location_1 === 'before') {\n node = container.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location_1 === 'after') {\n node = container.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$2(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$7(container)) {\n if (isCaretContainer(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer$1(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n return range;\n }\n }\n return range;\n };\n var getRelativeCefElm = function (forward, caretPosition) {\n return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$7);\n };\n var getNormalizedRangeEndPoint = function (direction, root, range) {\n var normalizedRange = normalizeRange(direction, root, range);\n if (direction === -1) {\n return CaretPosition.fromRangeStart(normalizedRange);\n }\n return CaretPosition.fromRangeEnd(normalizedRange);\n };\n var getElementFromPosition = function (pos) {\n return Optional.from(pos.getNode()).map(SugarElement.fromDom);\n };\n var getElementFromPrevPosition = function (pos) {\n return Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n };\n var getVisualCaretPosition = function (walkFn, caretPosition) {\n while (caretPosition = walkFn(caretPosition)) {\n if (caretPosition.isVisible()) {\n return caretPosition;\n }\n }\n return caretPosition;\n };\n var isMoveInsideSameBlock = function (from, to) {\n var inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && isBr$5(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$6 = isContentEditableFalse$b;\n var isText$1 = isText$7;\n var isElement = isElement$5;\n var isBr$1 = isBr$5;\n var isCaretCandidate = isCaretCandidate$3;\n var isAtomic = isAtomic$1;\n var isEditableCaretCandidate = isEditableCaretCandidate$1;\n var getParents$3 = 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(node.previousSibling) && !isText$1(node.previousSibling)) {\n return CaretPosition.before(node);\n }\n if (isText$1(node)) {\n return CaretPosition(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate(node.nextSibling) && !isText$1(node.nextSibling)) {\n return CaretPosition.after(node);\n }\n if (isText$1(node)) {\n return CaretPosition(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$1(node)) {\n return CaretPosition.before(node);\n }\n return CaretPosition.after(node);\n }\n return CaretPosition.before(node);\n };\n var moveForwardFromBr = function (root, nextNode) {\n var nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate(nextSibling)) {\n if (isText$1(nextSibling)) {\n return CaretPosition(nextSibling, 0);\n } else {\n return CaretPosition.before(nextSibling);\n }\n } else {\n return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root);\n }\n };\n var findCaretPosition$1 = function (direction, startPos, root) {\n var node;\n var nextNode;\n var innerNode;\n var caretPosition;\n if (!isElement(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n caretPosition = CaretPosition.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement(root.lastChild)) {\n return isBr$1(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$1(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate(nextNode)) {\n if (!isAtomic(nextNode)) {\n innerNode = findNode$1(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$1(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$1(nextNode)) {\n return CaretPosition(nextNode, nextNode.data.length);\n }\n return CaretPosition.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate(nextNode)) {\n if (isBr$1(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic(nextNode)) {\n innerNode = findNode$1(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$1(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$1(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n node = findNode$1(node, direction, always, root, true);\n if (isEditableCaretCandidate(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = findNode$1(node, direction, isEditableCaretCandidate, root);\n var rootContentEditableFalseElm = last$1(filter$4(getParents$3(container, root), isContentEditableFalse$6));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n var CaretWalker = function (root) {\n return {\n next: function (caretPosition) {\n return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n },\n prev: function (caretPosition) {\n return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n }\n };\n };\n\n var walkToPositionIn = function (forward, root, start) {\n var position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n var afterElement = function (node) {\n return isBr$5(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n };\n var isBeforeOrStart = function (position) {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate$3(position.getNode());\n }\n };\n var isAfterOrEnd = function (position) {\n if (CaretPosition.isTextPosition(position)) {\n var container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate$3(position.getNode(true));\n }\n };\n var isBeforeAfterSameElement = function (from, to) {\n return !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n };\n var isAtBr = function (position) {\n return !CaretPosition.isTextPosition(position) && isBr$5(position.getNode());\n };\n var shouldSkipPosition = function (forward, from, to) {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n var fromPosition = function (forward, root, pos) {\n var walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n var navigate = function (forward, root, from) {\n return fromPosition(forward, root, from).bind(function (to) {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Optional.some(to);\n }\n });\n };\n var navigateIgnore = function (forward, root, from, ignoreFilter) {\n return navigate(forward, root, from).bind(function (pos) {\n return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos);\n });\n };\n var positionIn = function (forward, element) {\n var startNode = forward ? element.firstChild : element.lastChild;\n if (isText$7(startNode)) {\n return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate$3(startNode)) {\n return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Optional.none();\n }\n };\n 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$1 = '_mce_caret';\n var isCaretNode = function (node) {\n return isElement$5(node) && node.id === CARET_ID$1;\n };\n var getParentCaretContainer = function (body, node) {\n while (node && node !== body) {\n if (node.id === CARET_ID$1) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isStringPathBookmark = function (bookmark) {\n return isString$1(bookmark.start);\n };\n var isRangeBookmark = function (bookmark) {\n return has$2(bookmark, 'rng');\n };\n var isIdBookmark = function (bookmark) {\n return has$2(bookmark, 'id');\n };\n var isIndexBookmark = function (bookmark) {\n return has$2(bookmark, 'name');\n };\n var isPathBookmark = function (bookmark) {\n return Tools.isArray(bookmark.start);\n };\n\n var addBogus = function (dom, node) {\n if (isElement$5(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '
';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var pos;\n var rng = dom.createRng();\n pos = resolve$2(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$2(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$1);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty$1 = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return lastPositionIn(node).fold(never, function (pos) {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n };\n var padEmptyCaretContainer = function (root, node, rng) {\n if (isEmpty$1(node) && getParentCaretContainer(root, node)) {\n insertZwsp(node, rng);\n return true;\n } else {\n return false;\n }\n };\n var setEndPoint = function (dom, start, bookmark, rng) {\n var point = bookmark[start ? 'start' : 'end'];\n var i, node, offset, children;\n var root = dom.getRoot();\n if (point) {\n offset = point[0];\n for (node = root, i = point.length - 1; i >= 1; i--) {\n children = node.childNodes;\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n if (point[i] > children.length - 1) {\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n return tryFindRangePosition(node, rng);\n }\n node = children[point[i]];\n }\n if (node.nodeType === 3) {\n offset = Math.min(point[0], node.nodeValue.length);\n }\n if (node.nodeType === 1) {\n offset = Math.min(point[0], node.childNodes.length);\n }\n if (start) {\n rng.setStart(node, offset);\n } else {\n rng.setEnd(node, offset);\n }\n }\n return true;\n };\n var isValidTextNode = function (node) {\n return isText$7(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$7(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$7(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\n dom.remove(next);\n container = prev;\n offset = idx;\n }\n }\n return Optional.some(CaretPosition(container, offset));\n } else {\n return Optional.none();\n }\n };\n var resolvePaths = function (dom, bookmark) {\n var rng = dom.createRng();\n if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n return Optional.some(rng);\n } else {\n return Optional.none();\n }\n };\n var resolveId = function (dom, bookmark) {\n var startPos = restoreEndPoint(dom, 'start', bookmark);\n var endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, endPos.or(startPos), function (spos, epos) {\n var rng = dom.createRng();\n rng.setStart(addBogus(dom, spos.container()), spos.offset());\n rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n return rng;\n });\n };\n var resolveIndex = function (dom, bookmark) {\n return Optional.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n var rng = dom.createRng();\n rng.selectNode(elm);\n return rng;\n });\n };\n var resolve$1 = function (selection, bookmark) {\n var dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return Optional.some(resolveCaretPositionBookmark(dom, bookmark));\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Optional.some(bookmark.rng);\n }\n }\n return Optional.none();\n };\n\n var getBookmark$1 = function (selection, type, normalized) {\n return getBookmark$2(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n resolve$1(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return isElement$5(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n var is = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is(nbsp);\n var isWhiteSpace = function (chr) {\n return chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n var isContent = function (chr) {\n return !isWhiteSpace(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;\n if (container === rng.endContainer) {\n if (isInlineBlock(container.childNodes[offset])) {\n return;\n }\n }\n if (isElement$5(container)) {\n var nodes = container.childNodes;\n var walker = void 0;\n if (offset < nodes.length) {\n container = nodes[offset];\n walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n } else {\n container = nodes[nodes.length - 1];\n walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n walker.next(true);\n }\n for (var node = walker.current(); node; node = walker.next()) {\n if (isText$7(node) && !isWhiteSpaceNode$1(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 (isElement$5(node) || !isWhiteSpaceNode$1(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$1 = function (node, allowSpaces) {\n if (allowSpaces === void 0) {\n allowSpaces = false;\n }\n if (isNonNullable(node) && isText$7(node)) {\n var data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n return isWhitespaceText(data);\n } else {\n return false;\n }\n };\n var isEmptyTextNode$1 = function (node) {\n return isNonNullable(node) && isText$7(node) && node.length === 0;\n };\n var replaceVars = function (value, vars) {\n if (isFunction(value)) {\n value = value(vars);\n } else if (isNonNullable(vars)) {\n value = value.replace(/%(\\w+)/g, function (str, name) {\n return vars[name] || str;\n });\n }\n return value;\n };\n var isEq$5 = 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$2 = 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$9(format, key).exists(function (field) {\n var fieldValues = isArray$1(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$3(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$1(filteredFmt1, filteredFmt2);\n });\n });\n };\n var isBlockFormat = function (format) {\n return hasNonNullableKey(format, 'block');\n };\n var isSelectorFormat = function (format) {\n return hasNonNullableKey(format, 'selector');\n };\n var isInlineFormat = function (format) {\n return hasNonNullableKey(format, 'inline');\n };\n var isMixedFormat = function (format) {\n return isSelectorFormat(format) && isInlineFormat(format) && is$1(get$9(format, 'mixed'), true);\n };\n var shouldExpandToSelector = function (format) {\n return isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n };\n\n var isBookmarkNode = isBookmarkNode$1;\n var getParents$1 = getParents$2;\n var isWhiteSpaceNode = isWhiteSpaceNode$1;\n var isTextBlock = isTextBlock$1;\n var isBogusBr = function (node) {\n return isBr$5(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n var findParentContentEditable = function (dom, node) {\n var parent = node;\n while (parent) {\n if (isElement$5(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(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 Optional.from(walker(container, offset, function (text, textOffset) {\n if (isBookmarkNode(text.parentNode)) {\n return -1;\n } else {\n lastTextNode = text;\n return pred(start, text, textOffset);\n }\n }, rootNode));\n };\n var spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(function (result) {\n return includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result);\n }).orThunk(function () {\n return lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none();\n });\n };\n var findSelectorEndPoint = function (dom, formatList, rng, container, siblingName) {\n if (isText$7(container) && isEmpty$3(container.data) && container[siblingName]) {\n container = container[siblingName];\n }\n var parents = getParents$1(dom, container);\n for (var i = 0; i < parents.length; i++) {\n for (var y = 0; y < formatList.length; y++) {\n var curFormat = formatList[y];\n if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (isSelectorFormat(curFormat) && dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n var findBlockEndPoint = function (editor, formatList, container, siblingName) {\n var node = container;\n var dom = editor.dom;\n var root = dom.getRoot();\n var format = formatList[0];\n if (isBlockFormat(format) && !format.wrapper) {\n node = dom.getParent(container, format.block, root);\n }\n if (!node) {\n var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n node = dom.getParent(isText$7(container) ? container.parentNode : container, function (node) {\n return node !== root && isTextBlock(editor, node);\n }, scopeRoot);\n }\n if (node && isBlockFormat(format) && format.wrapper) {\n node = getParents$1(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (isEq$5(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n var isAtBlockBoundary$1 = function (dom, root, container, siblingName) {\n var parent = container.parentNode;\n if (isNonNullable(container[siblingName])) {\n return false;\n } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) {\n return true;\n } else {\n return isAtBlockBoundary$1(dom, root, parent, siblingName);\n }\n };\n var findParentContainer = function (dom, formatList, container, offset, start) {\n var parent = container;\n var siblingName = start ? 'previousSibling' : 'nextSibling';\n var root = dom.getRoot();\n if (isText$7(container) && !isWhiteSpaceNode(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (true) {\n if (!formatList[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (var sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n var allowSpaces = isText$7(sibling) && !isAtBlockBoundary$1(dom, root, sibling, siblingName);\n if (!isBookmarkNode(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode(sibling, allowSpaces)) {\n return parent;\n }\n }\n if (parent === root || parent.parentNode === root) {\n container = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return container;\n };\n var isSelfOrParentBookmark = function (container) {\n return isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n };\n var expandRng = function (editor, rng, formatList, 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 var format = formatList[0];\n if (isElement$5(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode$1(startContainer, startOffset);\n if (isText$7(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$5(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$7(endContainer)) {\n endOffset = endContainer.nodeValue.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isSelfOrParentBookmark(startContainer)) {\n startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (isText$7(startContainer)) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isSelfOrParentBookmark(endContainer)) {\n endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (isText$7(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 (isInlineFormat(format) || format.block_expand) {\n if (!isInlineFormat(format) || (!isText$7(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!isInlineFormat(format) || (!isText$7(endContainer) || endOffset === endContainer.nodeValue.length)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n if (shouldExpandToSelector(format)) {\n startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n }\n if (isBlockFormat(format) || isSelectorFormat(format)) {\n startContainer = findBlockEndPoint(editor, formatList, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(editor, formatList, endContainer, 'nextSibling');\n if (isBlockFormat(format)) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n }\n if (isElement$5(startContainer)) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$5(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 walk$2 = function (dom, rng, callback) {\n var startOffset = rng.startOffset;\n var startContainer = getNode$1(rng.startContainer, startOffset);\n var endOffset = rng.endOffset;\n var endContainer = getNode$1(rng.endContainer, endOffset - 1);\n var exclude = function (nodes) {\n var firstNode = nodes[0];\n if (isText$7(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n nodes.splice(0, 1);\n }\n var lastNode = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$7(lastNode)) {\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 return dom.getParent(node, function (node) {\n return node.parentNode === root;\n }, root);\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 === endContainer) {\n return callback(exclude([startContainer]));\n }\n var ancestor = dom.findCommonAncestor(startContainer, endContainer);\n if (dom.isChildOf(startContainer, endContainer)) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (dom.isChildOf(endContainer, startContainer)) {\n return walkBoundary(endContainer, ancestor);\n }\n var startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n var endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n var siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n\n var getRanges = function (selection) {\n var ranges = [];\n if (selection) {\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n var getSelectedNodes = function (ranges) {\n return bind(ranges, function (range) {\n var node = getSelectedNode(range);\n return node ? [SugarElement.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter$4(getSelectedNodes(ranges), isTableCell$4);\n };\n var getCellsFromElement = function (elm) {\n return descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n };\n var getCellsFromElementOrRanges = function (ranges, element) {\n var selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(getRanges(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n };\n var getClosestTable = function (cell, isRoot) {\n return ancestor$2(cell, 'table', isRoot);\n };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (isText$7(sc)) {\n return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n } else {\n return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n }\n };\n var getEndNode = function (rng) {\n var ec = rng.endContainer, eo = rng.endOffset;\n if (isText$7(ec)) {\n return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n } else {\n return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n }\n };\n var getFirstChildren = function (node) {\n return firstChild(node).fold(constant([node]), function (child) {\n return [node].concat(getFirstChildren(child));\n });\n };\n var getLastChildren$1 = 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$1(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren$1(child));\n }\n });\n };\n var hasAllContentsSelected = function (elm, rng) {\n return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n var start = find$3(getFirstChildren(elm), curry(eq, startNode));\n var end = find$3(getLastChildren$1(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n var moveEndPoint = function (dom, rng, node, start) {\n var root = node, walker = new DomTreeWalker(node, root);\n var moveCaretBeforeOnEnterElementsMap = filter$3(dom.schema.getMoveCaretBeforeOnEnterElements(), function (_, name) {\n return !contains$3([\n 'td',\n 'th',\n 'table'\n ], name.toLowerCase());\n });\n do {\n if (isText$7(node) && Tools.trim(node.nodeValue).length !== 0) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, node.nodeValue.length);\n }\n return;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName]) {\n if (start) {\n rng.setStartBefore(node);\n } else {\n if (node.nodeName === 'BR') {\n rng.setEndBefore(node);\n } else {\n rng.setEndAfter(node);\n }\n }\n return;\n }\n } while (node = start ? walker.next() : walker.prev());\n if (root.nodeName === 'BODY') {\n if (start) {\n rng.setStart(root, 0);\n } else {\n rng.setEnd(root, root.childNodes.length);\n }\n }\n };\n var hasAnyRanges = function (editor) {\n var sel = editor.selection.getSel();\n return sel && sel.rangeCount > 0;\n };\n var runOnRanges = function (editor, executor) {\n var fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each$k(fakeSelectionNodes, function (elem) {\n var node = elem.dom;\n var fakeNodeRng = editor.dom.createRng();\n fakeNodeRng.setStartBefore(node);\n fakeNodeRng.setEndAfter(node);\n executor(fakeNodeRng, true);\n });\n } else {\n executor(editor.selection.getRng(), false);\n }\n };\n var preserve = function (selection, fillBookmark, executor) {\n var bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n var NodeValue = function (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api$1 = NodeValue(isText$8, 'text');\n var get$2 = function (element) {\n return api$1.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText$8(elem) && get$2(elem) === ZWSP$1;\n };\n var context = function (editor, elem, wrapName, nodeName) {\n return parent(elem).fold(function () {\n return 'skipping';\n }, function (parent) {\n if (nodeName === 'br' || isZeroWidth(elem)) {\n return 'valid';\n } else if (isAnnotation(elem)) {\n return 'existing';\n } else if (isCaretNode(elem.dom)) {\n return 'caret';\n } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n };\n\n var applyWordGrab = function (editor, rng) {\n var r = expandRng(editor, rng, [{ inline: 'span' }]);\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\n var master = SugarElement.fromTag('span', eDoc);\n add$1(master, annotation());\n set$1(master, '' + dataAnnotationId(), uid);\n set$1(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$1(master, attributes);\n add(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 = value();\n var finishWrapper = function () {\n wrapper.clear();\n };\n var getOrOpenWrapper = function () {\n return wrapper.get().getOrThunk(function () {\n var nu = shallow(master);\n newWrappers.push(nu);\n wrapper.set(nu);\n return nu;\n });\n };\n var processElements = function (elems) {\n each$k(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$3(elem, w);\n break;\n }\n }\n };\n var processNodes = function (nodes) {\n var elems = map$3(nodes, SugarElement.fromDom);\n processElements(elems);\n };\n walk$2(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(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$7();\n setup$m(editor, registry);\n var changes = setup$n(editor);\n return {\n register: function (name, settings) {\n registry.register(name, settings);\n },\n annotate: function (name, data) {\n registry.lookup(name).each(function (settings) {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: function (name, callback) {\n changes.addListener(name, callback);\n },\n remove: function (name) {\n identify(editor, Optional.some(name)).each(function (_a) {\n var elements = _a.elements;\n each$k(elements, unwrap);\n });\n },\n getAll: function (name) {\n var directory = findAll(editor, name);\n return map$2(directory, function (elems) {\n return map$3(elems, function (elem) {\n return elem.dom;\n });\n });\n }\n };\n };\n\n var BookmarkManager = function (selection) {\n return {\n getBookmark: curry(getBookmark$1, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n };\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n var getContentEditableRoot$1 = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue$4(node) || isContentEditableFalse$b(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isXYWithinRange = function (clientX, clientY, range) {\n if (range.collapsed) {\n return false;\n }\n if (Env.browser.isIE() && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n var elm = range.startContainer.childNodes[range.startOffset];\n if (isElement$5(elm)) {\n return exists(elm.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n }\n }\n return exists(range.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n };\n\n var firePreProcess = function (editor, args) {\n return editor.fire('PreProcess', args);\n };\n var firePostProcess = function (editor, args) {\n return editor.fire('PostProcess', args);\n };\n var fireRemove = function (editor) {\n return editor.fire('remove');\n };\n var fireDetach = function (editor) {\n return editor.fire('detach');\n };\n var fireSwitchMode = function (editor, mode) {\n return editor.fire('SwitchMode', { mode: mode });\n };\n var fireObjectResizeStart = function (editor, target, width, height, origin) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var fireObjectResized = function (editor, target, width, height, origin) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var firePreInit = function (editor) {\n return editor.fire('PreInit');\n };\n var firePostRender = function (editor) {\n return editor.fire('PostRender');\n };\n var fireInit = function (editor) {\n return editor.fire('Init');\n };\n var firePlaceholderToggle = function (editor, state) {\n return editor.fire('PlaceholderToggle', { state: state });\n };\n var fireError = function (editor, errorType, error) {\n return editor.fire(errorType, error);\n };\n var fireFormatApply = function (editor, format, node, vars) {\n return editor.fire('FormatApply', {\n format: format,\n node: node,\n vars: vars\n });\n };\n var fireFormatRemove = function (editor, format, node, vars) {\n return editor.fire('FormatRemove', {\n format: format,\n node: node,\n vars: vars\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 PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n modifierPressed: function (e) {\n return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n },\n metaKeyPressed: function (e) {\n return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n var isContentEditableFalse$5 = isContentEditableFalse$b;\n var ControlSelection = function (selection, editor) {\n var elementSelectionAttr = 'data-mce-selected';\n var dom = editor.dom, each = Tools.each;\n var selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n var width, height;\n var editableDoc = editor.getDoc(), rootDocument = document;\n var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n var startScrollWidth, startScrollHeight;\n var resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n var isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isMedia = function (elm) {\n return isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n if (evt.type === 'longpress' || evt.type.indexOf('touch') === 0) {\n var touch = evt.touches[0];\n return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n }\n };\n var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTargets = function (elm) {\n if (dom.is(elm, 'figure.image')) {\n return [elm.querySelector('img')];\n } else if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return [\n elm,\n elm.firstElementChild\n ];\n } else {\n return [elm];\n }\n };\n var isResizable = function (elm) {\n var selector = getObjectResizing(editor);\n if (!selector) {\n return false;\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n if (dom.hasClass(elm, 'mce-preview-object')) {\n return is$2(SugarElement.fromDom(elm.firstElementChild), selector);\n } else {\n return is$2(SugarElement.fromDom(elm), selector);\n }\n };\n var createGhostElement = function (elm) {\n if (isMedia(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else {\n return elm.cloneNode(true);\n }\n };\n var setSizeProp = function (element, name, value) {\n if (isNonNullable(value)) {\n var targets = getResizeTargets(element);\n each$k(targets, function (target) {\n if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n dom.setStyle(target, name, value);\n } else {\n dom.setAttrib(target, name, '' + value);\n }\n });\n }\n };\n var setGhostElmSize = function (ghostElm, width, height) {\n setSizeProp(ghostElm, 'width', width);\n setSizeProp(ghostElm, 'height', height);\n };\n var resizeGhostElement = function (e) {\n var deltaX, deltaY, proportional;\n var resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if ((isImage(selectedElm) || isMedia(selectedElm)) && getResizeImgProportional(editor) !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e);\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round(width * ratio);\n width = round(height / ratio);\n } else {\n width = round(height / ratio);\n height = round(width * ratio);\n }\n }\n setGhostElmSize(selectedElmGhost, width, height);\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n resizeStarted = true;\n }\n };\n var endGhostResize = function () {\n var wasResizeStarted = resizeStarted;\n resizeStarted = false;\n if (wasResizeStarted) {\n setSizeProp(selectedElm, 'width', width);\n setSizeProp(selectedElm, 'height', height);\n }\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n dom.remove(resizeBackdrop);\n showResizeRect(selectedElm);\n if (wasResizeStarted) {\n fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n }\n editor.nodeChanged();\n };\n var showResizeRect = function (targetElm) {\n unbindResizeHandleEvents();\n var position = dom.getPos(targetElm, rootElement);\n var selectedElmX = position.x;\n var selectedElmY = position.y;\n var rect = targetElm.getBoundingClientRect();\n var targetWidth = rect.width || rect.right - rect.left;\n var targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n var e = editor.fire('ObjectSelected', { target: targetElm });\n var selectedValue = dom.getAttrib(selectedElm, elementSelectionAttr, '1');\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n var target = getResizeTargets(selectedElm)[0];\n startX = e.screenX;\n startY = e.screenY;\n startW = target.clientWidth;\n startH = target.clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n selectedHandle.name = name;\n selectedHandle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n resizeBackdrop = dom.add(rootElement, 'div', { class: 'mce-resize-backdrop' });\n dom.setStyles(resizeBackdrop, {\n position: 'fixed',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%'\n });\n selectedElmGhost = createGhostElement(selectedElm);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = 'false';\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n selectedElmGhost.removeAttribute(elementSelectionAttr);\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.remove(handleElm);\n }\n handleElm = dom.add(rootElement, 'div', {\n 'id': 'mceResizeHandle' + name,\n 'data-mce-bogus': 'all',\n 'class': 'mce-resizehandle',\n 'unselectable': true,\n 'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n });\n if (Env.ie === 11) {\n handleElm.contentEditable = false;\n }\n dom.bind(handleElm, 'mousedown', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n startDrag(e);\n });\n handle.elm = handleElm;\n dom.setStyles(handleElm, {\n left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n });\n });\n } else {\n hideResizeRect();\n }\n if (!dom.getAttrib(selectedElm, elementSelectionAttr)) {\n selectedElm.setAttribute(elementSelectionAttr, selectedValue);\n }\n };\n var hideResizeRect = function () {\n unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute(elementSelectionAttr);\n }\n each$j(resizeHandles, function (value, name) {\n var handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute(elementSelectionAttr);\n });\n controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n controlElm = dom.$(controlElm).closest('table,img,figure.image,hr,video,span.mce-preview-object')[0];\n if (isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n showResizeRect(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n var isWithinContentEditableFalse = function (elm) {\n return isContentEditableFalse$5(getContentEditableRoot$1(editor.getBody(), elm));\n };\n var unbindResizeHandleEvents = function () {\n each$j(resizeHandles, function (handle) {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n var disableGeckoResize = function () {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n } catch (ex) {\n }\n };\n editor.on('init', function () {\n disableGeckoResize();\n if (Env.browser.isIE() || Env.browser.isEdge()) {\n editor.on('mousedown click', function (e) {\n var target = e.target, nodeName = target.nodeName;\n if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n if (e.button !== 2) {\n editor.selection.select(target, nodeName === 'TABLE');\n }\n if (e.type === 'mousedown') {\n editor.nodeChanged();\n }\n }\n });\n var handleMSControlSelect_1 = function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n return editor.selection.select(node);\n });\n };\n if (isWithinContentEditableFalse(e.target) || isMedia$2(e.target)) {\n e.preventDefault();\n delayedSelect(e.target);\n return;\n }\n if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n e.preventDefault();\n if (e.target.tagName === 'IMG') {\n delayedSelect(e.target);\n }\n }\n };\n dom.bind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n editor.on('remove', function () {\n return dom.unbind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n });\n }\n var throttledUpdateResizeRect = Delay.throttle(function (e) {\n if (!editor.composing) {\n updateResizeRect(e);\n }\n });\n editor.on('nodechange ResizeEditor ResizeWindow ResizeContent drop FullscreenStateChanged', throttledUpdateResizeRect);\n editor.on('keyup compositionend', function (e) {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n throttledUpdateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n var destroy = function () {\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\n };\n };\n\n var hasCeProperty = function (node) {\n return isContentEditableTrue$4(node) || isContentEditableFalse$b(node);\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 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$b(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\n };\n var fromPoint = 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 (pointDoc.caretRangeFromPoint) {\n rng = pointDoc.caretRangeFromPoint(clientX, clientY);\n } else if (pointDoc.body.createTextRange) {\n rng = pointDoc.body.createTextRange();\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n } catch (ex) {\n rng = findClosestIeRange(clientX, clientY, doc);\n }\n return moveOutOfContentEditableFalse(rng, doc.body);\n }\n return rng;\n };\n\n var isEq$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 = 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$1 = function (node, rootNode, predicate) {\n return findParent(node, rootNode, predicate) !== null;\n };\n var hasParentWithName = function (node, rootNode, name) {\n return hasParent$1(node, rootNode, function (node) {\n return node.nodeName === name;\n });\n };\n var isTable = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$2 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var isCeFalseCaretContainer = function (node, rootNode) {\n return isCaretContainer$2(node) && hasParent$1(node, rootNode, isCaretNode) === false;\n };\n var hasBrBeforeAfter = function (dom, node, left) {\n var walker = new DomTreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (isBr$5(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$b(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$5(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Optional.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n }\n var walker = new DomTreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Optional.none();\n }\n if (isText$7(node) && node.nodeValue.length > 0) {\n if (hasParentWithName(node, body, 'A') === false) {\n return Optional.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n }\n return Optional.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Optional.none();\n }\n lastInlineElement = node;\n }\n if (collapsed && lastInlineElement) {\n return Optional.some(CaretPosition(lastInlineElement, 0));\n }\n return Optional.none();\n };\n var normalizeEndPoint = function (dom, collapsed, start, rng) {\n var container, offset;\n var body = dom.getRoot();\n var node;\n var directionLeft, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n var isAfterNode = isElement$5(container) && offset === container.childNodes.length;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isElement$5(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (isDocument$1(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer$2(node)) {\n return Optional.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable(node)) {\n return Optional.none();\n }\n }\n }\n if (container.hasChildNodes()) {\n offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n container = container.childNodes[offset];\n offset = isText$7(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable(container)) {\n return Optional.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (container.hasChildNodes() && isTable(container) === false) {\n node = container;\n var walker = new DomTreeWalker(container, body);\n do {\n if (isContentEditableFalse$b(node) || isCaretContainer$2(node)) {\n normalized = false;\n break;\n }\n if (isText$7(node) && node.nodeValue.length > 0) {\n offset = directionLeft ? 0 : node.nodeValue.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$2(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (isText$7(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$5(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr$5(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$7(container) && offset === container.nodeValue.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n };\n var normalize$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) ? Optional.none() : Optional.some(normRng);\n };\n\n var splitText = function (node, offset) {\n return node.splitText(offset);\n };\n var split = function (rng) {\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$7(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$7(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$7(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n }\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n\n var RangeUtils = function (dom) {\n var walk = function (rng, callback) {\n return walk$2(dom, rng, callback);\n };\n var split$1 = split;\n var normalize = function (rng) {\n return normalize$2(dom, rng).fold(never, function (normalizedRng) {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n return {\n walk: walk,\n split: split$1,\n normalize: normalize\n };\n };\n RangeUtils.compareRanges = isEq$4;\n RangeUtils.getCaretRangeFromPoint = fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode$1;\n\n var Dimension = function (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$5(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$5(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n };\n\n var api = Dimension('height', function (element) {\n var dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$1 = function (element) {\n return api.get(element);\n };\n\n var walkUp = function (navigation, doc) {\n var frame = navigation.view(doc);\n return frame.fold(constant([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n var view = function (doc) {\n var _a;\n var element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n var owner = function (element) {\n return documentOrOwner(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner\n });\n\n var find$1 = function (element) {\n var doc = SugarElement.fromDom(document);\n var scroll = get$8(doc);\n var frames = pathTo(element, Navigation);\n var offset = viewport(element);\n var r = foldr(frames, function (b, a) {\n var loc = viewport(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n };\n\n var excludeFromDescend = function (element) {\n return name(element) === 'textarea';\n };\n var fireScrollIntoViewEvent = function (editor, data) {\n var scrollEvent = editor.fire('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n var fireAfterScrollIntoViewEvent = function (editor, data) {\n editor.fire('AfterScrollIntoView', data);\n };\n var descend = function (element, offset) {\n var children$1 = children(element);\n if (children$1.length === 0 || excludeFromDescend(element)) {\n return {\n element: element,\n offset: offset\n };\n } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) {\n return {\n element: children$1[offset],\n offset: 0\n };\n } else {\n var last = children$1[children$1.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element: element,\n offset: offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText$8(last)) {\n return {\n element: last,\n offset: get$2(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$1(element);\n return {\n element: element,\n bottom: pos.top + height,\n height: height,\n pos: pos,\n cleanup: cleanupFun\n };\n };\n var createMarker = function (element, offset) {\n var startPoint = descend(element, offset);\n var span = SugarElement.fromHtml('' + ZWSP$1 + '');\n before$4(startPoint.element, span);\n return markerInfo(span, function () {\n return remove$7(span);\n });\n };\n var elementMarker = function (element) {\n return markerInfo(SugarElement.fromDom(element), noop);\n };\n var withMarker = function (editor, f, rng, alignToTop) {\n preserveWith(editor, function (_s, _e) {\n return applyWithMarker(editor, f, rng, alignToTop);\n }, rng);\n };\n var withScrollEvents = function (editor, doc, f, marker, alignToTop) {\n var data = {\n elm: marker.element.dom,\n alignToTop: alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n var scrollTop = get$8(doc).top;\n f(doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n var applyWithMarker = function (editor, f, rng, alignToTop) {\n var body = SugarElement.fromDom(editor.getBody());\n var doc = SugarElement.fromDom(editor.getDoc());\n reflow(body);\n var marker = createMarker(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n var withElement = function (editor, element, f, alignToTop) {\n var doc = SugarElement.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n var preserveWith = function (editor, f, rng) {\n var startElement = rng.startContainer;\n var startOffset = rng.startOffset;\n var endElement = rng.endContainer;\n var endOffset = rng.endOffset;\n f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n var newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n var scrollToMarker = function (marker, viewHeight, alignToTop, doc) {\n var pos = marker.pos;\n if (alignToTop) {\n to(pos.left, pos.top, doc);\n } else {\n var y = pos.top - viewHeight + marker.height;\n to(pos.left, y, doc);\n }\n };\n var intoWindowIfNeeded = function (doc, scrollTop, viewHeight, marker, alignToTop) {\n var viewportBottom = viewHeight + scrollTop;\n var markerTop = marker.pos.top;\n var markerBottom = marker.bottom;\n var largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n var align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n scrollToMarker(marker, viewHeight, align, doc);\n } else if (markerBottom > viewportBottom && !largerThanViewport) {\n scrollToMarker(marker, viewHeight, alignToTop === true, doc);\n }\n };\n var intoWindow = function (doc, scrollTop, marker, alignToTop) {\n var viewHeight = doc.dom.defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n };\n var intoFrame = function (doc, scrollTop, marker, alignToTop) {\n var frameViewHeight = doc.dom.defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n var op = find$1(marker.element);\n var viewportBounds = getBounds(window);\n if (op.top < viewportBounds.y) {\n intoView(marker.element, alignToTop !== false);\n } else if (op.top > viewportBounds.bottom) {\n intoView(marker.element, alignToTop === true);\n }\n };\n var rangeIntoWindow = function (editor, rng, alignToTop) {\n return withMarker(editor, intoWindow, rng, alignToTop);\n };\n var elementIntoWindow = function (editor, element, alignToTop) {\n return withElement(editor, element, intoWindow, alignToTop);\n };\n var rangeIntoFrame = function (editor, rng, alignToTop) {\n return withMarker(editor, intoFrame, rng, alignToTop);\n };\n var elementIntoFrame = function (editor, element, alignToTop) {\n return withElement(editor, element, intoFrame, alignToTop);\n };\n var scrollElementIntoView = function (editor, element, alignToTop) {\n var scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n var scrollRangeIntoView = function (editor, rng, alignToTop) {\n var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n var getDocument = function () {\n return SugarElement.fromDom(document);\n };\n\n var focus$1 = function (element) {\n return element.dom.focus();\n };\n var hasFocus$1 = function (element) {\n var root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom.contains(e.dom);\n });\n };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$5 };\n\n var adt$1 = 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$2 = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$1 = adt$1.before;\n var on = adt$1.on;\n var after$1 = adt$1.after;\n var Situ = {\n before: before$1,\n on: on,\n after: after$1,\n cata: cata,\n getStart: getStart$2\n };\n\n var adt = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt.domRange;\n var relative = adt.relative;\n var exact = adt.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var browser$1 = detect().browser;\n var clamp$1 = function (offset, element) {\n var max = isText$8(element) ? get$2(element).length : children(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n var normalizeRng = function (rng) {\n return SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n };\n var isOrContains = function (root, elm) {\n return !isRestrictedNode(elm.dom) && (contains$1(root, elm) || eq(root, elm));\n };\n var isRngInRoot = function (root) {\n return function (rng) {\n return isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n };\n };\n var shouldStore = function (editor) {\n return editor.inline === true || browser$1.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n };\n var readRange = function (win) {\n var selection = win.getSelection();\n var rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n var getBookmark = function (root) {\n var win = defaultView(root);\n return readRange(win.dom).filter(isRngInRoot(root));\n };\n var validate = function (root, bookmark) {\n return Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n };\n var bookmarkToNativeRng = function (bookmark) {\n var rng = document.createRange();\n try {\n rng.setStart(bookmark.start.dom, bookmark.soffset);\n rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n return Optional.some(rng);\n } catch (_) {\n return Optional.none();\n }\n };\n var store = function (editor) {\n var newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var storeNative = function (editor, rng) {\n var root = SugarElement.fromDom(editor.getBody());\n var range = shouldStore(editor) ? Optional.from(rng) : Optional.none();\n var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var getRng = function (editor) {\n var bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n return bookmark.bind(function (x) {\n return validate(SugarElement.fromDom(editor.getBody()), x);\n }).bind(bookmarkToNativeRng);\n };\n var restore = function (editor) {\n getRng(editor).each(function (rng) {\n return editor.selection.setRng(rng);\n });\n };\n\n var isEditorUIElement$1 = function (elm) {\n var className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n };\n var FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n var isManualNodeChange = function (e) {\n return e.type === 'nodechange' && e.selectionChange;\n };\n var registerPageMouseUp = function (editor, throttledStore) {\n var mouseUpPage = function () {\n throttledStore.throttle();\n };\n DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n editor.on('remove', function () {\n DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n });\n };\n var registerFocusOut = function (editor) {\n editor.on('focusout', function () {\n store(editor);\n });\n };\n var registerMouseUp = function (editor, throttledStore) {\n editor.on('mouseup touchend', function (_e) {\n throttledStore.throttle();\n });\n };\n var registerEditorEvents = function (editor, throttledStore) {\n var browser = detect().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$3 = 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$8 = DOMUtils.DOM;\n var isEditorUIElement = 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$8.getParent(elm, function (elm) {\n return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n var getActiveElement = function (editor) {\n try {\n var root = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active(root).fold(function () {\n return document.body;\n }, function (x) {\n return x.dom;\n });\n } catch (ex) {\n return document.body;\n }\n };\n var registerEvents$1 = function (editorManager, e) {\n var editor = e.editor;\n register$3(editor);\n editor.on('focusin', function () {\n var focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== editor) {\n if (focusedEditor) {\n focusedEditor.fire('blur', { focusedEditor: editor });\n }\n editorManager.setActive(editor);\n editorManager.focusedEditor = editor;\n editor.fire('focus', { blurredEditor: focusedEditor });\n editor.focus(true);\n }\n });\n editor.on('focusout', function () {\n Delay.setEditorTimeout(editor, function () {\n var focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n editor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = function (e) {\n var activeEditor = editorManager.activeEditor;\n if (activeEditor) {\n getOriginalEventTarget(e).each(function (target) {\n if (target.ownerDocument === document) {\n if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n activeEditor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n });\n }\n };\n DOM$8.bind(document, 'focusin', documentFocusInHandler);\n }\n };\n var unregisterDocumentEvents = function (editorManager, e) {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor) {\n DOM$8.unbind(document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n var setup$l = function (editorManager) {\n editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n\n var getContentEditableHost = function (editor, node) {\n return editor.dom.getParent(node, function (node) {\n return editor.dom.getContentEditable(node) === 'true';\n });\n };\n var getCollapsedNode = function (rng) {\n return rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n };\n var getFocusInElement = function (root, rng) {\n return getCollapsedNode(rng).bind(function (node) {\n if (isTableSection(node)) {\n return Optional.some(node);\n } else if (contains$1(root, node) === false) {\n return Optional.some(root);\n } else {\n return Optional.none();\n }\n });\n };\n var normalizeSelection$1 = function (editor, rng) {\n getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(function (elm) {\n return firstPositionIn(elm.dom);\n }).fold(function () {\n editor.selection.normalize();\n return;\n }, function (caretPos) {\n return editor.selection.setRng(caretPos.toRange());\n });\n };\n var focusBody = function (body) {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n var hasElementFocus = function (elm) {\n return hasFocus$1(elm) || search(elm).isSome();\n };\n var hasIframeFocus = function (editor) {\n return editor.iframeElement && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n };\n var hasInlineFocus = function (editor) {\n var rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n var hasUiFocus = function (editor) {\n var dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active(dos).filter(function (elem) {\n return !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom);\n }).isSome();\n };\n var hasFocus = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var hasEditorOrUiFocus = function (editor) {\n return hasFocus(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(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$1(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$1(editor, rng);\n }\n activateEditor(editor);\n };\n var activateEditor = function (editor) {\n return editor.editorManager.setActive(editor);\n };\n var focus = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n if (skipFocus) {\n activateEditor(editor);\n } else {\n focusEditor(editor);\n }\n };\n\n var getEndpointElement = function (root, rng, start, real, resolve) {\n var container = start ? rng.startContainer : rng.endContainer;\n var offset = start ? rng.startOffset : rng.endOffset;\n return Optional.from(container).map(SugarElement.fromDom).map(function (elm) {\n return !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm;\n }).bind(function (elm) {\n return isElement$6(elm) ? Optional.some(elm) : parent(elm).filter(isElement$6);\n }).map(function (elm) {\n return elm.dom;\n }).getOr(root);\n };\n var getStart = 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$7(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n var getNode = 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(root, rng, rng.collapsed), dom.isBlock);\n endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (startElm && startElm !== root) {\n selectedBlocks.push(startElm);\n }\n if (startElm && endElm && startElm !== endElm) {\n node = startElm;\n var walker = new DomTreeWalker(startElm, root);\n while ((node = walker.next()) && node !== endElm) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (endElm && startElm !== endElm && endElm !== root) {\n selectedBlocks.push(endElm);\n }\n return selectedBlocks;\n };\n var select = function (dom, node, content) {\n return Optional.from(node).map(function (node) {\n var idx = dom.nodeIndex(node);\n var rng = dom.createRng();\n rng.setStart(node.parentNode, idx);\n rng.setEnd(node.parentNode, idx + 1);\n if (content) {\n moveEndPoint(dom, rng, node, true);\n moveEndPoint(dom, rng, node, false);\n }\n return rng;\n });\n };\n\n var processRanges = function (editor, ranges) {\n return map$3(ranges, function (range) {\n var evt = editor.fire('GetSelectionRange', { range: range });\n return evt.range !== range ? evt.range : range;\n });\n };\n\n var typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n var walk$1 = 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 = function (node) {\n if (!isWhitespaceText(node.value)) {\n return false;\n }\n var parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(node.value)) {\n return false;\n }\n return true;\n };\n var isNonEmptyElement = function (node) {\n var isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n };\n var AstNode = function () {\n function AstNode(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n AstNode.create = function (name, attrs) {\n var node = new AstNode(name, typeLookup[name] || 1);\n if (attrs) {\n each$j(attrs, function (value, attrName) {\n node.attr(attrName, value);\n });\n }\n return node;\n };\n AstNode.prototype.replace = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n };\n AstNode.prototype.attr = function (name, value) {\n var self = this;\n var attrs;\n if (typeof name !== 'string') {\n if (name !== undefined && name !== null) {\n each$j(name, function (value, key) {\n self.attr(key, value);\n });\n }\n return self;\n }\n if (attrs = self.attributes) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n var i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n var i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name: name,\n value: value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n };\n AstNode.prototype.clone = function () {\n var self = this;\n var clone = new AstNode(self.name, self.type);\n var selfAttrs;\n if (selfAttrs = self.attributes) {\n var cloneAttrs = [];\n cloneAttrs.map = {};\n for (var i = 0, l = selfAttrs.length; i < l; i++) {\n var selfAttr = selfAttrs[i];\n if (selfAttr.name !== 'id') {\n cloneAttrs[cloneAttrs.length] = {\n name: selfAttr.name,\n value: selfAttr.value\n };\n cloneAttrs.map[selfAttr.name] = selfAttr.value;\n }\n }\n clone.attributes = cloneAttrs;\n }\n clone.value = self.value;\n clone.shortEnded = self.shortEnded;\n return clone;\n };\n AstNode.prototype.wrap = function (wrapper) {\n var self = this;\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n return self;\n };\n AstNode.prototype.unwrap = function () {\n var self = this;\n for (var node = self.firstChild; node;) {\n var next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n };\n AstNode.prototype.remove = function () {\n var self = this, parent = self.parent, next = self.next, prev = self.prev;\n if (parent) {\n if (parent.firstChild === self) {\n parent.firstChild = next;\n if (next) {\n next.prev = null;\n }\n } else {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n };\n AstNode.prototype.append = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n var last = self.lastChild;\n if (last) {\n last.next = node;\n node.prev = last;\n self.lastChild = node;\n } else {\n self.lastChild = self.firstChild = node;\n }\n node.parent = self;\n return node;\n };\n AstNode.prototype.insert = function (node, refNode, before) {\n if (node.parent) {\n node.remove();\n }\n var parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else {\n refNode.prev.next = node;\n }\n node.prev = refNode.prev;\n node.next = refNode;\n refNode.prev = node;\n } else {\n if (refNode === parent.lastChild) {\n parent.lastChild = node;\n } else {\n refNode.next.prev = node;\n }\n node.next = refNode.next;\n node.prev = refNode;\n refNode.next = node;\n }\n node.parent = parent;\n return node;\n };\n AstNode.prototype.getAll = function (name) {\n var self = this;\n var collection = [];\n for (var node = self.firstChild; node; node = walk$1(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n };\n AstNode.prototype.children = function () {\n var self = this;\n var collection = [];\n for (var node = self.firstChild; node; node = node.next) {\n collection.push(node);\n }\n return collection;\n };\n AstNode.prototype.empty = function () {\n var self = this;\n if (self.firstChild) {\n var nodes = [];\n for (var node = self.firstChild; node; node = walk$1(node, self)) {\n nodes.push(node);\n }\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n }\n }\n self.firstChild = self.lastChild = null;\n return self;\n };\n AstNode.prototype.isEmpty = function (elements, whitespace, predicate) {\n if (whitespace === void 0) {\n whitespace = {};\n }\n var self = this;\n var node = self.firstChild;\n if (isNonEmptyElement(self)) {\n return false;\n }\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attr('data-mce-bogus')) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !isEmptyTextNode(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$1(node, self));\n }\n return true;\n };\n AstNode.prototype.walk = function (prev) {\n return walk$1(this, null, prev);\n };\n return AstNode;\n }();\n\n var extractBase64DataUris = function (html) {\n var dataImageUri = /data:[^;]+;base64,([a-z0-9\\+\\/=\\s]+)/gi;\n var chunks = [];\n var uris = {};\n var prefix = generate('img');\n var matches;\n var index = 0;\n var count = 0;\n while (matches = dataImageUri.exec(html)) {\n var uri = matches[0];\n var imageId = prefix + '_' + count++;\n uris[imageId] = uri;\n if (index < matches.index) {\n chunks.push(html.substr(index, matches.index - index));\n }\n chunks.push(imageId);\n index = matches.index + uri.length;\n }\n var re = new RegExp(prefix + '_[0-9]+', 'g');\n if (index === 0) {\n return {\n prefix: prefix,\n uris: uris,\n html: html,\n re: re\n };\n } else {\n if (index < html.length) {\n chunks.push(html.substr(index));\n }\n return {\n prefix: prefix,\n uris: uris,\n html: chunks.join(''),\n re: re\n };\n }\n };\n var restoreDataUris = function (html, result) {\n return html.replace(result.re, function (imageId) {\n return get$9(result.uris, imageId).getOr(imageId);\n });\n };\n var parseDataUri$1 = function (uri) {\n var matches = /data:([^;]+);base64,([a-z0-9\\+\\/=\\s]+)/i.exec(uri);\n if (matches) {\n return Optional.some({\n type: matches[1],\n data: decodeURIComponent(matches[2])\n });\n } else {\n return Optional.none();\n }\n };\n\n var safeSvgDataUrlElements = [\n 'img',\n 'video'\n ];\n var filteredClobberElements = Tools.makeMap('button,fieldset,form,iframe,img,image,input,object,output,select,textarea');\n var isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n };\n var blockSvgDataUris = function (allowSvgDataUrls, tagName) {\n var allowed = isNullable(allowSvgDataUrls) ? contains$3(safeSvgDataUrlElements, tagName) : allowSvgDataUrls;\n return !allowed;\n };\n var isInvalidUri = function (settings, uri, tagName) {\n if (settings.allow_html_data_urls) {\n return false;\n } else if (/^data:image\\//i.test(uri)) {\n return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(uri);\n } else {\n return /^data:/i.test(uri);\n }\n };\n var findMatchingEndTagIndex = function (schema, html, startIndex) {\n var startTagRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g;\n var endTagRegExp = /(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n var shortEndedElements = schema.getShortEndedElements();\n var count = 1, index = startIndex;\n while (count !== 0) {\n startTagRegExp.lastIndex = index;\n while (true) {\n var startMatch = startTagRegExp.exec(html);\n if (startMatch === null) {\n return index;\n } else if (startMatch[1] === '!') {\n if (startsWith(startMatch[2], '--')) {\n index = findCommentEndIndex(html, false, startMatch.index + '!--'.length);\n } else {\n index = findCommentEndIndex(html, true, startMatch.index + 1);\n }\n break;\n } else {\n endTagRegExp.lastIndex = startTagRegExp.lastIndex;\n var endMatch = endTagRegExp.exec(html);\n if (isNull(endMatch) || endMatch.index !== startTagRegExp.lastIndex) {\n continue;\n }\n if (startMatch[1] === '/') {\n count -= 1;\n } else if (!has$2(shortEndedElements, startMatch[2])) {\n count += 1;\n }\n index = startTagRegExp.lastIndex + endMatch[0].length;\n break;\n }\n }\n }\n return index;\n };\n var isConditionalComment = function (html, startIndex) {\n return /^\\s*\\[if [\\w\\W]+\\]>.*/.test(html.substr(startIndex));\n };\n var findCommentEndIndex = function (html, isBogus, startIndex) {\n if (startIndex === void 0) {\n startIndex = 0;\n }\n var lcHtml = html.toLowerCase();\n if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n var endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n return lcHtml.indexOf('>', endIfIndex);\n } else {\n if (isBogus) {\n var endIndex = lcHtml.indexOf('>', startIndex);\n return endIndex !== -1 ? endIndex : lcHtml.length;\n } else {\n var endCommentRegexp = /--!?>/g;\n endCommentRegexp.lastIndex = startIndex;\n var match = endCommentRegexp.exec(html);\n return match ? match.index + match[0].length : lcHtml.length;\n }\n }\n };\n var checkBogusAttribute = function (regExp, attrString) {\n var matches = regExp.exec(attrString);\n if (matches) {\n var name_1 = matches[1];\n var value = matches[2];\n return typeof name_1 === 'string' && name_1.toLowerCase() === 'data-mce-bogus' ? value : null;\n } else {\n return null;\n }\n };\n var SaxParser = function (settings, schema) {\n var _a;\n if (schema === void 0) {\n schema = Schema();\n }\n settings = settings || {};\n var doc = (_a = settings.document) !== null && _a !== void 0 ? _a : document;\n var form = doc.createElement('form');\n if (settings.fix_self_closing !== false) {\n settings.fix_self_closing = true;\n }\n var comment = settings.comment ? settings.comment : noop;\n var cdata = settings.cdata ? settings.cdata : noop;\n var text = settings.text ? settings.text : noop;\n var start = settings.start ? settings.start : noop;\n var end = settings.end ? settings.end : noop;\n var pi = settings.pi ? settings.pi : noop;\n var doctype = settings.doctype ? settings.doctype : noop;\n var parseInternal = function (base64Extract, format) {\n if (format === void 0) {\n format = 'html';\n }\n var html = base64Extract.html;\n var matches, index = 0, value, endRegExp;\n var stack = [];\n var attrList, i, textData, name;\n var isInternalElement, isShortEnded;\n var elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\n var attributesRequired, attributesDefault, attributesForced;\n var anyAttributesRequired, attrValue, idCount = 0;\n var decode = Entities.decode;\n var filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n var scriptUriRegExp = /((java|vb)script|mhtml):/i;\n var parsingMode = format === 'html' ? 0 : 1;\n var processEndTag = function (name) {\n var pos, i;\n pos = stack.length;\n while (pos--) {\n if (stack[pos].name === name) {\n break;\n }\n }\n if (pos >= 0) {\n for (i = stack.length - 1; i >= pos; i--) {\n name = stack[i];\n if (name.valid) {\n end(name.name);\n }\n }\n stack.length = pos;\n }\n };\n var processText = function (value, raw) {\n return text(restoreDataUris(value, base64Extract), raw);\n };\n var processComment = function (value) {\n if (value === '') {\n return;\n }\n if (value.charAt(0) === '>') {\n value = ' ' + value;\n }\n if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {\n value = ' ' + value;\n }\n comment(restoreDataUris(value, base64Extract));\n };\n var processAttr = function (value) {\n return restoreDataUris(value, base64Extract);\n };\n var processMalformedComment = function (value, startIndex) {\n var startTag = value || '';\n var isBogus = !startsWith(startTag, '--');\n var endIndex = findCommentEndIndex(html, isBogus, startIndex);\n value = html.substr(startIndex, endIndex - startIndex);\n processComment(isBogus ? startTag + value : value);\n return endIndex + 1;\n };\n var parseAttribute = function (tagName, name, value, val2, val3) {\n var attrRule, i;\n var trimRegExp = /[\\s\\u0000-\\u001F]+/g;\n name = name.toLowerCase();\n value = processAttr(name in fillAttrsMap ? name : decode(value || val2 || val3 || ''));\n if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) {\n attrRule = validAttributesMap[name];\n if (!attrRule && validAttributePatterns) {\n i = validAttributePatterns.length;\n while (i--) {\n attrRule = validAttributePatterns[i];\n if (attrRule.pattern.test(name)) {\n break;\n }\n }\n if (i === -1) {\n attrRule = null;\n }\n }\n if (!attrRule) {\n return;\n }\n if (attrRule.validValues && !(value in attrRule.validValues)) {\n return;\n }\n }\n var isNameOrId = name === 'name' || name === 'id';\n if (isNameOrId && tagName in filteredClobberElements && (value in doc || value in form)) {\n return;\n }\n if (filteredUrlAttrs[name] && !settings.allow_script_urls) {\n var uri = value.replace(trimRegExp, '');\n try {\n uri = decodeURIComponent(uri);\n } catch (ex) {\n uri = unescape(uri);\n }\n if (scriptUriRegExp.test(uri)) {\n return;\n }\n if (isInvalidUri(settings, uri, tagName)) {\n return;\n }\n }\n if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {\n return;\n }\n attrList.map[name] = value;\n attrList.push({\n name: name,\n value: value\n });\n };\n var tokenRegExp = new RegExp('<(?:' + '(?:!--([\\\\w\\\\W]*?)--!?>)|' + '(?:!\\\\[CDATA\\\\[([\\\\w\\\\W]*?)\\\\]\\\\]>)|' + '(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\\\w\\\\W]*?)>)|' + '(?:!(--)?)|' + '(?:\\\\?([^\\\\s\\\\/<>]+) ?([\\\\w\\\\W]*?)[?/]>)|' + '(?:\\\\/([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\\\-_:.]*)(\\\\s(?:[^\\'\">]+(?:\"[^\"]*\"|\\'[^\\']*\\'))*[^\"\\'>]*(?:\"[^\">]*|\\'[^\\'>]*)?|\\\\s*|\\\\/)>)' + ')', 'g');\n var attrRegExp = /([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g;\n var shortEndedElements = schema.getShortEndedElements();\n var selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\n var fillAttrsMap = schema.getBoolAttrs();\n var validate = settings.validate;\n var removeInternalElements = settings.remove_internals;\n var fixSelfClosing = settings.fix_self_closing;\n var specialElements = schema.getSpecialElements();\n var processHtml = html + '>';\n while (matches = tokenRegExp.exec(processHtml)) {\n var matchText = matches[0];\n if (index < matches.index) {\n processText(decode(html.substr(index, matches.index - index)));\n }\n if (value = matches[7]) {\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n processEndTag(value);\n } else if (value = matches[8]) {\n if (matches.index + matchText.length > html.length) {\n processText(decode(html.substr(matches.index)));\n index = matches.index + matchText.length;\n continue;\n }\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n isShortEnded = value in shortEndedElements;\n if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) {\n processEndTag(value);\n }\n var bogusValue = checkBogusAttribute(attrRegExp, matches[9]);\n if (bogusValue !== null) {\n if (bogusValue === 'all') {\n index = findMatchingEndTagIndex(schema, html, tokenRegExp.lastIndex);\n tokenRegExp.lastIndex = index;\n continue;\n }\n isValidElement = false;\n }\n if (!validate || (elementRule = schema.getElementRule(value))) {\n isValidElement = true;\n if (validate) {\n validAttributesMap = elementRule.attributes;\n validAttributePatterns = elementRule.attributePatterns;\n }\n if (attribsValue = matches[9]) {\n isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;\n if (isInternalElement && removeInternalElements) {\n isValidElement = false;\n }\n attrList = [];\n attrList.map = {};\n attribsValue.replace(attrRegExp, function (match, name, val, val2, val3) {\n parseAttribute(value, name, val, val2, val3);\n return '';\n });\n } else {\n attrList = [];\n attrList.map = {};\n }\n if (validate && !isInternalElement) {\n attributesRequired = elementRule.attributesRequired;\n attributesDefault = elementRule.attributesDefault;\n attributesForced = elementRule.attributesForced;\n anyAttributesRequired = elementRule.removeEmptyAttrs;\n if (anyAttributesRequired && !attrList.length) {\n isValidElement = false;\n }\n if (attributesForced) {\n i = attributesForced.length;\n while (i--) {\n attr = attributesForced[i];\n name = attr.name;\n attrValue = attr.value;\n if (attrValue === '{$uid}') {\n attrValue = 'mce_' + idCount++;\n }\n attrList.map[name] = attrValue;\n attrList.push({\n name: name,\n value: attrValue\n });\n }\n }\n if (attributesDefault) {\n i = attributesDefault.length;\n while (i--) {\n attr = attributesDefault[i];\n name = attr.name;\n if (!(name in attrList.map)) {\n attrValue = attr.value;\n if (attrValue === '{$uid}') {\n attrValue = 'mce_' + idCount++;\n }\n attrList.map[name] = attrValue;\n attrList.push({\n name: name,\n value: attrValue\n });\n }\n }\n }\n if (attributesRequired) {\n i = attributesRequired.length;\n while (i--) {\n if (attributesRequired[i] in attrList.map) {\n break;\n }\n }\n if (i === -1) {\n isValidElement = false;\n }\n }\n if (attr = attrList.map['data-mce-bogus']) {\n if (attr === 'all') {\n index = findMatchingEndTagIndex(schema, html, tokenRegExp.lastIndex);\n tokenRegExp.lastIndex = index;\n continue;\n }\n isValidElement = false;\n }\n }\n if (isValidElement) {\n start(value, attrList, isShortEnded);\n }\n } else {\n isValidElement = false;\n }\n if (endRegExp = specialElements[value]) {\n endRegExp.lastIndex = index = matches.index + matchText.length;\n if (matches = endRegExp.exec(html)) {\n if (isValidElement) {\n textData = html.substr(index, matches.index - index);\n }\n index = matches.index + matches[0].length;\n } else {\n textData = html.substr(index);\n index = html.length;\n }\n if (isValidElement) {\n if (textData.length > 0) {\n processText(textData, true);\n }\n end(value);\n }\n tokenRegExp.lastIndex = index;\n continue;\n }\n if (!isShortEnded) {\n if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {\n stack.push({\n name: value,\n valid: isValidElement\n });\n } else if (isValidElement) {\n end(value);\n }\n }\n } else if (value = matches[1]) {\n processComment(value);\n } else if (value = matches[2]) {\n var isValidCdataSection = parsingMode === 1 || settings.preserve_cdata || stack.length > 0 && schema.isValidChild(stack[stack.length - 1].name, '#cdata');\n if (isValidCdataSection) {\n cdata(value);\n } else {\n index = processMalformedComment('', matches.index + 2);\n tokenRegExp.lastIndex = index;\n continue;\n }\n } else if (value = matches[3]) {\n doctype(value);\n } else if ((value = matches[4]) || matchText === '= 0; i--) {\n value = stack[i];\n if (value.valid) {\n end(value.name);\n }\n }\n };\n var parse = function (html, format) {\n if (format === void 0) {\n format = 'html';\n }\n parseInternal(extractBase64DataUris(html), format);\n };\n return { parse: parse };\n };\n SaxParser.findEndTag = findMatchingEndTagIndex;\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 bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n var schema = serializer.schema;\n var content = trimHtml(serializer.getTempAttrs(), html);\n var shortEndedElements = schema.getShortEndedElements();\n var matches;\n while (matches = bogusAllRegExp.exec(content)) {\n var index = bogusAllRegExp.lastIndex;\n var matchLength = matches[0].length;\n var endTagIndex = void 0;\n if (shortEndedElements[matches[1]]) {\n endTagIndex = index;\n } else {\n endTagIndex = SaxParser.findEndTag(schema, content, index);\n }\n content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n bogusAllRegExp.lastIndex = index - matchLength;\n }\n return trim$2(content);\n };\n var trimExternal = trimInternal;\n\n var trimEmptyContents = function (editor, html) {\n var blockName = getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\\\s|\\xA0|
|)<\\\\/' + blockName + '>[\\r\\n]*|
[\\r\\n]*)$');\n return html.replace(emptyRegExp, '');\n };\n var setupArgs$3 = function (args, format) {\n return __assign(__assign({}, args), {\n format: format,\n get: true,\n getInner: true\n });\n };\n var getContentFromBody = function (editor, args, format, body) {\n var defaultedArgs = setupArgs$3(args, format);\n var updatedArgs = args.no_events ? defaultedArgs : editor.fire('BeforeGetContent', defaultedArgs);\n var content;\n if (updatedArgs.format === 'raw') {\n content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n } else if (updatedArgs.format === 'text') {\n content = editor.dom.isEmpty(body) ? '' : trim$2(body.innerText || body.textContent);\n } else if (updatedArgs.format === 'tree') {\n content = editor.serializer.serialize(body, updatedArgs);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, updatedArgs));\n }\n if (!contains$3([\n 'text',\n 'tree'\n ], updatedArgs.format) && !isWsPreserveElement(SugarElement.fromDom(body))) {\n updatedArgs.content = Tools.trim(content);\n } else {\n updatedArgs.content = content;\n }\n if (updatedArgs.no_events) {\n return updatedArgs.content;\n } else {\n return editor.fire('GetContent', updatedArgs).content;\n }\n };\n var getContentInternal = function (editor, args, format) {\n return Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, format, body);\n });\n };\n\n var each$d = Tools.each;\n var ElementUtils = function (dom) {\n var compare = function (node1, node2) {\n if (node1.nodeName !== node2.nodeName) {\n return false;\n }\n var getAttribs = function (node) {\n var attribs = {};\n each$d(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 (has$2(obj1, 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 (has$2(obj2, name)) {\n return false;\n }\n }\n return true;\n };\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n return { compare: compare };\n };\n\n var makeMap$1 = Tools.makeMap;\n var Writer = function (settings) {\n var html = [];\n settings = settings || {};\n var indent = settings.indent;\n var indentBefore = makeMap$1(settings.indent_before || '');\n var indentAfter = makeMap$1(settings.indent_after || '');\n var encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n var htmlOutput = settings.element_format === 'html';\n return {\n start: function (name, attrs, empty) {\n var i, l, attr, value;\n if (indent && indentBefore[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (i = 0, l = attrs.length; i < l; i++) {\n attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: function (name) {\n var value;\n html.push('');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: function (text, raw) {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: function (text) {\n html.push('');\n },\n comment: function (text) {\n html.push('');\n },\n pi: function (name, text) {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: function (text) {\n html.push('', indent ? '\\n' : '');\n },\n reset: function () {\n html.length = 0;\n },\n getContent: function () {\n return html.join('').replace(/\\n$/, '');\n }\n };\n };\n\n var HtmlSerializer = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var writer = Writer(settings);\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n var serialize = function (node) {\n var validate = settings.validate;\n var handlers = {\n 3: function (node) {\n writer.text(node.value, node.raw);\n },\n 8: function (node) {\n writer.comment(node.value);\n },\n 7: function (node) {\n writer.pi(node.name, node.value);\n },\n 10: function (node) {\n writer.doctype(node.value);\n },\n 4: function (node) {\n writer.cdata(node.value);\n },\n 11: function (node) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n };\n writer.reset();\n var walk = function (node) {\n var handler = handlers[node.type];\n if (!handler) {\n var name_1 = node.name;\n var isEmpty = node.shortEnded;\n var attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n var sortedAttrs = [];\n sortedAttrs.map = {};\n var elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (var i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n var attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n var attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n var 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_1);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize: serialize };\n };\n\n var nonInheritableStyles = new Set();\n (function () {\n var nonInheritableStylesArr = [\n 'margin',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-bottom',\n 'padding',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'padding-bottom',\n 'border',\n 'border-width',\n 'border-style',\n 'border-color',\n 'background',\n 'background-attachment',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'float',\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'z-index',\n 'display',\n 'transform',\n 'width',\n 'max-width',\n 'min-width',\n 'height',\n 'max-height',\n 'min-height',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'text-overflow',\n 'vertical-align',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function'\n ];\n each$k(nonInheritableStylesArr, function (style) {\n nonInheritableStyles.add(style);\n });\n }());\n var shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n var getStyleProps = function (dom, node) {\n return keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n };\n var isNonInheritableStyle = function (style) {\n return nonInheritableStyles.has(style);\n };\n var hasInheritableStyles = function (dom, node) {\n return forall(getStyleProps(dom, node), function (style) {\n return !isNonInheritableStyle(style);\n });\n };\n var getLonghandStyleProps = function (styles) {\n return filter$4(styles, function (style) {\n return exists(shorthandStyleProps, function (prop) {\n return startsWith(style, prop);\n });\n });\n };\n var hasStyleConflict = function (dom, node, parentNode) {\n var nodeStyleProps = getStyleProps(dom, node);\n var parentNodeStyleProps = getStyleProps(dom, parentNode);\n var valueMismatch = function (prop) {\n var nodeValue = dom.getStyle(node, prop);\n var parentValue = dom.getStyle(parentNode, prop);\n return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n };\n return exists(nodeStyleProps, function (nodeStyleProp) {\n var propExists = function (props) {\n return exists(props, function (prop) {\n return prop === nodeStyleProp;\n });\n };\n if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n var longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n return exists(longhandProps, valueMismatch);\n } else {\n return valueMismatch(nodeStyleProp);\n }\n });\n };\n\n var isChar = function (forward, predicate, pos) {\n return Optional.from(pos.container()).filter(isText$7).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);\n var isAfterSpace = curry(isChar, false, isWhiteSpace);\n var isEmptyText = function (pos) {\n var container = pos.container();\n return isText$7(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n };\n var matchesElementPosition = function (before, predicate) {\n return function (pos) {\n return Optional.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome();\n };\n };\n var isImageBlock = function (node) {\n return isImg(node) && get$5(SugarElement.fromDom(node), 'display') === 'block';\n };\n var isCefNode = function (node) {\n return isContentEditableFalse$b(node) && !isBogusAll$1(node);\n };\n var isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n var isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n var isBeforeMedia = matchesElementPosition(true, isMedia$2);\n var isAfterMedia = matchesElementPosition(false, isMedia$2);\n var isBeforeTable = matchesElementPosition(true, isTable$3);\n var isAfterTable = matchesElementPosition(false, isTable$3);\n var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n var getLastChildren = function (elm) {\n var children = [];\n var rawNode = elm.dom;\n while (rawNode) {\n children.push(SugarElement.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n var removeTrailingBr = function (elm) {\n var allBrs = descendants(elm, 'br');\n var brs = filter$4(getLastChildren(elm).slice(-1), isBr$4);\n if (allBrs.length === brs.length) {\n each$k(brs, remove$7);\n }\n };\n var fillWithPaddingBr = function (elm) {\n empty(elm);\n append$1(elm, SugarElement.fromHtml('
'));\n };\n var trimBlockTrailingBr = function (elm) {\n lastChild(elm).each(function (lastChild) {\n prevSibling(lastChild).each(function (lastChildPrevSibling) {\n if (isBlock$2(elm) && isBr$4(lastChild) && isBlock$2(lastChildPrevSibling)) {\n remove$7(lastChild);\n }\n });\n });\n };\n\n var dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil = function (start, root, predicate) {\n if (contains$1(root, start)) {\n return dropLast(parents$1(start, function (elm) {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents = function (start, root) {\n return parentsUntil(start, root, never);\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents(start, root));\n };\n\n var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock$1 = function (root, pos) {\n return find$3(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n };\n var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) {\n return getClosestBlock$1(root, pos).fold(function () {\n return isInSameBlock(newPos, pos, root.dom) === false;\n }, function (fromBlock) {\n return isInSameBlock(newPos, pos, root.dom) === false && contains$1(fromBlock, SugarElement.fromDom(newPos.container()));\n });\n });\n };\n var isAtBlockBoundary = function (forward, root, pos) {\n return getClosestBlock$1(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 isBr = function (pos) {\n return getElementFromPosition(pos).exists(isBr$4);\n };\n var findBr = function (forward, root, pos) {\n var parentBlocks = filter$4(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n var scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr);\n };\n var isBeforeBr$1 = function (root, pos) {\n return getElementFromPosition(pos).exists(isBr$4) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr$4) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\n\n var isInMiddleOfText = function (pos) {\n return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n };\n var getClosestBlock = function (root, pos) {\n var parentBlocks = filter$4(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\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(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(root, pos).dom, pos).exists(isBeforeSpace);\n }\n };\n var isPreValue = function (value) {\n return contains$3([\n 'pre',\n 'pre-wrap'\n ], value);\n };\n var isInPre = function (pos) {\n return getElementFromPosition(pos).bind(function (elm) {\n return closest$3(elm, isElement$6);\n }).exists(function (elm) {\n return isPreValue(get$5(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return prevPosition(root.dom, pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return nextPosition(root.dom, pos).isNone();\n };\n var isAtLineBoundary = function (root, pos) {\n return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr$1(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$7(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n var needsToBeNbspRight = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, pos) || isAfterBlock(root, pos) || isBeforeBr$1(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbsp = function (root, pos) {\n return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos));\n };\n var isNbspAt = function (text, offset) {\n return isNbsp(text.charAt(offset));\n };\n var hasNbsp = function (pos) {\n var container = pos.container();\n return isText$7(container) && contains$2(container.data, nbsp);\n };\n var normalizeNbspMiddle = function (text) {\n var chars = text.split('');\n return map$3(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 Optional.some(pos).filter(hasNbsp).bind(function (pos) {\n var container = pos.container();\n var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n return normalized ? Optional.some(pos) : Optional.none();\n });\n };\n var normalizeNbspsInEditor = function (editor) {\n var root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n var result = foldl(content, function (acc, c) {\n if (isWhiteSpace(c) || isNbsp(c)) {\n if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n return {\n previousCharIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n previousCharIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n previousCharIsSpace: false,\n str: acc.str + c\n };\n }\n }, {\n previousCharIsSpace: false,\n str: ''\n });\n return result.str;\n };\n var normalize$1 = function (node, offset, count) {\n if (count === 0) {\n return;\n }\n var elm = SugarElement.fromDom(node);\n var root = ancestor$3(elm, isBlock$2).getOr(elm);\n var whitespace = node.data.slice(offset, offset + count);\n var isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length));\n var isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0));\n node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n };\n var normalizeWhitespaceAfter = function (node, offset) {\n var content = node.data.slice(offset);\n var whitespaceCount = content.length - lTrim(content).length;\n normalize$1(node, offset, whitespaceCount);\n };\n var normalizeWhitespaceBefore = function (node, offset) {\n var content = node.data.slice(0, offset);\n var whitespaceCount = content.length - rTrim(content).length;\n normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace, mergeToPrev) {\n if (mergeToPrev === void 0) {\n mergeToPrev = true;\n }\n var whitespaceOffset = rTrim(prevNode.data).length;\n var newNode = mergeToPrev ? prevNode : nextNode;\n var removeNode = mergeToPrev ? nextNode : prevNode;\n if (mergeToPrev) {\n newNode.appendData(removeNode.data);\n } else {\n newNode.insertData(0, removeNode.data);\n }\n remove$7(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset);\n }\n return newNode;\n };\n\n var needsReposition = function (pos, elm) {\n var container = pos.container();\n var offset = pos.offset();\n return CaretPosition.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n };\n var reposition = function (elm, pos) {\n return needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n };\n var beforeOrStartOf = function (node) {\n return isText$7(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n };\n var afterOrEndOf = function (node) {\n return isText$7(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n };\n var getPreviousSiblingCaretPosition = function (elm) {\n if (isCaretCandidate$3(elm.previousSibling)) {\n return Optional.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n }\n };\n var getNextSiblingCaretPosition = function (elm) {\n if (isCaretCandidate$3(elm.nextSibling)) {\n return Optional.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n }\n };\n var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n var startPosition = CaretPosition.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n return prevPosition(rootElement, startPosition).fold(function () {\n return nextPosition(rootElement, CaretPosition.after(elm));\n }, Optional.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return nextPosition(rootElement, CaretPosition.after(elm)).fold(function () {\n return prevPosition(rootElement, CaretPosition.before(elm));\n }, Optional.some);\n };\n var findCaretPositionBackwards = function (rootElement, elm) {\n return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n return getNextSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionBackwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPositionForward = function (rootElement, elm) {\n return getNextSiblingCaretPosition(elm).orThunk(function () {\n return getPreviousSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionForwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPosition = function (forward, rootElement, elm) {\n return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n };\n var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n return findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n };\n var setSelection$1 = 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 = function (editor, elm) {\n return elm && has$2(editor.schema.getBlockElements(), name(elm));\n };\n var paddEmptyBlock = function (elm) {\n if (isEmpty$2(elm)) {\n var br = SugarElement.fromHtml('
');\n empty(elm);\n append$1(elm, br);\n return Optional.some(CaretPosition.before(br.dom));\n } else {\n return Optional.none();\n }\n };\n var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n var prevTextOpt = prevSibling(elm).filter(isText$8);\n var nextTextOpt = nextSibling(elm).filter(isText$8);\n remove$7(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n var prevNode = prev.dom, nextNode = next.dom;\n var offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n }).orThunk(function () {\n if (normalizeWhitespace) {\n prevTextOpt.each(function (elm) {\n return normalizeWhitespaceBefore(elm.dom, elm.dom.length);\n });\n nextTextOpt.each(function (elm) {\n return normalizeWhitespaceAfter(elm.dom, 0);\n });\n }\n return afterDeletePosOpt;\n });\n };\n var isInlineElement = function (editor, element) {\n return has$2(editor.schema.getTextInlineElements(), name(element));\n };\n var deleteElement$2 = 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$3(elm, curry(isBlock, 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$1(editor, forward, normalizedAfterDeletePos);\n }\n }, function (paddPos) {\n if (moveCaret) {\n setSelection$1(editor, forward, Optional.some(paddPos));\n }\n });\n }\n };\n\n var isRootFromElement = function (root) {\n return function (cur) {\n return eq(root, cur);\n };\n };\n var getTableCells = function (table) {\n return descendants(table, 'td,th');\n };\n var getTableDetailsFromRange = function (rng, isRoot) {\n var getTable = function (node) {\n return getClosestTable(SugarElement.fromDom(node), isRoot);\n };\n var startTable = getTable(rng.startContainer);\n var endTable = getTable(rng.endContainer);\n var isStartInTable = startTable.isSome();\n var isEndInTable = endTable.isSome();\n var isSameTable = lift2(startTable, endTable, eq).getOr(false);\n var isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n return {\n startTable: startTable,\n endTable: endTable,\n isStartInTable: isStartInTable,\n isEndInTable: isEndInTable,\n isSameTable: isSameTable,\n isMultiTable: isMultiTable\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 {\n singleCellTable: [\n 'rng',\n 'cell'\n ]\n },\n { fullTable: ['table'] },\n {\n partialTable: [\n 'cells',\n 'outsideDetails'\n ]\n },\n {\n multiTable: [\n 'startTableCells',\n 'endTableCells',\n 'betweenRng'\n ]\n }\n ]);\n var getClosestCell$1 = function (container, isRoot) {\n return closest$2(SugarElement.fromDom(container), 'td,th', isRoot);\n };\n var isExpandedCellRng = function (cellRng) {\n return !eq(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(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 getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n var getCellRangeFromStartTable = function (isRoot) {\n return function (startCell) {\n return getClosestTable(startCell, isRoot).bind(function (table) {\n return last$2(getTableCells(table)).map(function (endCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n };\n };\n var getCellRangeFromEndTable = function (isRoot) {\n return 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 };\n var getTableSelectionFromCellRng = function (isRoot) {\n return function (cellRng) {\n return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n return tableSelection(cellRng, table, getTableCells(table));\n });\n };\n };\n var getTableSelections = function (cellRng, selectionDetails, rng, isRoot) {\n if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n return Optional.none();\n } else if (selectionDetails.isSameTable) {\n var sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: sameTableSelection,\n end: sameTableSelection\n });\n } else {\n var startCell = getClosestCell$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(rng.endContainer, isRoot);\n var startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n var endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: startTableSelection,\n end: endTableSelection\n });\n }\n };\n var getCellIndex = function (cells, cell) {\n return findIndex$2(cells, function (x) {\n return eq(x, cell);\n });\n };\n var getSelectedCells = function (tableSelection) {\n return lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), function (startIndex, endIndex) {\n return tableSelection.cells.slice(startIndex, endIndex + 1);\n });\n };\n var isSingleCellTableContentSelected = function (optCellRng, rng, isRoot) {\n return optCellRng.exists(function (cellRng) {\n return isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng);\n });\n };\n var unselectCells = function (rng, selectionDetails) {\n var startTable = selectionDetails.startTable, endTable = selectionDetails.endTable;\n var otherContentRng = rng.cloneRange();\n startTable.each(function (table) {\n return otherContentRng.setStartAfter(table.dom);\n });\n endTable.each(function (table) {\n return otherContentRng.setEndBefore(table.dom);\n });\n return otherContentRng;\n };\n var handleSingleTable = function (cellRng, selectionDetails, rng, isRoot) {\n return getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(function (_a) {\n var start = _a.start, end = _a.end;\n return start.or(end);\n }).bind(function (tableSelection) {\n var isSameTable = selectionDetails.isSameTable;\n var selectedCells = getSelectedCells(tableSelection).getOr([]);\n if (isSameTable && tableSelection.cells.length === selectedCells.length) {\n return Optional.some(deleteAction.fullTable(tableSelection.table));\n } else if (selectedCells.length > 0) {\n if (isSameTable) {\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n } else {\n var otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.some(__assign(__assign({}, selectionDetails), { rng: otherContentRng }))));\n }\n } else {\n return Optional.none();\n }\n });\n };\n var handleMultiTable = function (cellRng, selectionDetails, rng, isRoot) {\n return getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(function (_a) {\n var start = _a.start, end = _a.end;\n var startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n var endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n var otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n } else {\n return Optional.none();\n }\n });\n };\n var getActionFromRange = function (root, rng) {\n var isRoot = isRootFromElement(root);\n var optCellRng = getCellRng(rng, isRoot);\n var selectionDetails = getTableDetailsFromRange(rng, isRoot);\n if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n return optCellRng.map(function (cellRng) {\n return deleteAction.singleCellTable(rng, cellRng.start);\n });\n } else if (selectionDetails.isMultiTable) {\n return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n } else {\n return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n }\n };\n\n var freefallRtl = function (root) {\n var child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(function () {\n return Optional.some(root);\n });\n };\n var cleanCells = function (cells) {\n return each$k(cells, function (cell) {\n remove$6(cell, 'contenteditable');\n fillWithPaddingBr(cell);\n });\n };\n var getOutsideBlock = function (editor, container) {\n return Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n };\n var handleEmptyBlock = function (editor, startInTable, emptyBlock) {\n emptyBlock.each(function (block) {\n if (startInTable) {\n remove$7(block);\n } else {\n fillWithPaddingBr(block);\n editor.selection.setCursorLocation(block.dom, 0);\n }\n });\n };\n var setCursorInCell = function (editor, cell) {\n var selectedCells = getCellsFromEditor(editor);\n editor.selection.setCursorLocation(cell.dom, 0);\n if (selectedCells.length > 1) {\n set$1(cell, 'data-mce-selected', '1');\n }\n };\n var emptySingleTableCells = function (editor, cells, outsideDetails) {\n cleanCells(cells);\n outsideDetails.map(function (_a) {\n var rng = _a.rng, isStartInTable = _a.isStartInTable;\n var outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n rng.deleteContents();\n handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n });\n if (outsideDetails.forall(function (details) {\n return details.isStartInTable;\n })) {\n setCursorInCell(editor, cells[0]);\n } else {\n editor.selection.collapse(true);\n }\n return true;\n };\n var emptyMultiTableCells = function (editor, startTableCells, endTableCells, betweenRng) {\n cleanCells(startTableCells.concat(endTableCells));\n betweenRng.deleteContents();\n setCursorInCell(editor, startTableCells[0]);\n return true;\n };\n var deleteCellContents = function (editor, rng, cell) {\n rng.deleteContents();\n var lastNode = freefallRtl(cell).getOr(cell);\n var lastBlock = SugarElement.fromDom(editor.dom.getParent(lastNode.dom, editor.dom.isBlock));\n if (isEmpty$2(lastBlock)) {\n fillWithPaddingBr(lastBlock);\n editor.selection.setCursorLocation(lastBlock.dom, 0);\n }\n if (!eq(cell, lastBlock)) {\n var additionalCleanupNodes = is$1(parent(lastBlock), cell) ? [] : siblings(lastBlock);\n each$k(additionalCleanupNodes.concat(children(cell)), function (node) {\n if (!eq(node, lastBlock) && !contains$1(node, lastBlock)) {\n remove$7(node);\n }\n });\n }\n return true;\n };\n var deleteTableElement = function (editor, table) {\n deleteElement$2(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(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, 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$2 = function (editor, startElm, selectedCells) {\n var rootNode = SugarElement.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n var getParentCell = function (rootElm, elm) {\n return find$3(parentsAndSelf(elm, rootElm), isTableCell$4);\n };\n var getParentCaption = function (rootElm, elm) {\n return find$3(parentsAndSelf(elm, rootElm), isTag('caption'));\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCell) {\n return eq(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom, 0);\n return Optional.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return firstPositionIn(fromCaption.dom).bind(function (first) {\n return lastPositionIn(fromCaption.dom).map(function (last) {\n return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n });\n }).getOr(true);\n };\n var emptyCaretCaption = function (editor, elm) {\n return emptyElement(editor, elm);\n };\n var validateCaretCaption = function (rootElm, fromCaption, to) {\n return getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCaption) {\n return eq(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(Optional.some(true));\n };\n var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(function (fromCell) {\n return isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n }).getOr(false);\n };\n var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n var isNearTable = function (forward, pos) {\n return forward ? isBeforeTable(pos) : isAfterTable(pos);\n };\n var isBeforeOrAfterTable = function (editor, forward) {\n var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(function (pos) {\n return isNearTable(forward, pos);\n });\n };\n var deleteCaret$3 = function (editor, forward, startElm) {\n var rootElm = SugarElement.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCaretCells(editor, forward, rootElm, startElm) || isBeforeOrAfterTable(editor, forward);\n }, function (fromCaption) {\n return deleteCaretCaption(editor, forward, rootElm, fromCaption).getOr(false);\n });\n };\n var backspaceDelete$9 = function (editor, forward) {\n var startElm = SugarElement.fromDom(editor.selection.getStart(true));\n var cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$2(editor, startElm, cells);\n };\n\n var createRange = function (sc, so, ec, eo) {\n var rng = document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n var normalizeBlockSelectionRange = function (rng) {\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n var rootNode = rng.commonAncestorContainer;\n return fromPosition(false, rootNode, endPos).map(function (newEndPos) {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n var normalize = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n\n var hasOnlyOneChild$1 = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === nbsp;\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n };\n var isEmptyFragmentElement = function (schema, node) {\n var nonEmptyElements = schema.getNonEmptyElements();\n return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n var isListFragment = function (schema, fragment) {\n var firstChild = fragment.firstChild;\n var lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n var cleanupDomFragment = function (domFragment) {\n var firstChild = domFragment.firstChild;\n var lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n firstChild.parentNode.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n lastChild.parentNode.removeChild(lastChild);\n }\n return domFragment;\n };\n var toDomFragment = function (dom, serializer, fragment) {\n var html = serializer.serialize(fragment);\n var domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n var listItems = function (elm) {\n return filter$4(elm.childNodes, function (child) {\n return child.nodeName === 'LI';\n });\n };\n var isPadding = function (node) {\n return node.data === nbsp || isBr$5(node);\n };\n var isListItemPadded = function (node) {\n return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n var isEmptyOrPadded = function (elm) {\n return !elm.firstChild || isListItemPadded(elm);\n };\n var trimListItems = function (elms) {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n var getParentLi = function (dom, node) {\n var parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n var isParentBlockLi = function (dom, node) {\n return !!getParentLi(dom, node);\n };\n var getSplit = function (parentNode, rng) {\n var beforeRng = rng.cloneRange();\n var afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n var findFirstIn = function (node, rootNode) {\n var caretPos = CaretPosition.before(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var findLastOf = function (node, rootNode) {\n var caretPos = CaretPosition.after(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var insertMiddle = function (target, elms, rootNode, rng) {\n var parts = getSplit(target, rng);\n var parentElm = target.parentNode;\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, function (li) {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n var insertBefore$1 = function (target, elms, rootNode) {\n var parentElm = target.parentNode;\n Tools.each(elms, function (elm) {\n parentElm.insertBefore(elm, target);\n });\n return findFirstIn(target, rootNode);\n };\n var insertAfter$1 = function (target, elms, rootNode, dom) {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n var insertAtCaret$1 = function (serializer, dom, rng, fragment) {\n var domFragment = toDomFragment(dom, serializer, fragment);\n var liTarget = getParentLi(dom, rng.startContainer);\n var liElms = trimListItems(listItems(domFragment.firstChild));\n var BEGINNING = 1, END = 2;\n var rootNode = dom.getRoot();\n var isAt = function (location) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n var caretWalker = CaretWalker(dom.getRoot());\n var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n };\n if (isAt(BEGINNING)) {\n return insertBefore$1(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$1(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n\n var trimOrPadLeftRight = function (dom, rng, html) {\n var root = SugarElement.fromDom(dom.getRoot());\n if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng))) {\n html = html.replace(/^ /, ' ');\n } else {\n html = html.replace(/^ /, ' ');\n }\n if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng))) {\n html = html.replace(/( | )()?$/, ' ');\n } else {\n html = html.replace(/ ()?$/, ' ');\n }\n return html;\n };\n\n var isTableCell$1 = isTableCell$5;\n var isTableCellContentSelected = function (dom, rng, cell) {\n if (cell !== null) {\n var endCell = dom.getParent(rng.endContainer, isTableCell$1);\n return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n } else {\n return false;\n }\n };\n var validInsertion = function (editor, value, parentNode) {\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n var node = parentNode.firstChild;\n var node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value);\n }\n }\n };\n var trimBrsFromTableCell = function (dom, elm) {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n };\n var reduceInlineTextElements = function (editor, merge) {\n var textInlineElements = editor.schema.getTextInlineElements();\n var dom = editor.dom;\n if (merge) {\n var root_1 = editor.getBody();\n var elementUtils_1 = ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n var isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n if (isInline && hasInheritableStyles(dom, node)) {\n for (var parentNode = node.parentNode; isNonNullable(parentNode) && parentNode !== root_1; parentNode = parentNode.parentNode) {\n var styleConflict = hasStyleConflict(dom, node, parentNode);\n if (styleConflict) {\n break;\n }\n if (elementUtils_1.compare(parentNode, node)) {\n dom.remove(node, true);\n break;\n }\n }\n }\n });\n }\n };\n var markFragmentElements = function (fragment) {\n var node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n var unmarkFragmentElements = function (elm) {\n Tools.each(elm.getElementsByTagName('*'), function (elm) {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n var isPartOfFragment = function (node) {\n return !!node.getAttribute('data-mce-fragment');\n };\n var canHaveChildren = function (editor, node) {\n return node && !editor.schema.getShortEndedElements()[node.nodeName];\n };\n var moveSelectionToMarker = function (editor, marker) {\n var nextRng;\n var dom = editor.dom;\n var selection = editor.selection;\n var getContentEditableFalseParent = function (node) {\n var root = editor.getBody();\n for (; node && node !== root; node = node.parentNode) {\n if (dom.getContentEditable(node) === 'false') {\n return node;\n }\n }\n return null;\n };\n if (!marker) {\n return;\n }\n selection.scrollIntoView(marker);\n var parentEditableFalseElm = getContentEditableFalseParent(marker);\n if (parentEditableFalseElm) {\n dom.remove(marker);\n selection.select(parentEditableFalseElm);\n return;\n }\n var rng = dom.createRng();\n var node = marker.previousSibling;\n if (isText$7(node)) {\n rng.setStart(node, node.nodeValue.length);\n if (!Env.ie) {\n var node2 = marker.nextSibling;\n if (isText$7(node2)) {\n node.appendData(node2.data);\n node2.parentNode.removeChild(node2);\n }\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n var findNextCaretRng = function (rng) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n var parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n editor.$(parentBlock).empty();\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell$1(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(editor.selection.getRng());\n editor.selection.setRng(rng);\n var startCell = dom.getParent(rng.startContainer, isTableCell$1);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n } else {\n editor.getDoc().execCommand('Delete', false, null);\n }\n };\n var insertHtmlAtCaret = function (editor, value, details) {\n var parentNode;\n var rng, node;\n var selection = editor.selection;\n var dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(dom, selection.getRng(), value);\n }\n var parser = editor.parser;\n var merge = details.merge;\n var serializer = HtmlSerializer({ validate: shouldValidate(editor) }, editor.schema);\n var bookmarkHtml = '';\n var args = editor.fire('BeforeSetContent', {\n content: value,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', {\n content: args.content,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n return;\n }\n value = args.content;\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n rng = selection.getRng();\n var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n var body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n deleteSelectedContent(editor);\n }\n parentNode = selection.getNode();\n var parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n var fragment = parser.parse(value, parserArgs);\n if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n rng = insertAtCaret$1(serializer, dom, selection.getRng(), fragment);\n selection.setRng(rng);\n editor.fire('SetContent', args);\n return;\n }\n markFragmentElements(fragment);\n node = fragment.lastChild;\n if (node.attr('id') === 'mce_marker') {\n var marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n editor.selection.setContent(bookmarkHtml);\n parentNode = selection.getNode();\n var rootNode = editor.getBody();\n if (parentNode.nodeType === 9) {\n parentNode = node = rootNode;\n } else {\n node = parentNode;\n }\n while (node !== rootNode) {\n parentNode = node;\n node = node.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n value = serializer.serialize(parser.parse(value.replace(//i, function () {\n return serializer.serialize(fragment);\n })));\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n unmarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(dom, selection.getStart());\n editor.fire('SetContent', args);\n editor.addVisual();\n };\n\n var traverse = function (node, fn) {\n fn(node);\n if (node.firstChild) {\n traverse(node.firstChild, fn);\n }\n if (node.next) {\n traverse(node.next, fn);\n }\n };\n var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n var nodeMatches = {};\n var attrMatches = {};\n var matches = [];\n if (node.firstChild) {\n traverse(node.firstChild, function (node) {\n each$k(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$k(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 (has$2(nodeMatches, name_1)) {\n matches.push(nodeMatches[name_1]);\n }\n }\n for (var name_2 in attrMatches) {\n if (has$2(attrMatches, name_2)) {\n matches.push(attrMatches[name_2]);\n }\n }\n return matches;\n };\n var filter$1 = function (nodeFilters, attributeFilters, node) {\n var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n each$k(matches, function (match) {\n each$k(match.filter.callbacks, function (callback) {\n callback(match.nodes, match.filter.name, {});\n });\n });\n };\n\n var defaultFormat$1 = 'html';\n var isTreeNode = function (content) {\n return content instanceof AstNode;\n };\n var moveSelection = function (editor) {\n if (hasFocus(editor)) {\n firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable$3(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n var setEditorHtml = function (editor, html, noSelection) {\n editor.dom.setHTML(editor.getBody(), html);\n if (noSelection !== true) {\n moveSelection(editor);\n }\n };\n var setContentString = function (editor, body, content, args) {\n if (content.length === 0 || /^\\s+$/.test(content)) {\n var padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n var forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n } else if (!content) {\n content = '
    ';\n }\n setEditorHtml(editor, content, args.no_selection);\n editor.fire('SetContent', args);\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, args.content, args.no_selection);\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$1(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, args.content, args.no_selection);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n return content;\n };\n var setupArgs$2 = function (args, content) {\n return __assign(__assign({ format: defaultFormat$1 }, args), {\n set: true,\n content: isTreeNode(content) ? '' : content\n });\n };\n var setContentInternal = function (editor, content, args) {\n var defaultedArgs = setupArgs$2(args, content);\n var updatedArgs = args.no_events ? defaultedArgs : editor.fire('BeforeSetContent', defaultedArgs);\n if (!isTreeNode(content)) {\n content = updatedArgs.content;\n }\n return Optional.from(editor.getBody()).fold(constant(content), function (body) {\n return isTreeNode(content) ? setContentTree(editor, body, content, updatedArgs) : setContentString(editor, body, content, updatedArgs);\n });\n };\n\n var sibling = function (scope, predicate) {\n return sibling$2(scope, predicate).isSome();\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : never;\n };\n var ancestor = function (scope, transform, isRoot) {\n var element = scope.dom;\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n var transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n var closest$1 = function (scope, transform, isRoot) {\n var current = transform(scope);\n var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Optional.none() : ancestor(scope, transform, stop);\n });\n };\n\n var isEq$3 = isEq$5;\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 var format = formatList[i];\n if (isSelectorFormat(format) && format.inherit === false && ed.dom.is(node, format.selector)) {\n return true;\n }\n }\n }\n return false;\n };\n var matchParents = function (editor, node, name, vars, similar) {\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, similar);\n };\n var matchName$1 = function (dom, node, format) {\n if (isEq$3(node, format.inline)) {\n return true;\n }\n if (isEq$3(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return node.nodeType === 1 && dom.is(node, format.selector);\n }\n };\n var matchItems = function (dom, node, format, itemName, similar, vars) {\n var items = format[itemName];\n if (isFunction(format.onmatch)) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (isUndefined(items.length)) {\n for (var key in items) {\n if (has$2(items, key)) {\n var value = itemName === 'attributes' ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n var expectedValue = replaceVars(items[key], vars);\n var isEmptyValue = isNullable(value) || isEmpty$3(value);\n if (isEmptyValue && isNullable(expectedValue)) {\n continue;\n }\n if (similar && isEmptyValue && !format.exact) {\n return false;\n }\n if ((!similar || format.exact) && !isEq$3(value, normalizeStyleValue(dom, expectedValue, key))) {\n return false;\n }\n }\n }\n } else {\n for (var i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return true;\n }\n }\n }\n }\n return true;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var dom = ed.dom;\n if (formatList && node) {\n for (var i = 0; i < formatList.length; i++) {\n var format = formatList[i];\n if (matchName$1(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n var classes = format.classes;\n if (classes) {\n for (var x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n };\n var match$2 = function (editor, name, vars, node, similar) {\n if (node) {\n return matchParents(editor, node, name, vars, similar);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars, similar)) {\n return true;\n }\n var startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars, similar)) {\n return true;\n }\n }\n return false;\n };\n var matchAll = function (editor, names, vars) {\n var matchedFormatNames = [];\n var checkedMap = {};\n var startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n for (var i = 0; i < names.length; i++) {\n var name_1 = names[i];\n if (!checkedMap[name_1] && matchNode(editor, node, name_1, vars)) {\n checkedMap[name_1] = true;\n matchedFormatNames.push(name_1);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n var closest = function (editor, names) {\n var isRoot = function (elm) {\n return eq(elm, SugarElement.fromDom(editor.getBody()));\n };\n var match = function (elm, name) {\n return matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n };\n return Optional.from(editor.selection.getStart(true)).bind(function (rawElm) {\n return closest$1(SugarElement.fromDom(rawElm), function (elm) {\n return findMap(names, function (name) {\n return match(elm, name);\n });\n }, isRoot);\n }).getOrNull();\n };\n var canApply = function (editor, name) {\n var formatList = editor.formatter.get(name);\n var dom = editor.dom;\n if (formatList) {\n var startNode = editor.selection.getStart();\n var parents = getParents$2(dom, startNode);\n for (var x = formatList.length - 1; x >= 0; x--) {\n var format = formatList[x];\n if (!isSelectorFormat(format) || isNonNullable(format.defaultBlock)) {\n return true;\n }\n for (var i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], format.selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n 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 = ZWSP$1, CARET_ID = '_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 || node.childNodes.length > 1) {\n return [];\n }\n if (node.nodeType === 1) {\n nodes.push(node);\n }\n node = node.firstChild;\n }\n return nodes;\n };\n var isCaretContainerEmpty = function (node) {\n return getEmptyCaretContainers(node).length > 0;\n };\n var findFirstTextNode = function (node) {\n if (node) {\n var walker = new DomTreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (isText$7(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var caretContainer = SugarElement.fromTag('span');\n setAll$1(caretContainer, {\n 'id': CARET_ID,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append$1(caretContainer, SugarElement.fromText(ZWSP));\n }\n return caretContainer;\n };\n var trimZwspFromCaretContainer = function (caretContainerNode) {\n var textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.nodeValue.charAt(0) === ZWSP) {\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$2(editor, false, SugarElement.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var textNode = trimZwspFromCaretContainer(node);\n dom.remove(node, true);\n if (startContainer === textNode && startOffset > 0) {\n rng.setStart(textNode, startOffset - 1);\n }\n if (endContainer === textNode && endOffset > 0) {\n rng.setEnd(textNode, endOffset - 1);\n }\n if (block && dom.isEmpty(block)) {\n fillWithPaddingBr(SugarElement.fromDom(block));\n }\n selection.setRng(rng);\n }\n };\n var removeCaretContainer = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID)) {\n removeCaretContainerNode(editor, node, false);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n var dom = editor.dom, block = dom.getParent(formatNode, curry(isTextBlock$1, editor));\n if (block && dom.isEmpty(block)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n removeTrailingBr(SugarElement.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n var appendNode = function (parentNode, node) {\n parentNode.appendChild(node);\n return node;\n };\n var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP));\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$4(keys(formatter.get()), function (formatName) {\n return formatName !== name && !contains$2(formatName, 'removeformat');\n });\n var matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n var uniqueFormats = filter$4(matchedFormats, function (fmtName) {\n return !areSimilarFormats(editor, fmtName, name);\n });\n if (uniqueFormats.length > 0) {\n var clonedFormatNode = formatNode.cloneNode(false);\n dom.add(caretContainer, clonedFormatNode);\n formatter.remove(name, vars, clonedFormatNode, similar);\n dom.remove(clonedFormatNode);\n return Optional.some(clonedFormatNode);\n } else {\n return Optional.none();\n }\n };\n var applyCaretFormat = function (editor, name, vars) {\n var caretContainer, textNode;\n var selection = editor.selection;\n var selectionRng = selection.getRng();\n var offset = selectionRng.startOffset;\n var container = selectionRng.startContainer;\n var text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (caretContainer) {\n textNode = findFirstTextNode(caretContainer);\n }\n var wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n var bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n var rng = expandRng(editor, selectionRng, editor.formatter.get(name));\n rng = split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n if (!caretContainer || textNode.nodeValue !== ZWSP) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n textNode = caretContainer.firstChild;\n selectionRng.insertNode(caretContainer);\n offset = 1;\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n 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(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) {\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$k = 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$4(SugarElement.fromDom(targetNode), caretContainer);\n remove$7(SugarElement.fromDom(targetNode));\n return CaretPosition(innerMost, 0);\n };\n var isFormatElement = function (editor, element) {\n var inlineElements = editor.schema.getTextInlineElements();\n return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\n\n var postProcessHooks = {};\n var filter = filter$2;\n var each$c = each$i;\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$1 = function (name, editor) {\n each$c(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && indexOf$1(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('

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

    \\xA0

    ').append(targetClone);\n newRange.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n newRange.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append(nbsp).append(targetClone).append(nbsp);\n newRange.setStart($realSelectionContainer[0].firstChild, 1);\n newRange.setEnd($realSelectionContainer[0].lastChild, 0);\n }\n $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n $realSelectionContainer[0].focus();\n var sel = selection.getSel();\n sel.removeAllRanges();\n sel.addRange(newRange);\n return newRange;\n };\n var selectElement = function (elm) {\n var targetClone = elm.cloneNode(true);\n var e = editor.fire('ObjectSelected', {\n target: elm,\n targetClone: targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n var range = setupOffscreenSelection(elm, e.targetClone, targetClone);\n var nodeElm = SugarElement.fromDom(elm);\n each$k(descendants(SugarElement.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n if (!eq(nodeElm, elm)) {\n remove$6(elm, elementSelectionAttr);\n }\n });\n if (!dom.getAttrib(elm, elementSelectionAttr)) {\n elm.setAttribute(elementSelectionAttr, '1');\n }\n selectedElement = elm;\n hideFakeCaret();\n return range;\n };\n var setElementSelection = function (range, forward) {\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n var dir = forward ? 1 : -1;\n var caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n var beforeNode = caretPosition.getNode(!forward);\n if (isFakeCaretTarget(beforeNode)) {\n return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n }\n var afterNode = caretPosition.getNode(forward);\n if (isFakeCaretTarget(afterNode)) {\n return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n }\n }\n return null;\n }\n var startContainer = range.startContainer;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (startContainer.nodeType !== 1) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n var node = startContainer.childNodes[startOffset];\n if (isFakeSelectionTargetElement(node)) {\n return selectElement(node);\n }\n }\n return null;\n };\n var removeElementSelection = function () {\n if (selectedElement) {\n selectedElement.removeAttribute(elementSelectionAttr);\n }\n descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$7);\n selectedElement = null;\n };\n var destroy = function () {\n fakeCaret.destroy();\n selectedElement = null;\n };\n var hideFakeCaret = function () {\n fakeCaret.hide();\n };\n if (Env.ceFalse && !isRtc(editor)) {\n registerEvents();\n }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var Quirks = function (editor) {\n var each = Tools.each;\n var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n var mceInternalDataType = isIE ? 'Text' : 'URL';\n var setEditorCommandState = function (cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var isDefaultPrevented = function (e) {\n return e.isDefaultPrevented();\n };\n var setMceInternalContent = function (e) {\n var selectionHtml, internalContent;\n if (e.dataTransfer) {\n if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n selection.select(e.target);\n }\n selectionHtml = editor.selection.getContent();\n if (selectionHtml.length > 0) {\n internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n e.dataTransfer.setData(mceInternalDataType, internalContent);\n }\n }\n };\n var getMceInternalContent = function (e) {\n var internalContent;\n if (e.dataTransfer) {\n internalContent = e.dataTransfer.getData(mceInternalDataType);\n if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n return {\n id: unescape(internalContent[0]),\n html: unescape(internalContent[1])\n };\n }\n }\n return null;\n };\n var insertClipboardContents = function (content, internal) {\n if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n editor.execCommand('mceInsertClipboardContent', false, {\n content: content,\n internal: internal\n });\n } else {\n editor.execCommand('mceInsertContent', false, content);\n }\n };\n var emptyEditorWhenDeleting = function () {\n var serializeRng = function (rng) {\n var body = dom.create('body');\n var contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n var allContentsSelected = function (rng) {\n var selection = serializeRng(rng);\n var allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n var allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n var isCollapsed, body;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n isCollapsed = editor.selection.isCollapsed();\n body = editor.getBody();\n if (isCollapsed && !dom.isEmpty(body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n var selectAll = function () {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n var documentElementEditingFocus = 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$2(rng.startContainer)) {\n return;\n }\n selection.placeCaretAt(e.clientX, e.clientY);\n } else {\n selection.setRng(rng);\n }\n }\n });\n }\n };\n var removeHrOnBackspace = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (!editor.getBody().getElementsByTagName('hr').length) {\n return;\n }\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var node = selection.getNode();\n var previousSibling = node.previousSibling;\n if (node.nodeName === 'HR') {\n dom.remove(node);\n e.preventDefault();\n return;\n }\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n dom.remove(previousSibling);\n e.preventDefault();\n }\n }\n }\n });\n };\n var focusBody = function () {\n if (!Range.prototype.getClientRects) {\n editor.on('mousedown', function (e) {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n var body_1 = editor.getBody();\n body_1.blur();\n Delay.setEditorTimeout(editor, function () {\n body_1.focus();\n });\n }\n });\n }\n };\n var selectControlElements = function () {\n editor.on('click', function (e) {\n var target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n var removeStylesWhenDeletingAcrossBlockElements = function () {\n var getAttributeApplyFunction = function () {\n var template = dom.getAttribs(selection.getStart().cloneNode(false));\n return function () {\n var target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, function (attr) {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n var isSelectionAcrossElements = function () {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false, null);\n applyAttributes();\n e.preventDefault();\n return false;\n }\n });\n dom.bind(editor.getDoc(), 'cut', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, function () {\n applyAttributes();\n });\n }\n });\n };\n var disableBackspaceIntoATable = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n });\n };\n var removeBlockQuoteOnBackSpace = function () {\n editor.on('keydown', function (e) {\n var rng, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n var root = dom.getRoot();\n parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.tagName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', null, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n var setGeckoEditingOptions = function () {\n var setOpts = function () {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!getObjectResizing(editor)) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!isReadOnly$1(editor)) {\n editor.on('BeforeExecCommand mousedown', setOpts);\n }\n };\n var addBrAfterLastLinks = function () {\n var fixLinks = function () {\n each(dom.select('a'), function (node) {\n var parentNode = node.parentNode;\n var root = dom.getRoot();\n if (parentNode.lastChild === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', function (e) {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n var setDefaultBlockType = function () {\n if (getForcedRootBlock(editor)) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n });\n }\n };\n var normalizeSelection = function () {\n editor.on('keyup focusin mouseup', function (e) {\n if (!VK.modifierPressed(e)) {\n selection.normalize();\n }\n }, true);\n };\n var showBrokenImageIcon = function () {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n var restoreFocusOnKeyDown = function () {\n if (!editor.inline) {\n editor.on('keydown', function () {\n if (document.activeElement === document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n var bodyHeight = function () {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', function (e) {\n var rng;\n if (e.target.nodeName === 'HTML') {\n if (Env.ie > 11) {\n editor.getBody().focus();\n return;\n }\n rng = editor.selection.getRng();\n editor.getBody().focus();\n editor.selection.setRng(rng);\n editor.selection.normalize();\n editor.nodeChanged();\n }\n });\n }\n };\n var blockCmdArrowNavigation = function () {\n if (Env.mac) {\n editor.on('keydown', function (e) {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n var selection_1 = editor.selection.getSel();\n selection_1.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n var disableAutoUrlDetect = function () {\n setEditorCommandState('AutoUrlDetect', false);\n };\n var tapLinksAndImages = function () {\n editor.on('click', function (e) {\n var elm = e.target;\n do {\n if (elm.tagName === 'A') {\n e.preventDefault();\n return;\n }\n } while (elm = elm.parentNode);\n });\n editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n };\n var blockFormSubmitInsideEditor = function () {\n editor.on('init', function () {\n editor.dom.bind(editor.getBody(), 'submit', function (e) {\n e.preventDefault();\n });\n });\n };\n var removeAppleInterchangeBrs = function () {\n parser.addNodeFilter('br', function (nodes) {\n var i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n var ieInternalDragAndDrop = function () {\n editor.on('dragstart', function (e) {\n setMceInternalContent(e);\n });\n editor.on('drop', function (e) {\n if (!isDefaultPrevented(e)) {\n var internalContent = getMceInternalContent(e);\n if (internalContent && internalContent.id !== editor.id) {\n e.preventDefault();\n var rng = fromPoint(e.x, e.y, editor.getDoc());\n selection.setRng(rng);\n insertClipboardContents(internalContent.html, true);\n }\n }\n });\n };\n var refreshContentEditable = noop;\n var isHidden = function () {\n if (!isGecko || editor.removed) {\n return false;\n }\n var sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n var setupRtc = function () {\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n blockFormSubmitInsideEditor();\n selectAll();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n }\n }\n if (isGecko) {\n focusBody();\n setGeckoEditingOptions();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n }\n };\n var setup = function () {\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n };\n if (isRtc(editor)) {\n setupRtc();\n } else {\n setup();\n }\n return {\n refreshContentEditable: refreshContentEditable,\n isHidden: isHidden\n };\n };\n\n var DOM$6 = DOMUtils.DOM;\n var appendStyle = function (editor, text) {\n var body = SugarElement.fromDom(editor.getBody());\n var container = getStyleContainer(getRootNode(body));\n var style = SugarElement.fromTag('style');\n set$1(style, 'type', 'text/css');\n append$1(style, SugarElement.fromText(text));\n append$1(container, style);\n editor.on('remove', function () {\n remove$7(style);\n });\n };\n var getRootName = function (editor) {\n return editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n };\n var removeUndefined = function (obj) {\n return filter$3(obj, function (v) {\n return isUndefined(v) === false;\n });\n };\n var mkParserSettings = function (editor) {\n var settings = editor.settings;\n var blobCache = editor.editorUpload.blobCache;\n return removeUndefined({\n allow_conditional_comments: settings.allow_conditional_comments,\n allow_html_data_urls: settings.allow_html_data_urls,\n allow_svg_data_urls: settings.allow_svg_data_urls,\n allow_html_in_named_anchor: settings.allow_html_in_named_anchor,\n allow_script_urls: settings.allow_script_urls,\n allow_unsafe_link_target: settings.allow_unsafe_link_target,\n convert_fonts_to_spans: settings.convert_fonts_to_spans,\n fix_list_elements: settings.fix_list_elements,\n font_size_legacy_values: settings.font_size_legacy_values,\n forced_root_block: settings.forced_root_block,\n forced_root_block_attrs: settings.forced_root_block_attrs,\n padd_empty_with_br: settings.padd_empty_with_br,\n preserve_cdata: settings.preserve_cdata,\n remove_trailing_brs: settings.remove_trailing_brs,\n inline_styles: settings.inline_styles,\n root_name: getRootName(editor),\n validate: true,\n blob_cache: blobCache,\n document: editor.getDoc(),\n images_dataimg_filter: settings.images_dataimg_filter\n });\n };\n var mkSerializerSettings = function (editor) {\n var settings = editor.settings;\n return __assign(__assign({}, mkParserSettings(editor)), removeUndefined({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope,\n element_format: settings.element_format,\n entities: settings.entities,\n entity_encoding: settings.entity_encoding,\n indent: settings.indent,\n indent_after: settings.indent_after,\n indent_before: settings.indent_before,\n block_elements: settings.block_elements,\n boolean_attributes: settings.boolean_attributes,\n custom_elements: settings.custom_elements,\n extended_valid_elements: settings.extended_valid_elements,\n invalid_elements: settings.invalid_elements,\n invalid_styles: settings.invalid_styles,\n move_caret_before_on_enter_elements: settings.move_caret_before_on_enter_elements,\n non_empty_elements: settings.non_empty_elements,\n schema: settings.schema,\n self_closing_elements: settings.self_closing_elements,\n short_ended_elements: settings.short_ended_elements,\n special: settings.special,\n text_block_elements: settings.text_block_elements,\n text_inline_elements: settings.text_inline_elements,\n valid_children: settings.valid_children,\n valid_classes: settings.valid_classes,\n valid_elements: settings.valid_elements,\n valid_styles: settings.valid_styles,\n verify_html: settings.verify_html,\n whitespace_elements: settings.whitespace_elements\n }));\n };\n var createParser = function (editor) {\n var parser = DomParser(mkParserSettings(editor), editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n var i = nodes.length, node, value;\n var dom = editor.dom;\n var internalName = 'data-mce-' + name;\n while (i--) {\n node = nodes[i];\n value = node.attr(name);\n if (value && !node.attr(internalName)) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n if (editor.settings.preserve_cdata) {\n parser.addNodeFilter('#cdata', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + editor.dom.encode(node.value) + ']]';\n }\n });\n }\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n var i = nodes.length;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n var node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new AstNode('br', 1)).shortEnded = true;\n }\n }\n });\n return parser;\n };\n var autoFocus = function (editor) {\n if (editor.settings.auto_focus) {\n Delay.setEditorTimeout(editor, function () {\n var focusEditor;\n if (editor.settings.auto_focus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n }\n if (!focusEditor.destroyed) {\n focusEditor.focus();\n }\n }, 100);\n }\n };\n var moveSelectionToFirstCaretPosition = function (editor) {\n var root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n firstPositionIn(root).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable$3(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$1 = function (editor) {\n return editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var makeStylesheetLoadingPromises = function (editor, css, framedFonts) {\n var promises = [new promiseObj(function (resolve, reject) {\n return getStyleSheetLoader$1(editor).loadAll(css, resolve, reject);\n })];\n if (editor.inline) {\n return promises;\n } else {\n return promises.concat([new promiseObj(function (resolve, reject) {\n return editor.ui.styleSheetLoader.loadAll(framedFonts, resolve, reject);\n })]);\n }\n };\n var loadContentCss = function (editor) {\n var styleSheetLoader = getStyleSheetLoader$1(editor);\n var fontCss = getFontCss(editor);\n var css = editor.contentCSS;\n var removeCss = function () {\n styleSheetLoader.unloadAll(css);\n if (!editor.inline) {\n editor.ui.styleSheetLoader.unloadAll(fontCss);\n }\n };\n var loaded = function () {\n if (editor.removed) {\n removeCss();\n } else {\n editor.on('remove', removeCss);\n }\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 var allStylesheets = promiseObj.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n if (editor.settings.content_style) {\n appendStyle(editor, editor.settings.content_style);\n }\n return allStylesheets;\n };\n var preInit = function (editor) {\n var settings = editor.settings, doc = editor.getDoc(), body = editor.getBody();\n firePreInit(editor);\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$6.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n var directionality = getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\n }\n if (settings.protect) {\n editor.on('BeforeSetContent', function (e) {\n Tools.each(settings.protect, function (pattern) {\n e.content = e.content.replace(pattern, function (str) {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', function () {\n editor.addVisual(editor.getBody());\n });\n editor.on('compositionstart compositionend', function (e) {\n editor.composing = e.type === 'compositionstart';\n });\n };\n var loadInitialContent = function (editor) {\n if (!isRtc(editor)) {\n editor.load({\n initial: true,\n format: 'html'\n });\n }\n editor.startContent = editor.getContent({ format: 'raw' });\n };\n var initEditorWithInitialContent = function (editor) {\n if (editor.removed !== true) {\n loadInitialContent(editor);\n initEditor(editor);\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$6.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = document;\n editor.contentWindow = window;\n editor.bodyElement = targetElm;\n editor.contentAreaContainer = targetElm;\n }\n var body = editor.getBody();\n body.disabled = true;\n editor.readonly = !!settings.readonly;\n if (!editor.readonly) {\n if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = editor.getParam('content_editable_state', true);\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(settings);\n editor.dom = DOMUtils(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n hex_colors: settings.force_hex_style_colors,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: function () {\n return editor.inline;\n },\n schema: editor.schema,\n contentCssCors: shouldUseContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n editor.annotator = Annotator(editor);\n editor.formatter = Formatter(editor);\n editor.undoManager = UndoManager(editor);\n editor._nodeChangeDispatcher = new NodeChange(editor);\n editor._selectionOverrides = SelectionOverrides(editor);\n setup$e(editor);\n setup$3(editor);\n if (!isRtc(editor)) {\n setup$2(editor);\n }\n var caret = setup$4(editor);\n setup$f(editor, caret);\n setup$d(editor);\n setup$g(editor);\n var setupRtcThunk = setup$i(editor);\n preInit(editor);\n setupRtcThunk.fold(function () {\n loadContentCss(editor).then(function () {\n return initEditorWithInitialContent(editor);\n });\n }, function (setupRtc) {\n editor.setProgressState(true);\n loadContentCss(editor).then(function () {\n setupRtc().then(function (_rtcMode) {\n editor.setProgressState(false);\n initEditorWithInitialContent(editor);\n }, function (err) {\n editor.notificationManager.open({\n type: 'error',\n text: String(err)\n });\n initEditorWithInitialContent(editor);\n });\n });\n });\n };\n\n var DOM$5 = DOMUtils.DOM;\n var relaxDomain = function (editor, ifr) {\n if (document.domain !== window.location.hostname && Env.browser.isIE()) {\n var bodyUuid = uuid('mce');\n editor[bodyUuid] = function () {\n initContentBody(editor);\n };\n var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n DOM$5.setAttrib(ifr, 'src', domainRelaxUrl);\n return true;\n }\n return false;\n };\n var createIframeElement = function (id, title, height, customAttrs) {\n var iframe = SugarElement.fromTag('iframe');\n setAll$1(iframe, customAttrs);\n setAll$1(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title: title\n });\n add$1(iframe, 'tox-edit-area__iframe');\n return iframe;\n };\n var getIframeHtml = function (editor) {\n var iframeHTML = getDocType(editor) + '';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n var bodyId = getBodyId(editor);\n var bodyClass = getBodyClass(editor);\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '
    ';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var iframeTranslatedTitle = editor.translate(getIframeTitle(editor));\n var ifr = createIframeElement(editor.id, iframeTranslatedTitle, 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$4 = DOMUtils.DOM;\n var initPlugin = function (editor, initializedPlugins, plugin) {\n var Plugin = PluginManager.get(plugin);\n var pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n Tools.each(PluginManager.dependencies(plugin), function (dep) {\n initPlugin(editor, initializedPlugins, dep);\n });\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n editor.plugins[plugin] = pluginInstance;\n if (pluginInstance.init) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n pluginInitError(editor, plugin, e);\n }\n }\n };\n var trimLegacyPrefix = function (name) {\n return name.replace(/^\\-/, '');\n };\n var initPlugins = function (editor) {\n var initializedPlugins = [];\n Tools.each(getPlugins(editor).split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initIcons = function (editor) {\n var iconPackName = Tools.trim(getIconPackName(editor));\n var currentIcons = editor.ui.registry.getAll().icons;\n var loadIcons = __assign(__assign({}, IconManager.get('default').icons), IconManager.get(iconPackName).icons);\n each$j(loadIcons, function (svgData, icon) {\n if (!has$2(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$1(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n var Theme = ThemeManager.get(theme);\n editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n if (editor.theme.init) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n }\n } else {\n editor.theme = {};\n }\n };\n var renderFromLoadedTheme = function (editor) {\n return editor.theme.renderUI();\n };\n var renderFromThemeFunc = function (editor) {\n var elm = editor.getElement();\n var theme = getTheme(editor);\n var info = theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n var createThemeFalseResult = function (element) {\n return {\n editorContainer: element,\n iframeContainer: element,\n api: {}\n };\n };\n var renderThemeFalseIframe = function (targetElement) {\n var iframeContainer = DOM$4.create('div');\n DOM$4.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$1(getTheme(editor))) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(getTheme(editor))) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var augmentEditorUiApi = function (editor, api) {\n var uiApiFacade = {\n show: Optional.from(api.show).getOr(noop),\n hide: Optional.from(api.hide).getOr(noop),\n disable: Optional.from(api.disable).getOr(noop),\n isDisabled: Optional.from(api.isDisabled).getOr(never),\n enable: function () {\n if (!editor.mode.isReadOnly()) {\n Optional.from(api.enable).map(call);\n }\n }\n };\n editor.ui = __assign(__assign({}, editor.ui), uiApiFacade);\n };\n var init = function (editor) {\n editor.fire('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initPlugins(editor);\n var renderInfo = renderThemeUi(editor);\n augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n var boxInfo = {\n editorContainer: renderInfo.editorContainer,\n iframeContainer: renderInfo.iframeContainer\n };\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n return initContentBody(editor);\n } else {\n return init$1(editor, boxInfo);\n }\n };\n\n var DOM$3 = DOMUtils.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var languageCode = getLanguageCode(editor);\n var languageUrl = getLanguageUrl(editor);\n if (I18n.hasCode(languageCode) === false && languageCode !== 'en') {\n var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js';\n scriptLoader.add(url_1, noop, undefined, function () {\n languageLoadError(editor, url_1, languageCode);\n });\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var theme = getTheme(editor);\n if (isString$1(theme)) {\n if (!hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n var themeUrl = getThemeUrl(editor);\n if (themeUrl) {\n ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n } else {\n ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n }\n }\n scriptLoader.loadQueue(function () {\n ThemeManager.waitFor(theme, callback);\n });\n } else {\n callback();\n }\n };\n var getIconsUrlMetaFromUrl = function (editor) {\n return Optional.from(getIconsUrl(editor)).filter(function (url) {\n return url.length > 0;\n }).map(function (url) {\n return {\n url: url,\n name: Optional.none()\n };\n });\n };\n var getIconsUrlMetaFromName = function (editor, name, suffix) {\n return Optional.from(name).filter(function (name) {\n return name.length > 0 && !IconManager.has(name);\n }).map(function (name) {\n return {\n url: editor.editorManager.baseURL + '/icons/' + name + '/icons' + suffix + '.js',\n name: Optional.some(name)\n };\n });\n };\n var loadIcons = function (scriptLoader, editor, suffix) {\n var defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n var customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(function () {\n return getIconsUrlMetaFromName(editor, getIconPackName(editor), '');\n });\n each$k(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$1(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(editor);\n }\n }, editor, function () {\n if (!editor.removed) {\n init(editor);\n }\n });\n });\n };\n var getStyleSheetLoader = 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$3.unbind(window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$3.bind(window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n if (!Env.contentEditable) {\n return;\n }\n var element = SugarElement.fromDom(editor.getElement());\n var snapshot = clone$3(element);\n editor.on('remove', function () {\n eachr(element.dom.attributes, function (attr) {\n return remove$6(element, attr.name);\n });\n setAll$1(element, snapshot);\n });\n editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n if (!isInline(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$3.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n DOM$3.insertAfter(DOM$3.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$3.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$3.encode(e.content);\n }\n });\n }\n if (shouldAddFormSubmitTrigger(editor)) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (shouldAddUnloadTrigger(editor)) {\n editor._beforeUnload = function () {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n\n var addVisual = function (editor, elm) {\n return addVisual$1(editor, elm);\n };\n\n var legacyPropNames = {\n 'font-size': 'size',\n 'font-family': 'face'\n };\n var getSpecifiedFontProp = function (propName, rootElm, elm) {\n var getProperty = function (elm) {\n return getRaw(elm, propName).orThunk(function () {\n if (name(elm) === 'font') {\n return get$9(legacyPropNames, propName).bind(function (legacyPropName) {\n return getOpt(elm, legacyPropName);\n });\n } else {\n return Optional.none();\n }\n });\n };\n var isRoot = function (elm) {\n return eq(SugarElement.fromDom(rootElm), elm);\n };\n return closest$1(SugarElement.fromDom(elm), function (elm) {\n return getProperty(elm);\n }, isRoot);\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n };\n var getFontProp = function (propName) {\n return function (rootElm, elm) {\n return Optional.from(elm).map(SugarElement.fromDom).filter(isElement$6).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$7(container) ? container.parentNode : container;\n });\n };\n var getCaretElement = function (editor) {\n return Optional.from(editor.selection.getRng()).bind(function (rng) {\n var root = editor.getBody();\n var atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n });\n };\n var bindRange = function (editor, binder) {\n return getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$6).bind(binder);\n };\n var mapRange = function (editor, mapper) {\n return bindRange(editor, compose1(Optional.some, mapper));\n };\n\n var fromFontSizeNumber = function (editor, value) {\n if (/^[0-9.]+$/.test(value)) {\n var fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n var fontSizes = getFontStyleValues(editor);\n var fontClasses = getFontSizeClasses(editor);\n if (fontClasses) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n var normalizeFontNames = function (font) {\n var fonts = font.split(/\\s*,\\s*/);\n return map$3(fonts, function (font) {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, '\\''))) {\n return '\\'' + font + '\\'';\n } else {\n return font;\n }\n }).join(',');\n };\n var fontNameAction = function (editor, value) {\n var font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n editor.nodeChanged();\n };\n var fontNameQuery = function (editor) {\n return mapRange(editor, function (elm) {\n return getFontFamily(editor.getBody(), elm.dom);\n }).getOr('');\n };\n var fontSizeAction = function (editor, value) {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontSizeQuery = function (editor) {\n return mapRange(editor, function (elm) {\n return getFontSize(editor.getBody(), elm.dom);\n }).getOr('');\n };\n\n var lineHeightQuery = function (editor) {\n return mapRange(editor, function (elm) {\n var root = SugarElement.fromDom(editor.getBody());\n var specifiedStyle = closest$1(elm, function (elm) {\n return getRaw(elm, 'line-height');\n }, curry(eq, root));\n var computedStyle = function () {\n var lineHeight = parseFloat(get$5(elm, 'line-height'));\n var fontSize = parseFloat(get$5(elm, 'font-size'));\n return String(lineHeight / fontSize);\n };\n return specifiedStyle.getOrThunk(computedStyle);\n }).getOr('');\n };\n var lineHeightAction = function (editor, lineHeight) {\n editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n editor.nodeChanged();\n };\n\n var processValue = function (value) {\n if (typeof value !== 'string') {\n var 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 = function (editor, value) {\n var result = processValue(value);\n insertContent(editor, result.content, result.details);\n };\n\n var each$5 = Tools.each;\n var map = Tools.map, inArray = 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 (command.toLowerCase() !== 'mcefocus') {\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n self.editor.focus();\n } else {\n restore(self.editor);\n }\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$5(this.editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n state = true;\n return false;\n }\n });\n if (state) {\n return state;\n }\n if (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = self.editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n EditorCommands.prototype.queryCommandState = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.state[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.queryCommandValue = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.value[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n EditorCommands.prototype.addCommands = function (commandList, type) {\n if (type === void 0) {\n type = 'exec';\n }\n var self = this;\n each$5(commandList, function (callback, command) {\n each$5(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);\n this.editor.nodeChanged();\n };\n EditorCommands.prototype.storeSelection = function (type) {\n this.selectionBookmark = this.editor.selection.getBookmark(type);\n };\n EditorCommands.prototype.restoreSelection = function () {\n this.editor.selection.moveToBookmark(this.selectionBookmark);\n };\n EditorCommands.prototype.setupCommands = function (editor) {\n var self = this;\n this.addCommands({\n 'mceResetDesignMode,mceBeginUndoLevel': noop,\n 'mceEndUndoLevel,mceAddUndoLevel': function () {\n editor.undoManager.add();\n },\n 'mceFocus': function (_command, _ui, value) {\n focus(editor, value);\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$5('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: value });\n },\n 'FontName': function (command, ui, value) {\n fontNameAction(editor, value);\n },\n 'FontSize': function (command, ui, value) {\n fontSizeAction(editor, value);\n },\n 'LineHeight': function (command, ui, value) {\n lineHeightAction(editor, value);\n },\n 'Lang': function (command, ui, lang) {\n self.toggleFormat(command, {\n value: lang.code,\n customValue: lang.customCode\n });\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(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(editor, value);\n },\n 'mceToggleFormat': function (command, ui, value) {\n self.toggleFormat(value);\n },\n 'mceSetContent': function (command, ui, value) {\n editor.setContent(value);\n },\n 'Indent,Outdent': function (command) {\n handle(editor, command);\n },\n 'mceRepaint': noop,\n 'InsertHorizontalRule': function () {\n editor.execCommand('mceInsertContent', false, '
    ');\n },\n 'mceToggleVisualAid': function () {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n },\n 'mceReplaceContent': function (command, ui, value) {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n },\n 'mceInsertLink': function (command, ui, value) {\n if (typeof value === 'string') {\n value = { href: value };\n }\n var anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n value.href = value.href.replace(/ /g, '%20');\n if (!anchor || !value.href) {\n editor.formatter.remove('link');\n }\n if (value.href) {\n editor.formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$4);\n if (editingHost) {\n var rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n insert$1(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var selection = editor.selection;\n var nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n var matches = map(nodes, function (node) {\n return !!editor.formatter.matchNode(node, name);\n });\n return inArray(matches, true) !== -1;\n };\n };\n self.addCommands({\n 'JustifyLeft': alignStates('alignleft'),\n 'JustifyCenter': alignStates('aligncenter'),\n 'JustifyRight': alignStates('alignright'),\n 'JustifyFull': alignStates('alignjustify'),\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n return self.isFormatMatch(command);\n },\n 'mceBlockQuote': function () {\n return self.isFormatMatch('blockquote');\n },\n 'Outdent': function () {\n return canOutdent(editor);\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol');\n return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n }\n }, 'state');\n self.addCommands({\n Undo: function () {\n editor.undoManager.undo();\n },\n Redo: function () {\n editor.undoManager.redo();\n }\n });\n self.addQueryValueHandler('FontName', function () {\n return fontNameQuery(editor);\n }, this);\n self.addQueryValueHandler('FontSize', function () {\n return fontSizeQuery(editor);\n }, this);\n self.addQueryValueHandler('LineHeight', function () {\n return lineHeightQuery(editor);\n }, this);\n };\n return EditorCommands;\n }();\n\n var internalContentEditableAttr = 'data-mce-contenteditable';\n var toggleClass = function (elm, cls, state) {\n if (has(elm, cls) && state === false) {\n remove$3(elm, cls);\n } else if (state) {\n add$1(elm, cls);\n }\n };\n var setEditorCommandState = function (editor, cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (ex) {\n }\n };\n var setContentEditable = function (elm, state) {\n elm.dom.contentEditable = state ? 'true' : 'false';\n };\n var switchOffContentEditableTrue = function (elm) {\n each$k(descendants(elm, '*[contenteditable=\"true\"]'), function (elm) {\n set$1(elm, internalContentEditableAttr, 'true');\n setContentEditable(elm, false);\n });\n };\n var switchOnContentEditableTrue = function (elm) {\n each$k(descendants(elm, '*[' + internalContentEditableAttr + '=\"true\"]'), function (elm) {\n remove$6(elm, internalContentEditableAttr);\n setContentEditable(elm, true);\n });\n };\n var removeFakeSelection = function (editor) {\n Optional.from(editor.selection.getNode()).each(function (elm) {\n elm.removeAttribute('data-mce-selected');\n });\n };\n var restoreFakeSelection = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var toggleReadOnly = function (editor, state) {\n var body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', state);\n if (state) {\n editor.selection.controlSelection.hideResizeRect();\n editor._selectionOverrides.hideFakeCaret();\n removeFakeSelection(editor);\n editor.readonly = true;\n setContentEditable(body, false);\n switchOffContentEditableTrue(body);\n } else {\n editor.readonly = false;\n setContentEditable(body, true);\n switchOnContentEditableTrue(body);\n setEditorCommandState(editor, 'StyleWithCSS', false);\n setEditorCommandState(editor, 'enableInlineTableEditing', false);\n setEditorCommandState(editor, 'enableObjectResizing', false);\n if (hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n }\n };\n var isReadOnly = function (editor) {\n return editor.readonly;\n };\n var registerFilters = function (editor) {\n editor.parser.addAttributeFilter('contenteditable', function (nodes) {\n if (isReadOnly(editor)) {\n each$k(nodes, function (node) {\n node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n node.attr('contenteditable', 'false');\n });\n }\n });\n editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) {\n if (isReadOnly(editor)) {\n each$k(nodes, function (node) {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n var registerReadOnlyContentFilters = function (editor) {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', function () {\n registerFilters(editor);\n });\n }\n };\n var isClickEvent = function (e) {\n return e.type === 'click';\n };\n var getAnchorHrefOpt = function (editor, elm) {\n var isRoot = function (elm) {\n return eq(elm, SugarElement.fromDom(editor.getBody()));\n };\n return closest$2(elm, 'a', isRoot).bind(function (a) {\n return getOpt(a, 'href');\n });\n };\n var processReadonlyEvents = function (editor, e) {\n if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n var elm = SugarElement.fromDom(e.target);\n getAnchorHrefOpt(editor, elm).each(function (href) {\n e.preventDefault();\n if (/^#/.test(href)) {\n var targetEl = editor.dom.select(href + ',[name=\"' + removeLeading(href, '#') + '\"]');\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes');\n }\n });\n }\n };\n var registerReadOnlySelectionBlockers = function (editor) {\n editor.on('ShowCaret', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('ObjectSelected', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n };\n\n var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n var EventDispatcher = function () {\n function EventDispatcher(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n EventDispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n EventDispatcher.prototype.fire = function (name, args) {\n var lcName = name.toLowerCase();\n var event = normalize$3(lcName, args || {}, this.scope);\n if (this.settings.beforeFire) {\n this.settings.beforeFire(event);\n }\n var handlers = this.bindings[lcName];\n if (handlers) {\n for (var i = 0, l = handlers.length; i < l; i++) {\n var callback = handlers[i];\n if (callback.removed) {\n continue;\n }\n if (callback.once) {\n this.off(lcName, callback.func);\n }\n if (event.isImmediatePropagationStopped()) {\n return event;\n }\n if (callback.func.call(this.scope, event) === false) {\n event.preventDefault();\n return event;\n }\n }\n }\n return event;\n };\n EventDispatcher.prototype.on = function (name, callback, prepend, extra) {\n if (callback === false) {\n callback = never;\n }\n if (callback) {\n var wrappedCallback = {\n func: callback,\n removed: false\n };\n if (extra) {\n Tools.extend(wrappedCallback, extra);\n }\n var names = name.toLowerCase().split(' ');\n var i = names.length;\n while (i--) {\n var currentName = names[i];\n var handlers = this.bindings[currentName];\n if (!handlers) {\n handlers = [];\n this.toggleEvent(currentName, true);\n }\n if (prepend) {\n handlers = __spreadArray([wrappedCallback], handlers);\n } else {\n handlers = __spreadArray(__spreadArray([], handlers), [wrappedCallback]);\n }\n this.bindings[currentName] = handlers;\n }\n }\n return this;\n };\n EventDispatcher.prototype.off = function (name, callback) {\n var _this = this;\n if (name) {\n var names = name.toLowerCase().split(' ');\n var i = names.length;\n while (i--) {\n var currentName = names[i];\n var handlers = this.bindings[currentName];\n if (!currentName) {\n each$j(this.bindings, function (_value, bindingName) {\n _this.toggleEvent(bindingName, false);\n delete _this.bindings[bindingName];\n });\n return this;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n var filteredHandlers = partition(handlers, function (handler) {\n return handler.func === callback;\n });\n handlers = filteredHandlers.fail;\n this.bindings[currentName] = handlers;\n each$k(filteredHandlers.pass, function (handler) {\n handler.removed = true;\n });\n }\n if (!handlers.length) {\n this.toggleEvent(name, false);\n delete this.bindings[currentName];\n }\n }\n }\n } else {\n each$j(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$2 = DOMUtils.DOM;\n var customEventRootDelegates;\n var getEventTarget = function (editor, eventName) {\n if (eventName === 'selectionchange') {\n return editor.getDoc();\n }\n if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n return editor.getDoc().documentElement;\n }\n var eventRoot = getEventRoot(editor);\n if (eventRoot) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$2.select(eventRoot)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n var isListening = function (editor) {\n return !editor.hidden && !isReadOnly(editor);\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly(editor)) {\n processReadonlyEvents(editor, e);\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n var eventRootElm = getEventTarget(editor, eventName);\n if (getEventRoot(editor)) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n each$j(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$2.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$2.bind(eventRootElm, eventName, delegate);\n } else {\n delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$2.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 (self.removed) {\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$j(self.delegates, function (value, name) {\n self.dom.unbind(getEventTarget(self, name), name, value);\n });\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n });\n\n var defaultModes = [\n 'design',\n 'readonly'\n ];\n var switchToMode = function (editor, activeMode, availableModes, mode) {\n var oldMode = availableModes[activeMode.get()];\n var newMode = availableModes[mode];\n try {\n newMode.activate();\n } catch (e) {\n console.error('problem while activating editor mode ' + mode + ':', e);\n return;\n }\n oldMode.deactivate();\n if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n toggleReadOnly(editor, newMode.editorReadOnly);\n }\n activeMode.set(mode);\n fireSwitchMode(editor, mode);\n };\n var setMode = function (editor, availableModes, activeMode, mode) {\n if (mode === activeMode.get()) {\n return;\n } else if (!has$2(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$3(defaultModes, mode)) {\n throw new Error('Cannot override default mode ' + mode);\n }\n return __assign(__assign({}, availableModes), (_a = {}, _a[mode] = __assign(__assign({}, api), {\n deactivate: function () {\n try {\n api.deactivate();\n } catch (e) {\n console.error('problem while deactivating editor mode ' + mode + ':', e);\n }\n }\n }), _a));\n };\n\n var create$4 = function (editor) {\n var activeMode = Cell('design');\n var availableModes = Cell({\n design: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: false\n },\n readonly: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: true\n }\n });\n registerReadOnlyContentFilters(editor);\n registerReadOnlySelectionBlockers(editor);\n return {\n isReadOnly: function () {\n return isReadOnly(editor);\n },\n set: function (mode) {\n return setMode(editor, availableModes.get(), activeMode, mode);\n },\n get: function () {\n return activeMode.get();\n },\n register: function (mode, api) {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n var each$4 = Tools.each, explode$1 = Tools.explode;\n var keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n var parseShortcut = function (pattern) {\n var key;\n var shortcut = {};\n each$4(explode$1(pattern.toLowerCase(), '+'), function (value) {\n if (value in modifierNames) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n var id = [shortcut.keyCode];\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (Env.mac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (Env.mac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n var Shortcuts = function () {\n function Shortcuts(editor) {\n this.shortcuts = {};\n this.pendingPatterns = [];\n this.editor = editor;\n var self = this;\n editor.on('keyup keypress keydown', function (e) {\n if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$4(self.shortcuts, function (shortcut) {\n if (self.matchShortcut(e, shortcut)) {\n self.pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n self.executeShortcutAction(shortcut);\n }\n return true;\n }\n });\n if (self.matchShortcut(e, self.pendingPatterns[0])) {\n if (self.pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n self.executeShortcutAction(self.pendingPatterns[0]);\n }\n }\n self.pendingPatterns.shift();\n }\n }\n });\n }\n Shortcuts.prototype.add = function (pattern, desc, cmdFunc, scope) {\n var self = this;\n var func = self.normalizeCommandFunc(cmdFunc);\n each$4(explode$1(Tools.trim(pattern)), function (pattern) {\n var shortcut = self.createShortcut(pattern, desc, func, scope);\n self.shortcuts[shortcut.id] = shortcut;\n });\n return true;\n };\n Shortcuts.prototype.remove = function (pattern) {\n var shortcut = this.createShortcut(pattern);\n if (this.shortcuts[shortcut.id]) {\n delete this.shortcuts[shortcut.id];\n return true;\n }\n return false;\n };\n Shortcuts.prototype.normalizeCommandFunc = function (cmdFunc) {\n var self = this;\n var cmd = cmdFunc;\n if (typeof cmd === 'string') {\n return function () {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n return function () {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n } else {\n return cmd;\n }\n };\n Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts = Tools.map(explode$1(pattern, '>'), parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || this.editor\n });\n return Tools.extend(shortcuts[0], {\n desc: this.editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n };\n Shortcuts.prototype.hasModifier = function (e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n };\n Shortcuts.prototype.isFunctionKey = function (e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n };\n Shortcuts.prototype.matchShortcut = function (e, shortcut) {\n if (!shortcut) {\n return false;\n }\n if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n return false;\n }\n if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n return false;\n }\n if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n e.preventDefault();\n return true;\n }\n return false;\n };\n Shortcuts.prototype.executeShortcutAction = function (shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n };\n return Shortcuts;\n }();\n\n var create$3 = 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$3();\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$3 = Tools.each, trim = 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(url);\n this.settings = settings || {};\n var baseUri = this.settings.base_uri;\n var self = this;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n var isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(document.location.href).directory;\n if (this.settings.base_uri && this.settings.base_uri.protocol == '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n var match = /([^#?]*)([#?]?.*)/.exec(url);\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n var urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n each$3(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$3(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$1 = DOMUtils.DOM;\n var extend$3 = Tools.extend, each$2 = Tools.each;\n var resolve = Tools.resolve;\n var ie = Env.ie;\n var Editor = function () {\n function Editor(id, settings, editorManager) {\n var _this = this;\n this.plugins = {};\n this.contentCSS = [];\n this.contentStyles = [];\n this.loadedCSS = {};\n this.isNotDirty = false;\n this.editorManager = editorManager;\n this.documentBaseUrl = editorManager.documentBaseURL;\n extend$3(this, EditorObservable);\n this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings);\n if (this.settings.suffix) {\n editorManager.suffix = this.settings.suffix;\n }\n this.suffix = editorManager.suffix;\n if (this.settings.base_url) {\n editorManager._setBaseUrl(this.settings.base_url);\n }\n this.baseUri = editorManager.baseURI;\n if (this.settings.referrer_policy) {\n ScriptLoader.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy);\n DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy);\n }\n AddOnManager.languageLoad = this.settings.language_load;\n AddOnManager.baseURL = editorManager.baseURL;\n this.id = id;\n this.setDirty(false);\n this.documentBaseURI = new URI(this.settings.document_base_url, { base_uri: this.baseUri });\n this.baseURI = this.baseUri;\n this.inline = !!this.settings.inline;\n this.shortcuts = new Shortcuts(this);\n this.editorCommands = new EditorCommands(this);\n if (this.settings.cache_suffix) {\n Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n }\n this.ui = {\n registry: registry(),\n styleSheetLoader: undefined,\n show: noop,\n hide: noop,\n enable: noop,\n disable: noop,\n isDisabled: never\n };\n var self = this;\n var modeInstance = create$4(self);\n this.mode = modeInstance;\n this.setMode = modeInstance.set;\n editorManager.fire('SetupEditor', { editor: this });\n this.execCallback('setup', this);\n this.$ = DomQuery.overrideDefaults(function () {\n return {\n context: _this.inline ? _this.getBody() : _this.getDoc(),\n element: _this.getBody()\n };\n });\n }\n Editor.prototype.render = function () {\n render(this);\n };\n Editor.prototype.focus = function (skipFocus) {\n this.execCommand('mceFocus', false, skipFocus);\n };\n Editor.prototype.hasFocus = function () {\n return hasFocus(this);\n };\n Editor.prototype.execCallback = function (name) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var self = this;\n var callback = self.settings[name], scope;\n if (!callback) {\n return;\n }\n if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n callback = scope.func;\n scope = scope.scope;\n }\n if (typeof callback === 'string') {\n scope = callback.replace(/\\.\\w+$/, '');\n scope = scope ? resolve(scope) : 0;\n callback = resolve(callback);\n self.callbackLookup = self.callbackLookup || {};\n self.callbackLookup[name] = {\n func: callback,\n scope: scope\n };\n }\n return callback.apply(scope || self, x);\n };\n Editor.prototype.translate = function (text) {\n return I18n.translate(text);\n };\n Editor.prototype.getParam = function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n };\n Editor.prototype.hasPlugin = function (name, loaded) {\n var hasPlugin = contains$3(getPlugins(this).split(/[ ,]/), name);\n if (hasPlugin) {\n return loaded ? PluginManager.get(name) !== undefined : true;\n } else {\n return false;\n }\n };\n Editor.prototype.nodeChanged = function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n };\n Editor.prototype.addCommand = function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n };\n Editor.prototype.addQueryStateHandler = function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n };\n Editor.prototype.addQueryValueHandler = function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n };\n Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n };\n Editor.prototype.execCommand = function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n };\n Editor.prototype.queryCommandState = function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n };\n Editor.prototype.queryCommandValue = function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n };\n Editor.prototype.queryCommandSupported = function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n };\n Editor.prototype.show = function () {\n var self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = 'true';\n } else {\n DOM$1.show(self.getContainer());\n DOM$1.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 && 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$1.hide(self.getContainer());\n DOM$1.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$1.getParent(self.id, 'form')) {\n each$2(form.elements, function (elm) {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n }\n });\n }\n } else {\n elm.value = html;\n }\n args.element = elm = null;\n if (args.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n };\n Editor.prototype.setContent = function (content, args) {\n return setContent(this, content, args);\n };\n Editor.prototype.getContent = function (args) {\n return getContent(this, args);\n };\n Editor.prototype.insertContent = function (content, args) {\n if (args) {\n content = extend$3({ content: content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n };\n Editor.prototype.resetContent = function (initialContent) {\n if (initialContent === undefined) {\n setContent(this, this.startContent, { format: 'raw' });\n } else {\n setContent(this, initialContent);\n }\n this.undoManager.reset();\n this.setDirty(false);\n this.nodeChanged();\n };\n Editor.prototype.isDirty = function () {\n return !this.isNotDirty;\n };\n Editor.prototype.setDirty = function (state) {\n var oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.fire('dirty');\n }\n };\n Editor.prototype.getContainer = function () {\n var self = this;\n if (!self.container) {\n self.container = DOM$1.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$1.get(this.id);\n }\n return this.targetElm;\n };\n Editor.prototype.getWin = function () {\n var self = this;\n var elm;\n if (!self.contentWindow) {\n elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n };\n Editor.prototype.getDoc = function () {\n var self = this;\n var win;\n if (!self.contentDocument) {\n win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n };\n Editor.prototype.getBody = function () {\n var doc = this.getDoc();\n return this.bodyElement || (doc ? doc.body : null);\n };\n Editor.prototype.convertURL = function (url, name, elm) {\n var self = this, settings = self.settings;\n if (settings.urlconverter_callback) {\n return self.execCallback('urlconverter_callback', url, elm, true, name);\n }\n if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n if (settings.relative_urls) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n return url;\n };\n Editor.prototype.addVisual = function (elm) {\n addVisual(this, elm);\n };\n Editor.prototype.remove = function () {\n remove(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 = DOMUtils.DOM;\n var explode = Tools.explode, each$1 = Tools.each, extend$2 = 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$1(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$4(editors, function (editor) {\n return targetEditor !== editor;\n });\n if (EditorManager.activeEditor === targetEditor) {\n EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n }\n if (EditorManager.focusedEditor === targetEditor) {\n EditorManager.focusedEditor = null;\n }\n return oldEditors.length !== editors.length;\n };\n var purgeDestroyedEditor = function (editor) {\n if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n removeEditorFromList(editor);\n editor.unbindAllNativeEvents();\n editor.destroy(true);\n editor.removed = true;\n editor = null;\n }\n return editor;\n };\n var isQuirksMode = document.compatMode !== 'CSS1Compat';\n var EditorManager = __assign(__assign({}, Observable), {\n baseURI: null,\n baseURL: null,\n defaultSettings: {},\n documentBaseURL: null,\n suffix: null,\n $: DomQuery,\n majorVersion: '5',\n minorVersion: '9.2',\n releaseDate: '2021-09-08',\n editors: legacyEditors,\n i18n: I18n,\n activeEditor: null,\n focusedEditor: null,\n settings: {},\n setup: function () {\n var self = this;\n var baseURL, documentBaseURL, suffix = '';\n documentBaseURL = URI.getDocumentBaseUrl(document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n var preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n var scripts = document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n var src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n var srcScript = src.substring(src.lastIndexOf('/'));\n if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n if (srcScript.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n break;\n }\n }\n if (!baseURL && document.currentScript) {\n var src = document.currentScript.src;\n if (src.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n }\n }\n self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n self.documentBaseURL = documentBaseURL;\n self.baseURI = new URI(self.baseURL);\n self.suffix = suffix;\n setup$l(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$j(pluginBaseUrls, function (pluginBaseUrl, pluginName) {\n AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n });\n }\n },\n init: function (settings) {\n var self = this;\n var result;\n var invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n var isInvalidInlineTarget = function (settings, elm) {\n return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n };\n var createId = function (elm) {\n var id = elm.id;\n if (!id) {\n id = get$9(elm, 'name').filter(function (name) {\n return !DOM.get(name);\n }).getOrThunk(DOM.uniqueId);\n elm.setAttribute('id', id);\n }\n return id;\n };\n var execCallback = function (name) {\n var callback = settings[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, []);\n };\n var hasClass = function (elm, className) {\n return className.constructor === RegExp ? className.test(elm.className) : DOM.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$1(settings.types, function (type) {\n targets = targets.concat(DOM.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM.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$1(explode(l), function (id) {\n var elm = DOM.get(id);\n if (elm) {\n targets.push(elm);\n } else {\n each$1(document.forms, function (f) {\n each$1(f.elements, function (e) {\n if (e.name === id) {\n id = 'mce_editor_' + instanceCounter++;\n DOM.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$1(DOM.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.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = DomQuery.unique(findTargets(settings));\n if (settings.types) {\n each$1(settings.types, function (type) {\n Tools.each(targets, function (elm) {\n if (DOM.is(elm, type.selector)) {\n createEditor(createId(elm), extend$2({}, 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$1(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.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$1(id)) {\n return find$3(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$1(selector)) {\n each$1(DOM.select(selector), function (elm) {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.fire('RemoveEditor', { editor: editor });\n }\n if (editors.length === 0) {\n window.removeEventListener('beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand: function (cmd, ui, value) {\n var self = this, editor = self.get(value);\n switch (cmd) {\n case 'mceAddEditor':\n if (!self.get(value)) {\n new Editor(value, self.settings, self).render();\n }\n return true;\n case 'mceRemoveEditor':\n if (editor) {\n editor.remove();\n }\n return true;\n case 'mceToggleEditor':\n if (!editor) {\n self.execCommand('mceAddEditor', false, value);\n return true;\n }\n if (editor.isHidden()) {\n editor.show();\n } else {\n editor.hide();\n }\n return true;\n }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: function () {\n each$1(editors, function (editor) {\n editor.save();\n });\n },\n addI18n: function (code, items) {\n I18n.add(code, items);\n },\n translate: function (text) {\n return I18n.translate(text);\n },\n setActive: function (editor) {\n var activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.fire('deactivate', { relatedTarget: editor });\n }\n editor.fire('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n },\n _setBaseUrl: function (baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n });\n EditorManager.setup();\n\n var min$1 = Math.min, max$1 = Math.max, round$1 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x = targetRect.x;\n var y = targetRect.y;\n var w = rect.w;\n var h = rect.h;\n var targetW = targetRect.w;\n var targetH = targetRect.h;\n var relChars = (rel || '').split('');\n if (relChars[0] === 'b') {\n y += targetH;\n }\n if (relChars[1] === 'r') {\n x += targetW;\n }\n if (relChars[0] === 'c') {\n y += round$1(targetH / 2);\n }\n if (relChars[1] === 'c') {\n x += round$1(targetW / 2);\n }\n if (relChars[3] === 'b') {\n y -= h;\n }\n if (relChars[4] === 'r') {\n x -= w;\n }\n if (relChars[3] === 'c') {\n y -= round$1(h / 2);\n }\n if (relChars[4] === 'c') {\n x -= round$1(w / 2);\n }\n return create$2(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$2(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$1(rect.x, cropRect.x);\n var y1 = max$1(rect.y, cropRect.y);\n var x2 = min$1(rect.x + rect.w, cropRect.x + cropRect.w);\n var y2 = min$1(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$2(x1, y1, x2 - x1, y2 - y1);\n };\n var clamp = 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$1(0, clampRect.x - x1);\n var underflowY1 = max$1(0, clampRect.y - y1);\n var overflowX2 = max$1(0, x2 - cx2);\n var overflowY2 = max$1(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$2(x1, y1, x2 - x1, y2 - y1);\n };\n var create$2 = 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$2(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,\n create: create$2,\n fromClientRect: fromClientRect\n };\n\n var awaiter = function (resolveCb, rejectCb, timeout) {\n if (timeout === void 0) {\n timeout = 1000;\n }\n var done = false;\n var timer = null;\n var complete = function (completer) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!done) {\n done = true;\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n completer.apply(null, args);\n }\n };\n };\n var resolve = complete(resolveCb);\n var reject = complete(rejectCb);\n var start = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!done && timer === null) {\n timer = setTimeout(function () {\n return reject.apply(null, args);\n }, timeout);\n }\n };\n return {\n start: start,\n resolve: resolve,\n reject: reject\n };\n };\n var create$1 = 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$1();\n\n var each = Tools.each, extend$1 = Tools.extend;\n var extendClass, initializing;\n var Class = function () {\n };\n Class.extend = extendClass = function (props) {\n var self = this;\n var _super = self.prototype;\n var Class = function () {\n var i, mixins, mixin;\n var self = this;\n if (!initializing) {\n if (self.init) {\n self.init.apply(self, arguments);\n }\n mixins = self.Mixins;\n if (mixins) {\n i = mixins.length;\n while (i--) {\n mixin = mixins[i];\n if (mixin.init) {\n mixin.init.apply(self, arguments);\n }\n }\n }\n }\n };\n var dummy = function () {\n return this;\n };\n var createMethod = function (name, fn) {\n return function () {\n var self = this;\n var tmp = self._super;\n self._super = _super[name];\n var ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n var prototype = new self();\n initializing = false;\n if (props.Mixins) {\n each(props.Mixins, function (mixin) {\n for (var name_1 in mixin) {\n if (name_1 !== 'init') {\n props[name_1] = mixin[name_1];\n }\n }\n });\n if (_super.Mixins) {\n props.Mixins = _super.Mixins.concat(props.Mixins);\n }\n }\n if (props.Methods) {\n each(props.Methods.split(','), function (name) {\n props[name] = dummy;\n });\n }\n if (props.Properties) {\n each(props.Properties.split(','), function (name) {\n var fieldName = '_' + name;\n props[name] = function (value) {\n var self = this;\n if (value !== undefined) {\n self[fieldName] = value;\n return self;\n }\n return self[fieldName];\n };\n });\n }\n if (props.Statics) {\n each(props.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (props.Defaults && _super.Defaults) {\n props.Defaults = extend$1({}, _super.Defaults, props.Defaults);\n }\n each$j(props, function (member, name) {\n if (typeof member === 'function' && _super[name]) {\n prototype[name] = createMethod(name, member);\n } else {\n prototype[name] = member;\n }\n });\n Class.prototype = prototype;\n Class.constructor = Class;\n Class.extend = extendClass;\n return Class;\n };\n\n var min = Math.min, max = Math.max, round = 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(r, min(g, b));\n var maxRGB = max(r, max(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(h),\n s: round(s * 100),\n v: round(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(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round(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(255 * (r + match));\n g = round(255 * (g + match));\n b = round(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$1(data)) {\n return data;\n }\n return data.replace(/[\\u0080-\\uFFFF]/g, function (match) {\n var hexCode = match.charCodeAt(0).toString(16);\n return '\\\\u' + '0000'.substring(hexCode.length) + hexCode;\n });\n };\n var JSONUtils = {\n serialize: serialize,\n parse: function (text) {\n try {\n return JSON.parse(text);\n } catch (ex) {\n }\n }\n };\n\n var JSONP = {\n callbacks: {},\n count: 0,\n send: function (settings) {\n var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count;\n var id = 'tinymce_jsonp_' + count;\n self.callbacks[count] = function (json) {\n dom.remove(id);\n delete self.callbacks[count];\n settings.callback(json);\n };\n dom.add(dom.doc.body, 'script', {\n id: id,\n src: settings.url,\n type: 'text/javascript'\n });\n self.count++;\n }\n };\n\n var XHR = __assign(__assign({}, Observable), {\n send: function (settings) {\n var xhr, count = 0;\n var ready = function () {\n if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n if (settings.success && count < 10000 && xhr.status === 200) {\n settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n } else if (settings.error) {\n settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n }\n xhr = null;\n } else {\n Delay.setTimeout(ready, 10);\n }\n };\n settings.scope = settings.scope || this;\n settings.success_scope = settings.success_scope || settings.scope;\n settings.error_scope = settings.error_scope || settings.scope;\n settings.async = settings.async !== false;\n settings.data = settings.data || '';\n XHR.fire('beforeInitialize', { settings: settings });\n xhr = new XMLHttpRequest();\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType(settings.content_type);\n }\n xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n if (settings.crossDomain) {\n xhr.withCredentials = true;\n }\n if (settings.content_type) {\n xhr.setRequestHeader('Content-Type', settings.content_type);\n }\n if (settings.requestheaders) {\n Tools.each(settings.requestheaders, function (header) {\n xhr.setRequestHeader(header.key, header.value);\n });\n }\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr = XHR.fire('beforeSend', {\n xhr: xhr,\n settings: settings\n }).xhr;\n xhr.send(settings.data);\n if (!settings.async) {\n return ready();\n }\n Delay.setTimeout(ready, 10);\n }\n });\n\n var extend = Tools.extend;\n var JSONRequest = function () {\n function JSONRequest(settings) {\n this.settings = extend({}, 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(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 = function () {\n return function () {\n var data = {};\n var keys = [];\n var storage = {\n getItem: function (key) {\n var item = data[key];\n return item ? item : null;\n },\n setItem: function (key, value) {\n keys.push(key);\n data[key] = String(value);\n },\n key: function (index) {\n return keys[index];\n },\n removeItem: function (key) {\n keys = keys.filter(function (k) {\n return k === key;\n });\n delete data[key];\n },\n clear: function () {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: function () {\n return keys.length;\n },\n configurable: false,\n enumerable: false\n });\n return storage;\n }();\n };\n\n var localStorage;\n try {\n var test = '__storage_test__';\n localStorage = window.localStorage;\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n } catch (e) {\n localStorage = create();\n }\n var LocalStorage = localStorage;\n\n var publicApi = {\n geom: { Rect: Rect },\n util: {\n Promise: promiseObj,\n Delay: Delay,\n Tools: Tools,\n VK: VK,\n URI: URI,\n Class: Class,\n EventDispatcher: EventDispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSONUtils,\n JSONRequest: JSONRequest,\n JSONP: JSONP,\n LocalStorage: LocalStorage,\n Color: Color,\n ImageUploader: ImageUploader\n },\n dom: {\n EventUtils: EventUtils,\n Sizzle: Sizzle,\n DomQuery: DomQuery,\n TreeWalker: DomTreeWalker,\n TextSeeker: TextSeeker,\n DOMUtils: DOMUtils,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils,\n Serializer: DomSerializer,\n StyleSheetLoader: StyleSheetLoader,\n ControlSelection: ControlSelection,\n BookmarkManager: BookmarkManager,\n Selection: EditorSelection,\n Event: EventUtils.Event\n },\n html: {\n Styles: Styles,\n Entities: Entities,\n Node: AstNode,\n Schema: Schema,\n SaxParser: SaxParser,\n DomParser: DomParser,\n Writer: Writer,\n Serializer: HtmlSerializer\n },\n Env: Env,\n AddOnManager: AddOnManager,\n Annotator: Annotator,\n Formatter: Formatter,\n UndoManager: UndoManager,\n EditorCommands: EditorCommands,\n WindowManager: WindowManager,\n NotificationManager: NotificationManager,\n EditorObservable: EditorObservable,\n Shortcuts: Shortcuts,\n Editor: Editor,\n FocusManager: FocusManager,\n EditorManager: EditorManager,\n DOM: DOMUtils.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: PluginManager,\n ThemeManager: ThemeManager,\n IconManager: IconManager,\n Resource: Resource,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n create: Tools.create,\n walk: Tools.walk,\n createNS: Tools.createNS,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix,\n isOpera: Env.opera,\n isWebKit: Env.webkit,\n isIE: Env.ie,\n isGecko: Env.gecko,\n isMac: Env.mac\n };\n var tinymce = Tools.extend(EditorManager, publicApi);\n\n var exportToModuleLoaders = function (tinymce) {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n var exportToWindowGlobal = function (tinymce) {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce);\n exportToModuleLoaders(tinymce);\n\n}());\n","// Exports the \"default\" icons for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/icons/default')\n// ES2015:\n// import 'tinymce/icons/default'\nrequire('./icons.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.9.2 (2021-09-08)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var setContent = function (editor, html) {\n editor.focus();\n editor.undoManager.transact(function () {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n var getContent = function (editor) {\n return editor.getContent({ source_view: true });\n };\n\n var open = function (editor) {\n var editorContent = getContent(editor);\n editor.windowManager.open({\n title: 'Source Code',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n type: 'textarea',\n name: 'code'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { code: editorContent },\n onSubmit: function (api) {\n setContent(editor, api.getData().code);\n api.close();\n }\n });\n };\n\n var register$1 = function (editor) {\n editor.addCommand('mceCodeEditor', function () {\n open(editor);\n });\n };\n\n var register = function (editor) {\n var onAction = function () {\n return editor.execCommand('mceCodeEditor');\n };\n editor.ui.registry.addButton('code', {\n icon: 'sourcecode',\n tooltip: 'Source code',\n onAction: onAction\n });\n editor.ui.registry.addMenuItem('code', {\n icon: 'sourcecode',\n text: 'Source code',\n onAction: onAction\n });\n };\n\n function Plugin () {\n global.add('code', function (editor) {\n register$1(editor);\n register(editor);\n return {};\n });\n }\n\n Plugin();\n\n}());\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h1',{staticClass:\"display-heading\"},[_vm._v(\"Newsletter\")]),_c('p',[_vm._v(\"\\n Use this module to blast emails to recipients.\\n \")]),_c('div',{staticClass:\"bs-stepper\"},[_vm._m(0),_c('div',{staticClass:\"bs-stepper-content\"},[_c('div',{staticClass:\"content\",attrs:{\"id\":\"choose-newsletter\",\"role\":\"tabpanel\"}},[_c('form',{attrs:{\"data-vv-scope\":\"formStep1\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.validateStep1($event)}}},[_c('div',{staticClass:\"form-group required\"},[_c('label',[_vm._v(\"Newsletter Template\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formStep1.templateId),expression:\"formStep1.templateId\"},{name:\"validate\",rawName:\"v-validate\",value:('required'),expression:\"'required'\"}],class:{\n 'form-control': true,\n 'is-invalid': _vm.validationErrors.has('formStep1.template')\n },attrs:{\"data-vv-as\":\"newsletter template\",\"name\":\"template\",\"data-vv-validate-on\":\"blur\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.formStep1, \"templateId\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},[_c('option',{domProps:{\"value\":null}},[_vm._v(\"Choose template...\")]),_vm._l((_vm.dropdownEmailTemplates),function(template,index){return _c('option',{key:index,domProps:{\"value\":template.value}},[_vm._v(\"\\n \"+_vm._s(template.text)+\"\\n \")])})],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.validationErrors.has('formStep1.template')),expression:\"validationErrors.has('formStep1.template')\"}],staticClass:\"invalid-feedback\"},[_vm._v(\"\\n \"+_vm._s(_vm.validationErrors.first('formStep1.template'))+\"\\n \")])]),_c('button',{staticClass:\"btn btn-primary btn-primary-insv\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goToStep2}},[_vm._v(\"\\n Next\\n \")])])]),_c('div',{staticClass:\"content\",attrs:{\"id\":\"review-content\",\"role\":\"tabpanel\"}},[_c('form',{attrs:{\"data-vv-scope\":\"formStep2\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.validateStep2($event)}}},[_c('div',{staticClass:\"form-group\"},[_c('label',[_vm._v(\"Newsletter Template Name\")]),_c('input',{staticClass:\"form-control\",attrs:{\"type\":\"text\",\"readonly\":\"\"},domProps:{\"value\":_vm.selectedEmailTemplate?_vm.selectedEmailTemplate.newsletterName:'-'}})]),_c('div',{staticClass:\"form-group\"},[_c('label',[_vm._v(\"Email Will be Sent From\")]),_c('input',{staticClass:\"form-control\",attrs:{\"type\":\"text\",\"readonly\":\"\"},domProps:{\"value\":(_vm.selectedEmailTemplate && _vm.selectedEmailTemplate.emailSenderDetails)?_vm.selectedEmailTemplate.emailSenderDetails.emailAddress:'-'}})]),_c('div',{staticClass:\"form-group\"},[_c('label',[_vm._v(\"Email Subject\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.formStep2.emailSubject),expression:\"formStep2.emailSubject\"},{name:\"validate\",rawName:\"v-validate\",value:('required'),expression:\"'required'\"}],class:{\n 'form-control': true,\n 'is-invalid': _vm.validationErrors.has('formStep2.subject')\n },attrs:{\"name\":\"subject\",\"type\":\"text\",\"data-vv-as\":\"email subject\",\"data-vv-validate-on\":\"blur\"},domProps:{\"value\":(_vm.formStep2.emailSubject)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.formStep2, \"emailSubject\", $event.target.value)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.validationErrors.has('formStep2.subject')),expression:\"validationErrors.has('formStep2.subject')\"}],staticClass:\"invalid-feedback\"},[_vm._v(\"\\n \"+_vm._s(_vm.validationErrors.first('formStep2.subject'))+\"\\n \")])]),_c('div',{staticClass:\"form-group\"},[_c('label',[_vm._v(\"Attachments\")]),_c('div',[(_vm.selectedEmailTemplate && _vm.selectedEmailTemplate.attachments && _vm.selectedEmailTemplate.attachments.length > 0)?_c('div',_vm._l((_vm.selectedEmailTemplate.attachments),function(attachment,index){return _c('div',{key:index},[_vm._v(\"\\n \"+_vm._s(index+1)+\". \"),_c('a',{attrs:{\"href\":\"javascript:void(0)\"},on:{\"click\":function($event){_vm.getAttachment(attachment.attachmentPath)}}},[_vm._v(_vm._s(attachment.fileName))])])})):_c('div',[_c('span',[_vm._v(\"No attachments\")])])])]),_vm._m(1),_c('div',{staticClass:\"mb-3\"},[_c('button',{staticClass:\"btn btn-primary btn-primary-insv\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.previewEmail}},[_vm._v(\"Preview Email\")])]),_c('button',{staticClass:\"btn btn-primary btn-primary-insv mr-2\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goToStep3}},[_vm._v(\"\\n Next\\n \")]),_c('button',{staticClass:\"btn btn-secondary\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.startOver}},[_vm._v(\"\\n Start Over\\n \")])])]),_c('div',{staticClass:\"content\",attrs:{\"id\":\"send-email\",\"role\":\"tabpanel\"}},[_c('div',{staticClass:\"mb-3\"},[_c('h5',[_vm._v(\"Instructions\")]),_c('ol',[_vm._m(2),_vm._m(3),_c('li',[_vm._v(\"\\n Select and upload the file here.\\n \"),_c('br'),_c('div',[_c('form',{attrs:{\"data-vv-scope\":\"formStep3\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.validateStep3($event)}}},[_c('div',[_c('div',{staticClass:\"form-group\"},[_c('div',[_c('input',{directives:[{name:\"validate\",rawName:\"v-validate\",value:('required|mimes:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'),expression:\"'required|mimes:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\"}],class:{'is-invalid': _vm.validationErrors.has('formStep3.userList')},attrs:{\"id\":\"uploadFileInput\",\"type\":\"file\",\"data-vv-as\":\"email recipient list file\",\"name\":\"userList\"}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.validationErrors.has('formStep3.userList')),expression:\"validationErrors.has('formStep3.userList')\"}],staticClass:\"invalid-feedback\"},[_vm._v(\"\\n \"+_vm._s(_vm.validationErrors.first('formStep3.userList'))+\"\\n \")])])]),_c('p',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.submit.isMessageShown),expression:\"submit.isMessageShown\"}],class:{\n 'text-danger': _vm.submit.isError,\n 'mb-3': true\n }},[_vm._v(\"\\n \"+_vm._s(_vm.submit.message)+\"\\n \")])])])])])])]),_c('div',[_c('button',{staticClass:\"btn btn-primary btn-primary-insv mr-2\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.submitForm}},[_vm._v(\"\\n Send Email\\n \")]),_c('button',{staticClass:\"btn btn-secondary\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.backToStep2}},[_vm._v(\"\\n Back to Previous Step\\n \")])])])])]),_c('popup-modal',{ref:\"popupPreview\",attrs:{\"hasCloseButton\":true,\"title\":'Preview Email',\"sizeClass\":\"modal-lg\"}},[_c('template',{slot:\"content\"},[_c('div',{domProps:{\"innerHTML\":_vm._s(this.formStep2.emailContent)}})]),_c('template',{slot:\"footer\"},[_c('div',[_c('button',{staticClass:\"btn btn-primary btn-primary-insv mr-2\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.$refs.popupPreview.hide()}}},[_vm._v(\"Dismiss\")])])])],2),_c('popup-modal',{ref:\"popupSent\",attrs:{\"hasCloseButton\":true,\"title\":'Newsletter Email Saved Successfully!'}},[_c('template',{slot:\"content\"},[_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.submit.message)}})]),_c('template',{slot:\"footer\"},[_c('div',[_c('button',{staticClass:\"btn btn-primary btn-primary-insv mr-2\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.startOver}},[_vm._v(\"Okay\")])])])],2)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"bs-stepper-header\",attrs:{\"role\":\"tablist\"}},[_c('div',{staticClass:\"step\",attrs:{\"data-target\":\"#choose-newsletter\"}},[_c('button',{staticClass:\"step-trigger\",attrs:{\"type\":\"button\",\"role\":\"tab\"}},[_c('span',{staticClass:\"bs-stepper-circle\"},[_vm._v(\"1\")]),_c('span',{staticClass:\"bs-stepper-label\"},[_vm._v(\"Choose Newsletter\")])])]),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"step\",attrs:{\"data-target\":\"#review-content\"}},[_c('button',{staticClass:\"step-trigger\",attrs:{\"type\":\"button\",\"role\":\"tab\"}},[_c('span',{staticClass:\"bs-stepper-circle\"},[_vm._v(\"2\")]),_c('span',{staticClass:\"bs-stepper-label\"},[_vm._v(\"Review Content\")])])]),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"step\",attrs:{\"data-target\":\"#send-email\"}},[_c('button',{staticClass:\"step-trigger\",attrs:{\"type\":\"button\",\"role\":\"tab\"}},[_c('span',{staticClass:\"bs-stepper-circle\"},[_vm._v(\"3\")]),_c('span',{staticClass:\"bs-stepper-label\"},[_vm._v(\"Add Recipients and Send!\")])])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"form-group\"},[_c('label',[_vm._v(\"Email Content\")]),_c('div',[_c('textarea',{staticClass:\"form-html-editor\"})])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_vm._v(\"\\n Download the sample file template here.\\n \"),_c('div',[_c('a',{staticClass:\"mt-1 mb-2 btn btn-primary btn-primary-insv\",attrs:{\"href\":\"/static/samples/newsletter-bulk-receiver-list.xlsx\",\"target\":\"_blank\"}},[_vm._v(\"Download Template File\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_vm._v(\"\\n Open the downloaded file and fill up the file with the required fields. Example as below.\\n \"),_c('div',{staticClass:\"mt-1 mb-2\"},[_c('img',{staticClass:\"img img-fluid\",attrs:{\"src\":\"/static/samples/sample_bulk_newsletter_upload_list.png\"}})])])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.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!./index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=42458261&scoped=true&\"\nimport script from \"./index.vue?vue&type=script&lang=js&\"\nexport * from \"./index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=42458261&scoped=true&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 \"42458261\",\n null\n \n)\n\nexport default component.exports","tinymce.IconManager.add('default', {\n icons: {\n 'accessibility-check': '',\n 'action-next': '',\n 'action-prev': '',\n 'align-center': '',\n 'align-justify': '',\n 'align-left': '',\n 'align-none': '',\n 'align-right': '',\n 'arrow-left': '',\n 'arrow-right': '',\n 'bold': '',\n 'bookmark': '',\n 'border-style': '',\n 'border-width': '',\n 'brightness': '',\n 'browse': '',\n 'cancel': '',\n 'cell-background-color': '',\n 'cell-border-color': '',\n 'change-case': '',\n 'character-count': '',\n 'checklist-rtl': '',\n 'checklist': '',\n 'checkmark': '',\n 'chevron-down': '',\n 'chevron-left': '',\n 'chevron-right': '',\n 'chevron-up': '',\n 'close': '',\n 'code-sample': '',\n 'color-levels': '',\n 'color-picker': '',\n 'color-swatch-remove-color': '',\n 'color-swatch': '',\n 'comment-add': '',\n 'comment': '',\n 'contrast': '',\n 'copy': '',\n 'crop': '',\n 'cut-column': '',\n 'cut-row': '',\n 'cut': '',\n 'document-properties': '',\n 'drag': '',\n 'duplicate-column': '',\n 'duplicate-row': '',\n 'duplicate': '',\n 'edit-block': '',\n 'edit-image': '',\n 'embed-page': '',\n 'embed': '',\n 'emoji': '',\n 'export': '',\n 'fill': '',\n 'flip-horizontally': '',\n 'flip-vertically': '',\n 'format-painter': '',\n 'format': '',\n 'fullscreen': '',\n 'gallery': '',\n 'gamma': '',\n 'help': '',\n 'highlight-bg-color': '',\n 'home': '',\n 'horizontal-rule': '',\n 'image-options': '',\n 'image': '',\n 'indent': '',\n 'info': '',\n 'insert-character': '',\n 'insert-time': '',\n 'invert': '',\n 'italic': '',\n 'language': '',\n 'line-height': '',\n 'line': '',\n 'link': '',\n 'list-bull-circle': '',\n 'list-bull-default': '',\n 'list-bull-square': '',\n 'list-num-default-rtl': '',\n 'list-num-default': '',\n 'list-num-lower-alpha-rtl': '',\n 'list-num-lower-alpha': '',\n 'list-num-lower-greek-rtl': '',\n 'list-num-lower-greek': '',\n 'list-num-lower-roman-rtl': '',\n 'list-num-lower-roman': '',\n 'list-num-upper-alpha-rtl': '',\n 'list-num-upper-alpha': '',\n 'list-num-upper-roman-rtl': '',\n 'list-num-upper-roman': '',\n 'lock': '',\n 'ltr': '',\n 'more-drawer': '',\n 'new-document': '',\n 'new-tab': '',\n 'non-breaking': '',\n 'notice': '',\n 'ordered-list-rtl': '',\n 'ordered-list': '',\n 'orientation': '',\n 'outdent': '',\n 'page-break': '',\n 'paragraph': '',\n 'paste-column-after': '',\n 'paste-column-before': '',\n 'paste-row-after': '',\n 'paste-row-before': '',\n 'paste-text': '',\n 'paste': '',\n 'permanent-pen': '',\n 'plus': '',\n 'preferences': '',\n 'preview': '',\n 'print': '',\n 'quote': '',\n 'redo': '',\n 'reload': '',\n 'remove-formatting': '',\n 'remove': '',\n 'resize-handle': '',\n 'resize': '',\n 'restore-draft': '',\n 'rotate-left': '',\n 'rotate-right': '',\n 'rtl': '',\n 'save': '',\n 'search': '',\n 'select-all': '',\n 'selected': '',\n 'settings': '',\n 'sharpen': '',\n 'sourcecode': '',\n 'spell-check': '',\n 'strike-through': '',\n 'subscript': '',\n 'superscript': '',\n 'table-caption': '',\n 'table-cell-classes': '',\n 'table-cell-properties': '',\n 'table-cell-select-all': '',\n 'table-cell-select-inner': '',\n 'table-classes': '',\n 'table-delete-column': '',\n 'table-delete-row': '',\n 'table-delete-table': '',\n 'table-insert-column-after': '',\n 'table-insert-column-before': '',\n 'table-insert-row-above': '',\n 'table-insert-row-after': '',\n 'table-left-header': '',\n 'table-merge-cells': '',\n 'table-row-numbering-rtl': '',\n 'table-row-numbering': '',\n 'table-row-properties': '',\n 'table-split-cells': '',\n 'table-top-header': '',\n 'table': '',\n 'template': '',\n 'temporary-placeholder': '',\n 'text-color': '',\n 'toc': '',\n 'translate': '',\n 'underline': '',\n 'undo': '',\n 'unlink': '',\n 'unlock': '',\n 'unordered-list': '',\n 'unselected': '',\n 'upload': '',\n 'user': '',\n 'vertical-align': '',\n 'visualblocks': '',\n 'visualchars': '',\n 'warning': '',\n 'zoom-in': '',\n 'zoom-out': '',\n }\n});"],"sourceRoot":""}