{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/tinymce.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","typeOf$1","x","undefined","Array","isPrototypeOf","constructor","String","eq$2","f","eq","eqString","y","eqArray","eqa","length","len","eqSortedArray","compareFn","contramap","xs","slice","sort","sort$1","eqRecord","kx","keys","ky","q","eqAny","tx","indexOf","isEquatableType","getPrototypeOf$1","getPrototypeOf","hasProto","v","predicate","_a","isType$1","type","isArray","proto","isSimpleType","eq$1","a","is$4","isObject","isString","isPlainObject","isArray$1","isNull","isBoolean","isUndefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","noop","compose","fa","fb","_len3","arguments","args","_key3","apply","compose1","fbc","fab","constant","identity","tripleEquals","b","curry","fn","_len4","initialArgs","_key4","_len5","restArgs","_key5","all","concat","not","apply$1","never","always","Optional","tag","_classCallCheck","this","_createClass","onNone","onSome","mapper","some","none","binder","replacement","thunk","message","Error","worker","singletonNone","nativeSlice","nativeIndexOf","nativePush","push","rawIndexOf","ts","contains$2","exists","map$3","each$e","eachr","partition$2","pass","fail","filter$5","foldr","acc","foldl","findUntil$1","until","find$2","findIndex$2","flatten","bind$3","forall","reverse","difference","a1","a2","mapToObject","comparator","copy","get$b","head","last$3","from","findMap","arr","isSome","hasOwnProperty$2","each$d","obj","props","k","map$2","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","filter$4","mapToArray","values","get$a","has$2","hasNonNullableKey","stringArray","isArrayLike","each$c","cb","map$1","array","callback","out","item","index","filter$3","reduce","collection","iteratee","accumulator","thisArg","findIndex$1","last$2","cached","called","_len6","_key6","unknown$2","nu$3","major","minor","Version","nu","detect","versionRegexes","agent","cleanedAgent","toLowerCase","regexes","test","firstMatch","group","Number","replace","find$1","unknown","detect$4","candidates","userAgent","candidate","search","checkRange","str","substr","start","contains$1","end","idx","startsWith","prefix","endsWith","suffix","blank","trim$3","lTrim","rTrim","isNotEmpty","isEmpty$3","toInt","num","parseInt","isNaN","normalVersionRegex","checkContains","target","uastring","browsers","brand","oses","PlatformInfo","edge","chromium","opera","firefox","safari","nu$2","info","current","version","isBrowser","isEdge","isChromium","isIE","isOpera","isFirefox","isSafari","Browser","ie","windows","android","linux","macos","solaris","freebsd","chromeos","nu$1","isOS","isWindows","isiOS","isAndroid","isMacOS","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","ios","PlatformDetection","userAgentDataOpt","mediaMatch","browser","userAgentData","brands","uaBrand","lcBrand","map","detectBrowser$1","orThunk","detectBrowser","fold","os","detectOs","deviceType","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","isWebView","DeviceType","query","window","matchMedia","matches","platform$2","navigator","detect$2","platform$1","browser$1","windowsPhone","Env","transparentSrc","documentMode","document","cacheSuffix","container","canHaveCSP","whiteSpaceRegExp$1","trim$2","walk$4","Tools","trim","is","toArray","makeMap","items","delim","resolvedItems","split","each","grep","inArray","hasOwn","extend","ext","walk","resolve","path","explode","_addCacheSuffix","url","is$2","lhs","rhs","left","lift2","oa","ob","getOrDie","someIf","Function","attrName","attrValue","element","dom","nodeName","type$1","nodeType","isType","isElement$7","isText$b","isDocument$2","isDocumentFragment$1","isTag","e","rawSet","console","error","setAttribute","set$2","setAll$1","attrs","get$9","getAttribute","getOpt","has$1","hasAttribute","remove$b","removeAttribute","clone$4","attributes","attr","read$4","supports","classList","get$8","add$3","clazz","id","join","add$4","remove$9","remove$a","add$2","add","cleanClass","remove$8","remove","toggle$1","result","toggle","toggle$2","has","contains","isSupported$1","style","getPropertyValue","fromDom$2","node","SugarElement","fromHtml","html","scope","div","createElement","innerHTML","hasChildNodes","childNodes","fromTag","fromText","text","createTextNode","fromDom","fromPoint","docElm","elementFromPoint","recurse","cur","is$1","selector","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","e1","e2","d1","d2","owner$1","ownerDocument","documentOrOwner","dos","defaultView","parent","parentNode","parentElement","parents$1","isRoot","stop","ret","rawParent","prevSibling","previousSibling","nextSibling","prevSiblings","nextSiblings","children$1","child$1","cs","firstChild","lastChild","childNodesCount","isShadowRoot","host","supported","Element","attachShadow","Node","getRootNode","isSupported","getStyleContainer","doc","getHead","getShadowHost","getOriginalEventTarget","event","el","isOpenShadowHost","composed","composedPath","shadowRoot","inBody","body","internalSet","setProperty","set$1","setAll","css","get$7","getComputedStyle","getUnsafeProperty","getRaw$1","raw","filter","getAllRaw","ruleName","remove$7","removeProperty","internalRemove","before$3","marker","insertBefore","after$4","append$1","prepend","appendChild","append","elements","empty","textContent","rogue","remove$6","removeChild","unwrap","wrapper","children","fromDom$1","nodes","get$6","set","content","docDom","fragment","createDocumentFragment","contentElements","handle$1","handler","rawEvent","getOr","stopPropagation","prevent","preventDefault","kill","mkEvent","clientX","clientY","fromRawEvent","bind$2","useCapture","wrapped","addEventListener","unbind","removeEventListener","top","translate","SugarPosition","firstDefinedOrZero","viewport","offsetLeft","offsetTop","box","getBoundingClientRect","boxPosition","get$5","_DOC","scrollLeft","documentElement","scrollTop","to","win","scrollTo","intoView","alignToTop","scrollIntoViewIfNeeded","scrollIntoView","bounds","width","height","right","bottom","getBounds","_win","scroll","visualViewport","get$4","clientWidth","clientHeight","Math","max","pageLeft","pageTop","descendants$1","ClosestOrAncestor","ancestor","ancestor$3","closest$4","child","ancestor$2","descendant","base","querySelector","one","closest$3","ancestor$1","DomTreeWalker","startNode","rootNode","next","prev","prev2","shallow","findSibling","findPreviousNode","startName","siblingName","sibling","isNodeType","isRestrictedNode","isElement$6","matchNodeName","lowerCasedName","matchNodeNames","names","lowerCasedNames","matchStyleValues","computed","isBogus$2","isTable$2","tagName","hasContentEditableState","contentEditable","isTextareaOrInput","isText$a","isCData","isPi","isComment","isDocument$1","isDocumentFragment","isBr$6","isImg","isContentEditableTrue$3","isContentEditableFalse$a","isTableCell$3","isTableCellOrCaption","isMedia$2","isListItem$2","zeroWidth","nbsp","isZwsp$1","char","descendants","querySelectorAll","api$1","getOption","nodeValue","NodeValue","get$3","wrapBlockElements","lazyLookup","lookup","isBlock$2","isInline$1","isBr$5","isTextBlock$2","isList","isListItem$1","isTableSection","isTableCell$2","isWsPreserveElement","isWrapBlockElement","isWrapElement","removeTrailingBr","elm","allBrs","brs","rawNode","getLastChildren$1","createPaddingBr","br","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","ZWSP$1","isZwsp","trim$1","isElement$5","isText$9","isCaretContainerBlock$1","isCaretContainerInline","data","isCaretContainer$2","hasContent","isBeforeInline","pos","charAt","offset","isAtStart","isAfterInline","isAtEnd","startsWithCaretContainer$1","endsWithCaretContainer$1","showCaretContainerBlock","caretContainer","getElementsByTagName","lastBr","isRangeInCaretContainerBlock","range","startContainer","isContentEditableTrue$2","isContentEditableFalse$9","isBr$4","isText$8","isInvalidTextElement","isAtomicInline","isTable","isCaretContainer$1","isCaretCandidate$3","isNonUiContentEditableFalse","isUnselectable","isEditableCaretCandidate$1","root","tempNode","isInEditable","whiteSpaceRegExp","isWhitespaceText","isNewLineChar","normalize$4","isStartOfContent","isEndOfContent","tabSpace","count","repeat","normalizedText","isCollapsibleWhitespace$1","pcIsSpace","isNewline","isWhitespace$1","rootElement","hasWhitespacePreserveParent","isContent$1","isNamedAnchor","isBookmark","isBogus$1","isBogusAll","isEmpty$2","skipBogus","targetNode","brCount","walker","isEmptyNode","transparentBlockAttr","makeSelectorFromSchemaMap","elementNames","updateTransparent","blocksSelector","transparent","updateBlockStateOnChildren","schema","transparentSelector","getTransparentElements","getBlockElements","trimEdge","leftSide","childPropertyName","splitInvalidChildren","transparentBlocks","blocksElements","isBlock","transparentBlock","parentBlock","invalidChildren","isValidChild","stateScope","parentElm","splitElm","createRange","setStartBefore","setEndBefore","beforeFragment","extractContents","setStartAfter","setEndAfter","afterFragment","split$2","updateChildren","updateElement","isTransparentElement","hasBlockAttr","isTransparentElementName","isTransparentBlock","isTransparentAstInline","firstElement","hasChild","getPos","rootElm","clientLeft","clientTop","offsetParent","castOffsetParent","caption","bodyTop","captionTop","captionHeight","offsetHeight","getTableCaptionDeltaY","StyleSheetLoader","documentOrShadowRoot","settings","idCount","loadedStates","edos","maxLoadTime","load","Promise","success","failure","link","urlWithSuffix","state","getOrThunk","passed","failed","getOrCreateState","callbacks","status","onload","onerror","waitForWebKitLinkLoaded","waitCallback","styleSheets","owner","ownerNode","testCallback","Date","now","startTime","setTimeout","linkElem","rel","contentCssCors","referrerPolicy","unload","styleContainer","loadAll","urls","allSettled","then","results","parts","reject","reason","unloadAll","_setReferrerPolicy","_setContentCssCors","instance","WeakMap","forElement","referenceElement","rootDom","sl","create$d","isInlineContent","isBookmarkNode$2","isSpan","isKeepTextNode","prevIsInline","nextIsInline","surroundedByInlineContent","trimNode","currentChildren","isDocument","isKeepElement","makeMap$3","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","baseEntities","reverseEntities","buildEntitiesLookup","radix","itemList","chr","fromCharCode","entity","namedEntities","encodeRaw","encodeNumeric","charCodeAt","encodeNamed","entities","resolveEntities","Entities","encodeAllRaw","getEncodeFunc","entitiesMap","nameMap","named","numeric","decode","innerText","nativeDecode","lookupCache","mapCache","dummyObj","makeMap$2","each$b","extend$2","explode$2","split$1","createMap","defaultValue","extendWith","toUpperCase","getTextRootBlockElements","getTextBlockElements","compileElementMap","styles","Schema","patternElements","customElementsMap","specialElements","createLookupTable","option","newValue","schemaType","schemaItems","globalAttributes","blockContent","phrasingContent","flowContent","childNames","ni","attributesOrder","addAttrs","schemaItem","html4PhrasingContent","html4BlockContent","video","audio","table","script","compileSchema","verify_html","valid_elements","validStyles","valid_styles","invalidStyles","invalid_styles","validClasses","valid_classes","whitespaceElementsMap","selfClosingElementsMap","voidElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","blockElementsMap","textInlineElementsMap","transparentElementsMap","RegExp","patternToRegExp","addValidElements","validElements","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","globalAttributesOrder","validElementsArr","_loop","exec","ei","elementName","outputName","attrData","paddEmpty","removeEmpty","removeEmptyAttrs","_toConsumableArray2","attrDatas","ai","al","attrType","attrPrefix","attributesRequired","required","splice","attributesDefault","attributesForced","forcedValue","validValues","attrPattern","attributePatterns","pattern","patternElement","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","rule","inline","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","_val","padd_empty_block_inline_children","paddInEmptyBlock","custom_elements","valid_children","extended_valid_elements","dd","dt","li","td","th","tr","tbody","thead","tfoot","legend","area","param","parents","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getBoolAttrs","getTextInlineElements","getVoidElements","seal","getSelfClosingElements","getNonEmptyElements","getMoveCaretBeforeOnEnterElements","getWhitespaceElements","getSpecialElements","getCustomElements","isValid","attrPatterns","Styles","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","encodingItems","self","parse","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","encode","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","match","url2","url3","str2","allow_script_urls","scriptUrl","allow_svg_data_urls","lastIndex","border","serialize","serializeStyles","elemName","validStyleList","styleList","styleMap","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","needsNormalizing","Event","initEvent","isNativeEvent","clone$3","originalEvent","normalize$3","fallbackTarget","srcElement","defaultPrevented","isDefaultPrevented","cancelBubble","isPropagationStopped","stopImmediatePropagation","isImmediatePropagationStopped","hasIsDefaultPrevented","mouseEventRe","addEvent","capture","removeEvent","fix","isMouseEvent","pageX","eventDoc","mouseEvent","pageY","bindOnReady","eventUtils","domLoaded","readyHandler","readyState","EventUtils","events","expando","toString","hasFocusIn","callbackList","defaultNativeHandler","evt","executeHandlers","namesList","nativeHandler","fakeName","func","eventMap","ci","newCallbackList","ex","dispatch","parentWindow","each$a","internalStyleName","numericalCssMap","legacySetAttribute","camelCaseToHyphens","findNodeIndex","normalized","lastNodeType","updateInternalStyleAttr","rawValue","applyStyle$1","$elm","cssName","cssValue","normalizedName","convertStyleToString","DOMUtils","addedStyles","files","counter","styleSheetLoader","boundEvents","ownEvents","getElementById","_get","getAttrib","defaultVal","hook","attrHooks","getAttribs","setAttrib","run","val","originalValue","onSetAttrib","attrElm","getRoot","root_element","getPos$1","getStyle","getSize","w","h","offsetWidth","elms","getParents","collect","resolvedRoot","selectorVal","_findSib","context","setAttribs","setHTML","newElm","keepChildren","$node","toggleClass","cls","classes","oldElm","replacee","cloneNode","replaceChild","isNonEmptyElement","createRng","rv","_boundEvents$_i","_slicedToArray","boundTarget","boundName","boundFunc","getContentEditable","stdMode","boxModel","clone","deep","getViewPort","argWin","vp","getRect","size","getParent","getNext","getPrev","select","_b","createHTML","outHtml","createFragment","frag","setStyle","update_styles","setStyles","stylesArg","removeAllAttribs","removeAttributeNode","parseStyle","cssText","serializeStyle","addStyle","DOM","styleElm","styleSheet","loadCSS","addClass","removeClass","hasClass","show","hide","isHidden","uniqueId","getOuterHTML","outerHTML","getOuter","setOuterHTML","insertAfter","reference","referenceNode","rename","attrNode","findCommonAncestor","ps","pe","isEmpty","whitespaceElements","nonEmptyElements","bogusVal","nodeIndex","replacementElm","setStart","setEnd","fire","getContentEditableParent","destroy","_boundEvents$i","_","isChildOf","dumpRng","startOffset","endContainer","endOffset","getContext","keepValues","keep_values","keepUrlHook","sugarElm","href","src","setupAttrHooks","DOM$b","ScriptLoader","states","queue","scriptLoadedCallbacks","queueLoadedCallbacks","loading","_this","cleanup","loadScripts","scripts","execCallbacks","processResults","failures","_ref2","loadScript","processQueue","nextQueuedItem","shift","uniqueScripts","Cell","initial","currentCode","getLanguageData","I18n","getData","_objectSpread","setCode","newCode","getCode","code","langData","translation","getLangData","textstr","removeContext","isTokenised","$1","$2","isRtl","dir","hasCode","AddOnManager","_listeners","runListeners","matchedListeners","listener","isLoaded","loadLanguagePack","languages","language","waitFor","isAdded","requireLangPack","languageLoad","addOn","createUrl","baseUrl","dep","resource","addOnUrl","urlString","baseURL","substring","lastIndexOf","done","PluginManager","ThemeManager","ModelManager","value$2","subject","doRevoke","revoke","clear","isSet","singleton","on","first$1","rate","timer","cancel","clearTimeout","throttle","_len7","_key7","last$1","_len8","_key8","annotation","dataAnnotation","dataAnnotationId","dataAnnotationActive","dataAnnotationClasses","dataAnnotationAttributes","isRoot$1","identify","editor","annotationName","rng","selection","getRng","getBody","an","newStart","uid","findMarkers","isBogusElement","findAll","markers","directory","nodesAlready","setup$x","registry","changeCallbacks","initData","listeners","previous","withCallbacks","updateCallbacks","callbackMap","outputData","toggleActiveAttr","onNodeChange","annotations","getNames","fireNoAnnotation","_ref3","fireCallbacks","addListener","setup$w","dataAnnotation$1","serializer","addTempAttr","addAttributeFilter","_step","_iterator","_createForOfIteratorHelper","_loop2","identifyParserNode","persistent","customAttrNames","customClasses","newClassList","removeDirectAnnotation","err","unique","generate$1","time","getTime","floor","random","clone$2","original","isDeep","shallow$1","deep$1","mutate","shallowAs","TextWalker","isBoundary","direction","TextSeeker","isBlockBoundary","process","newOffset","backwards","getOrNull","forwards","round$2","round","clone$1","rect","collapse","toStart","isValidOverflow","overflowY","rect1","rect2","min","isAbove$1","halfHeight","isBelow$1","distanceToRectEdgeFromXY","cx","cy","sqrt","getSelectedNode","getNode$1","safeOffset","clamp$2","extendingChars","isExtendingChar","ch","isElement$4","isCaretCandidate$2","isBlock$1","isFloated","isValidElementCaretCandidate","_len10","_key10","and","isNotPre","isText$7","isBr$3","nodeIndex$1","resolveIndex$1","createRange$1","isWhiteSpace$1","isRange","isHiddenWhiteSpaceRange","getBoundingClientRectWebKitText","sc","ec","so","eo","newRng","cloneRange","getBoundingClientRect$1","isZeroRect","clientRect","clientRects","getClientRects","brNode","nbsp$1","getBrClientRect","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","addUniqueAndValidRect","addCharacterOffset","beforeNode","CaretPosition","toRange","isVisible","isEqual","getNode","before","fromRangeStart","fromRangeEnd","after","isAbove","pos1","pos2","isBelow","isTextPosition","isElementPosition","trimEmptyTextNode$1","rangeInsertNode","insertNode","insertFragment","isText$6","isBogus","normalizedParent","getChildNodes","equal","createPathItem","numTextFragments","normalizedNodeIndex","create$b","outputOffset","normalizedTextOffset","parentsUntil$1","resolve$1","nodeOffset","paths","resolvePathItem","targetOffset","dataLen","findTextPosition","isContentEditableFalse$8","getPoint","point","trimmedOffset","getNormalizedTextOffset$1","findIndex","moveEndPoint$1","normalizeTableCellSelection","getOffsetBookmark","findAdjacentContentEditableFalseElm","forward","isForward","fakeCaret","isFakeCaret","isCollapsed","getLocation","createBookmarkSpan","filled","getPersistentBookmark","collapsed","rng2","endBookmarkNode","startBookmarkNode","moveToBookmark","keep","getBookmark$2","getCaretBookmark","getRangeBookmark","getUndoBookmark","value$1","applyHelper","constHelper","outputHelper","output","inner","_onError","onValue","isValue","isError","Result","mapError","or","toOptional","msg","onError","_onValue","fromOption","optional","Adt","cases","constructors","adt","acase","keys$1","_len11","_key11","argLength","_len12","foldArgs","_key12","branches","branchKeys","reqKey","log","label","params","bothErrors","firstError","secondError","bothValues","HDirection","isInlinePattern","isBlockPattern","normalizePattern","formatOrCmd","onFormat","onCommand","format","formats","cmd","command","commandValue","getBlockPatterns","patterns","getInlinePatterns","fromRawPatterns","errors","partition$1","deviceDetection$1","DOM$a","isRegExp","options","stringOrObjectProcessor","bodyOptionProcessor","valid","bodyObj","getHash","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre$1","getForcedRootBlock","getForcedRootBlockAttrs","getNewlineBehavior","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","isAutomaticUploadsEnabled","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","getContentStyle","getFontCss","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","getEventRoot","getServiceMessage","getTheme","getThemeUrl","getModel","getModelUrl","isInlineBoundariesEnabled","getFormats","getPreviewStyles","canFormatEmptyLines","getFormatNoneditableSelector","getCustomUiSelector","isInline","hasHiddenInput","shouldPatchSubmit","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","getCustomUndoRedoLevels","shouldDisableNodeChange","isReadOnly$1","hasContentCssCors","getPlugins","getExternalPlugins$1","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","getIframeAriaText","getSetupCallback","getInitInstanceCallback","getUrlConverterCallback","getAutoFocus","shouldBrowserSpellcheck","getProtect","shouldPasteBlockDrop","shouldPasteDataImages","getPastePreProcess","getPastePostProcess","getPasteWebkitStyles","shouldPasteRemoveWebKitStyles","shouldPasteMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getPasteTabSpaces","shouldAllowHtmlDataUrls","getTextPatterns","getTextPatternsLookup","getNonEditableClass","getEditableClass","getNonEditableRegExps","shouldPreserveCData","getAllowedImageFileTypes","hasTableTabNavigation","isElement$3","isText$5","removeNode$1","trimCount","trimmedText","deleteZwspChars","deleteData","removeUnchanged","remove$4","removeElementAndReposition","newPosition","removeTextCaretContainer","removeTextAndReposition","removeAndReposition","removeElementCaretContainer","caretContainerNode","isContentEditableFalse$7","isMedia$1","isTableCell$1","getAbsoluteClientRect","scrollX","scrollY","rootRect","margin","FakeCaret","hasFocus","cursorInterval","lastVisualCaret","caretBlock","fakeCaretTargetNodes","trimInlineCaretContainers","caretState","caret","clearInterval","startBlink","setInterval","textNode","splitText","insertInline$1","isInlineFakeCaretTarget","blockName","blockNode","insertBlock","getCss","reposition","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableTrue$1","isContentEditableFalse$6","isMedia","isBlockLike","isCaretContainer","isCaretContainerBlock","isElement$2","isText$4","isCaretCandidate$1","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","isCefOrCaretContainer","getParentBlock$3","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","before$2","after$2","normalizeRange","leanLeft","leanRight","block","location","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","expected","isContentEditableFalse$5","isText$3","isElement$1","isBr$2","isCaretCandidate","isAtomic","isAtomicContentEditableFalse","isEditableCaretCandidate","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition$1","Forwards","startPos","innerNode","rootContentEditableFalseElm","getParents$3","CaretWalker","Backwards","isBeforeOrStart","position","isAfterOrEnd","isBeforeAfterSameElement","shouldSkipPosition","fromPosition","navigate","navigateIgnore","ignoreFilter","positionIn","walkToPositionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID","isCaretNode","getParentCaretContainer","currentNode","isIndexBookmark","bookmark","isPathBookmark","isForwardBookmark","addBogus","tryFindRangePosition","padEmptyCaretContainer","isEmpty$1","insertZwsp","setEndPoint","isValidTextNode","restoreEndPoint","markerParent","otherMarker","appendData","resolvePaths","isStringPathBookmark","endPos","resolveCaretPositionBookmark","isIdBookmark","spos","epos","resolveId","selectNode","resolveIndex","isRangeBookmark","getBookmark$1","_ref4","setRng","isBookmarkNode$1","isNbsp","actual","isWhiteSpace","isContent","toHex","component","hex","fromRgba","rgbaColour","hexColour","red","green","blue","rgbRegex","rgbaRegex","alpha","fromStringValues","g","parseFloat","rgbaToHexString","color","rgbaString","rgbMatch","rgbaMatch","fromString","getRanges$1","ranges","rangeCount","getRangeAt","getCellsFromRanges","getSelectedNodes","getCellsFromElementOrRanges","selectedCells","getCellsFromEditor","getSel","getClosestTable","cell","getFirstChildren","getLastChildren","hasAllContentsSelected","getStartNode","getEndNode","endNode","moveEndPoint","hasAnyRanges","sel","runOnRanges","executor","fakeSelectionNodes","fakeNodeRng","preserve","fillBookmark","isNode","isElementNode$1","isEditable$3","isContentEditable","preserveSelection","action","shouldMoveStart","selectedNodeBeforeAction","isSelectedBeforeNodeNoneditable","getStart","moveStartToNearestText","selectedAttr","isElementDirectlySelected","isWhiteSpaceNode$1","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","ed","allowSpaces","isWrappableNoneditable","baseDataSelector","formatNoneditableSelector","isWrapNoneditableTarget","replaceVars","vars","isEq$5","str1","normalizeStyleValue","strValue","getTextDecoration","decoration","getParents$2","isFormatPredicate","formatName","formatter","areSimilarFormats","otherFormatName","validKeys","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","equal$1","isBlockFormat","isSelectorFormat","isInlineFormat","shouldExpandToSelector","expand","isBookmarkNode","getParents$1","isWhiteSpaceNode","isTextBlock","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","textOffset","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","block_expand","isSelfOrParentBookmark","expandRng","includeTrailingSpace","_ref5","_ref6","walk$3","exclude","firstNode","lastNode","collectSiblings","siblings","findEndPoint","walkBoundary","startPoint","endPoint","validBlocks","wrapName","isZeroWidth","isAnnotation","applyAnnotation","masterUId","decorate","directAnnotation","_data$uid","otherData","_objectWithoutProperties","_excluded","_decorate","_decorate$attributes","_decorate$classes","attributeNames","makeAnnotation","eDoc","master","annotate","newWrappers","getDoc","finishWrapper","processElements","elems","processElement","wrap$2","processNodes","annotateWithBookmark","undoManager","transact","initialRng","hasFakeSelection","masterUid","applyWordGrab","selectionRng","Annotator","register","changes","removeAnnotations","annotationChanged","getBookmark","_ref7","removeAll","getAll","BookmarkManager","isXYWithinRange","containsXY","fireError","errorType","fireFormatApply","fireFormatRemove","fireSetContent","fireGetContent","firePastePlainTextToggle","VK","BACKSPACE","DELETE","DOWN","ENTER","ESC","LEFT","RIGHT","SPACEBAR","TAB","UP","PAGE_UP","PAGE_DOWN","END","HOME","modifierPressed","shiftKey","ctrlKey","altKey","metaKeyPressed","metaKey","elementSelectionAttr","abs","round$1","resizeHandles","nw","ne","se","sw","ControlSelection","selectedElm","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","startX","startY","startW","startH","ratio","resizeStarted","startScrollWidth","startScrollHeight","editableDoc","rootDocument","isImage","contextMenuSelectImage","isTouchEvent","touch","touches","isEventOnImageOutsideRange","getResizeTargets","firstElementChild","isResizable","setSizeProp","targets","setGhostElmSize","ghostElm","resizeGhostElement","deltaX","deltaY","resizeHelperX","resizeHelperY","screenX","screenY","display","selectedElmX","selectedElmY","scrollWidth","scrollHeight","origin","fireObjectResizeStart","endGhostResize","wasResizeStarted","showResizeRect","fireObjectResized","nodeChanged","targetElm","unbindResizeHandleEvents","targetWidth","targetHeight","hideResizeRect","handle","startDrag","handleElm","throttledShowResizeRect","removeSelected","isChildOrEqual","updateResizeRect","removed","composing","controlElm","getOrUndefined","selectedValue","img","disableGeckoResize","startElm","getEnd","execCommand","relativeToNative","startSitu","finishSitu","situ","setFinish","exactToNative","soffset","finish","foffset","adt$3","ltr","rtl","fromRange","diagnose","domRange","relative","exact","getRanges","rev","doDiagnose","SimRange","caretPositionFromPoint","offsetNode","caretRangeFromPoint","availableSearch","adt$2","Situ","cata","onBefore","onOn","onAfter","adt$1","SimSelection","exactFromRange","simRange","getWin","_finishSitu","_soffset","_finish","_foffset","getStart$1","beforeSpecial","name$1","preprocessRelative","preprocessExact","fromElements","toNative","getDomRange","filtered","preprocess","getAtPoint","fromPoint$1","isEq$4","rng1","hasParent$1","findParent","hasParentWithName","isCeFalseCaretContainer","hasBrBeforeAfter","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","hasContentEditableFalseParent","isPrevNode","normalize$2","normRng","newContainer","RangeUtils","rangeLike","newRange","normalize","normalizedRng","compareRanges","getCaretRangeFromPoint","documentFocusInHandler","api","getOffset","aggregate","properties","cumulativeInclusions","Dimension","getDocument","walkUp","navigation","view","rest","Navigation","freeze","__proto__","frameElement","find","frames","pathTo","loc","excludeFromDescend","markerInfo","cleanupFun","pageYOffset","pageXOffset","absolute","get$2","createMarker$1","last","descend","span","withMarker","preserveWith","_s","_e","applyWithMarker","withScrollEvents","fireScrollIntoViewEvent","fireAfterScrollIntoViewEvent","withElement","elementMarker","startElement","endElement","scrollToMarker","viewHeight","intoWindowIfNeeded","viewportBottom","markerTop","markerBottom","largerThanViewport","intoWindow","innerHeight","intoFrame","frameViewHeight","op","viewportBounds","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollRangeIntoView","focus$1","focus","hasFocus$1","activeElement","active$1","clamp$1","normalizeRng","isOrContains","isRngInRoot","nativeRangeToSelectionRange","getSelection","readRange","bookmarkToNativeRng","store","newBookmark","shouldStore","validate","FocusManager","isEditorUIElement","className","Delay","setEditorTimeout","wrappedSetTimeout","setEditorInterval","wrappedSetInterval","register$6","throttledStore","mouseUpPage","registerPageMouseUp","registerMouseUp","selectionChange","isManualNodeChange","registerEditorEvents","DOM$9","isUIElement","customSelector","registerEvents$1","editorManager","focusedEditor","setActive","blurredEditor","getElement","getActiveElement","activeEditor","unregisterDocumentEvents","getFocusInElement","getCollapsedNode","normalizeSelection","caretPos","focusBody","hasElementFocus","rawBody","hasInlineFocus","iframeElement","hasIframeFocus","hasEditorOrUiFocus","hasUiFocus","activateEditor","skipFocus","quirks","refreshContentEditable","bookmarkRng","contentEditableHost","getContentEditableHost","focusEditor","getEndpointElement","real","getEnd$1","skipEmptyTextNodes","orig","processRanges","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","first","res","descendantRtl","autocompleteSelector","create$9","findIn","isNone","setCursorLocation","typeLookup","walk$2","isEmptyTextNode","AstNode","insert","selfAttrs","cloneAttrs","selfAttr","refNode","whitespace","findCommentEndIndex","startIndex","lcHtml","isConditionalComment","endIfIndex","endIndex","endCommentRegexp","findMatchingEndTagIndex","startTagRegExp","endTagRegExp","voidElements","startMatch","endMatch","trimInternal","bogusAllRegExp","tempAttrs","trimContentRegExp","trimHtml$1","getTempAttrs","matchLength","endTagIndex","trimExternal","cleanupBogusElements","bogusElements","cleanupInputNames","inputs","input","getPlainTextContent","offscreenDiv","getContentContainer","getContentFromBody","emptyRegExp","trimEmptyContents","makeMap$1","Writer","indent","indentBefore","indent_before","indentAfter","indent_after","entity_encoding","htmlOutput","element_format","cdata","comment","pi","doctype","reset","getContent","HtmlSerializer","writer","handlers","sortedAttrs","elementRule","nonInheritableStyles","Set","shorthandStyleProps","getStyleProps","hasInheritableStyles","isNonInheritableStyle","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","prop","parentValue","nodeStyleProp","propExists","longhandProps","isChar","delta","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBogusAll$1","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","parentsUntil","parentsAndSelf","navigateIgnoreEmptyTextNodes","getClosestBlock$1","isAtBeforeAfterBlockBoundary","newPos","fromBlock","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isBr$1","findBr","parentBlocks","isBeforeBr$1","isAfterBr","getElementFromPrevPosition","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock","hasSpaceBefore","hasSpaceAfter","isInPre","isPreValue","isAtLineBoundary","isAtBeginningOfBody","isAtEndOfBody","isSiblingCefBlock","needsToBeNbspLeft","prevPos","isPrevCefBlock","isAfterCefBlock","needsToBeNbspRight","nextPos","isNextCefBlock","isBeforeCefBlock","needsToBeNbsp","isNbspAt","isWhiteSpaceAt","normalizeNbspAtStart","makeNbsp","firstPos","normalizeNbspInMiddleOfTextNode","newText","chars","normalizeNbspMiddle","normalizeNbspAtEnd","lastPos","normalizeNbsps","hasNbsp","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","newNode","removeNode","insertData","needsReposition","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwards","findCaretPositionBackwardsFromElm","findCaretPositionForward","findCaretPositionForwardsFromElm","findCaretPosOutsideElmAfterDelete","findCaretPosition","setSelection$1","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","oc","prevTextOpt","nextTextOpt","deleteElement$2","moveCaret","afterDeletePos","normalizedAfterDeletePos","isInlineElement","setContent","paddPos","strongRtl","isInlineTarget","hasStrongRtl","findRootInline","findInlineParents","normalizePosition","normalizeForwards","normalizeBackwards","execCommandIgnoreInputEvents","inputBlocker","off","execNativeDeleteCommand","isTextBlockOrListItem","getParentBlock$2","isBeforeRoot","paddEmptyBody","moveSelection","no_selection","freefallRtl","deleteRangeContents","deleteContents","lastBlock","additionalCleanupNodes","getTableCells","tableCellRng","deleteAction","singleCellTable","fullTable","partialTable","multiTable","getClosestCell$1","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableSelectionFromCellRng","cells","tableSelection","getTableSelections","selectionDetails","isSameTable","sameTableSelection","startCell","endCell","startTableSelection","getCellRangeFromStartTable","endTableSelection","getCellRangeFromEndTable","getCellIndex","getSelectedCells","isSingleCellTableContentSelected","optCellRng","rows","isSingleCellTable","unselectCells","startTable","endTable","otherContentRng","getActionFromRange","isRootFromElement","getCellRng","getTable","isStartInTable","isEndInTable","isMultiTable","getTableDetailsFromRange","_ref9","startTableSelectedCells","endTableSelectedCells","handleMultiTable","_ref8","handleSingleTable","cleanCells","deleteContentInsideCell","isFirstCellInSelection","insideTableRng","deleteCellContents","collapseAndRestoreCellSelection","selectedNode","emptySingleTableCells","outsideDetails","editorRng","cellsToClean","_ref10","outsideBlock","getOutsideBlock","startInTable","emptyBlock","handleEmptyBlock","endPointCell","emptyMultiTableCells","startTableCells","endTableCells","betweenRng","startTableCellsToClean","endTableCellsToClean","deleteTableElement","deleteTableRange","getParentCaption","deleteCellRange","emptyElement","deleteCaptionRange","getParentCell","deleteCaretInsideCaption","fromCaption","isDeleteOfLastCharPos","emptyCaretCaption","toCaption","validateCaretCaption","deleteCaretCells","fromCell","toCell","deleteBetweenCells","isNearTable","deleteCaret$3","fromPos","isBeforeOrAfterTable","deleteCaretCaption","backspaceDelete$9","deleteRange$2","getContentEditableRoot$1","internalAttributesPrefixes","each$9","ElementUtils","internalAttributes","isAttributeInternal","attributeName","compare","attribs","compareObjects","obj1","obj2","matchNode$1","nodeFilters","attributeFilters","nl","runFilters","matchRecord","filteringAttributes","filter$2","traverse","childNode","findMatchingNodes","paddEmptyNode","astNode","hasOnlyChild","isPadded","removeOrUnwrapInvalidNode","originalNodeParent","_step2","_iterator2","cleanInvalidNodes","onCreate","textBlockElements","nonSplittableElements","fixed","newParent","wrap","isInvalid","parentName","hasClosest","normalizeBlockSelectionRange","commonAncestorContainer","newEndPos","isPaddedEmptyBlock","hasOnlyOneChild$1","isPaddingNode","isListFragment","isEmptyFragmentElement","isListItemPadded","isPadding","trimListItems","getParentLi","findLastOf","newCaretPos","insertBefore$1","findFirstIn","insertAtCaret$1","domFragment","cleanupDomFragment","toDomFragment","liTarget","liElms","isAt","caretWalker","newPosNode","insertAfter$1","beforeRng","afterRng","cloneContents","getSplit","insertMiddle","mergeableWrappedElements","isTableCell","deleteSelectedContent","isTableCellContentSelected","insertHtmlAtCaret","details","parser","merge","bookmarkHtml","caretElement","canHaveChildren","parserArgs","paste","isParentBlockLi","isPastingSingleElement","isWrappedElement","isPastingInTheSameBlockTag","isPastingInContentEditable","shouldPasteContentOnly","markFragmentElements","_selectionOverrides","showBlockCaretContainer","invalid","markerNode","toExtract","getNodeFilters","getAttributeFilters","no_events","validInsertion","textInlineElements","elementUtils","reduceInlineTextElements","_c","nextRng","parentEditableElm","isPartOfFragment","findNextCaretRng","moveSelectionToMarker","trimBrsFromTableCell","caretParent","updateCaret","isTreeNode","setEditorHtml","noSelection","setContentInternal","trimmedHtml","setContentTree","padd","forcedRootBlockName","isRootContent","setContentString","sibling$1","ensureIsRoot","closest$2","transform","transformed","isEq$3","matchesUnInheritedFormatSelector","inherit","matchParents","similar","matchedNode","matchNode","matchName","matchItems","itemName","matchAttributes","onmatch","expectedValue","isEmptyValue","match$2","closest$1","rawElm","matchAllOnNode","formatNames","matchSimilar","isVariableValue","field","fieldValues","isVariableFormatName","ZWSP","isCaretContainerEmpty","getEmptyCaretContainers","findFirstTextNode","createCaretContainer","fill","removeCaretContainerNode","trimZwspFromCaretContainer","removeCaretContainer","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","formatNode","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","insertCaretContainerNode","cleanedFormatNode","validFormats","matchedFormats","fmtName","clonedFormatNode","cleanFormatNode","caretTextNode","setup$u","keyCode","disableCaretContainer","isFormatElement","inlineElements","postProcessHooks","isPre","addPostProcessHook","blocks","getSelectedBlocks","preBlocks","pre","hasPreSibling","pre1","pre2","sPre2","listItemStyles","findExpandedListItemFormat","fmt","hasListStyles","getExpandedListItemFormat","isRngStartAtStartOfElement","isRngEndAtEndOfElement","isEditableListItem","getFullySelectedListItems","middle","getFullySelectedBlocks","getPartiallySelectedListItems","each$8","isElementNode","findElementSibling","mergeSiblingsNodes","isPrevEditable","isNextEditable","tmpSibling","mergeSiblings","merge_siblings","processChildElements","hasStyle","applyStyle","unwrapEmptySpan","removeResult","MCE_ATTR_RE","each$7","isEq$2","isChildOfInlineParent","getContainer","lastIdx","normalizeTableSelection","isTableCellOrRow","wrap$1","wrapWithSiblings","rootBlockElm","forcedRootBlock","list_block","isMixedFormat","processFormatAttrOrStyle","removeEmptyStyleAttributeIfNeeded","removeStyles","compareNode","stylesModified","_processFormatAttrOrS","styleName","styleValue","normalizedStyleValue","remove_similar","removeFormatInternal","ceFalseOverride","links","isColorFormatAndAnchor","preserveAttributes","preserve_attributes","attrsToPreserve","_processFormatAttrOrS2","currentValue","valueOut","removeFormat$1","newName","removeFormatFromClone","remove$2","splitToFormatRoot","formatRoot","findFormatRoot","lastClone","firstClone","formatRootParent","mixed","wrapAndSplit","removeNodeFormat","currentNodeMatches","textDecoration","isRemoveBookmarkNode","removeRngStyle","liFmt","removeListStyleFormats","each$6","mergeWithChildren","clear_child_styles","_value","clearChildStyles","each$5","applyStyles","styleVal","applyFormat$1","setElementFormat","onformat","applyNodeStyle","found","createWrapElement","wrapElm","applyRngStyle","nodeSpecific","isMatchingWrappingBlock","isWrappingBlockFormat","canRenameBlock","isEditableDescendant","isValidBlockFormatForNode","isNonWrappingBlockFormat","currentWrapElm","lastContentEditable","isWrappableNoneditableElm","contentEditableValue","validBRParentElements","hasCaretNodeSibling","canFormatBR","isValidWrapNode","isCaret","isCorrectFormatForNode","canWrapNode","childCount","isEmptyTextNode$1","getChildCount","childElement","mergeStyles","merge_with_parents","mergeWithParents","backgroundColor","hasFontSize","mergeBackgroundColorAndFontSize","processTextDecorationsAndColor","parentTextDecoration","mergeTextDecorationsAndColor","inverseTagDescendants","mergeSubSup","wordcharRegex","importNode","applyCaretFormat","fake","postProcess$1","hasVars","fallbackElement","matchingNode","matchingFormat","updateAndFireChangeCallbacks","registeredCallbacks","runIfChanged","spec","withSimilar","withoutSimilar","withVars","formatChangedInternal","registeredFormatListeners","formatChangeItems","getCurrent","toAppendTo","addListeners","removeListeners","_typeof","iterator","_setPrototypeOf","setPrototypeOf","_construct","Parent","Class","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","_unsupportedIterableToArray","TypeError","_nonIterableSpread","arr2","isFrozen","getOwnPropertyDescriptor","create$8","_ref","fun","thisValue","Func","arrayForEach","unapply","forEach","arrayPop","pop","arrayPush","stringToLowerCase","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","_len2","_key2","_len","_key","addToSet","lcElement","newObject","lookupGetter","desc","warn","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","getGlobal","BreakType","purify","createDOMPurify","DOMPurify","originalDocument","DocumentFragment","HTMLTemplateElement","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","trustedTypes","ElementPrototype","getNextSibling","getParentNode","template","trustedTypesPolicy","createPolicy","ATTR_NAME","currentScript","policyName","_createTrustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","hooks","createHTMLDocument","PARSER_MEDIA_TYPE","transformCaseFunc","MUSTACHE_EXPR$1","ERB_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_removeAttribute","attribute","getAttributeNode","_initDocument","dirty","leadingWhitespace","dirtyPayload","parseFromString","createDocument","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isNode","_executeHook","entryPoint","_sanitizeElements","namespaceURI","allowedTags","_basicCustomElementTest","parentTagName","_checkValidNamespace","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","keepAttr","allowedAttributes","_attr","initValue","forceKeepAttr","setAttributeNS","_sanitizeShadowDOM","shadowNode","shadowIterator","sanitize","importedNode","oldNode","returnNode","toStaticHTML","nodeIterator","shadowroot","serializedHTML","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","explode$1","create$7","filters","addFilter","getFilters","removeFilter","newCallbacks","addFontToSpansFilter","domParser","fontSizes","addNodeFilter","face","removeAttrs","addFilters","convert_fonts_to_spans","font_size_legacy_values","convertToSTag","addStrikeFilter","parseDataUri","uri","_uri$split2","_toArray","base64Encoded","extractedData","extractBase64Data","decodeURIComponent","buildBlob","atob","Uint8Array","Blob","uriToBlob","fetch","ok","blob","blobUriToBlob","_ref11","blobToDataUri","reader","FileReader","onloadend","readAsDataURL","count$1","processDataUri","dataUri","base64Only","generateBlobInfo","_ref12","base64","btoa","createBlobInfo$1","blobCache","blobInfo","dataUriToBlobInfo","getByData","registerBase64ImageFilter","blob_cache","processImage","inputSrc","isInternalImageSource","isBogusImage","blobUri","each$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","safeSvgDataUrlElements","isInvalidUri","decodedUri","encodedUri","unescape","decodeUri","allow_html_data_urls","allowSvgDataUrls","blockSvgDataUris","URI","baseUri","base_uri","source","isProtocolRelative","protocol","toAbsPath","urlMatch","part","userInfo","port","pathMatch","file","getURI","relativeUri","tu","uu","toRelPath","anchor","noHost","absoluteUri","isSameOrigin","defaultPort","breakPoint","normalizedBase","nb","normalizedPath","baseParts","pathParts","outPath","noProtoHost","uriComponents","pathname","extend$1","basePurifyConfig","filteredUrlAttrs","internalElementAttr","setupPurify","purify$1","ele","allow_conditional_comments","lcTagName","isInternalElement","bogus","hasNone","transferChildren","nativeParent","isSpecial","nativeChild","whitespaceCleaner","blockElements","textRootBlockElements","allWhiteSpaceRegExp","startWhiteSpaceRegExp","endWhiteSpaceRegExp","hasWhitespaceParent","isAtEdgeOfBlock","neighbour","isLineBreakNode","isNodeEmpty","isTextRootBlockEmpty","isPaddedWithNbsp","DomParser","nodeFilterRegistry","attributeFilterRegistry","defaultedSettings","root_name","parseAndSanitizeWithContext","rootName","mimeType","isSpecialRoot","wrappedHtml","config","getPurifyConfig","removeNodeFilter","removeAttributeFilter","isWrappableNode","isTransparentAstBlock","_whitespaceCleaner2","whitespacePre","whitespacePost","invalidFinder","findInvalidChildren","matchFinder","preprocessors","postprocessors","traverseOrder","_loop3","_node4","_loop4","postprocess","walkTree","_partition$","topLevelChildren","otherChildren","rootBlockName","forced_root_block","getRootBlockName","rootBlockNode","rootBlock","forced_root_block_attrs","addRootBlocks","remove_trailing_brs","prevName","lastParent","newRel","allow_unsafe_link_target","appendRel","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","register$4","inline_styles","register$5","withSerializedContent","fireEvent","serializedContent","serializeContent","eventArgs","preProcessGetContent","fireBeforeGetContent","postProcessGetContent","preProcessSetContent","processedEventArgs","fireBeforeSetContent","postProcessSetContent","tableModel","tableRow","cellPosition","getSpan","cellExists","getWidth","row","findElementPos","extractRows","sx","sy","ey","newRows","tableElm","rowspan","colspan","y2","x2","fillout","skipCellsX","toDom","tableElement","tableBody","createDomTable","modelRowsToDomRows","subsection","subTable","getFullySelectedListWrappers","_li","findParentListContainer","listCont","listElm","listStyles","_style","getWrapElements","commonAnchorContainer","wrapElements","listWrappers","allWrappers","directListWrappers","emptyFragment","getFragmentFromRange","innerElm","getTableFragment","selectedTableCells","getParentTable","firstCell","lastCell","fullTableModel","sectionedTableModel","read$3","getSelectionFragment","isCollapsibleWhitespace","getInnerText","bin","extractSelectedContent","parentBlockOpt","contextNodeName","getContextNodeName","rangeContentClone","nonRenderedText","parentBlockText","textIndex","getTextContent","tmpElm","contextual","getSerializedContent","getSelectedContentInternal","defaultedArgs","getInner","setupArgs$3","updatedArgs","getOuterHtml","insertAt","write","fragments","vDown","vUp","buildScript","buildSnake","getMiddleSnake","currentFragments","diff","removeAt","applyDiff","start1","end1","start2","end2","diag","j","i2","snake","sum","lazyTempDocument","createFromEditor","trimmedFragments","trimmed","hasIframes","beforeBookmark","createFragmentedLevel","createCompleteLevel","applyToEditor","level","getLevelContent","getCleanLevelContent","isEq$1","level1","level2","hasEqualContent","hasEqualCleanedContent","isUnlocked","locks","setTyping","typing","endTyping","makePlainAdaptor","init","bindEvents","beforeChange","beforeChange$1","currentLevel","newLevel","lastLevel","bm","customUndoRedoLevels","setDirty","addUndoLevel$1","undo","undo$1","redo","redo$1","clear$1","reset$1","hasUndo","hasUndo$1","hasRedo","hasRedo$1","ignore","transact$1","ignore$1","extra","callback1","callback2","extra$1","matchAll","matchedFormatNames","checkedMap","canApply","closest","formatChanged","getContentInternal","insertContent","addVisual","matchedElm","hasVisual","addVisualInternal","autocompleter","addDecoration","removeDecoration","remove$3","isRtc","plugins","setup$s","editorCast","rtcPlugin","setup","getRtcSetup","rtcInstance","nul","makeNoopAdaptor","rtcEditor","defaultVars","_undoManager","_locks","_index","_node","_similar","_rfl","_details","_format","getRawModel","makeRtcAdaptor","rtc","isRemote","getRtcInstanceWithFallback","getRtcInstanceWithError","getContent$1","getSelectedContent","mergeAndNormalizeText","outerNode","outer","outerElm","oldLength","merge$1","innerTextNode","walkPastBookmark","normalizeTextIfRequired","setContent$1","setupArgs$2","cleanedContent","contextBlock","contextArgs","cleanContent","prevText","nextText","rngSetContent","createContextualFragment","deleteFromCallbackMap","SelectorChanged","selectorChangedData","currentSelectors","findMatchingNode","selectorChangedWithUnbind","matchedSelectors","isAttachedToDom","EditorSelection","selectedRange","explicitRange","getRng$1","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","anchorNode","START_TO_START","END_TO_END","isValidRange","removeAllRanges","addRange","setBaseAndExtent","focusNode","anchorRange","focusRange","anchorOffset","focusOffset","bookmarkManager","compareEndPoints","setNode","endElm","selectedBlocks","selectorChanged","getScrollContainer","scrollContainer","scrollElementIntoView","placeCaretAt","controlSelection","process$1","hasEventListeners","shouldFireEvent","oldDoc","clonedNode","impl","firePreProcess","preProcess$1","htmlParser","toHtml","serializeNode","outArgs","firePostProcess","postProcess","DomSerializerImpl","internalName","hasChildren","preserve_cdata","register$3","getHtmlFromNode","isBr","brNode1","brNode2","trimTrailingBr","parseHtml","addRules","setRules","DomSerializer","domSerializer","setupArgs$1","getContent$2","setupArgs","setContent$2","removedOptions","removedPlugins","getRemovedOptions","settingNames","setting","getRemovedPlugins","pluginNames","plugin","logWarnings","rawOptions","normalizedOptions","hasRemovedPlugins","hasRemovedOptions","isLegacyMobileTheme","theme","listJoiner","themesMessage","pluginsMessage","optionsMessage","logRemovedWarnings","DOM$8","safeDestroy","remove$1","editorUpload","save","is_removing","unbindAllNativeEvents","fireRemove","orgDisplay","restoreOriginalStyles","fireDetach","automatic","destroyed","_beforeUnload","form","_mceOldSubmit","submit","formEventDelegate","restoreForm","contentAreaContainer","editorContainer","bodyElement","contentDocument","contentWindow","clearDomReferences","IconManager","iconPack","icons","CreateIconManager","getProp","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","isXYInContentArea","bodyElm","transposedPoint","transpose","isInsideElementContentArea","isEditorAttachedToDom","rawContainer","getContentAreaContainer","NotificationManager","notifications","getImplementation","unimplemented","getNotificationManagerImpl","open","close","getArgs","getTopNotification","notification","closeNotification","otherNotification","progressBar","timeout","getEl","addNotification","getNotifications","serviceMessage","requestAnimationFrame","registerEvents","WindowManager","dialogs","getWindowManagerImpl","openUrl","alert","confirm","funcBind","_len13","_key13","addDialog","dialog","fireOpenEvent","closeDialog","fireCloseEvent","otherDialog","storeSelectionAndOpenDialog","openDialog","ui","windowManagerImpl","displayNotification","notificationManager","displayError","_skinLoaded","logError","createLoadError","initError","_len14","_key14","transformToUrls","cssLinks","skinUrl","contentCssFile","isContentCssSkinName","documentBaseURI","toAbsolute","appendContentCssFromSettings","contentCSS","getContentCssUrls","getFontCssUrls","filter$1","ImageScanner","uploadStatus","cachedPromises","images","getAllImages","isUploaded","promises","imageSrc","imageInfo","image","newPromise","invalidDataUri","getByUri","imageToBlobInfo","UploadStatus","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","isPending","markPending","markUploaded","removeFailed","uuid","rnd","Uploader","pendingPromises","defaultHandler","progress","xhr","XMLHttpRequest","withCredentials","credentials","upload","onprogress","loaded","total","path1","path2","json","JSON","responseText","basePath","formData","FormData","filename","send","uploadHandler","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","percent","uploadBlobs","blobInfos","pendingUploadBlobInfo","createUploader","EditorUpload","uploader","imageScanner","cache","toBlobInfo","mime","URL","createObjectURL","findFirst","cachedBlobInfo","removeByUri","revokeObjectURL","BlobCache","urlFilters","aliveGuard","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","uploadImages","scanForImages","imageInfos","imagesToRemove","shouldDispatchChange","filteredResult","uploadInfo","_imageInfos$index","convertURL","replaceImageUriInView","uploadError","uploadUri","dispatchChange","uploadImagesAuto","isValidDataUriImage","imgElm","resultItem","replaceBlobUris","source_view","genericBase","cellBase","cellFormats","tablecellbackgroundcolor","tablecellverticalalign","tablecellbordercolor","borderColor","tablecellclass","tableclass","tablecellborderstyle","borderStyle","tablecellborderwidth","borderWidth","FormatRegistry","strike","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","preview","textAlign","float","marginLeft","marginRight","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontFamily","fontsize","fontSize","lineheight","lineHeight","fontsize_class","class","blockquote","subscript","superscript","_fmt","_itemName","lang","customValue","removeformat","get$1","unregister","each$3","isPreviewItem","parsedSelectorToHtml","ancestry","sItem","wrapInHtml","ancestors","parentCandidate","ancestorName","parentRequired","elmRule","getRequiredParent","siblingElm","parentSiblings","parseSelectorItem","$0","$3","$4","getCssText","previewCss","previewStyles","removeVars","previewFrag","previewElm","rawParentFontSize","parentFontSize","Formatter","formatChangeState","addShortcut","setup$r","nodeOrRange","setup$t","applyFormat","removeFormat","toggleFormat","matchFormat","closestFormat","matchAllFormats","matchNodeFormat","canApplyFormat","shouldIgnoreCommand","UndoManager","addUndoLevel","isFirstTypedCharacter","addNonTypingUndoLevel","isDirty","modKey","inputType","isInsertFromPasteOrDrop","addKeyboardShortcuts","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","setup$q","placeholder","updatePlaceholder","isNonTypingKeyboardEvent","showPlaceholder","isTypingKeyboardEvent","isVisuallyEmpty","firePlaceholderToggle","blockBoundary","getBlockPosition","containerElm","blockPosition","getClosestHost","readFromRange","fromBlockPos","toBlockPos","blockPos","lastPositionInBlock","skipLastBr","isDifferentBlocks","hasSameHost","isEditable$2","isValidBlock","hasValidBlocks","extractChildren","getChildrenUntilBlockBoundary","removeEmptyRoot","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","getInsertionPoint","parentsAndSelf$1","findInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","block1","block2","backspaceDelete$8","read$1","isRawNodeInTable","isEverythingSelected","noPrevious","noNext","isSelectionInTable","deleteRange$1","emptyEditor","deleteRangeMergeBlocks","backspaceDelete$7","_forward","showCaret","getNodeRange","renderRangeCaret","caretPositionNode","caretPositionBeforeNode","ceRoot","renderCaretAtRange","isBeforeBoundary","isAfterBoundary","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","trimEmptyTextNode","backspaceDelete$6","getNextPosFn","isBeforeFn","nextCaretPosition","normalizedNextCaretPosition","deleteBoundaryText","getEdgeCefPosition","atStart","isCefAtEdgeSelected","DeleteAction","moveToElement","moveToPosition","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","isDeleteFromCefDifferentBlocks","getContentEditableAction","caretLocation","isAtContentEditableBlockCaret","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getAncestorCe","backspaceDeleteCaret","read","hideFakeCaret","deleteElement$1","backspaceDeleteRange","paddEmptyElement","backspaceDelete$5","backspaceDelete$4","deleteCaret$2","isText$2","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","readLocation","getName","outside","inside","betweenInlines","fromInline","toInline","hasSameParentBlock","skipNoMovement","fromLocation","toLocation","location2","location1","findLocationSimple","findLocation$1","findLocationTraverse","moveRel","modify","moveByWord","hasSelectionModifyApi","VDirection","flip","positions","walk$1","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","newRect","lastDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","getClosestPositionAbove","getClosestPositionBelow","isContentEditableFalse$4","distanceToRectLeft$1","distanceToRectRight$1","findClosestClientRect","oldClientRect","oldDistance","newDistance","getNodeClientRects","toArrayWithNode","SimpleResultType","walkUntil","isAboveFn","isBeflowFn","line","targetClientRect","findUntil","upUntil","Up","downUntil","Down","getLastClientRect","isAboveLine","lineNumber","aboveLineNumber","isLine","isLineNumber","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","isElement","rangeIsInContainerBlock","moveVertically","caretClientRect","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","isBelowFn","positionsUntil","closestNextLineRect","getLineEndPoint","lineInfo","moveToLineEndPoint$3","setCaretPosition","setSelected","renderCaretLocation","findLocation","getPositionFromRange","isInlineTarget$1","safeRemoveCaretContainer","caretValue","isAtZwsp","move$2","moveWord","_caret","setupSelectedState","inlineBoundaries","selectedInlines","targetInlines","toggleInlines","inlines","_inline","renderInsideInlineCaret","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","setCaretLocation","deleteFromTo","rangeFromPositions","backspaceDeleteCollapsed","rescope","toPosition","normalizedFirstPos","normalizedLastPos","hasOnlyTwoOrLessPositionsLeft","backspaceDelete$3","hasOnlyOneChild","deleteLastPosition","parentInlines","isFormatElement$1","innerMost","replaceWithCaretFormat","deleteCaret$1","getParentInlines","normalizedFromPos","willDeleteLastPositionInElement","backspaceDelete$2","deleteElement","backspaceDelete$1","isNearMedia","deleteCaret","parseIndentValue","getIndentStyleName","useMargin","canOutdent","getBlocksToIndent","isReadOnly","indentStyleName","intentValue","validateBlocks","isListComponent","parentIsListComponent","indentation","indentUnit","indentValue","unit","parsedValue","indentElement","outdent","backspaceDelete","findAction","forwardDeleteCommand","execNativeForwardDeleteCommand","setup$p","addCommand","deleteCommand","getTouch","setup$o","startData","longpressFired","debounceLongpress","distX","distY","isFarEnough","isEqualNode","isBlockElement","isValidTarget","shouldRemoveTextNode","createRootBlock","rootNodeName","hasBlockParent","restoreSelection","insertEmptyLine","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","setup$m","contentEditableAttrName","editClass","nonEditClass","hasEditClass","hasNonEditClass","nonEditableRegExps","convertRegExpsToNonEditable","blockCaretContainer","handleBlockContainer","findBlockCaretContainer","isContentEditableFalse$3","exitPreBlock","getVisualCaretPosition$1","newBlock","textBlock","createTextBlock","getHorizontalRange","moveToCeFalseHorizontally","getVerticalRange","down","moveToCeFalseVertically","moveH$2","moveV$3","moveToLineEndPoint$1","selectToEndPoint","curRng","isTarget","isAtFirstOrLastLine","isAtLastLine","isAtFirstLine","moveCaretToNewEmptyLine","getClosestTargetBlock","moveV$2","baseKeyPattern","matchesEvent","match$1","defaultPatterns","matchDelayed","defaultDelayedPatterns","_len15","_key15","execute","executeWithDelayedAction","moveH$1","moveV$1","moveToLineEndPoint","CellLocation","filterFirstLayer","tags","lookup$1","isEligible","newIndex","isEditable","assumeEditable","editable","getRaw","getClosestCell","getYAxisValue","isTargetCorner","corners","tds","deflate","getCorners","corner","newCorner","oldCorner","oldDist","newDist","findClosestCorner","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","isAtTableCellLine","startsWithWrapBreak","startsWithBrBreak","breakPos","hasNextBreak","isAtFirstTableCellLine","isAtLastTableCellLine","navigateHorizontally","_td","isCaretAtStartOrEndOfTable","insertFn","renderBlock","navigateVertically","getClosestAbovePosition","getClosestBelowPosition","move$1","mover","moveH","moveV","tabGo","_current","getCellFirstCursorPosition","tabForward","tabBackward","handleTab","rootElements","model","clearSelectedCells","setup$k","isMac","executeKeydownOverride$4","DOM$7","alwaysNext","textBefore","scanLeft","scanRight","repeatLeft","getText","isWhitespace","stripTrigger","trigger","findStart","initRange","minChars","buffer","firstChar","findTrigger","spot","toLast","isText$1","toLeaf","isStartOfWord","leaf","_element","isPreviousCharContent","getDatabase","database","triggers","getTriggerContext","lookupWithContext","fetchOptions","startText","autocompleters","lookupByTrigger","lookupData","ac","maxResults","matchText","columns","onAction","highlightOn","fold$1","stype","serror","svalue","Value","SimpleResult","formatObj","stringify","getErrorInfo","chooseFrom","branch","missingBranch","extract","choose$1","missingKey","chosen","baseMerge","merger","curObject","deepMerge","old","defaulted$1","fallback","mergeErrors","ResultCombine","objects","partitions","ifField","ifCustom","newKey","presence","instantiator","validator","custom","anyValue$1","requiredAccess","bundle","missingRequired","fallbackAccess","extractField","av","bundleAsOption","optValue","ov","optionAccess","optionDefaultedAccess","objOf","fields","_step3","_iterator3","extractFields","fieldStrings","_okey","_presence","_instantiator","arrOf","asRaw","errs","extractValue","formatError","errInfo","es","choose","anyValue","typedValue","expectedType","actualType","number","string","boolean","functionProcessor","customField","validateEnum","requiredOf","requiredString","requiredFunction","optionOf","optionString","defaultedOf","defaultedNumber","defaultedStringEnum","defaultedBoolean","defaultedFunction","fetch$1","onSetup","optionalText","optionalIcon","optionalTooltip","optionalLabel","active","enabled","primary","defaultedType","defaultedString","autocompleterSchema","defaulted","defaultedArrayOf","baseToolbarButtonFields","baseToolbarToggleButtonFields","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","contextformbutton","contextformtogglebutton","requiredArrayOf","FakeCaretPosition","register$2","popups","dataset","popup","datasetValues","dv","setup$j","activeAutocompleter","uiActive","isActive","cancelIfNecessary","removeAutocompleterDecoration","fireAutocompleterEnd","commenceIfNecessary","addAutocompleterDecoration","getAutocompleters","newContext","doLookup","lookupInfo","fireAutocompleterUpdate","fireAutocompleterStart","_ui","update","which","setupEditorInput","createAndFireInputEvent","eventType","specifics","overrides","bubbles","isComposing","detail","currentTarget","eventPhase","AT_TARGET","originalTarget","explicitOriginalTarget","isTrusted","cancelable","InputEvent","fireFakeInputEvent","fireFakeBeforeInputEvent","setup$i","applyAction","executeKeydownOverride$3","executeKeyupOverride","moveToCaretPosition","firstNonWhiteSpaceNodeSibling","getEditableRoot","editableRoot","getParentBlock$1","hasParent","isListBlock","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","insert$3","createNewBlock","newBlockName","containerParent","isFirstChild","tmpRng","hasFirstChild","isEmptyAnchor","containerAndSiblingName","canSplitBlock","normalizeZwspOffset","setForcedBlockAttrs","forcedRootBlockAttrs","attrStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","applyAttributes","blockbreak","parentBlockName","isAfterLastNodeInContainer","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","optionValue","shouldEndContainer","parentList","isWithinNonEditableList","startNodeParent","wrapSelfAndSiblingsInDefaultBlock","parentBlockParent","includeZwspInRange","trimZwsp","trimLeadingLineBreaks","firstChilds","trimInlineElementsOnLeftSideOfBlock","addBrToBlockIfNeeded","fakeEventName","moveSelectionToBr","brElm","extraBr","insertBrAtCaret","isControlKey","hasRightSideContent","insertBrBefore","insertBrAfter","hasBrAfter","isAnchorLink","isInsideAnchor","insertBrOutsideAnchor","linebreak","anchorLocation","readInlineAnchorLocation","matchesSelector","newLineAction","shouldBlockNewLine","_shiftKey","shouldBlockNewLine$1","inListBlock","requiredState","isListItemParentBlock","inBlock","getParentBlockName","inCefBlock","inPreBlock","shouldPutBrInPre","inBrContext","shouldInsertBr","hasShiftKey","_editor","canInsertIntoEditableRoot","rootEditable","predicates","insertBreak","execEditorDeleteCommand","logicalAction","getAction","setup$h","handleEnterKeyEvent","setup$g","executeKeydownOverride$2","setup$f","normalizeNbspsInEditor","platform","isPageUpDown","setNodeChangeBlocker","blocked","setup$e","executeKeyupAction","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","insertInlineBoundarySpaceOrNbsp","checkPos","needsToHaveNbsp","insertSpaceOrNbspAtSelection","locationToCaretPosition","setSelection","setup$d","executeKeydownOverride$1","executeKeydownOverride","tableTabNavigation","setup$b","setup$l","setup$c","NodeChange","lastRng","lastPath","nativeRng","fakeRng","isSameElementPath","initialized","currentPath","internalMimeType","internalHtmlMime","internalMark","mark","isMarked","toBlockElements","rootTag","rootAttrs","tagOpen","openContainer","tagClose","paragraphs","pasteBinDefaultContent","isPasteBin","isDefaultPasteBinContent","PasteBin","lastRngCell","pasteBinElm","create$6","pasteBinClone","getHtml","copyAndRemove","toElm","fromElm","_filter$2","pasteBinClones","dirtyWrappers","cleanWrapper","getLastRng","trimHtml","s1","s2","processResult","cancelled","filterContent","internal","preProcessArgs","firePastePreProcess","filteredContent","preProcess","tempBody","postProcessArgs","firePastePostProcess","postProcessFilter","pasteHtml$1","isAbsoluteUrl","linkSelection","pasteHtmlFn","createLink","insertImage","isImageUrl","createImage","pasteAsText","smartInsertContent","createIdGenerator","doPaste","pasteHtml","internalFlag","unmark","pasteText","encodedText","getDataTransferItems","dataTransfer","types","contentType","hasContentType","clipboardContent","hasHtmlOrText","createBlobInfo","useFileName","extractFilename","allowedExtensions","extension","lowerExt","mimeOverrides","jpg","jpe","jfi","jif","jfif","pjpeg","pjp","pasteImageData","clipboardData","kind","getAsFile","getImagesFromDataTransfer","fileResults","imageItem","_ref13","existingBlobInfo","pasteImage","insertClipboardContent","plainTextMode","isInternal","isPlainTextHtml","isPlainText","isAbsoluteUrl$1","ignoreElements","registerEventHandlers","pasteBin","pasteFormat","keyboardPastePlainTextState","isKeyboardPasteEvent","isBrokenAndroidClipboardEvent","registerEventsAndFilters","isWebKitFakeUrl","isDataUri","isPasteInsert","_step4","_iterator4","registerDataImageFilter","register$1","togglePlainTextPaste","setClipboardData","clearData","setData","setHtml5Clipboard","contenteditable","overflow","offscreenRange","selectNodeContents","hasSelectedContent","isTableSelection","cut","getCaretRangeFromEvent","setFocusedRange","setup$a","draggingInternallyState","hasImage","dropContent","plainTextContent","isPlainTextFileUrl","internalContent","trimmedContent","rgbRegExp","rgbToHex","removeWebKitStyles","webKitStylesOption","webKitStyles","inputStyles","outputStyles","inputValue","compareInput","outputStyle","setup$7","filterFunc","addPreProcessFilter","setup$8","processEvent","setup$9","setup$6","preventSummaryToggle","filterDetails","isText","isContentEditableFalse$2","getClosestScope","isContentEditableTrue","getClosestCef","findEdgeCaretCandidate","onTripleClickSelect","startRng","clickNode","cef","findClosestBlockRange","customEventRootDelegates","beforeUnloadDelegate","distanceToRectLeft","distanceToRectRight","isOverlapping","r1","r2","overlap","overlapY","collidesY","splitRectsPerAxis","rects","prevRect","boundingClientRectFromRects","boundingRect","_partition$2","horizontalDistance","_y","closestChildCaretCandidateNodeRect","caretCandidateRect","findClosestCaretCandidateNodeRect","distance","sortedRects","getClosestTextNode","_splitRectsPerAxis2","horizontalRects","verticalRects","_partition$3","above","below","closestCaretCandidateNodeRect","ownerDoc","helper","prevScope","childNodesWithoutGhost","uncheckedChildren","newScope","traverseUp","closestFakeCaretCandidate","Before","After","clientInfo","getAbsolutePosition","docElem","calc","bodyPosition","getBodyPosition","scrollPosition","getScrollPosition","mousePosition","iframePosition","inlineScroll","iframeScroll","getBodyScroll","getMousePosition","isContentEditableFalse$1","_len9","_key9","createGhost","clonedElm","opacity","padding","boxSizing","scrollEditor","amount","_defineProperty","scrollRight","scrollUp","scrollDown","removeElement","button","isLeftMouseButtonPressed","ceElm","elmPos","dragging","maxX","maxY","relX","relY","ghost","intervalId","delay","functionToRepeat","move","throttledPlaceCaretAt","caretInfo","state_","movement","mouseEventOriginatedFromWithinTheEditor","targetPos","applyRelPos","mouseY","mouseX","overflowX","outerMouseY","outerMouseX","innerWidth","moveGhost","drop","targetElement","dragElement","isValidDropTarget","getRawTarget","targetClone","cloneElm","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","init$2","preventFileDrop","preventFileDropIfUIElement","editorRoot","eventNames","blockUnsupportedFileDrop","isContentEditableFalse","getContentEditableRoot","SelectionOverrides","selectedElement","realSelectionId","isFakeSelectionTargetElement","isWithinCaretContainer","isRangeInCaretContainer","normalizeVoidElementSelection","selectElement","realSelectionContainer","setupOffscreenSelection","nodeElm","setElementSelection","afterNode","removeElementSelection","contentEditableRoot","closestContentEditable","setRange","isFakeSelectionElement","renderFocusCaret","setup$4","setup$3","getNormalizedTextOffset","generatePath","generatePathRange","resolvePath","nodePath","optNode","resolvePathRange","_ref14","_ref15","cleanEmptyNodes","deleteRng","clean","startParent","endParent","getParentBlock","resolveFromDynamicPatterns","patternSet","beforeText","dynamicPatterns","dynamicPatternsLookup","blockPatterns","inlinePatterns","getBeforeText","stripPattern","firstTextNode","textAfter","applyPattern$1","formatSet","isBlockFormatName","findPattern$1","sortedPatterns","sortPatterns$1","nuText","newMarker","rangeFromMarker","createMarker","markerPrefix","pathRange","textEnd","textStart","startParentNode","removeMarker","isReplacementPattern","findPatternStartFromSpot","patternContent","startPattern","searchText","startEndIndex","startPatternIndex","nextSpot","findPattern","normalizedMatches","endPathRng","endRng","resultsOpt","findPatternsRec","remainingPatterns","requireGap","startRange","findPatternStart","startPathRng","generatePathRangeFromRange","endSpot","patternsWithoutCurrent","applyPattern","patternRange","findPatterns","matchesWithSortedPatterns","hasSameMatches","sortedMatch","getBestMatches","applyMatches","matchesWithMarkers","matchesWithEnds","endMarker","startMarker","addMarkers","markerRange","applyReplacementPattern","markerEndRange","markerStartRange","patternMarker","applyPatternWithContent","handleEnter","dynamicPatternSet","inlineMatches","blockMatches","blockText","findPatterns$1","applyMatches$1","checkKeyEvent","codes","setup$2","charCodes","keyCodes","getPatternSet","hasDynamicPatterns","hasTextPatternsLookup","handleInlineTrigger","handleInlineKey","charCode","Quirks","getAttributeApplyFunction","isSelectionAcrossElements","isGecko","isWebKit","setEditorCommandState","emptyEditorWhenDeleting","serializeRng","contents","allRng","allContentsSelected","selectAll","shortcuts","documentElementEditingFocus","Range","blur","selectControlElements","visualAidsAnchorClass","disableBackspaceIntoATable","setGeckoEditingOptions","addBrAfterLastLinks","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","tapLinksAndImages","blockFormSubmitInsideEditor","isAllContentSelected","setAttributeNode","DOM$6","getRootName","removeUndefined","mkParserSettings","mkSchemaSettings","initEditor","bindPendingEventDelegates","fireInit","moveSelectionToFirstCaretPosition","initInstanceCallback","autoFocus","getStyleSheetLoader$1","loadContentCss","fontCss","removeCss","contentCssText","allStylesheets","framedFonts","makeStylesheetLoadingPromises","contentStyle","appendStyle","initEditorWithInitialContent","startContent","loadInitialContent","contentBodyLoaded","disabled","readonly","createParser","mkSerializerSettings","annotator","_nodeChangeDispatcher","setup$5","setup$1","setup$n","setupRtcThunk","firePreInit","spellcheck","firePostRender","directionality","protect","escape","preInit","setupRtc","setProgressState","_rtcMode","initContentBody","skipWrite","visibility","orgVisibility","iframe","iframeHTML","srcdoc","DOM$5","createIframe","boxInfo","iframeTitle","tabindex","ifr","title","customAttrs","frameBorder","allowTransparency","createIframeElement","iframeContainer","documentBaseUrl","bodyId","bodyClass","translatedAriaText","getIframeHtml","DOM$4","initPlugin","initializedPlugins","Plugin","pluginUrl","pluginInstance","pluginInitError","createThemeFalseResult","renderThemeFalse","renderThemeFalseIframe","renderThemeUi","render","renderUI","renderFromLoadedTheme","iframeHeight","renderFromThemeFunc","iconPackName","currentIcons","loadIcons","svgData","icon","addIcon","initIcons","Theme","initTheme","Model","initModel","trimLegacyPrefix","initPlugins","renderInfo","uiApiFacade","isEnabled","setEnabled","augmentEditorUiApi","hidden","init$1","DOM$3","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","languageLoadError","loadTheme","themeUrl","themeLoadError","loadModel","modelUrl","modelLoadError","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","getIconsUrlMetaFromUrl","cat","urlMeta","iconsLoadError","loadPlugins","loadPlugin","pluginLoadError","isThemeLoaded","isModelLoaded","loadQueue","snapshot","getStyleSheetLoader","resetContent","triggerSave","windowManager","isEncodingXml","set_dirty","deviceDetection","normalizePlugins","trimmedPlugins","extractSections","sections","hasSection","sectionResult","getMobileOverrideOptions","mobileOptions","table_grid","object_resizing","resize","toolbar_mode","toolbar_sticky","menubar","getExternalPlugins","overrideOptions","userDefinedExternalPlugins","external_plugins","processPlugins","isMobileDevice","defaultOverrideOptions","forcedPlugins","forced_plugins","desktopPlugins","mobileConfig","getSectionConfig","platformPlugins","mobilePlugins","getPlatformPlugins","combinedPlugins","combinePlugins","combineOptions","defaultOptions","deviceOverrideOptions","mobile","extendedOptions","isOnMobile","defaults","sectionOptions","getSection","addVisual$1","registerExecCommands$3","toggleAlign","align","editorCommands","addCommands","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","JustifyNone","registerCommands$a","alignStates","registerQueryStateCommands$1","trimOrPad","trimOrPadLeftRight","insertAtCaret","_processValue$","processValue$1","insertedContent","insertContent$1","legacyPropNames","isFont","getSpecifiedFontProp","legacyPropName","getProperty","getFontProp","getComputedFontProp","getFontSize","getFontFamily","findFirstCaretElement","bindRange","getCaretElement","mapRange","fromFontSizeNumber","fontSizeNumber","getFontStyleValues","fontClasses","getFontSizeClasses","normalizeFontNames","font","fonts","registerExecCommands$2","_command","fontNameAction","fontSizeAction","lineHeightAction","customCode","registerQueryValueCommands","isFormatMatch","addQueryValueHandler","fontNameQuery","fontSizeQuery","specifiedStyle","lineHeightQuery","registerCommands$5","Indent","Outdent","registerCommands","queryCommandEnabled","queryCommandSupported","registerCommands$9","mceAddUndoLevel","mceEndUndoLevel","Undo","Redo","registerCommands$6","mceSelectNodeDepth","mceSelectNode","editingHost","registerCommands$1","mceCleanup","insertHorizontalRule","insertText","insertHTML","mceInsertContent","mceSetContent","mceReplaceContent","mceNewDocument","registerCommands$8","applyLinkToSelection","linkDetails","unlink","mceInsertLink","registerCommands$4","insertParagraph","mceInsertNewLine","InsertLineBreak","registerCommands$2","listParent","registerExecCommands$1","list","registerQueryStateCommands","registerCommands$3","registerCommands$7","mceRemoveNode","mcePrint","print","mceFocus","mceToggleVisualAid","registerExecCommands","selectionSafeCommands","isSelectionSafeCommand","EditorCommands","commands","lowerCaseCommand","skip_focus","restore","commandList","_this2","_this3","_this4","internalContentEditableAttr","setContentEditable","toggleReadOnly","removeFakeSelection","switchOnContentEditableTrue","restoreFakeSelection","registerFilters","allowedEvents","processReadonlyEvents","isClickEvent","getAnchorHrefOpt","targetEl","numChars","removeFromStart","isReadOnlyAllowedEvent","nativeEvents","EventDispatcher","bindings","toggleEvent","beforeFire","once","wrappedCallback","currentName","_this5","bindingName","filteredHandlers","binding","getEventDispatcher","_eventDispatcher","isNative","toggleNativeEvent","Observable","bubble","dispatcherArgs","DOM$2","getEventTarget","eventName","eventRoot","isListening","bindEventDelegate","delegates","eventRootElm","delegate","editors","EditorObservable","_pendingNativeEvents","stringListProcessor","getErrorMessage","isValidResult","processValue","processor","create$5","initialOptions","setValue","isRegistered","isBuiltInSpec","getBuiltInProcessor","processDefaultValue","default","immutable","unset","registered","defaultModes","switchToMode","activeMode","availableModes","oldMode","newMode","activate","deactivate","editorReadOnly","fireSwitchMode","create$4","design","registerReadOnlyContentFilters","registerReadOnlySelectionBlockers","setMode","registerMode","each$2","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","parseShortcut","shortcut","isModifier","access","alt","ctrl","meta","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","cmdFunc","normalizeCommandFunc","createShortcut","bridge","buttons","menuItems","contextMenus","contextToolbars","sidebars","views","addButton","addGroupToolbarButton","addToggleButton","addMenuButton","addSplitButton","addMenuItem","addNestedMenuItem","addToggleMenuItem","addAutocompleter","addContextMenu","addContextToolbar","addContextForm","addSidebar","addView","create$3","DOM$1","each$1","Editor","loadedCSS","isNotDirty","documentBaseURL","registerOption","normalizeOptions","hasPlugin","lookupFn","ctx","rawPatterns","_ctx","_setBaseUrl","baseURI","setupCallback","addQueryStateHandler","queryCommandState","queryCommandValue","loadArgs","saveArgs","initialContent","oldState","urlConverterCallback","toRelative","boundGlobalEvents","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","isQuirksMode","compatMode","majorVersion","minorVersion","releaseDate","i18n","tinymce","tinyMCEPreInit","srcScript","overrideDefaults","base_url","pluginBaseUrls","plugin_base_urls","pluginBaseUrl","pluginName","invalidInlineTargets","provideResults","initEditors","initCount","execCallback","isDuplicated","unique$1","findTargets","isInvalidInlineTarget","createEditor","createId","existingEditor","editorId","editorOptions","addI18n","relatedTarget","dataValue","tasks","resultFns","localStorage","FakeClipboard","FakeClipboardItem","getType","relativePosition","targetW","targetH","relChars","create$2","Rect","inflate","findBestRelativePosition","constrainRect","rels","intersect","cropRect","x1","y1","clamp","clampRect","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","fromClientRect","Resource","loadErrMsg","runErrMsg","task","waiter","resolveCb","rejectCb","complete","completer","_len16","_key16","_len17","_key17","awaiter","setItem","removeItem","storage","getItem","publicApi","geom","util","LocalStorage","ImageUploader","showNotification","TreeWalker","Serializer","Selection","tinyMCE","exportToWindowGlobal","exportToModuleLoaders"],"mappings":"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AAU,QAC5BgS,GAAQ,SAAAvS,GAAO,OAAImS,GAAMxpB,IAAIqX,EAAS,EACtCoS,GAAY,SAAApS,GAAO,OAAImS,GAAMC,UAAUpS,EAAS,EA+GhDwS,GAAoB,CAAC,OAAOtjB,OAxBjB,CACf,KACA,KACA,KACA,KACA,KACA,OAmBIujB,GAAa,SAAArU,GACjB,IAAIsU,EACJ,OAAO,SAAAnP,GAEL,OADAmP,EAASA,GAAkBrgB,GAAY+L,EAAO9O,GACvCyE,GAAM2e,EAAQrqB,GAAKkb,GAC5B,CACF,EACMoP,GAAYF,GArHH,CACb,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,YAsEIG,GAAa,SAAArP,GAAI,OAAIjD,GAAYiD,KAAUoP,GAAUpP,EAAM,EAC3DsP,GAAS,SAAAtP,GAAI,OAAIjD,GAAYiD,IAAwB,OAAflb,GAAKkb,EAAe,EAC1DuP,GAAgBL,GA7DH,CACjB,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,WAuCIM,GAASN,GAxBD,CACZ,KACA,KACA,OAsBIO,GAAeP,GA9BD,CAClB,KACA,KACA,OA4BIQ,GAAiBR,GArED,CACpB,QACA,QACA,UAmEIS,GAAgBT,GA1EH,CACjB,KACA,OAyEIU,GAAsBV,GAvBT,CACjB,MACA,SACA,WACA,UAoBIW,GAAqBX,GAAWD,IAChCa,GAAgB,SAAA9P,GAAI,OAAI6P,GAAmB7P,IAASqP,GAAWrP,EAAM,EAWrE+P,GAAmB,SAAAC,GACvB,IAAMC,EAASvB,GAAYsB,EAAK,MAC1BE,EAAMniB,GAXY,SAAAiiB,GAGxB,IAFA,IAAMnJ,EAAW,GACbsJ,EAAUH,EAA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gBH,EAAQ,CAACC,MACjCijG,EAAUjjG,GAAYD,EAAOC,IAGjC,OAAOijG,CACT,CACA,SAASC,GAAanjG,EAAQg8E,GAC5B,KAAkB,OAAXh8E,GAAiB,CACtB,IAAIojG,EAAO3B,GAAyBzhG,EAAQg8E,GAC5C,GAAIonB,EAAM,CACR,GAAIA,EAAKjkG,IACP,OAAO6iG,GAAQoB,EAAKjkG,KAEtB,GAA0B,oBAAfikG,EAAK7jG,MACd,OAAOyiG,GAAQoB,EAAK7jG,MAExB,CACAS,EAASuC,GAAevC,EAC1B,CAKA,OAJA,SAAuBwW,GAErB,OADAa,QAAQgsF,KAAK,qBAAsB7sF,GAC5B,IACT,CAEF,CACA,IAAI8sF,GAASl0B,GAAO,CAClB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAEEm0B,GAAQn0B,GAAO,CACjB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAEEo0B,GAAap0B,GAAO,CACtB,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAEEq0B,GAAgBr0B,GAAO,CACzB,UACA,gBACA,SACA,UACA,eACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAEEs0B,GAAWt0B,GAAO,CACpB,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,eAEEu0B,GAAmBv0B,GAAO,CAC5B,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAEEz0D,GAAOy0D,GAAO,CAAC,UACfl1D,GAAOk1D,GAAO,CAChB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,SAEEw0B,GAAMx0B,GAAO,CACf,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,eAEEy0B,GAASz0B,GAAO,CAClB,SACA,cACA,QACA,WACA,QACA,eACA,cACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,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","file":"js/tinymce-90a4bbc640e6a75caf06.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n","/**\n * TinyMCE version 6.3.1 (2022-12-06)\n */\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 const getPrototypeOf$1 = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const is$4 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$1(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$4(value, Object);\n const isArray$1 = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray$1(value)) {\n for (let 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 const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply$1 = f => {\n return f();\n };\n const call = f => {\n f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const indexOf$1 = (xs, x) => {\n const r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map$3 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$e = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition$2 = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$5 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$e(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil$1 = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const 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 const find$2 = (xs, pred) => {\n return findUntil$1(xs, pred, never);\n };\n const findIndex$2 = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let 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 const bind$3 = (xs, f) => flatten(map$3(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const difference = (a1, a2) => filter$5(a1, x => !contains$2(a2, x));\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$b = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$b(xs, 0);\n const last$3 = xs => get$b(xs, xs.length - 1);\n const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n const unique$1 = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$2(r, x);\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (!isDuplicated(x)) {\n r.push(x);\n }\n }\n return r;\n };\n\n const keys = Object.keys;\n const hasOwnProperty$2 = Object.hasOwnProperty;\n const each$d = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map$2 = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$d(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$d(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const bifilter = (obj, pred) => {\n const t = {};\n const f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t,\n f\n };\n };\n const filter$4 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$d(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$a = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty$2.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const equal$1 = (a1, a2, eq = eqAny) => eqRecord(eq).eq(a1, a2);\n\n const stringArray = a => {\n const all = {};\n each$e(a, key => {\n all[key] = {};\n });\n return keys(all);\n };\n\n const isArrayLike = o => o.length !== undefined;\n const isArray = Array.isArray;\n const toArray$1 = obj => {\n if (!isArray(obj)) {\n const array = [];\n for (let 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 const each$c = (o, cb, s) => {\n if (!o) {\n return false;\n }\n s = s || o;\n if (isArrayLike(o)) {\n for (let 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 (const 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 const map$1 = (array, callback) => {\n const out = [];\n each$c(array, (item, index) => {\n out.push(callback(item, index, array));\n });\n return out;\n };\n const filter$3 = (a, f) => {\n const o = [];\n each$c(a, (v, index) => {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n const indexOf = (a, v) => {\n if (a) {\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n const reduce = (collection, iteratee, accumulator, thisArg) => {\n let acc = isUndefined(accumulator) ? collection[0] : accumulator;\n for (let i = 0; i < collection.length; i++) {\n acc = iteratee.call(thisArg, acc, collection[i], i);\n }\n return acc;\n };\n const findIndex$1 = (array, predicate, thisArg) => {\n for (let 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 const last$2 = collection => collection[collection.length - 1];\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const 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 const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find$1 = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$3(group(1), group(2));\n };\n const detect$5 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$3(0, 0);\n };\n const nu$3 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$3,\n detect: detect$5,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$2(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$4 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$2(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$4(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$4(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const contains$1 = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim$3 = blank(/^\\s+|\\s+$/g);\n const lTrim = blank(/^\\s+/g);\n const rTrim = blank(/\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty$3 = s => !isNotEmpty(s);\n const repeat = (s, count) => count <= 0 ? '' : new Array(count + 1).join(s);\n const toInt = (value, radix = 10) => {\n const num = parseInt(value, radix);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains$1(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: 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: 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: uastring => {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: 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: 'macOS',\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 const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$2 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$2,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu: nu$1,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$3 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform$2 = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform$2();\n\n const userAgent = navigator.userAgent;\n const platform$1 = detect$2();\n const browser$1 = platform$1.browser;\n const os = platform$1.os;\n const deviceType = platform$1.deviceType;\n const windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n const Env = {\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n documentMode: browser$1.isIE() ? document.documentMode || 7 : 10,\n cacheSuffix: null,\n container: null,\n canHaveCSP: !browser$1.isIE(),\n windowsPhone,\n browser: {\n current: browser$1.current,\n version: browser$1.version,\n isChromium: browser$1.isChromium,\n isEdge: browser$1.isEdge,\n isFirefox: browser$1.isFirefox,\n isIE: browser$1.isIE,\n isOpera: browser$1.isOpera,\n isSafari: browser$1.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 isMacOS: os.isMacOS,\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 const whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n const trim$2 = str => {\n return isNullable(str) ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n const is$3 = (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 const makeMap$4 = (items, delim, map = {}) => {\n const resolvedItems = isString(items) ? items.split(delim || ',') : items || [];\n let i = resolvedItems.length;\n while (i--) {\n map[resolvedItems[i]] = {};\n }\n return map;\n };\n const hasOwnProperty$1 = has$2;\n const extend$3 = (obj, ...exts) => {\n for (let i = 0; i < exts.length; i++) {\n const ext = exts[i];\n for (const name in ext) {\n if (has$2(ext, name)) {\n const value = ext[name];\n if (value !== undefined) {\n obj[name] = value;\n }\n }\n }\n }\n return obj;\n };\n const walk$4 = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$c(o, (o, i) => {\n if (f.call(s, o, i, n) === false) {\n return false;\n } else {\n walk$4(o, f, n, s);\n return true;\n }\n });\n }\n };\n const resolve$2 = (n, o = window) => {\n const path = n.split('.');\n for (let i = 0, l = path.length; i < l; i++) {\n o = o[path[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n const explode$3 = (s, d) => {\n if (isArray$1(s)) {\n return s;\n } else if (s === '') {\n return [];\n } else {\n return map$1(s.split(d || ','), trim$2);\n }\n };\n const _addCacheSuffix = url => {\n const cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n const Tools = {\n trim: trim$2,\n isArray: isArray,\n is: is$3,\n toArray: toArray$1,\n makeMap: makeMap$4,\n each: each$c,\n map: map$1,\n grep: filter$3,\n inArray: indexOf,\n hasOwn: hasOwnProperty$1,\n extend: extend$3,\n walk: walk$4,\n resolve: resolve$2,\n explode: explode$3,\n _addCacheSuffix\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type$1 = element => element.dom.nodeType;\n const isType = t => element => type$1(element) === t;\n const isComment$1 = element => type$1(element) === COMMENT || name(element) === '#comment';\n const isElement$7 = isType(ELEMENT);\n const isText$b = isType(TEXT);\n const isDocument$2 = isType(DOCUMENT);\n const isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$7(e) && name(e) === tag;\n\n const rawSet = (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 const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$d(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$9 = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$9(element, key));\n const has$1 = (element, key) => {\n const dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n const remove$b = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const hasNone = element => {\n const attrs = element.dom.attributes;\n return attrs === undefined || attrs === null || attrs.length === 0;\n };\n const clone$4 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const read$4 = (element, attr) => {\n const value = get$9(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read$4(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$a = (element, attr, id) => {\n const nu = filter$5(read$4(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$b(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$8 = element => read$4(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$9 = (element, clazz) => remove$a(element, 'class', clazz);\n const toggle$2 = (element, clazz) => {\n if (contains$2(get$8(element), clazz)) {\n return remove$9(element, clazz);\n } else {\n return add$3(element, clazz);\n }\n };\n\n const add$2 = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$8(element);\n if (classList.length === 0) {\n remove$b(element, 'class');\n }\n };\n const remove$8 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$9(element, clazz);\n }\n cleanClass(element);\n };\n const toggle$1 = (element, clazz) => {\n const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$2(element, clazz);\n cleanClass(element);\n return result;\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const isSupported$1 = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$2(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$2(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$2(node);\n };\n const fromDom$2 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$2 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$2,\n fromPoint: fromPoint$2\n };\n\n const toArray = (target, f) => {\n const r = [];\n const recurse = e => {\n r.push(e);\n return f(e);\n };\n let cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n const is$1 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const 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 const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n\n const owner$1 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument$2(dos) ? dos : owner$1(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents$1 = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const 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 const siblings = element => {\n const filterSelf = elements => filter$5(elements, x => !eq(element, x));\n return parent(element).map(children$1).map(filterSelf).getOr([]);\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const prevSiblings = element => reverse(toArray(element, prevSibling));\n const nextSiblings = element => toArray(element, nextSibling);\n const children$1 = element => map$3(element.dom.childNodes, SugarElement.fromDom);\n const child$1 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$1(element, 0);\n const lastChild = element => child$1(element, element.dom.childNodes.length - 1);\n const childNodesCount = element => element.dom.childNodes.length;\n\n const getHead = doc => {\n const 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 const isShadowRoot = dos => isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n const isSupported = constant(supported);\n const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n const getStyleContainer = dos => isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isSupported() && isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$7(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText$b(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported$1(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported$1(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$d(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$7 = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$1 = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const getAllRaw = element => {\n const css = {};\n const dom = element.dom;\n if (isSupported$1(dom)) {\n for (let i = 0; i < dom.style.length; i++) {\n const ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n const remove$7 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$2(getOpt(element, 'style').map(trim$3), '')) {\n remove$b(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$4 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap$2 = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$3 = (marker, elements) => {\n each$e(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$4(e, x);\n });\n };\n const append = (parent, elements) => {\n each$e(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$e(children$1(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$1(wrapper);\n if (children.length > 0) {\n after$3(wrapper, children);\n }\n remove$6(wrapper);\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$1(SugarElement.fromDom(div));\n };\n const fromDom$1 = nodes => map$3(nodes, SugarElement.fromDom);\n\n const get$6 = element => element.dom.innerHTML;\n const set = (element, content) => {\n const owner = owner$1(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml(content, docDom);\n append(fragment, contentElements);\n empty(element);\n append$1(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$6(container);\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle$1 = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle$1(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const 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 const get$5 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const to = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n const intoView = (element, alignToTop) => {\n const isSafari = detect$2().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 const get$4 = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$2().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$5(SugarElement.fromDom(doc));\n return get$4(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const children = (scope, predicate) => filter$5(children$1(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$e(children$1(scope), 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 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 const ancestor$3 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const 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 const closest$4 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n };\n const sibling$1 = (scope, predicate) => {\n const element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n };\n const child = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$2(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const 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 const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, e => is$1(e, selector), isRoot);\n const descendant = (scope, selector) => one(selector, scope);\n const closest$3 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$1(element, selector);\n return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, selector, isRoot).isSome();\n\n class DomTreeWalker {\n constructor(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 current() {\n return this.node;\n }\n next(shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n }\n prev(shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n }\n prev2(shallow) {\n this.node = this.findPreviousNode(this.node, shallow);\n return this.node;\n }\n findSibling(node, startName, siblingName, shallow) {\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== this.rootNode) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let 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 return undefined;\n }\n findPreviousNode(node, shallow) {\n if (node) {\n const sibling = node.previousSibling;\n if (this.rootNode && sibling === this.rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (let child = sibling.lastChild; child; child = child.lastChild) {\n if (!child.lastChild) {\n return child;\n }\n }\n }\n return sibling;\n }\n const parent = node.parentNode;\n if (parent && parent !== this.rootNode) {\n return parent;\n }\n }\n return undefined;\n }\n }\n\n const isNodeType = type => {\n return node => {\n return !!node && node.nodeType === type;\n };\n };\n const isRestrictedNode = node => !!node && !Object.getPrototypeOf(node);\n const isElement$6 = isNodeType(1);\n const matchNodeName = name => {\n const lowerCasedName = name.toLowerCase();\n return node => isNonNullable(node) && node.nodeName.toLowerCase() === lowerCasedName;\n };\n const matchNodeNames = names => {\n const lowerCasedNames = names.map(s => s.toLowerCase());\n return node => {\n if (node && node.nodeName) {\n const nodeName = node.nodeName.toLowerCase();\n return contains$2(lowerCasedNames, nodeName);\n }\n return false;\n };\n };\n const matchStyleValues = (name, values) => {\n const items = values.toLowerCase().split(' ');\n return node => {\n if (isElement$6(node)) {\n const win = node.ownerDocument.defaultView;\n if (win) {\n for (let i = 0; i < items.length; i++) {\n const computed = win.getComputedStyle(node, null);\n const cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n }\n return false;\n };\n };\n const hasAttribute = attrName => {\n return node => {\n return isElement$6(node) && node.hasAttribute(attrName);\n };\n };\n const hasAttributeValue = (attrName, attrValue) => {\n return node => {\n return isElement$6(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n const isBogus$2 = node => isElement$6(node) && node.hasAttribute('data-mce-bogus');\n const isBogusAll$1 = node => isElement$6(node) && node.getAttribute('data-mce-bogus') === 'all';\n const isTable$2 = node => isElement$6(node) && node.tagName === 'TABLE';\n const hasContentEditableState = value => {\n return node => {\n if (isElement$6(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 const isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\n ]);\n const isText$a = isNodeType(3);\n const isCData = isNodeType(4);\n const isPi = isNodeType(7);\n const isComment = isNodeType(8);\n const isDocument$1 = isNodeType(9);\n const isDocumentFragment = isNodeType(11);\n const isBr$6 = matchNodeName('br');\n const isImg = matchNodeName('img');\n const isContentEditableTrue$3 = hasContentEditableState('true');\n const isContentEditableFalse$a = hasContentEditableState('false');\n const isTableCell$3 = matchNodeNames([\n 'td',\n 'th'\n ]);\n const isTableCellOrCaption = matchNodeNames([\n 'td',\n 'th',\n 'caption'\n ]);\n const isMedia$2 = matchNodeNames([\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isListItem$2 = matchNodeName('li');\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n const isZwsp$1 = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n const descendants = (scope, selector) => all(selector, scope);\n\n const NodeValue = (is, name) => {\n const get = 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 const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (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,\n getOption,\n set\n };\n };\n\n const api$1 = NodeValue(isText$b, 'text');\n const get$3 = element => api$1.get(element);\n const getOption = element => api$1.getOption(element);\n\n const 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 const tableCells = [\n 'td',\n 'th'\n ];\n const tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n const 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 const headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n const listItems$1 = [\n 'li',\n 'dd',\n 'dt'\n ];\n const lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n const wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n const wrapBlockElements = ['pre'].concat(headings);\n const lazyLookup = items => {\n let lookup;\n return node => {\n lookup = lookup ? lookup : mapToObject(items, always);\n return has$2(lookup, name(node));\n };\n };\n const isBlock$2 = lazyLookup(blocks);\n const isTable$1 = node => name(node) === 'table';\n const isInline$1 = node => isElement$7(node) && !isBlock$2(node);\n const isBr$5 = node => isElement$7(node) && name(node) === 'br';\n const isTextBlock$2 = lazyLookup(textBlocks);\n const isList = lazyLookup(lists);\n const isListItem$1 = lazyLookup(listItems$1);\n const isTableSection = lazyLookup(tableSections);\n const isTableCell$2 = lazyLookup(tableCells);\n const isWsPreserveElement = lazyLookup(wsElements);\n const isWrapBlockElement = lazyLookup(wrapBlockElements);\n const isWrapElement = node => isWrapBlockElement(node) || isInline$1(node);\n\n const getLastChildren$1 = elm => {\n const children = [];\n let rawNode = elm.dom;\n while (rawNode) {\n children.push(SugarElement.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n const removeTrailingBr = elm => {\n const allBrs = descendants(elm, 'br');\n const brs = filter$5(getLastChildren$1(elm).slice(-1), isBr$5);\n if (allBrs.length === brs.length) {\n each$e(brs, remove$6);\n }\n };\n const createPaddingBr = () => {\n const br = SugarElement.fromTag('br');\n set$2(br, 'data-mce-bogus', '1');\n return br;\n };\n const fillWithPaddingBr = elm => {\n empty(elm);\n append$1(elm, createPaddingBr());\n };\n const trimBlockTrailingBr = elm => {\n lastChild(elm).each(lastChild => {\n prevSibling(lastChild).each(lastChildPrevSibling => {\n if (isBlock$2(elm) && isBr$5(lastChild) && isBlock$2(lastChildPrevSibling)) {\n remove$6(lastChild);\n }\n });\n });\n };\n\n const ZWSP$1 = zeroWidth;\n const isZwsp = isZwsp$1;\n const trim$1 = removeZwsp;\n\n const isElement$5 = isElement$6;\n const isText$9 = isText$a;\n const isCaretContainerBlock$1 = node => {\n if (isText$9(node)) {\n node = node.parentNode;\n }\n return isElement$5(node) && node.hasAttribute('data-mce-caret');\n };\n const isCaretContainerInline = node => isText$9(node) && isZwsp(node.data);\n const isCaretContainer$2 = node => isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n const hasContent = node => node.firstChild !== node.lastChild || !isBr$6(node.firstChild);\n const insertInline$1 = (node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n const parentNode = node.parentNode;\n if (!before) {\n const sibling = node.nextSibling;\n if (isText$9(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 === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(textNode);\n }\n } else {\n const sibling = node.previousSibling;\n if (isText$9(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 === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n const isBeforeInline = pos => {\n const container = pos.container();\n if (!isText$a(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n const isAfterInline = pos => {\n const container = pos.container();\n if (!isText$a(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n const insertBlock = (blockName, node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createPaddingBr().dom);\n const parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(blockNode);\n }\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n const startsWithCaretContainer$1 = node => isText$9(node) && node.data[0] === ZWSP$1;\n const endsWithCaretContainer$1 = node => isText$9(node) && node.data[node.data.length - 1] === ZWSP$1;\n const trimBogusBr = elm => {\n var _a;\n const brs = elm.getElementsByTagName('br');\n const lastBr = brs[brs.length - 1];\n if (isBogus$2(lastBr)) {\n (_a = lastBr.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(lastBr);\n }\n };\n const showCaretContainerBlock = 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('data-mce-style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n const isRangeInCaretContainerBlock = range => isCaretContainerBlock$1(range.startContainer);\n\n const isContentEditableTrue$2 = isContentEditableTrue$3;\n const isContentEditableFalse$9 = isContentEditableFalse$a;\n const isBr$4 = isBr$6;\n const isText$8 = isText$a;\n const isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n const isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isTable = matchNodeNames(['table']);\n const isCaretContainer$1 = isCaretContainer$2;\n const isCaretCandidate$3 = node => {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$8(node)) {\n return !isInvalidTextElement(node.parentNode);\n }\n return isAtomicInline(node) || isBr$4(node) || isTable(node) || isNonUiContentEditableFalse(node);\n };\n const isUnselectable = node => isElement$6(node) && node.getAttribute('unselectable') === 'true';\n const isNonUiContentEditableFalse = node => !isUnselectable(node) && isContentEditableFalse$9(node);\n const isInEditable = (node, root) => {\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (isNonUiContentEditableFalse(tempNode)) {\n return false;\n }\n if (isContentEditableTrue$2(tempNode)) {\n return true;\n }\n }\n return true;\n };\n const isAtomicContentEditableFalse = node => {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return !foldl(from(node.getElementsByTagName('*')), (result, elm) => {\n return result || isContentEditableTrue$2(elm);\n }, false);\n };\n const isAtomic$1 = node => isAtomicInline(node) || isAtomicContentEditableFalse(node);\n const isEditableCaretCandidate$1 = (node, root) => isCaretCandidate$3(node) && isInEditable(node, root);\n\n const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n const isWhitespaceText = text => whiteSpaceRegExp.test(text);\n const isCollapsibleWhitespace$1 = c => ' \\f\\t\\x0B'.indexOf(c) !== -1;\n const isNewLineChar = c => c === '\\n' || c === '\\r';\n const isNewline = (text, idx) => idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n const normalize$4 = (text, tabSpaces = 4, isStartOfContent = true, isEndOfContent = true) => {\n const tabSpace = repeat(' ', tabSpaces);\n const normalizedText = text.replace(/\\t/g, tabSpace);\n const result = foldl(normalizedText, (acc, c) => {\n if (isCollapsibleWhitespace$1(c) || c === nbsp) {\n if (acc.pcIsSpace || acc.str === '' && isStartOfContent || acc.str.length === normalizedText.length - 1 && isEndOfContent || isNewline(normalizedText, acc.str.length + 1)) {\n return {\n pcIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n pcIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n pcIsSpace: isNewLineChar(c),\n str: acc.str + c\n };\n }\n }, {\n pcIsSpace: false,\n str: ''\n });\n return result.str;\n };\n\n const hasWhitespacePreserveParent = (node, rootNode) => {\n const rootElement = SugarElement.fromDom(rootNode);\n const startNode = SugarElement.fromDom(node);\n return ancestor$1(startNode, 'pre,code', curry(eq, rootElement));\n };\n const isWhitespace$1 = (node, rootNode) => {\n return isText$a(node) && isWhitespaceText(node.data) && !hasWhitespacePreserveParent(node, rootNode);\n };\n const isNamedAnchor = node => {\n return isElement$6(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n };\n const isContent$1 = (node, rootNode) => {\n return isCaretCandidate$3(node) && !isWhitespace$1(node, rootNode) || isNamedAnchor(node) || isBookmark(node);\n };\n const isBookmark = hasAttribute('data-mce-bookmark');\n const isBogus$1 = hasAttribute('data-mce-bogus');\n const isBogusAll = hasAttributeValue('data-mce-bogus', 'all');\n const isEmptyNode = (targetNode, skipBogus) => {\n let brCount = 0;\n if (isContent$1(targetNode, targetNode)) {\n return false;\n } else {\n let node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n const 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$6(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 const isEmpty$2 = (elm, skipBogus = true) => isEmptyNode(elm.dom, skipBogus);\n\n const transparentBlockAttr = 'data-mce-block';\n const elementNames = map => filter$5(keys(map), key => !/[A-Z]/.test(key));\n const makeSelectorFromSchemaMap = map => elementNames(map).join(',');\n const updateTransparent = (blocksSelector, transparent) => {\n if (isNonNullable(transparent.querySelector(blocksSelector))) {\n transparent.setAttribute(transparentBlockAttr, 'true');\n if (transparent.getAttribute('data-mce-selected') === 'inline-boundary') {\n transparent.removeAttribute('data-mce-selected');\n }\n return true;\n } else {\n transparent.removeAttribute(transparentBlockAttr);\n return false;\n }\n };\n const updateBlockStateOnChildren = (schema, scope) => {\n const transparentSelector = makeSelectorFromSchemaMap(schema.getTransparentElements());\n const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n return filter$5(scope.querySelectorAll(transparentSelector), transparent => updateTransparent(blocksSelector, transparent));\n };\n const trimEdge = (el, leftSide) => {\n var _a;\n const childPropertyName = leftSide ? 'lastChild' : 'firstChild';\n for (let child = el[childPropertyName]; child; child = child[childPropertyName]) {\n if (isEmpty$2(SugarElement.fromDom(child))) {\n (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);\n return;\n }\n }\n };\n const split$2 = (parentElm, splitElm) => {\n const range = document.createRange();\n const parentNode = parentElm.parentNode;\n if (parentNode) {\n range.setStartBefore(parentElm);\n range.setEndBefore(splitElm);\n const beforeFragment = range.extractContents();\n trimEdge(beforeFragment, true);\n range.setStartAfter(splitElm);\n range.setEndAfter(parentElm);\n const afterFragment = range.extractContents();\n trimEdge(afterFragment, false);\n if (!isEmpty$2(SugarElement.fromDom(beforeFragment))) {\n parentNode.insertBefore(beforeFragment, parentElm);\n }\n if (!isEmpty$2(SugarElement.fromDom(splitElm))) {\n parentNode.insertBefore(splitElm, parentElm);\n }\n if (!isEmpty$2(SugarElement.fromDom(afterFragment))) {\n parentNode.insertBefore(afterFragment, parentElm);\n }\n parentNode.removeChild(parentElm);\n }\n };\n const splitInvalidChildren = (schema, scope, transparentBlocks) => {\n const blocksElements = schema.getBlockElements();\n const rootNode = SugarElement.fromDom(scope);\n const isBlock = el => name(el) in blocksElements;\n const isRoot = el => eq(el, rootNode);\n each$e(fromDom$1(transparentBlocks), transparentBlock => {\n ancestor$3(transparentBlock, isBlock, isRoot).each(parentBlock => {\n const invalidChildren = children(transparentBlock, el => isBlock(el) && !schema.isValidChild(name(parentBlock), name(el)));\n if (invalidChildren.length > 0) {\n const stateScope = parentElement(parentBlock);\n each$e(invalidChildren, child => {\n ancestor$3(child, isBlock, isRoot).each(parentBlock => {\n split$2(parentBlock.dom, child.dom);\n });\n });\n stateScope.each(scope => updateBlockStateOnChildren(schema, scope.dom));\n }\n });\n });\n };\n const updateChildren = (schema, scope) => {\n const transparentBlocks = updateBlockStateOnChildren(schema, scope);\n splitInvalidChildren(schema, scope, transparentBlocks);\n };\n const updateElement = (schema, target) => {\n if (isTransparentElement(schema, target)) {\n const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n updateTransparent(blocksSelector, target);\n }\n };\n const updateCaret = (schema, root, caretParent) => {\n const isRoot = el => eq(el, SugarElement.fromDom(root));\n const parents = parents$1(SugarElement.fromDom(caretParent), isRoot);\n get$b(parents, parents.length - 2).filter(isElement$7).fold(() => updateChildren(schema, root), scope => updateChildren(schema, scope.dom));\n };\n const hasBlockAttr = el => el.hasAttribute(transparentBlockAttr);\n const isTransparentElementName = (schema, name) => has$2(schema.getTransparentElements(), name);\n const isTransparentElement = (schema, node) => isElement$6(node) && isTransparentElementName(schema, node.nodeName);\n const isTransparentBlock = (schema, node) => isTransparentElement(schema, node) && hasBlockAttr(node);\n const isTransparentAstBlock = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isString(node.attr(transparentBlockAttr));\n const isTransparentAstInline = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isUndefined(node.attr(transparentBlockAttr));\n\n const browser = detect$2().browser;\n const firstElement = nodes => find$2(nodes, isElement$7);\n const getTableCaptionDeltaY = elm => {\n if (browser.isFirefox() && name(elm) === 'table') {\n return firstElement(children$1(elm)).filter(elm => {\n return name(elm) === 'caption';\n }).bind(caption => {\n return firstElement(nextSiblings(caption)).map(body => {\n const bodyTop = body.dom.offsetTop;\n const captionTop = caption.dom.offsetTop;\n const captionHeight = caption.dom.offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n const hasChild = (elm, child) => elm.children && contains$2(elm.children, child);\n const getPos = (body, elm, rootElm) => {\n let x = 0, y = 0;\n const doc = body.ownerDocument;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$7(SugarElement.fromDom(body), 'position') === 'static') {\n const 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,\n y\n };\n }\n let offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n const 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,\n y\n };\n };\n\n const StyleSheetLoader = (documentOrShadowRoot, settings = {}) => {\n let idCount = 0;\n const loadedStates = {};\n const edos = SugarElement.fromDom(documentOrShadowRoot);\n const doc = documentOrOwner(edos);\n const maxLoadTime = settings.maxLoadTime || 5000;\n const _setReferrerPolicy = referrerPolicy => {\n settings.referrerPolicy = referrerPolicy;\n };\n const _setContentCssCors = contentCssCors => {\n settings.contentCssCors = contentCssCors;\n };\n const addStyle = element => {\n append$1(getStyleContainer(edos), element);\n };\n const removeStyle = id => {\n const styleContainer = getStyleContainer(edos);\n descendant(styleContainer, '#' + id).each(remove$6);\n };\n const getOrCreateState = url => get$a(loadedStates, url).getOrThunk(() => ({\n id: 'mce-u' + idCount++,\n passed: [],\n failed: [],\n count: 0\n }));\n const load = url => new Promise((success, failure) => {\n let link;\n const urlWithSuffix = Tools._addCacheSuffix(url);\n const state = getOrCreateState(urlWithSuffix);\n loadedStates[urlWithSuffix] = state;\n state.count++;\n const resolve = (callbacks, status) => {\n each$e(callbacks, call);\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 const passed = () => resolve(state.passed, 2);\n const failed = () => resolve(state.failed, 3);\n const wait = (testCallback, waitCallback) => {\n if (!testCallback()) {\n if (Date.now() - startTime < maxLoadTime) {\n setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n const waitForWebKitLinkLoaded = () => {\n wait(() => {\n const styleSheets = documentOrShadowRoot.styleSheets;\n let i = styleSheets.length;\n while (i--) {\n const styleSheet = styleSheets[i];\n const owner = styleSheet.ownerNode;\n if (owner && link && 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 const linkElem = SugarElement.fromTag('link', doc.dom);\n setAll$1(linkElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n const startTime = Date.now();\n if (settings.contentCssCors) {\n set$2(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set$2(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n addStyle(linkElem);\n set$2(linkElem, 'href', urlWithSuffix);\n });\n const loadAll = urls => {\n const loadedUrls = Promise.allSettled(map$3(urls, url => load(url).then(constant(url))));\n return loadedUrls.then(results => {\n const parts = partition$2(results, r => r.status === 'fulfilled');\n if (parts.fail.length > 0) {\n return Promise.reject(map$3(parts.fail, result => result.reason));\n } else {\n return map$3(parts.pass, result => result.value);\n }\n });\n };\n const unload = url => {\n const urlWithSuffix = Tools._addCacheSuffix(url);\n get$a(loadedStates, urlWithSuffix).each(state => {\n const count = --state.count;\n if (count === 0) {\n delete loadedStates[urlWithSuffix];\n removeStyle(state.id);\n }\n });\n };\n const unloadAll = urls => {\n each$e(urls, url => {\n unload(url);\n });\n };\n return {\n load,\n loadAll,\n unload,\n unloadAll,\n _setReferrerPolicy,\n _setContentCssCors\n };\n };\n\n const create$d = () => {\n const map = new WeakMap();\n const forElement = (referenceElement, settings) => {\n const root = getRootNode(referenceElement);\n const rootDom = root.dom;\n return Optional.from(map.get(rootDom)).getOrThunk(() => {\n const sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement };\n };\n const instance = create$d();\n\n const isSpan = node => node.nodeName.toLowerCase() === 'span';\n const isInlineContent = (node, root) => isNonNullable(node) && (isContent$1(node, root) || isInline$1(SugarElement.fromDom(node)));\n const surroundedByInlineContent = (node, root) => {\n const prev = new DomTreeWalker(node, root).prev(false);\n const next = new DomTreeWalker(node, root).next(false);\n const prevIsInline = isUndefined(prev) || isInlineContent(prev, root);\n const nextIsInline = isUndefined(next) || isInlineContent(next, root);\n return prevIsInline && nextIsInline;\n };\n const isBookmarkNode$2 = node => isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n const isKeepTextNode = (node, root) => isText$a(node) && node.data.length > 0 && surroundedByInlineContent(node, root);\n const isKeepElement = node => isElement$6(node) ? node.childNodes.length > 0 : false;\n const isDocument = node => isDocumentFragment(node) || isDocument$1(node);\n const trimNode = (dom, node, root) => {\n var _a;\n const rootNode = root || node;\n if (isElement$6(node) && isBookmarkNode$2(node)) {\n return node;\n }\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i], rootNode);\n }\n if (isElement$6(node)) {\n const currentChildren = node.childNodes;\n if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.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 const makeMap$3 = Tools.makeMap;\n const attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const rawCharsRegExp = /[<>&\\\"\\']/g;\n const entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n const 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 const baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n const reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': `'`\n };\n const nativeDecode = text => {\n const elm = SugarElement.fromTag('div').dom;\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n const buildEntitiesLookup = (items, radix) => {\n const lookup = {};\n if (items) {\n const itemList = items.split(',');\n radix = radix || 10;\n for (let i = 0; i < itemList.length; i += 2) {\n const chr = String.fromCharCode(parseInt(itemList[i], radix));\n if (!baseEntities[chr]) {\n const entity = '&' + itemList[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n } else {\n return undefined;\n }\n };\n const 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 const encodeRaw = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeAllRaw = text => ('' + text).replace(rawCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, 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 const encodeNamed = (text, attr, entities) => {\n const resolveEntities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || resolveEntities[chr] || chr;\n });\n };\n const getEncodeFunc = (name, entities) => {\n const entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n const encodeNamedAndNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, 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 const encodeCustomNamed = (text, attr) => {\n return encodeNamed(text, attr, entitiesMap);\n };\n const 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 const decode = text => text.replace(entityRegExp, (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 const Entities = {\n encodeRaw,\n encodeAllRaw,\n encodeNumeric,\n encodeNamed,\n getEncodeFunc,\n decode\n };\n\n const lookupCache = {};\n const mapCache = {};\n const dummyObj = {};\n const makeMap$2 = Tools.makeMap, each$b = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode, inArray = Tools.inArray;\n const split$1 = (items, delim) => {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n const createMap = (defaultValue, extendWith = {}) => {\n const value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n return extend$2(value, extendWith);\n };\n const getTextRootBlockElements = schema => createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n const compileSchema = type => {\n const schema = {};\n let globalAttributes, blockContent;\n let phrasingContent, flowContent;\n const add = (name, attributes = '', children = '') => {\n const childNames = split$1(children);\n const names = split$1(name);\n let ni = names.length;\n while (ni--) {\n const attributesOrder = split$1([\n globalAttributes,\n attributes\n ].join(' '));\n schema[names[ni]] = {\n attributes: mapToObject(attributesOrder, () => ({})),\n attributesOrder,\n children: mapToObject(childNames, constant(dummyObj))\n };\n }\n };\n const addAttrs = (name, attributes) => {\n const names = split$1(name);\n const attrs = split$1(attributes);\n let ni = names.length;\n while (ni--) {\n const schemaItem = schema[names[ni]];\n for (let i = 0, l = attrs.length; i < l; i++) {\n schemaItem.attributes[attrs[i]] = {};\n schemaItem.attributesOrder.push(attrs[i]);\n }\n }\n };\n if (lookupCache[type]) {\n return lookupCache[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 const transparentContent = 'a ins del canvas map';\n globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav ' + transparentContent;\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 const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$b(split$1(html4PhrasingContent), name => {\n add(name, '', phrasingContent);\n });\n const html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n each$b(split$1(html4BlockContent), 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', flowContent);\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 allow allowfullscreen loading');\n }\n if (type !== 'html4') {\n each$e([\n schema.video,\n schema.audio\n ], item => {\n delete item.children.audio;\n delete item.children.video;\n });\n }\n each$b(split$1('a form meter progress dfn'), name => {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n lookupCache[type] = schema;\n return schema;\n };\n const compileElementMap = (value, mode) => {\n if (value) {\n const styles = {};\n if (isString(value)) {\n value = { '*': value };\n }\n each$b(value, (value, key) => {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$2(value, /[, ]/);\n });\n return styles;\n } else {\n return undefined;\n }\n };\n const Schema = (settings = {}) => {\n var _a;\n const elements = {};\n const children = {};\n let patternElements = [];\n const customElementsMap = {};\n const specialElements = {};\n const createLookupTable = (option, defaultValue, extendWith) => {\n const value = settings[option];\n if (!value) {\n let newValue = mapCache[option];\n if (!newValue) {\n newValue = createMap(defaultValue, extendWith);\n mapCache[option] = newValue;\n }\n return newValue;\n } else {\n return makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n };\n const schemaType = (_a = settings.schema) !== null && _a !== void 0 ? _a : 'html5';\n const schemaItems = compileSchema(schemaType);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n const validStyles = compileElementMap(settings.valid_styles);\n const invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n const validClasses = compileElementMap(settings.valid_classes, 'map');\n const whitespaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n const selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n const voidElementsMap = createLookupTable('void_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n const boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls allowfullscreen');\n const nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n const nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', voidElementsMap);\n const moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', voidElementsMap);\n const 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 const 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 const textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n const transparentElementsMap = createLookupTable('transparent_elements', 'a ins del canvas map');\n each$b('script noscript iframe noframes noembed title style textarea xmp plaintext'.split(' '), name => {\n specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');\n });\n const patternToRegExp = str => new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n const addValidElements = validElements => {\n const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/;\n const attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/;\n const hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n const validElementsArr = split$1(validElements, ',');\n let globalAttributes;\n let globalAttributesOrder;\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (let ei = 0, el = validElementsArr.length; ei < el; ei++) {\n let matches = elementRuleRegExp.exec(validElementsArr[ei]);\n if (matches) {\n const prefix = matches[1];\n const elementName = matches[2];\n const outputName = matches[3];\n const attrData = matches[5];\n const attributes = {};\n const attributesOrder = [];\n const element = {\n attributes,\n 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$d(globalAttributes, (value, key) => {\n attributes[key] = value;\n });\n if (globalAttributesOrder) {\n attributesOrder.push(...globalAttributesOrder);\n }\n }\n if (attrData) {\n const attrDatas = split$1(attrData, '|');\n for (let ai = 0, al = attrDatas.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrDatas[ai]);\n if (matches) {\n const attr = {};\n const attrType = matches[1];\n const attrName = matches[2].replace(/[\\\\:]:/g, ':');\n const attrPrefix = matches[3];\n const value = matches[4];\n if (attrType === '!') {\n element.attributesRequired = element.attributesRequired || [];\n element.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(inArray(attributesOrder, attrName), 1);\n continue;\n }\n if (attrPrefix) {\n if (attrPrefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value\n });\n attr.defaultValue = value;\n }\n if (attrPrefix === '~') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value\n });\n attr.forcedValue = value;\n }\n if (attrPrefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n const attrPattern = attr;\n element.attributePatterns = element.attributePatterns || [];\n attrPattern.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attrPattern);\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 const patternElement = element;\n patternElement.pattern = patternToRegExp(elementName);\n patternElements.push(patternElement);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n const setValidElements = validElements => {\n patternElements = [];\n each$e(keys(elements), name => {\n delete elements[name];\n });\n addValidElements(validElements);\n each$b(schemaItems, (element, name) => {\n children[name] = element.children;\n });\n };\n const addCustomElements = customElements => {\n const customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n delete mapCache.text_block_elements;\n delete mapCache.block_elements;\n each$b(split$1(customElements, ','), rule => {\n const matches = customElementRegExp.exec(rule);\n if (matches) {\n const inline = matches[1] === '~';\n const cloneName = inline ? 'span' : 'div';\n const name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n nonEmptyElementsMap[name.toUpperCase()] = {};\n nonEmptyElementsMap[name] = {};\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n let customRule = elements[cloneName];\n customRule = extend$2({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$b(children, (element, elmName) => {\n if (element[cloneName]) {\n children[elmName] = element = extend$2({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n }\n });\n }\n };\n const addValidChildren = validChildren => {\n const 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 delete lookupCache[schemaType];\n if (validChildren) {\n each$b(split$1(validChildren, ','), rule => {\n const matches = childRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n let parent;\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$b(split$1(matches[3], '|'), child => {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n const getElementRule = name => {\n const element = elements[name];\n if (element) {\n return element;\n }\n let i = patternElements.length;\n while (i--) {\n const patternElement = patternElements[i];\n if (patternElement.pattern.test(name)) {\n return patternElement;\n }\n }\n return undefined;\n };\n if (!settings.valid_elements) {\n each$b(schemaItems, (element, name) => {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n each$b(split$1('strong/b em/i'), item => {\n const items = split$1(item, '/');\n elements[items[1]].outputName = items[0];\n });\n each$b(textInlineElementsMap, (_val, name) => {\n if (elements[name]) {\n if (settings.padd_empty_block_inline_children) {\n elements[name].paddInEmptyBlock = true;\n }\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('ol ul blockquote a table tbody'), name => {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), name => {\n elements[name].paddEmpty = true;\n });\n each$b(split$1('span'), 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$b({\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 }, (parents, item) => {\n if (elements[item]) {\n elements[item].parentsRequired = split$1(parents);\n }\n });\n if (settings.invalid_elements) {\n each$b(explode$2(settings.invalid_elements), item => {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n const getValidStyles = constant(validStyles);\n const getInvalidStyles = constant(invalidStyles);\n const getValidClasses = constant(validClasses);\n const getBoolAttrs = constant(boolAttrMap);\n const getBlockElements = constant(blockElementsMap);\n const getTextBlockElements = constant(textBlockElementsMap);\n const getTextInlineElements = constant(textInlineElementsMap);\n const getVoidElements = constant(Object.seal(voidElementsMap));\n const getSelfClosingElements = constant(selfClosingElementsMap);\n const getNonEmptyElements = constant(nonEmptyElementsMap);\n const getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n const getWhitespaceElements = constant(whitespaceElementsMap);\n const getTransparentElements = constant(transparentElementsMap);\n const getSpecialElements = constant(Object.seal(specialElements));\n const isValidChild = (name, child) => {\n const parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n const isValid = (name, attr) => {\n const rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n const attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n let i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(attr)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n const getCustomElements = constant(customElementsMap);\n return {\n type: schemaType,\n children,\n elements,\n getValidStyles,\n getValidClasses,\n getBlockElements,\n getInvalidStyles,\n getVoidElements,\n getTextBlockElements,\n getTextInlineElements,\n getBoolAttrs,\n getElementRule,\n getSelfClosingElements,\n getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements,\n getWhitespaceElements,\n getTransparentElements,\n getSpecialElements,\n isValidChild,\n isValid,\n getCustomElements,\n addValidElements,\n setValidElements,\n addCustomElements,\n addValidChildren\n };\n };\n\n const Styles = (settings = {}, schema) => {\n const urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n const styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n const trimRightRegExp = /\\s+$/;\n const encodingLookup = {};\n let validStyles;\n let invalidStyles;\n const invisibleChar = zeroWidth;\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n const encodingItems = (`\\\\\" \\\\' \\\\; \\\\: ; : ` + invisibleChar).split(' ');\n for (let i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n const self = {\n parse: css => {\n const styles = {};\n let isEncoded = false;\n const urlConverter = settings.url_converter;\n const urlConverterScope = settings.url_converter_scope || self;\n const compress = (prefix, suffix, noJoin) => {\n const top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n const right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n const bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n const left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n const box = [\n top,\n right,\n bottom,\n left\n ];\n let 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 const canCompress = key => {\n const value = styles[key];\n if (!value) {\n return;\n }\n const values = value.split(' ');\n let i = values.length;\n while (i--) {\n if (values[i] !== values[0]) {\n return false;\n }\n }\n styles[key] = values[0];\n return true;\n };\n const compress2 = (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 const encode = str => {\n isEncoded = true;\n return encodingLookup[str];\n };\n const decode = (str, keepSlashes) => {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, str => {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n const decodeSingleHexSequence = escSeq => {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n const decodeHexSequences = value => {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n const processUrl = (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 const 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, str => {\n return str.replace(/[;:]/g, encode);\n });\n let matches;\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n let name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n let 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(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: (styles, elementName) => {\n let css = '';\n const serializeStyles = (elemName, validStyleList) => {\n const styleList = validStyleList[elemName];\n if (styleList) {\n for (let i = 0, l = styleList.length; i < l; i++) {\n const name = styleList[i];\n const value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n const isValid = (name, elemName) => {\n if (!invalidStyles || !elemName) {\n return true;\n }\n let styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elemName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*', validStyles);\n serializeStyles(elementName, validStyles);\n } else {\n each$d(styles, (value, name) => {\n if (value && isValid(name, elementName)) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n });\n }\n return css;\n }\n };\n return self;\n };\n\n const 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 const isNativeEvent = event => event instanceof Event || isFunction(event.initEvent);\n const hasIsDefaultPrevented = event => event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n const needsNormalizing = event => isNullable(event.preventDefault) || isNativeEvent(event);\n const clone$3 = (originalEvent, data) => {\n const event = data !== null && data !== void 0 ? data : {};\n for (const name in originalEvent) {\n if (!has$2(deprecated, name)) {\n event[name] = originalEvent[name];\n }\n }\n if (isNonNullable(originalEvent.composedPath)) {\n event.composedPath = () => originalEvent.composedPath();\n }\n return event;\n };\n const normalize$3 = (type, originalEvent, fallbackTarget, data) => {\n var _a;\n const event = clone$3(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 = () => {\n event.defaultPrevented = true;\n event.isDefaultPrevented = always;\n if (isFunction(originalEvent.preventDefault)) {\n originalEvent.preventDefault();\n }\n };\n event.stopPropagation = () => {\n event.cancelBubble = true;\n event.isPropagationStopped = always;\n if (isFunction(originalEvent.stopPropagation)) {\n originalEvent.stopPropagation();\n }\n };\n event.stopImmediatePropagation = () => {\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 const eventExpandoPrefix = 'mce-data-';\n const mouseEventRe = /^(?:mouse|contextmenu)|click/;\n const addEvent = (target, name, callback, capture) => {\n target.addEventListener(name, callback, capture || false);\n };\n const removeEvent = (target, name, callback, capture) => {\n target.removeEventListener(name, callback, capture || false);\n };\n const isMouseEvent = event => isNonNullable(event) && mouseEventRe.test(event.type);\n const fix = (originalEvent, data) => {\n const event = normalize$3(originalEvent.type, originalEvent, document, data);\n if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n const eventDoc = event.target.ownerDocument || document;\n const doc = eventDoc.documentElement;\n const body = eventDoc.body;\n const 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 return event;\n };\n const bindOnReady = (win, callback, eventUtils) => {\n const doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n const isDocReady = () => {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n const readyHandler = () => {\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 class EventUtils {\n constructor() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasFocusIn = 'onfocusin' in document.documentElement;\n this.count = 1;\n }\n bind(target, names, callback, scope) {\n const self = this;\n let callbackList;\n const win = window;\n const defaultNativeHandler = evt => {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || isText$a(target) || isComment(target)) {\n return callback;\n }\n let id;\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 const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n let name = namesList[i];\n let nativeHandler = defaultNativeHandler;\n let capture = false;\n let fakeName = 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.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = evt => {\n const event = fix(evt || win.event);\n event.type = event.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(event, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n 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\n });\n }\n }\n }\n target = callbackList = null;\n return callback;\n }\n unbind(target, names, callback) {\n if (!target || isText$a(target) || isComment(target)) {\n return this;\n }\n const id = target[this.expando];\n if (id) {\n let eventMap = this.events[id];\n if (names) {\n const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n const name = namesList[i];\n const callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n let ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n const nativeHandler = callbackList.nativeHandler;\n const fakeName = callbackList.fakeName, capture = callbackList.capture;\n const newCallbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n newCallbackList.nativeHandler = nativeHandler;\n newCallbackList.fakeName = fakeName;\n newCallbackList.capture = capture;\n eventMap[name] = newCallbackList;\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$d(eventMap, (callbackList, name) => {\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n });\n eventMap = {};\n }\n for (const 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 fire(target, name, args) {\n return this.dispatch(target, name, args);\n }\n dispatch(target, name, args) {\n if (!target || isText$a(target) || isComment(target)) {\n return this;\n }\n const event = fix({\n type: name,\n target\n }, args);\n do {\n const 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 clean(target) {\n if (!target || isText$a(target) || isComment(target)) {\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 const children = target.getElementsByTagName('*');\n let 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 destroy() {\n this.events = {};\n }\n cancel(e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n }\n executeHandlers(evt, id) {\n const container = this.events[id];\n const callbackList = container && container[evt.type];\n if (callbackList) {\n for (let i = 0, l = callbackList.length; i < l; i++) {\n const 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 }\n EventUtils.Event = new EventUtils();\n\n const each$a = Tools.each;\n const grep = Tools.grep;\n const internalStyleName = 'data-mce-style';\n const numericalCssMap = Tools.makeMap('fill-opacity font-weight line-height opacity orphans widows z-index zoom', ' ');\n const legacySetAttribute = (elm, name, value) => {\n if (isNullable(value) || value === '') {\n remove$b(elm, name);\n } else {\n set$2(elm, name, value);\n }\n };\n const camelCaseToHyphens = name => name.replace(/[A-Z]/g, v => '-' + v.toLowerCase());\n const findNodeIndex = (node, normalized) => {\n let idx = 0;\n if (node) {\n for (let lastNodeType = node.nodeType, tempNode = node.previousSibling; tempNode; tempNode = tempNode.previousSibling) {\n const nodeType = tempNode.nodeType;\n if (normalized && isText$a(tempNode)) {\n if (nodeType === lastNodeType || !tempNode.data.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n const updateInternalStyleAttr = (styles, elm) => {\n const rawValue = get$9(elm, 'style');\n const value = styles.serialize(styles.parse(rawValue), name(elm));\n legacySetAttribute(elm, internalStyleName, value);\n };\n const convertStyleToString = (cssValue, cssName) => {\n if (isNumber(cssValue)) {\n return has$2(numericalCssMap, cssName) ? cssValue + '' : cssValue + 'px';\n } else {\n return cssValue;\n }\n };\n const applyStyle$1 = ($elm, cssName, cssValue) => {\n const normalizedName = camelCaseToHyphens(cssName);\n if (isNullable(cssValue) || cssValue === '') {\n remove$7($elm, normalizedName);\n } else {\n set$1($elm, normalizedName, convertStyleToString(cssValue, normalizedName));\n }\n };\n const setupAttrHooks = (styles, settings, getContext) => {\n const keepValues = settings.keep_values;\n const keepUrlHook = {\n set: (elm, value, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (isFunction(settings.url_converter) && isNonNullable(value)) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), String(value), name, elm);\n }\n const internalName = 'data-mce-' + name;\n legacySetAttribute(sugarElm, internalName, value);\n legacySetAttribute(sugarElm, name, value);\n },\n get: (elm, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n return get$9(sugarElm, 'data-mce-' + name) || get$9(sugarElm, name);\n }\n };\n const attrHooks = {\n style: {\n set: (elm, value) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (keepValues) {\n legacySetAttribute(sugarElm, internalStyleName, value);\n }\n remove$b(sugarElm, 'style');\n if (isString(value)) {\n setAll(sugarElm, styles.parse(value));\n }\n },\n get: elm => {\n const sugarElm = SugarElement.fromDom(elm);\n const value = get$9(sugarElm, internalStyleName) || get$9(sugarElm, 'style');\n return styles.serialize(styles.parse(value), name(sugarElm));\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n const DOMUtils = (doc, settings = {}) => {\n const addedStyles = {};\n const win = window;\n const files = {};\n let counter = 0;\n const stdMode = true;\n const boxModel = true;\n const styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n const boundEvents = [];\n const schema = settings.schema ? settings.schema : Schema({});\n const styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n const events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n const blockElementsMap = schema.getBlockElements();\n const isBlock = node => {\n if (isString(node)) {\n return has$2(blockElementsMap, node);\n } else {\n return isElement$6(node) && (has$2(blockElementsMap, node.nodeName) || isTransparentBlock(schema, node));\n }\n };\n const get = elm => elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n const _get = elm => {\n const value = get(elm);\n return isNonNullable(value) ? SugarElement.fromDom(value) : null;\n };\n const getAttrib = (elm, name, defaultVal = '') => {\n let value;\n const $elm = _get(elm);\n if (isNonNullable($elm) && isElement$7($elm)) {\n const hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm.dom, name);\n } else {\n value = get$9($elm, name);\n }\n }\n return isNonNullable(value) ? value : defaultVal;\n };\n const getAttribs = elm => {\n const node = get(elm);\n return isNullable(node) ? [] : node.attributes;\n };\n const setAttrib = (elm, name, value) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const val = value === '' ? null : value;\n const originalValue = get$9($elm, name);\n const hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm.dom, val, name);\n } else {\n legacySetAttribute($elm, name, val);\n }\n if (originalValue !== val && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm.dom,\n attrName: name,\n attrValue: val\n });\n }\n }\n });\n };\n const clone = (node, deep) => {\n return node.cloneNode(deep);\n };\n const getRoot = () => settings.root_element || doc.body;\n const getViewPort = argWin => {\n const vp = getBounds(argWin);\n return {\n x: vp.x,\n y: vp.y,\n w: vp.width,\n h: vp.height\n };\n };\n const getPos$1 = (elm, rootElm) => getPos(doc.body, get(elm), rootElm);\n const setStyle = (elm, name, value) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n applyStyle$1($elm, name, value);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const setStyles = (elm, stylesArg) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n each$d(stylesArg, (v, n) => {\n applyStyle$1($elm, n, v);\n });\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const getStyle = (elm, name, computed) => {\n const $elm = get(elm);\n if (isNullable($elm) || !isElement$6($elm)) {\n return undefined;\n }\n if (computed) {\n return get$7(SugarElement.fromDom($elm), camelCaseToHyphens(name));\n } else {\n name = name.replace(/-(\\D)/g, (a, b) => b.toUpperCase());\n if (name === 'float') {\n name = 'cssFloat';\n }\n return $elm.style ? $elm.style[name] : undefined;\n }\n };\n const getSize = elm => {\n const $elm = get(elm);\n if (!$elm) {\n return {\n w: 0,\n h: 0\n };\n }\n let w = getStyle($elm, 'width');\n let h = getStyle($elm, 'height');\n if (!w || w.indexOf('px') === -1) {\n w = '0';\n }\n if (!h || 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 const getRect = elm => {\n const $elm = get(elm);\n const pos = getPos$1($elm);\n const size = getSize($elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n const is = (elm, selector) => {\n if (!elm) {\n return false;\n }\n const elms = isArray$1(elm) ? elm : [elm];\n return exists(elms, e => {\n return is$1(SugarElement.fromDom(e), selector);\n });\n };\n const getParents = (elm, selector, root, collect) => {\n const result = [];\n let node = get(elm);\n collect = collect === undefined;\n const resolvedRoot = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (isString(selector)) {\n if (selector === '*') {\n selector = isElement$6;\n } else {\n const selectorVal = selector;\n selector = node => is(node, selectorVal);\n }\n }\n while (node) {\n if (node === resolvedRoot || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n break;\n }\n if (!selector || 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 const getParent = (node, selector, root) => {\n const parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n const _findSib = (node, selector, name) => {\n let func = selector;\n if (node) {\n if (isString(selector)) {\n func = node => {\n return is(node, selector);\n };\n }\n for (let tempNode = node[name]; tempNode; tempNode = tempNode[name]) {\n if (isFunction(func) && func(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getNext = (node, selector) => _findSib(node, selector, 'nextSibling');\n const getPrev = (node, selector) => _findSib(node, selector, 'previousSibling');\n const isParentNode = node => isFunction(node.querySelectorAll);\n const select = (selector, scope) => {\n var _a, _b;\n const elm = (_b = (_a = get(scope)) !== null && _a !== void 0 ? _a : settings.root_element) !== null && _b !== void 0 ? _b : doc;\n return isParentNode(elm) ? from(elm.querySelectorAll(selector)) : [];\n };\n const run = function (elm, func, scope) {\n const context = scope !== null && scope !== void 0 ? scope : this;\n if (isArray$1(elm)) {\n const result = [];\n each$a(elm, (e, i) => {\n const node = get(e);\n if (node) {\n result.push(func.call(context, node, i));\n }\n });\n return result;\n } else {\n const node = get(elm);\n return !node ? false : func.call(context, node);\n }\n };\n const setAttribs = (elm, attrs) => {\n run(elm, $elm => {\n each$d(attrs, (value, name) => {\n setAttrib($elm, name, value);\n });\n });\n };\n const setHTML = (elm, html) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n set($elm, html);\n });\n };\n const add = (parentElm, name, attrs, html, create) => run(parentElm, parentElm => {\n const newElm = isString(name) ? doc.createElement(name) : name;\n if (isNonNullable(attrs)) {\n setAttribs(newElm, attrs);\n }\n if (html) {\n if (!isString(html) && html.nodeType) {\n newElm.appendChild(html);\n } else if (isString(html)) {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n const create = (name, attrs, html) => add(doc.createElement(name), name, attrs, html, true);\n const decode = Entities.decode;\n const encode = Entities.encodeAllRaw;\n const createHTML = (name, attrs, html = '') => {\n let outHtml = '<' + name;\n for (const key in attrs) {\n if (hasNonNullableKey(attrs, key)) {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (isEmpty$3(html) && has$2(schema.getVoidElements(), name)) {\n return outHtml + ' />';\n } else {\n return outHtml + '>' + html + '</' + name + '>';\n }\n };\n const createFragment = html => {\n const container = doc.createElement('div');\n const frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n let node;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n const remove = (node, keepChildren) => {\n return run(node, n => {\n const $node = SugarElement.fromDom(n);\n if (keepChildren) {\n each$e(children$1($node), child => {\n if (isText$b(child) && child.dom.length === 0) {\n remove$6(child);\n } else {\n before$3($node, child);\n }\n });\n }\n remove$6($node);\n return $node.dom;\n });\n };\n const removeAllAttribs = e => run(e, e => {\n const attrs = e.attributes;\n for (let i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n const parseStyle = cssText => styles.parse(cssText);\n const serializeStyle = (stylesArg, name) => styles.serialize(stylesArg, name);\n const addStyle = cssText => {\n if (self !== DOMUtils.DOM && doc === document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n let styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n const head = doc.head;\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 const loadCSS = urls => {\n if (!urls) {\n urls = '';\n }\n each$e(urls.split(','), url => {\n files[url] = true;\n styleSheetLoader.load(url).catch(noop);\n });\n };\n const toggleClass = (elm, cls, state) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const classes = cls.split(' ');\n each$e(classes, c => {\n if (isNonNullable(state)) {\n const fn = state ? add$2 : remove$8;\n fn($elm, c);\n } else {\n toggle$1($elm, c);\n }\n });\n }\n });\n };\n const addClass = (elm, cls) => {\n toggleClass(elm, cls, true);\n };\n const removeClass = (elm, cls) => {\n toggleClass(elm, cls, false);\n };\n const hasClass = (elm, cls) => {\n const $elm = _get(elm);\n const classes = cls.split(' ');\n return isNonNullable($elm) && forall(classes, c => has($elm, c));\n };\n const show = elm => {\n run(elm, e => remove$7(SugarElement.fromDom(e), 'display'));\n };\n const hide = elm => {\n run(elm, e => set$1(SugarElement.fromDom(e), 'display', 'none'));\n };\n const isHidden = elm => {\n const $elm = _get(elm);\n return isNonNullable($elm) && is$2(getRaw$1($elm, 'display'), 'none');\n };\n const uniqueId = prefix => (!prefix ? 'mce_' : prefix) + counter++;\n const getOuterHTML = elm => {\n const $elm = _get(elm);\n if (isNonNullable($elm)) {\n return isElement$6($elm.dom) ? $elm.dom.outerHTML : getOuter($elm);\n } else {\n return '';\n }\n };\n const setOuterHTML = (elm, html) => {\n run(elm, $elm => {\n if (isElement$6($elm)) {\n $elm.outerHTML = html;\n }\n });\n };\n const insertAfter = (node, reference) => {\n const referenceNode = get(reference);\n return run(node, node => {\n const parent = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.parentNode;\n const nextSibling = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.nextSibling;\n if (parent) {\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n }\n return node;\n });\n };\n const replace = (newElm, oldElm, keepChildren) => run(oldElm, elm => {\n var _a;\n const replacee = isArray$1(oldElm) ? newElm.cloneNode(true) : newElm;\n if (keepChildren) {\n each$a(grep(elm.childNodes), node => {\n replacee.appendChild(node);\n });\n }\n (_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(replacee, elm);\n return elm;\n });\n const rename = (elm, name) => {\n if (elm.nodeName !== name.toUpperCase()) {\n const newElm = create(name);\n each$a(getAttribs(elm), attrNode => {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n return newElm;\n } else {\n return elm;\n }\n };\n const findCommonAncestor = (a, b) => {\n let ps = a;\n while (ps) {\n let 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 } else {\n return ps;\n }\n };\n const isNonEmptyElement = node => {\n if (isElement$6(node)) {\n const 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 const isEmpty = (node, elements) => {\n let brCount = 0;\n if (isNonEmptyElement(node)) {\n return false;\n }\n const firstChild = node.firstChild;\n if (firstChild) {\n const walker = new DomTreeWalker(firstChild, node);\n const whitespaceElements = schema ? schema.getWhitespaceElements() : {};\n const nonEmptyElements = elements || (schema ? schema.getNonEmptyElements() : null);\n let tempNode = firstChild;\n do {\n if (isElement$6(tempNode)) {\n const bogusVal = tempNode.getAttribute('data-mce-bogus');\n if (bogusVal) {\n tempNode = walker.next(bogusVal === 'all');\n continue;\n }\n const name = tempNode.nodeName.toLowerCase();\n if (nonEmptyElements && nonEmptyElements[name]) {\n if (name === 'br') {\n brCount++;\n tempNode = walker.next();\n continue;\n }\n return false;\n }\n if (isNonEmptyElement(tempNode)) {\n return false;\n }\n }\n if (isComment(tempNode)) {\n return false;\n }\n if (isText$a(tempNode) && !isWhitespaceText(tempNode.data)) {\n return false;\n }\n if (isText$a(tempNode) && tempNode.parentNode && whitespaceElements[tempNode.parentNode.nodeName] && isWhitespaceText(tempNode.data)) {\n return false;\n }\n tempNode = walker.next();\n } while (tempNode);\n }\n return brCount <= 1;\n };\n const createRng = () => doc.createRange();\n const split = (parentElm, splitElm, replacementElm) => {\n let range = createRng();\n let beforeFragment;\n let afterFragment;\n if (parentElm && splitElm && parentElm.parentNode && splitElm.parentNode) {\n const parentNode = parentElm.parentNode;\n range.setStart(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(parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\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 } else {\n return undefined;\n }\n };\n const bind = (target, name, func, scope) => {\n if (isArray$1(target)) {\n let i = target.length;\n const rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n } else {\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n return events.bind(target, name, func, scope || self);\n }\n };\n const unbind = (target, name, func) => {\n if (isArray$1(target)) {\n let i = target.length;\n const 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 let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n if (target === boundTarget && (!name || name === boundName) && (!func || func === boundFunc)) {\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n }\n return events.unbind(target, name, func);\n }\n };\n const dispatch = (target, name, evt) => events.dispatch(target, name, evt);\n const fire = (target, name, evt) => events.dispatch(target, name, evt);\n const getContentEditable = node => {\n if (node && isElement$6(node)) {\n const 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 const getContentEditableParent = node => {\n const root = getRoot();\n let state = null;\n for (let tempNode = node; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n state = getContentEditable(tempNode);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n const destroy = () => {\n if (boundEvents.length > 0) {\n let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n each$d(files, (_, url) => {\n styleSheetLoader.unload(url);\n delete files[url];\n });\n };\n const isChildOf = (node, parent) => {\n return node === parent || parent.contains(node);\n };\n const dumpRng = r => 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n const self = {\n doc,\n settings,\n win,\n files,\n stdMode,\n boxModel,\n styleSheetLoader,\n boundEvents,\n styles,\n schema,\n events,\n isBlock: isBlock,\n root: null,\n clone,\n getRoot,\n getViewPort,\n getRect,\n getSize,\n getParent,\n getParents: getParents,\n get,\n getNext,\n getPrev,\n select,\n is,\n add,\n create,\n createHTML,\n createFragment,\n remove,\n setStyle,\n getStyle: getStyle,\n setStyles,\n removeAllAttribs,\n setAttrib,\n setAttribs,\n getAttrib,\n getPos: getPos$1,\n parseStyle,\n serializeStyle,\n addStyle,\n loadCSS,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n show,\n hide,\n isHidden,\n uniqueId,\n setHTML,\n getOuterHTML,\n setOuterHTML,\n decode,\n encode,\n insertAfter,\n replace,\n rename,\n findCommonAncestor,\n run,\n getAttribs,\n isEmpty,\n createRng,\n nodeIndex: findNodeIndex,\n split,\n bind: bind,\n unbind: unbind,\n fire,\n dispatch,\n getContentEditable,\n getContentEditableParent,\n destroy,\n isChildOf,\n dumpRng\n };\n const attrHooks = setupAttrHooks(styles, settings, constant(self));\n return self;\n };\n DOMUtils.DOM = DOMUtils(document);\n DOMUtils.nodeIndex = findNodeIndex;\n\n const DOM$b = DOMUtils.DOM;\n const QUEUED = 0;\n const LOADING = 1;\n const LOADED = 2;\n const FAILED = 3;\n class ScriptLoader {\n constructor(settings = {}) {\n this.states = {};\n this.queue = [];\n this.scriptLoadedCallbacks = {};\n this.queueLoadedCallbacks = [];\n this.loading = false;\n this.settings = settings;\n }\n _setReferrerPolicy(referrerPolicy) {\n this.settings.referrerPolicy = referrerPolicy;\n }\n loadScript(url) {\n return new Promise((resolve, reject) => {\n const dom = DOM$b;\n let elm;\n const cleanup = () => {\n dom.remove(id);\n if (elm) {\n elm.onerror = elm.onload = elm = null;\n }\n };\n const done = () => {\n cleanup();\n resolve();\n };\n const error = () => {\n cleanup();\n reject('Failed to load script: ' + url);\n };\n const 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 }\n isDone(url) {\n return this.states[url] === LOADED;\n }\n markDone(url) {\n this.states[url] = LOADED;\n }\n add(url) {\n const self = this;\n self.queue.push(url);\n const state = self.states[url];\n if (state === undefined) {\n self.states[url] = QUEUED;\n }\n return new Promise((resolve, reject) => {\n if (!self.scriptLoadedCallbacks[url]) {\n self.scriptLoadedCallbacks[url] = [];\n }\n self.scriptLoadedCallbacks[url].push({\n resolve,\n reject\n });\n });\n }\n load(url) {\n return this.add(url);\n }\n remove(url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n }\n loadQueue() {\n const queue = this.queue;\n this.queue = [];\n return this.loadScripts(queue);\n }\n loadScripts(scripts) {\n const self = this;\n const execCallbacks = (name, url) => {\n get$a(self.scriptLoadedCallbacks, url).each(callbacks => {\n each$e(callbacks, callback => callback[name](url));\n });\n delete self.scriptLoadedCallbacks[url];\n };\n const processResults = results => {\n const failures = filter$5(results, result => result.status === 'rejected');\n if (failures.length > 0) {\n return Promise.reject(bind$3(failures, ({reason}) => isArray$1(reason) ? reason : [reason]));\n } else {\n return Promise.resolve();\n }\n };\n const load = urls => Promise.allSettled(map$3(urls, url => {\n if (self.states[url] === LOADED) {\n execCallbacks('resolve', url);\n return Promise.resolve();\n } else if (self.states[url] === FAILED) {\n execCallbacks('reject', url);\n return Promise.reject(url);\n } else {\n self.states[url] = LOADING;\n return self.loadScript(url).then(() => {\n self.states[url] = LOADED;\n execCallbacks('resolve', url);\n const queue = self.queue;\n if (queue.length > 0) {\n self.queue = [];\n return load(queue).then(processResults);\n } else {\n return Promise.resolve();\n }\n }, () => {\n self.states[url] = FAILED;\n execCallbacks('reject', url);\n return Promise.reject(url);\n });\n }\n }));\n const processQueue = urls => {\n self.loading = true;\n return load(urls).then(results => {\n self.loading = false;\n const nextQueuedItem = self.queueLoadedCallbacks.shift();\n Optional.from(nextQueuedItem).each(call);\n return processResults(results);\n });\n };\n const uniqueScripts = stringArray(scripts);\n if (self.loading) {\n return new Promise((resolve, reject) => {\n self.queueLoadedCallbacks.push(() => processQueue(uniqueScripts).then(resolve, reject));\n });\n } else {\n return processQueue(uniqueScripts);\n }\n }\n }\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const isRaw = str => isObject(str) && has$2(str, 'raw');\n const isTokenised = str => isArray$1(str) && str.length > 1;\n const data = {};\n const currentCode = Cell('en');\n const getLanguageData = () => get$a(data, currentCode.get());\n const getData$1 = () => map$2(data, value => ({ ...value }));\n const setCode = newCode => {\n if (newCode) {\n currentCode.set(newCode);\n }\n };\n const getCode = () => currentCode.get();\n const add$1 = (code, items) => {\n let langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n each$d(items, (translation, name) => {\n langData[name.toLowerCase()] = translation;\n });\n };\n const translate = text => {\n const langData = getLanguageData().getOr({});\n const toString = obj => {\n if (isFunction(obj)) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n const isEmpty = text => text === '' || text === null || text === undefined;\n const getLangData = text => {\n const textstr = toString(text);\n return get$a(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n };\n const removeContext = str => str.replace(/{context:\\w+}$/, '');\n if (isEmpty(text)) {\n return '';\n }\n if (isRaw(text)) {\n return toString(text.raw);\n }\n if (isTokenised(text)) {\n const values = text.slice(1);\n const substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, ($1, $2) => has$2(values, $2) ? toString(values[$2]) : $1);\n return removeContext(substitued);\n }\n return removeContext(getLangData(text));\n };\n const isRtl$1 = () => getLanguageData().bind(items => get$a(items, '_dir')).exists(dir => dir === 'rtl');\n const hasCode = code => has$2(data, code);\n const I18n = {\n getData: getData$1,\n setCode,\n getCode,\n add: add$1,\n translate,\n isRtl: isRtl$1,\n hasCode\n };\n\n const AddOnManager = () => {\n const items = [];\n const urls = {};\n const lookup = {};\n const _listeners = [];\n const runListeners = (name, state) => {\n const matchedListeners = filter$5(_listeners, listener => listener.name === name && listener.state === state);\n each$e(matchedListeners, listener => listener.resolve());\n };\n const isLoaded = name => has$2(urls, name);\n const isAdded = name => has$2(lookup, name);\n const get = name => {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n const loadLanguagePack = (name, languages) => {\n const language = I18n.getCode();\n const wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n };\n const requireLangPack = (name, languages) => {\n if (AddOnManager.languageLoad !== false) {\n if (isLoaded(name)) {\n loadLanguagePack(name, languages);\n } else {\n waitFor(name, 'loaded').then(() => loadLanguagePack(name, languages));\n }\n }\n };\n const add = (id, addOn) => {\n items.push(addOn);\n lookup[id] = { instance: addOn };\n runListeners(id, 'added');\n return addOn;\n };\n const remove = name => {\n delete urls[name];\n delete lookup[name];\n };\n const createUrl = (baseUrl, dep) => {\n if (isString(dep)) {\n return isString(baseUrl) ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n } else {\n return dep;\n }\n };\n const load = (name, addOnUrl) => {\n if (urls[name]) {\n return Promise.resolve();\n }\n let urlString = isString(addOnUrl) ? 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 const done = () => {\n runListeners(name, 'loaded');\n return Promise.resolve();\n };\n if (lookup[name]) {\n return done();\n } else {\n return ScriptLoader.ScriptLoader.add(urlString).then(done);\n }\n };\n const waitFor = (name, state = 'added') => {\n if (state === 'added' && isAdded(name)) {\n return Promise.resolve();\n } else if (state === 'loaded' && isLoaded(name)) {\n return Promise.resolve();\n } else {\n return new Promise(resolve => {\n _listeners.push({\n name,\n state,\n resolve\n });\n });\n }\n };\n return {\n items,\n urls,\n lookup,\n get,\n requireLangPack,\n add,\n remove,\n createUrl,\n load,\n waitFor\n };\n };\n AddOnManager.languageLoad = true;\n AddOnManager.baseURL = '';\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n AddOnManager.ModelManager = AddOnManager();\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const repeatable = delay => {\n const intervalId = Cell(Optional.none());\n const revoke = () => intervalId.get().each(id => clearInterval(id));\n const clear = () => {\n revoke();\n intervalId.set(Optional.none());\n };\n const isSet = () => intervalId.get().isSome();\n const get = () => intervalId.get();\n const set = functionToRepeat => {\n revoke();\n intervalId.set(Optional.some(setInterval(functionToRepeat, delay)));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value$2 = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const first$1 = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const last$1 = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const annotation = constant('mce-annotation');\n const dataAnnotation = constant('data-mce-annotation');\n const dataAnnotationId = constant('data-mce-annotation-uid');\n const dataAnnotationActive = constant('data-mce-annotation-active');\n const dataAnnotationClasses = constant('data-mce-annotation-classes');\n const dataAnnotationAttributes = constant('data-mce-annotation-attrs');\n\n const isRoot$1 = root => node => eq(node, root);\n const identify = (editor, annotationName) => {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const root = SugarElement.fromDom(editor.getBody());\n const selector = annotationName.fold(() => '.' + annotation(), an => `[${ dataAnnotation() }=\"${ an }\"]`);\n const newStart = child$1(start, rng.startOffset).getOr(start);\n const closest = closest$3(newStart, selector, isRoot$1(root));\n return closest.bind(c => getOpt(c, `${ dataAnnotationId() }`).bind(uid => getOpt(c, `${ dataAnnotation() }`).map(name => {\n const elements = findMarkers(editor, uid);\n return {\n uid,\n name,\n elements\n };\n })));\n };\n const isAnnotation = elem => isElement$7(elem) && has(elem, annotation());\n const isBogusElement = (elem, root) => has$1(elem, 'data-mce-bogus') || ancestor$1(elem, '[data-mce-bogus=\"all\"]', isRoot$1(root));\n const findMarkers = (editor, uid) => {\n const body = SugarElement.fromDom(editor.getBody());\n const descendants$1 = descendants(body, `[${ dataAnnotationId() }=\"${ uid }\"]`);\n return filter$5(descendants$1, descendant => !isBogusElement(descendant, body));\n };\n const findAll = (editor, name) => {\n const body = SugarElement.fromDom(editor.getBody());\n const markers = descendants(body, `[${ dataAnnotation() }=\"${ name }\"]`);\n const directory = {};\n each$e(markers, m => {\n if (!isBogusElement(m, body)) {\n const uid = get$9(m, dataAnnotationId());\n const nodesAlready = get$a(directory, uid).getOr([]);\n directory[uid] = nodesAlready.concat([m]);\n }\n });\n return directory;\n };\n\n const setup$x = (editor, registry) => {\n const changeCallbacks = Cell({});\n const initData = () => ({\n listeners: [],\n previous: value$2()\n });\n const withCallbacks = (name, f) => {\n updateCallbacks(name, data => {\n f(data);\n return data;\n });\n };\n const updateCallbacks = (name, f) => {\n const callbackMap = changeCallbacks.get();\n const data = get$a(callbackMap, name).getOrThunk(initData);\n const outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n const fireCallbacks = (name, uid, elements) => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(true, name, {\n uid,\n nodes: map$3(elements, elem => elem.dom)\n }));\n });\n };\n const fireNoAnnotation = name => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(false, name));\n });\n };\n const toggleActiveAttr = (uid, state) => {\n each$e(findMarkers(editor, uid), elem => {\n if (state) {\n set$2(elem, dataAnnotationActive(), 'true');\n } else {\n remove$b(elem, dataAnnotationActive());\n }\n });\n };\n const onNodeChange = last$1(() => {\n const annotations = sort(registry.getNames());\n each$e(annotations, name => {\n updateCallbacks(name, data => {\n const prev = data.previous.get();\n identify(editor, Optional.some(name)).fold(() => {\n prev.each(uid => {\n fireNoAnnotation(name);\n data.previous.clear();\n toggleActiveAttr(uid, false);\n });\n }, ({uid, name, elements}) => {\n if (!is$2(prev, uid)) {\n prev.each(uid => toggleActiveAttr(uid, false));\n fireCallbacks(name, uid, elements);\n data.previous.set(uid);\n toggleActiveAttr(uid, true);\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', () => {\n onNodeChange.cancel();\n });\n editor.on('NodeChange', () => {\n onNodeChange.throttle();\n });\n const addListener = (name, f) => {\n updateCallbacks(name, data => ({\n previous: data.previous,\n listeners: data.listeners.concat([f])\n }));\n };\n return { addListener };\n };\n\n const setup$w = (editor, registry) => {\n const dataAnnotation$1 = dataAnnotation();\n const identifyParserNode = node => Optional.from(node.attr(dataAnnotation$1)).bind(registry.lookup);\n const removeDirectAnnotation = node => {\n var _a, _b;\n node.attr(dataAnnotationId(), null);\n node.attr(dataAnnotation(), null);\n node.attr(dataAnnotationActive(), null);\n const customAttrNames = Optional.from(node.attr(dataAnnotationAttributes())).map(names => names.split(',')).getOr([]);\n const customClasses = Optional.from(node.attr(dataAnnotationClasses())).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => node.attr(name, null));\n const classList = (_b = (_a = node.attr('class')) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];\n const newClassList = difference(classList, [annotation()].concat(customClasses));\n node.attr('class', newClassList.length > 0 ? newClassList.join(' ') : null);\n node.attr(dataAnnotationClasses(), null);\n node.attr(dataAnnotationAttributes(), null);\n };\n editor.serializer.addTempAttr(dataAnnotationActive());\n editor.serializer.addAttributeFilter(dataAnnotation$1, nodes => {\n for (const node of nodes) {\n identifyParserNode(node).each(settings => {\n if (settings.persistent === false) {\n if (node.name === 'span') {\n node.unwrap();\n } else {\n removeDirectAnnotation(node);\n }\n }\n });\n }\n });\n };\n\n const create$c = () => {\n const annotations = {};\n const register = (name, settings) => {\n annotations[name] = {\n name,\n settings\n };\n };\n const lookup = name => get$a(annotations, name).map(a => a.settings);\n const getNames = () => keys(annotations);\n return {\n register,\n lookup,\n getNames\n };\n };\n\n let unique = 0;\n const generate$1 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n const add = (element, classes) => {\n each$e(classes, x => {\n add$2(element, x);\n });\n };\n const remove$5 = (element, classes) => {\n each$e(classes, x => {\n remove$8(element, x);\n });\n };\n\n const clone$2 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow$1 = original => clone$2(original, false);\n const deep$1 = original => clone$2(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$4(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$4(original, nu);\n const children = children$1(original);\n append(nu, children);\n remove$6(original);\n return nu;\n };\n\n const TextWalker = (startNode, rootNode, isBoundary = never) => {\n const walker = new DomTreeWalker(startNode, rootNode);\n const walk = direction => {\n let next;\n do {\n next = walker[direction]();\n } while (next && !isText$a(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$a);\n };\n return {\n current: () => Optional.from(walker.current()).filter(isText$a),\n next: () => walk('next'),\n prev: () => walk('prev'),\n prev2: () => walk('prev2')\n };\n };\n\n const TextSeeker = (dom, isBoundary) => {\n const isBlockBoundary = isBoundary ? isBoundary : node => dom.isBlock(node) || isBr$6(node) || isContentEditableFalse$a(node);\n const walk = (node, offset, walker, process) => {\n if (isText$a(node)) {\n const 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(next => walk(next.container, next.offset, walker, process));\n };\n const backwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.prev().map(prev => ({\n container: prev,\n offset: prev.length\n })), process).getOrNull();\n };\n const forwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.next().map(next => ({\n container: next,\n offset: 0\n })), process).getOrNull();\n };\n return {\n backwards,\n forwards\n };\n };\n\n const round$2 = Math.round;\n const clone$1 = 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 const collapse = (rect, toStart) => {\n rect = clone$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n const isEqual = (rect1, rect2) => rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n const isValidOverflow = (overflowY, rect1, rect2) => overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n const isAbove$1 = (rect1, rect2) => {\n const 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 const isBelow$1 = (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 const containsXY = (rect, clientX, clientY) => clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n const boundingClientRectFromRects = rects => {\n return foldl(rects, (acc, rect) => {\n return acc.fold(() => Optional.some(rect), prevRect => {\n const left = Math.min(rect.left, prevRect.left);\n const top = Math.min(rect.top, prevRect.top);\n const right = Math.max(rect.right, prevRect.right);\n const bottom = Math.max(rect.bottom, prevRect.bottom);\n return Optional.some({\n top,\n right,\n bottom,\n left,\n width: right - left,\n height: bottom - top\n });\n });\n }, Optional.none());\n };\n const distanceToRectEdgeFromXY = (rect, x, y) => {\n const cx = Math.max(Math.min(x, rect.left + rect.width), rect.left);\n const cy = Math.max(Math.min(y, rect.top + rect.height), rect.top);\n return Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));\n };\n const overlapY = (r1, r2) => Math.max(0, Math.min(r1.bottom, r2.bottom) - Math.max(r1.top, r2.top));\n\n const clamp$2 = (value, min, max) => Math.min(Math.max(value, min), max);\n\n const getSelectedNode = range => {\n const startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer === range.endContainer && startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n const getNode$1 = (container, offset) => {\n if (isElement$6(container) && container.hasChildNodes()) {\n const childNodes = container.childNodes;\n const safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n return childNodes[safeOffset];\n } else {\n return container;\n }\n };\n const getNodeUnsafe = (container, offset) => {\n if (offset < 0 && isElement$6(container) && container.hasChildNodes()) {\n return undefined;\n } else {\n return getNode$1(container, offset);\n }\n };\n\n const 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 const isExtendingChar = ch => isString(ch) && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n\n const or = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n const and = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n const isElement$4 = isElement$6;\n const isCaretCandidate$2 = isCaretCandidate$3;\n const isBlock$1 = matchStyleValues('display', 'block table');\n const isFloated = matchStyleValues('float', 'left right');\n const isValidElementCaretCandidate = and(isElement$4, isCaretCandidate$2, not(isFloated));\n const isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n const isText$7 = isText$a;\n const isBr$3 = isBr$6;\n const nodeIndex$1 = DOMUtils.nodeIndex;\n const resolveIndex$1 = getNodeUnsafe;\n const createRange$1 = doc => doc ? doc.createRange() : DOMUtils.DOM.createRng();\n const isWhiteSpace$1 = chr => isString(chr) && /[\\r\\n\\t ]/.test(chr);\n const isRange = rng => !!rng.setStart && !!rng.setEnd;\n const isHiddenWhiteSpaceRange = range => {\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$a(container)) {\n const 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 const getBrClientRect = brNode => {\n const doc = brNode.ownerDocument;\n const rng = createRange$1(doc);\n const nbsp$1 = doc.createTextNode(nbsp);\n const parentNode = brNode.parentNode;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n const clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\n return clientRect;\n };\n const getBoundingClientRectWebKitText = rng => {\n const sc = rng.startContainer;\n const ec = rng.endContainer;\n const so = rng.startOffset;\n const eo = rng.endOffset;\n if (sc === ec && isText$a(ec) && so === 0 && eo === 1) {\n const newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect$1(newRng);\n } else {\n return null;\n }\n };\n const isZeroRect = r => r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n const getBoundingClientRect$1 = item => {\n var _a;\n let clientRect;\n const clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return (_a = getBoundingClientRectWebKitText(item)) !== null && _a !== void 0 ? _a : clientRect;\n }\n return clientRect;\n };\n const collapseAndInflateWidth = (clientRect, toStart) => {\n const newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n const getCaretPositionClientRects = caretPosition => {\n const clientRects = [];\n const addUniqueAndValidRect = 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 const addCharacterOffset = (container, offset) => {\n const range = createRange$1(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return;\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;\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 const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (isText$7(container)) {\n addCharacterOffset(container, offset);\n return clientRects;\n }\n if (isElement$4(container)) {\n if (caretPosition.isAtEnd()) {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n }\n } else {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n return clientRects;\n }\n const beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n }\n }\n }\n return clientRects;\n };\n const CaretPosition = (container, offset, clientRects) => {\n const isAtStart = () => {\n if (isText$7(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n const isAtEnd = () => {\n if (isText$7(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n const toRange = () => {\n const range = createRange$1(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n const getClientRects = () => {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n const isVisible = () => getClientRects().length > 0;\n const isEqual = caretPosition => caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n const getNode = before => resolveIndex$1(container, before ? offset - 1 : offset);\n return {\n container: constant(container),\n offset: constant(offset),\n toRange,\n getClientRects,\n isVisible,\n isAtStart,\n isAtEnd,\n isEqual,\n getNode\n };\n };\n CaretPosition.fromRangeStart = range => CaretPosition(range.startContainer, range.startOffset);\n CaretPosition.fromRangeEnd = range => CaretPosition(range.endContainer, range.endOffset);\n CaretPosition.after = node => CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n CaretPosition.before = node => CaretPosition(node.parentNode, nodeIndex$1(node));\n CaretPosition.isAbove = (pos1, pos2) => lift2(head(pos2.getClientRects()), last$3(pos1.getClientRects()), isAbove$1).getOr(false);\n CaretPosition.isBelow = (pos1, pos2) => lift2(last$3(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n CaretPosition.isAtStart = pos => pos ? pos.isAtStart() : false;\n CaretPosition.isAtEnd = pos => pos ? pos.isAtEnd() : false;\n CaretPosition.isTextPosition = pos => pos ? isText$a(pos.container()) : false;\n CaretPosition.isElementPosition = pos => !CaretPosition.isTextPosition(pos);\n\n const trimEmptyTextNode$1 = (dom, node) => {\n if (isText$a(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n const insertNode = (dom, rng, node) => {\n rng.insertNode(node);\n trimEmptyTextNode$1(dom, node.previousSibling);\n trimEmptyTextNode$1(dom, node.nextSibling);\n };\n const insertFragment = (dom, rng, frag) => {\n const firstChild = Optional.from(frag.firstChild);\n const lastChild = Optional.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(child => trimEmptyTextNode$1(dom, child.previousSibling));\n lastChild.each(child => trimEmptyTextNode$1(dom, child.nextSibling));\n };\n const rangeInsertNode = (dom, rng, node) => {\n if (isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n const isText$6 = isText$a;\n const isBogus = isBogus$2;\n const nodeIndex = DOMUtils.nodeIndex;\n const normalizedParent = node => {\n const parentNode = node.parentNode;\n if (isBogus(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n const getChildNodes = node => {\n if (!node) {\n return [];\n }\n return reduce(node.childNodes, (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 const normalizedTextOffset = (node, offset) => {\n let tempNode = node;\n while (tempNode = tempNode.previousSibling) {\n if (!isText$6(tempNode)) {\n break;\n }\n offset += tempNode.data.length;\n }\n return offset;\n };\n const equal = a => b => a === b;\n const normalizedNodeIndex = node => {\n let nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n const numTextFragments = reduce(nodes, (result, node, i) => {\n if (isText$6(node) && isText$6(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = filter$3(nodes, matchNodeNames([node.nodeName]));\n index = findIndex$1(nodes, equal(node), node);\n return index - numTextFragments;\n };\n const createPathItem = node => {\n const name = isText$6(node) ? 'text()' : node.nodeName.toLowerCase();\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n const parentsUntil$1 = (root, node, predicate) => {\n const parents = [];\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (predicate && predicate(tempNode)) {\n break;\n }\n parents.push(tempNode);\n }\n return parents;\n };\n const create$b = (root, caretPosition) => {\n let path = [];\n let container = caretPosition.container();\n let offset = caretPosition.offset();\n let outputOffset;\n if (isText$6(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n const 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 let parents = parentsUntil$1(root, container);\n parents = filter$3(parents, not(isBogus$2));\n path = path.concat(map$1(parents, node => {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n const resolvePathItem = (node, name, index) => {\n let nodes = getChildNodes(node);\n nodes = filter$3(nodes, (node, index) => {\n return !isText$6(node) || !isText$6(nodes[index - 1]);\n });\n nodes = filter$3(nodes, matchNodeNames([name]));\n return nodes[index];\n };\n const findTextPosition = (container, offset) => {\n let node = container;\n let targetOffset = 0;\n while (isText$6(node)) {\n const dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$6(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$6(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition(container, offset);\n };\n const resolve$1 = (root, path) => {\n if (!path) {\n return null;\n }\n const parts = path.split(',');\n const paths = parts[0].split('/');\n const offset = parts.length > 1 ? parts[1] : 'before';\n const container = reduce(paths, (result, value) => {\n const 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$6(container) && container.parentNode) {\n let nodeOffset;\n if (offset === 'after') {\n nodeOffset = nodeIndex(container) + 1;\n } else {\n nodeOffset = nodeIndex(container);\n }\n return CaretPosition(container.parentNode, nodeOffset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n const isContentEditableFalse$8 = isContentEditableFalse$a;\n const getNormalizedTextOffset$1 = (trim, container, offset) => {\n let trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (let node = container.previousSibling; node && isText$a(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n const getPoint = (dom, trim, normalized, rng, start) => {\n const container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const point = [];\n const root = dom.getRoot();\n if (isText$a(container)) {\n point.push(normalized ? getNormalizedTextOffset$1(trim, container, offset) : offset);\n } else {\n let after = 0;\n const 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 (let node = container; node && node !== root; node = node.parentNode) {\n point.push(dom.nodeIndex(node, normalized));\n }\n return point;\n };\n const getLocation = (trim, selection, normalized, rng) => {\n const dom = selection.dom;\n const start = getPoint(dom, trim, normalized, rng, true);\n const forward = selection.isForward();\n const fakeCaret = isRangeInCaretContainerBlock(rng) ? { isFakeCaret: true } : {};\n if (!selection.isCollapsed()) {\n const end = getPoint(dom, trim, normalized, rng, false);\n return {\n start,\n end,\n forward,\n ...fakeCaret\n };\n } else {\n return {\n start,\n forward,\n ...fakeCaret\n };\n }\n };\n const findIndex = (dom, name, element) => {\n let count = 0;\n Tools.each(dom.select(name), node => {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n } else if (node === element) {\n return false;\n } else {\n count++;\n return;\n }\n });\n return count;\n };\n const moveEndPoint$1 = (rng, start) => {\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n if (isElement$6(container) && container.nodeName === 'TR') {\n const 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 if (start) {\n rng.setStart(container, offset);\n } else {\n rng.setEnd(container, offset);\n }\n }\n }\n };\n const normalizeTableCellSelection = rng => {\n moveEndPoint$1(rng, true);\n moveEndPoint$1(rng, false);\n return rng;\n };\n const findSibling = (node, offset) => {\n if (isElement$6(node)) {\n node = getNode$1(node, offset);\n if (isContentEditableFalse$8(node)) {\n return node;\n }\n }\n if (isCaretContainer$2(node)) {\n if (isText$a(node) && isCaretContainerBlock$1(node)) {\n node = node.parentNode;\n }\n let sibling = node.previousSibling;\n if (isContentEditableFalse$8(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$8(sibling)) {\n return sibling;\n }\n }\n return undefined;\n };\n const findAdjacentContentEditableFalseElm = rng => {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n const getOffsetBookmark = (trim, normalized, selection) => {\n const element = selection.getNode();\n const rng = selection.getRng();\n if (element.nodeName === 'IMG' || isContentEditableFalse$8(element)) {\n const name = element.nodeName;\n return {\n name,\n index: findIndex(selection.dom, name, element)\n };\n }\n const sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n const name = sibling.tagName;\n return {\n name,\n index: findIndex(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n const getCaretBookmark = selection => {\n const rng = selection.getRng();\n return {\n start: create$b(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$b(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng)),\n forward: selection.isForward()\n };\n };\n const getRangeBookmark = selection => {\n return {\n rng: selection.getRng(),\n forward: selection.isForward()\n };\n };\n const createBookmarkSpan = (dom, id, filled) => {\n const args = {\n 'data-mce-type': 'bookmark',\n id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n const getPersistentBookmark = (selection, filled) => {\n const dom = selection.dom;\n let rng = selection.getRng();\n const id = dom.uniqueId();\n const collapsed = selection.isCollapsed();\n const element = selection.getNode();\n const name = element.nodeName;\n const forward = selection.isForward();\n if (name === 'IMG') {\n return {\n name,\n index: findIndex(dom, name, element)\n };\n }\n const rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n const endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n const startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id,\n keep: true,\n forward\n });\n return {\n id,\n forward\n };\n };\n const getBookmark$2 = (selection, type, normalized = false) => {\n if (type === 2) {\n return getOffsetBookmark(trim$1, 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 const getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply$1,\n orThunk: apply$1,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const generate = 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 const constructors = [];\n const adt = {};\n each$e(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const 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] = (...args) => {\n const 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 const match = branches => {\n const 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 const allReqd = forall(constructors, 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: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\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 const partition$1 = results => {\n const errors = [];\n const values = [];\n each$e(results, result => {\n result.fold(err => {\n errors.push(err);\n }, value => {\n values.push(value);\n });\n });\n return {\n errors,\n values\n };\n };\n\n const isInlinePattern = pattern => pattern.type === 'inline-command' || pattern.type === 'inline-format';\n const isBlockPattern = pattern => pattern.type === 'block-command' || pattern.type === 'block-format';\n const normalizePattern = pattern => {\n const err = message => Result.error({\n message,\n pattern\n });\n const formatOrCmd = (name, onFormat, onCommand) => {\n if (pattern.format !== undefined) {\n let formats;\n if (isArray$1(pattern.format)) {\n if (!forall(pattern.format, isString)) {\n return err(name + ' pattern has non-string items in the `format` array');\n }\n formats = pattern.format;\n } else if (isString(pattern.format)) {\n formats = [pattern.format];\n } else {\n return err(name + ' pattern has non-string `format` parameter');\n }\n return Result.value(onFormat(formats));\n } else if (pattern.cmd !== undefined) {\n if (!isString(pattern.cmd)) {\n return err(name + ' pattern has non-string `cmd` parameter');\n }\n return Result.value(onCommand(pattern.cmd, pattern.value));\n } else {\n return err(name + ' pattern is missing both `format` and `cmd` parameters');\n }\n };\n if (!isObject(pattern)) {\n return err('Raw pattern is not an object');\n }\n if (!isString(pattern.start)) {\n return err('Raw pattern is missing `start` parameter');\n }\n if (pattern.end !== undefined) {\n if (!isString(pattern.end)) {\n return err('Inline pattern has non-string `end` parameter');\n }\n if (pattern.start.length === 0 && pattern.end.length === 0) {\n return err('Inline pattern has empty `start` and `end` parameters');\n }\n let start = pattern.start;\n let end = pattern.end;\n if (end.length === 0) {\n end = start;\n start = '';\n }\n return formatOrCmd('Inline', format => ({\n type: 'inline-format',\n start,\n end,\n format\n }), (cmd, value) => ({\n type: 'inline-command',\n start,\n end,\n cmd,\n value\n }));\n } else if (pattern.replacement !== undefined) {\n if (!isString(pattern.replacement)) {\n return err('Replacement pattern has non-string `replacement` parameter');\n }\n if (pattern.start.length === 0) {\n return err('Replacement pattern has empty `start` parameter');\n }\n return Result.value({\n type: 'inline-command',\n start: '',\n end: pattern.start,\n cmd: 'mceInsertContent',\n value: pattern.replacement\n });\n } else {\n if (pattern.start.length === 0) {\n return err('Block pattern has empty `start` parameter');\n }\n return formatOrCmd('Block', formats => ({\n type: 'block-format',\n start: pattern.start,\n format: formats[0]\n }), (command, commandValue) => ({\n type: 'block-command',\n start: pattern.start,\n cmd: command,\n value: commandValue\n }));\n }\n };\n const getBlockPatterns = patterns => filter$5(patterns, isBlockPattern);\n const getInlinePatterns = patterns => filter$5(patterns, isInlinePattern);\n const createPatternSet = (patterns, dynamicPatternsLookup) => ({\n inlinePatterns: getInlinePatterns(patterns),\n blockPatterns: getBlockPatterns(patterns),\n dynamicPatternsLookup\n });\n const fromRawPatterns = patterns => {\n const normalized = partition$1(map$3(patterns, normalizePattern));\n each$e(normalized.errors, err => console.error(err.message, err.pattern));\n return normalized.values;\n };\n const fromRawPatternsLookup = lookupFn => {\n return ctx => {\n const rawPatterns = lookupFn(ctx);\n return fromRawPatterns(rawPatterns);\n };\n };\n\n const deviceDetection$1 = detect$2().deviceType;\n const isTouch = deviceDetection$1.isTouch();\n const DOM$a = DOMUtils.DOM;\n const getHash = value => {\n const items = value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(',');\n return foldl(items, (output, item) => {\n const arr = item.split('=');\n const key = arr[0];\n const val = arr.length > 1 ? arr[1] : key;\n output[trim$3(key)] = trim$3(val);\n return output;\n }, {});\n };\n const isRegExp = x => is$4(x, RegExp);\n const option = name => editor => editor.options.get(name);\n const stringOrObjectProcessor = value => isString(value) || isObject(value);\n const bodyOptionProcessor = (editor, defaultValue = '') => value => {\n const valid = isString(value);\n if (valid) {\n if (value.indexOf('=') !== -1) {\n const bodyObj = getHash(value);\n return {\n value: get$a(bodyObj, editor.id).getOr(defaultValue),\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string.'\n };\n }\n };\n const register$7 = editor => {\n const registerOption = editor.options.register;\n registerOption('id', {\n processor: 'string',\n default: editor.id\n });\n registerOption('selector', { processor: 'string' });\n registerOption('target', { processor: 'object' });\n registerOption('suffix', { processor: 'string' });\n registerOption('cache_suffix', { processor: 'string' });\n registerOption('base_url', { processor: 'string' });\n registerOption('referrer_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('language_load', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline', {\n processor: 'boolean',\n default: false\n });\n registerOption('iframe_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('doctype', {\n processor: 'string',\n default: '<!DOCTYPE html>'\n });\n registerOption('document_base_url', {\n processor: 'string',\n default: editor.documentBaseUrl\n });\n registerOption('body_id', {\n processor: bodyOptionProcessor(editor, 'tinymce'),\n default: 'tinymce'\n });\n registerOption('body_class', {\n processor: bodyOptionProcessor(editor),\n default: ''\n });\n registerOption('content_security_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('br_in_pre', {\n processor: 'boolean',\n default: true\n });\n registerOption('forced_root_block', {\n processor: value => {\n const valid = isString(value) && isNotEmpty(value);\n if (valid) {\n return {\n value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a non-empty string.'\n };\n }\n },\n default: 'p'\n });\n registerOption('forced_root_block_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('newline_behavior', {\n processor: value => {\n const valid = contains$2([\n 'block',\n 'linebreak',\n 'invert',\n 'default'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: block, linebreak, invert or default.'\n };\n },\n default: 'default'\n });\n registerOption('br_newline_selector', {\n processor: 'string',\n default: '.mce-toc h2,figcaption,caption'\n });\n registerOption('no_newline_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('keep_styles', {\n processor: 'boolean',\n default: true\n });\n registerOption('end_container_on_empty_block', {\n processor: value => {\n if (isBoolean(value)) {\n return {\n valid: true,\n value\n };\n } else if (isString(value)) {\n return {\n valid: true,\n value\n };\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: 'blockquote'\n });\n registerOption('font_size_style_values', {\n processor: 'string',\n default: 'xx-small,x-small,small,medium,large,x-large,xx-large'\n });\n registerOption('font_size_legacy_values', {\n processor: 'string',\n default: 'xx-small,small,medium,large,x-large,xx-large,300%'\n });\n registerOption('font_size_classes', {\n processor: 'string',\n default: ''\n });\n registerOption('automatic_uploads', {\n processor: 'boolean',\n default: true\n });\n registerOption('images_reuse_filename', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_replace_blob_uris', {\n processor: 'boolean',\n default: true\n });\n registerOption('icons', {\n processor: 'string',\n default: ''\n });\n registerOption('icons_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_base_path', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_credentials', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_upload_handler', { processor: 'function' });\n registerOption('language', {\n processor: 'string',\n default: 'en'\n });\n registerOption('language_url', {\n processor: 'string',\n default: ''\n });\n registerOption('entity_encoding', {\n processor: 'string',\n default: 'named'\n });\n registerOption('indent', {\n processor: 'boolean',\n default: true\n });\n registerOption('indent_before', {\n processor: 'string',\n default: '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 });\n registerOption('indent_after', {\n processor: 'string',\n default: '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 });\n registerOption('indent_use_margin', {\n processor: 'boolean',\n default: false\n });\n registerOption('indentation', {\n processor: 'string',\n default: '40px'\n });\n registerOption('content_css', {\n processor: value => {\n const valid = value === false || isString(value) || isArrayOf(value, isString);\n if (valid) {\n if (isString(value)) {\n return {\n value: map$3(value.split(','), trim$3),\n valid\n };\n } else if (isArray$1(value)) {\n return {\n value,\n valid\n };\n } else if (value === false) {\n return {\n value: [],\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be false, a string or an array of strings.'\n };\n }\n },\n default: isInline(editor) ? [] : ['default']\n });\n registerOption('content_style', { processor: 'string' });\n registerOption('content_css_cors', {\n processor: 'boolean',\n default: false\n });\n registerOption('font_css', {\n processor: value => {\n const valid = isString(value) || isArrayOf(value, isString);\n if (valid) {\n const newValue = isArray$1(value) ? value : map$3(value.split(','), trim$3);\n return {\n value: newValue,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a string or an array of strings.'\n };\n }\n },\n default: []\n });\n registerOption('inline_boundaries', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline_boundaries_selector', {\n processor: 'string',\n default: 'a[href],code,span.mce-annotation'\n });\n registerOption('object_resizing', {\n processor: value => {\n const valid = isBoolean(value) || isString(value);\n if (valid) {\n if (value === false || deviceDetection$1.isiPhone() || deviceDetection$1.isiPad()) {\n return {\n value: '',\n valid\n };\n } else {\n return {\n value: value === true ? 'table,img,figure.image,div,video,iframe' : value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: !isTouch\n });\n registerOption('resize_img_proportional', {\n processor: 'boolean',\n default: true\n });\n registerOption('event_root', { processor: 'object' });\n registerOption('service_message', { processor: 'string' });\n registerOption('theme', {\n processor: value => value === false || isString(value) || isFunction(value),\n default: 'silver'\n });\n registerOption('theme_url', { processor: 'string' });\n registerOption('formats', { processor: 'object' });\n registerOption('format_empty_lines', {\n processor: 'boolean',\n default: false\n });\n registerOption('format_noneditable_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('preview_styles', {\n processor: value => {\n const valid = value === false || isString(value);\n if (valid) {\n return {\n value: value === false ? '' : value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be false or a string'\n };\n }\n },\n default: 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow'\n });\n registerOption('custom_ui_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('hidden_input', {\n processor: 'boolean',\n default: true\n });\n registerOption('submit_patch', {\n processor: 'boolean',\n default: true\n });\n registerOption('encoding', { processor: 'string' });\n registerOption('add_form_submit_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('add_unload_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_undo_redo_levels', {\n processor: 'number',\n default: 0\n });\n registerOption('disable_nodechange', {\n processor: 'boolean',\n default: false\n });\n registerOption('readonly', {\n processor: 'boolean',\n default: false\n });\n registerOption('plugins', {\n processor: 'string[]',\n default: []\n });\n registerOption('external_plugins', { processor: 'object' });\n registerOption('forced_plugins', { processor: 'string[]' });\n registerOption('model', {\n processor: 'string',\n default: editor.hasPlugin('rtc') ? 'plugin' : 'dom'\n });\n registerOption('model_url', { processor: 'string' });\n registerOption('block_unsupported_drop', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual_table_class', {\n processor: 'string',\n default: 'mce-item-table'\n });\n registerOption('visual_anchor_class', {\n processor: 'string',\n default: 'mce-item-anchor'\n });\n registerOption('iframe_aria_text', {\n processor: 'string',\n default: 'Rich Text Area. Press ALT-0 for help.'\n });\n registerOption('setup', { processor: 'function' });\n registerOption('init_instance_callback', { processor: 'function' });\n registerOption('url_converter', {\n processor: 'function',\n default: editor.convertURL\n });\n registerOption('url_converter_scope', {\n processor: 'object',\n default: editor\n });\n registerOption('urlconverter_callback', { processor: 'function' });\n registerOption('allow_conditional_comments', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_html_data_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_svg_data_urls', { processor: 'boolean' });\n registerOption('allow_html_in_named_anchor', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_script_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('convert_fonts_to_spans', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('fix_list_elements', {\n processor: 'boolean',\n default: false\n });\n registerOption('preserve_cdata', {\n processor: 'boolean',\n default: false\n });\n registerOption('remove_trailing_brs', { processor: 'boolean' });\n registerOption('inline_styles', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('element_format', {\n processor: 'string',\n default: 'html'\n });\n registerOption('entities', { processor: 'string' });\n registerOption('schema', {\n processor: 'string',\n default: 'html5'\n });\n registerOption('convert_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('relative_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('remove_script_host', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_elements', { processor: 'string' });\n registerOption('extended_valid_elements', { processor: 'string' });\n registerOption('invalid_elements', { processor: 'string' });\n registerOption('invalid_styles', { processor: stringOrObjectProcessor });\n registerOption('valid_children', { processor: 'string' });\n registerOption('valid_classes', { processor: stringOrObjectProcessor });\n registerOption('valid_elements', { processor: 'string' });\n registerOption('valid_styles', { processor: stringOrObjectProcessor });\n registerOption('verify_html', {\n processor: 'boolean',\n default: true\n });\n registerOption('auto_focus', { processor: value => isString(value) || value === true });\n registerOption('browser_spellcheck', {\n processor: 'boolean',\n default: false\n });\n registerOption('protect', { processor: 'array' });\n registerOption('images_file_types', {\n processor: 'string',\n default: 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp'\n });\n registerOption('deprecation_warnings', {\n processor: 'boolean',\n default: true\n });\n registerOption('a11y_advanced_options', {\n processor: 'boolean',\n default: false\n });\n registerOption('api_key', { processor: 'string' });\n registerOption('paste_block_drop', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_data_images', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_preprocess', { processor: 'function' });\n registerOption('paste_postprocess', { processor: 'function' });\n registerOption('paste_webkit_styles', {\n processor: 'string',\n default: 'none'\n });\n registerOption('paste_remove_styles_if_webkit', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_merge_formats', {\n processor: 'boolean',\n default: true\n });\n registerOption('smart_paste', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_as_text', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_tab_spaces', {\n processor: 'number',\n default: 4\n });\n registerOption('text_patterns', {\n processor: value => {\n if (isArrayOf(value, isObject) || value === false) {\n const patterns = value === false ? [] : value;\n return {\n value: fromRawPatterns(patterns),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of objects or false.'\n };\n }\n },\n default: [\n {\n start: '*',\n end: '*',\n format: 'italic'\n },\n {\n start: '**',\n end: '**',\n format: 'bold'\n },\n {\n start: '#',\n format: 'h1'\n },\n {\n start: '##',\n format: 'h2'\n },\n {\n start: '###',\n format: 'h3'\n },\n {\n start: '####',\n format: 'h4'\n },\n {\n start: '#####',\n format: 'h5'\n },\n {\n start: '######',\n format: 'h6'\n },\n {\n start: '1. ',\n cmd: 'InsertOrderedList'\n },\n {\n start: '* ',\n cmd: 'InsertUnorderedList'\n },\n {\n start: '- ',\n cmd: 'InsertUnorderedList'\n }\n ]\n });\n registerOption('text_patterns_lookup', {\n processor: value => {\n if (isFunction(value)) {\n return {\n value: fromRawPatternsLookup(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a single function'\n };\n }\n },\n default: _ctx => []\n });\n registerOption('noneditable_class', {\n processor: 'string',\n default: 'mceNonEditable'\n });\n registerOption('editable_class', {\n processor: 'string',\n default: 'mceEditable'\n });\n registerOption('noneditable_regexp', {\n processor: value => {\n if (isArrayOf(value, isRegExp)) {\n return {\n value,\n valid: true\n };\n } else if (isRegExp(value)) {\n return {\n value: [value],\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a RegExp or an array of RegExp.'\n };\n }\n },\n default: []\n });\n registerOption('table_tab_navigation', {\n processor: 'boolean',\n default: true\n });\n editor.on('ScriptsLoaded', () => {\n registerOption('directionality', {\n processor: 'string',\n default: I18n.isRtl() ? 'rtl' : undefined\n });\n registerOption('placeholder', {\n processor: 'string',\n default: DOM$a.getAttrib(editor.getElement(), 'placeholder')\n });\n });\n };\n const getIframeAttrs = option('iframe_attrs');\n const getDocType = option('doctype');\n const getDocumentBaseUrl = option('document_base_url');\n const getBodyId = option('body_id');\n const getBodyClass = option('body_class');\n const getContentSecurityPolicy = option('content_security_policy');\n const shouldPutBrInPre$1 = option('br_in_pre');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n const getNewlineBehavior = option('newline_behavior');\n const getBrNewLineSelector = option('br_newline_selector');\n const getNoNewLineSelector = option('no_newline_selector');\n const shouldKeepStyles = option('keep_styles');\n const shouldEndContainerOnEmptyBlock = option('end_container_on_empty_block');\n const isAutomaticUploadsEnabled = option('automatic_uploads');\n const shouldReuseFileName = option('images_reuse_filename');\n const shouldReplaceBlobUris = option('images_replace_blob_uris');\n const getIconPackName = option('icons');\n const getIconsUrl = option('icons_url');\n const getImageUploadUrl = option('images_upload_url');\n const getImageUploadBasePath = option('images_upload_base_path');\n const getImagesUploadCredentials = option('images_upload_credentials');\n const getImagesUploadHandler = option('images_upload_handler');\n const shouldUseContentCssCors = option('content_css_cors');\n const getReferrerPolicy = option('referrer_policy');\n const getLanguageCode = option('language');\n const getLanguageUrl = option('language_url');\n const shouldIndentUseMargin = option('indent_use_margin');\n const getIndentation = option('indentation');\n const getContentCss = option('content_css');\n const getContentStyle = option('content_style');\n const getFontCss = option('font_css');\n const getDirectionality = option('directionality');\n const getInlineBoundarySelector = option('inline_boundaries_selector');\n const getObjectResizing = option('object_resizing');\n const getResizeImgProportional = option('resize_img_proportional');\n const getPlaceholder = option('placeholder');\n const getEventRoot = option('event_root');\n const getServiceMessage = option('service_message');\n const getTheme = option('theme');\n const getThemeUrl = option('theme_url');\n const getModel = option('model');\n const getModelUrl = option('model_url');\n const isInlineBoundariesEnabled = option('inline_boundaries');\n const getFormats = option('formats');\n const getPreviewStyles = option('preview_styles');\n const canFormatEmptyLines = option('format_empty_lines');\n const getFormatNoneditableSelector = option('format_noneditable_selector');\n const getCustomUiSelector = option('custom_ui_selector');\n const isInline = option('inline');\n const hasHiddenInput = option('hidden_input');\n const shouldPatchSubmit = option('submit_patch');\n const shouldAddFormSubmitTrigger = option('add_form_submit_trigger');\n const shouldAddUnloadTrigger = option('add_unload_trigger');\n const getCustomUndoRedoLevels = option('custom_undo_redo_levels');\n const shouldDisableNodeChange = option('disable_nodechange');\n const isReadOnly$1 = option('readonly');\n const hasContentCssCors = option('content_css_cors');\n const getPlugins = option('plugins');\n const getExternalPlugins$1 = option('external_plugins');\n const shouldBlockUnsupportedDrop = option('block_unsupported_drop');\n const isVisualAidsEnabled = option('visual');\n const getVisualAidsTableClass = option('visual_table_class');\n const getVisualAidsAnchorClass = option('visual_anchor_class');\n const getIframeAriaText = option('iframe_aria_text');\n const getSetupCallback = option('setup');\n const getInitInstanceCallback = option('init_instance_callback');\n const getUrlConverterCallback = option('urlconverter_callback');\n const getAutoFocus = option('auto_focus');\n const shouldBrowserSpellcheck = option('browser_spellcheck');\n const getProtect = option('protect');\n const shouldPasteBlockDrop = option('paste_block_drop');\n const shouldPasteDataImages = option('paste_data_images');\n const getPastePreProcess = option('paste_preprocess');\n const getPastePostProcess = option('paste_postprocess');\n const getPasteWebkitStyles = option('paste_webkit_styles');\n const shouldPasteRemoveWebKitStyles = option('paste_remove_styles_if_webkit');\n const shouldPasteMergeFormats = option('paste_merge_formats');\n const isSmartPasteEnabled = option('smart_paste');\n const isPasteAsTextEnabled = option('paste_as_text');\n const getPasteTabSpaces = option('paste_tab_spaces');\n const shouldAllowHtmlDataUrls = option('allow_html_data_urls');\n const getTextPatterns = option('text_patterns');\n const getTextPatternsLookup = option('text_patterns_lookup');\n const getNonEditableClass = option('noneditable_class');\n const getEditableClass = option('editable_class');\n const getNonEditableRegExps = option('noneditable_regexp');\n const shouldPreserveCData = option('preserve_cdata');\n const hasTextPatternsLookup = editor => editor.options.isSet('text_patterns_lookup');\n const getFontStyleValues = editor => Tools.explode(editor.options.get('font_size_style_values'));\n const getFontSizeClasses = editor => Tools.explode(editor.options.get('font_size_classes'));\n const isEncodingXml = editor => editor.options.get('encoding') === 'xml';\n const getAllowedImageFileTypes = editor => Tools.explode(editor.options.get('images_file_types'));\n const hasTableTabNavigation = option('table_tab_navigation');\n\n const isElement$3 = isElement$6;\n const isText$5 = isText$a;\n const removeNode$1 = node => {\n const parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n const trimCount = text => {\n const trimmedText = trim$1(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n const deleteZwspChars = caretContainer => {\n let idx;\n while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n caretContainer.deleteData(idx, 1);\n }\n };\n const removeUnchanged = (caretContainer, pos) => {\n remove$4(caretContainer);\n return pos;\n };\n const removeTextAndReposition = (caretContainer, pos) => {\n const before = trimCount(caretContainer.data.substr(0, pos.offset()));\n const after = trimCount(caretContainer.data.substr(pos.offset()));\n const 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 const removeElementAndReposition = (caretContainer, pos) => {\n const parentNode = pos.container();\n const newPosition = indexOf$1(from(parentNode.childNodes), caretContainer).map(index => {\n return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$4(caretContainer);\n return newPosition;\n };\n const removeTextCaretContainer = (caretContainer, pos) => isText$5(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeElementCaretContainer = (caretContainer, pos) => pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeAndReposition = (container, pos) => CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n const remove$4 = caretContainerNode => {\n if (isElement$3(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$5(caretContainerNode)) {\n deleteZwspChars(caretContainerNode);\n if (caretContainerNode.data.length === 0) {\n removeNode$1(caretContainerNode);\n }\n }\n };\n\n const isContentEditableFalse$7 = isContentEditableFalse$a;\n const isMedia$1 = isMedia$2;\n const isTableCell$1 = isTableCell$3;\n const inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n const getAbsoluteClientRect = (root, element, before) => {\n const clientRect = collapse(element.getBoundingClientRect(), before);\n let scrollX;\n let scrollY;\n if (root.tagName === 'BODY') {\n const docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n const 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 let 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 const trimInlineCaretContainers = root => {\n var _a, _b;\n const fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n for (let i = 0; i < fakeCaretTargetNodes.length; i++) {\n const node = fakeCaretTargetNodes[i].dom;\n let sibling = node.previousSibling;\n if (endsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_a = sibling.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_b = sibling.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n const FakeCaret = (editor, root, isBlock, hasFocus) => {\n const lastVisualCaret = value$2();\n let cursorInterval;\n let caretContainerNode;\n const caretBlock = getForcedRootBlock(editor);\n const dom = editor.dom;\n const show = (before, element) => {\n let rng;\n hide();\n if (isTableCell$1(element)) {\n return null;\n }\n if (isBlock(element)) {\n const caretContainer = insertBlock(caretBlock, element, before);\n const clientRect = getAbsoluteClientRect(root, element, before);\n dom.setStyle(caretContainer, 'top', clientRect.top);\n caretContainerNode = caretContainer;\n const caret = dom.create('div', {\n 'class': 'mce-visual-caret',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(caret, { ...clientRect });\n dom.add(root, caret);\n lastVisualCaret.set({\n caret,\n element,\n before\n });\n if (before) {\n dom.addClass(caret, 'mce-visual-caret-before');\n }\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainer, 0);\n rng.setEnd(caretContainer, 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 const hide = () => {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n remove$4(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.on(caretState => {\n dom.remove(caretState.caret);\n lastVisualCaret.clear();\n });\n if (cursorInterval) {\n clearInterval(cursorInterval);\n cursorInterval = undefined;\n }\n };\n const startBlink = () => {\n cursorInterval = setInterval(() => {\n lastVisualCaret.on(caretState => {\n if (hasFocus()) {\n dom.toggleClass(caretState.caret, 'mce-visual-caret-hidden');\n } else {\n dom.addClass(caretState.caret, 'mce-visual-caret-hidden');\n }\n });\n }, 500);\n };\n const reposition = () => {\n lastVisualCaret.on(caretState => {\n const clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n dom.setStyles(caretState.caret, { ...clientRect });\n });\n };\n const destroy = () => clearInterval(cursorInterval);\n const getCss = () => '.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 return {\n show,\n hide,\n getCss,\n reposition,\n destroy\n };\n };\n const isFakeCaretTableBrowser = () => Env.browser.isFirefox();\n const isInlineFakeCaretTarget = node => isContentEditableFalse$7(node) || isMedia$1(node);\n const isFakeCaretTarget = node => isInlineFakeCaretTarget(node) || isTable$2(node) && isFakeCaretTableBrowser();\n\n const isContentEditableTrue$1 = isContentEditableTrue$3;\n const isContentEditableFalse$6 = isContentEditableFalse$a;\n const isMedia = isMedia$2;\n const isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n const isCaretContainer = isCaretContainer$2;\n const isCaretContainerBlock = isCaretContainerBlock$1;\n const isElement$2 = isElement$6;\n const isText$4 = isText$a;\n const isCaretCandidate$1 = isCaretCandidate$3;\n const isForwards = direction => direction > 0;\n const isBackwards = direction => direction < 0;\n const skipCaretContainers = (walk, shallow) => {\n let node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock(node)) {\n return node;\n }\n }\n return null;\n };\n const findNode = (node, direction, predicateFn, rootNode, shallow) => {\n const walker = new DomTreeWalker(node, rootNode);\n const isCefOrCaretContainer = isContentEditableFalse$6(node) || isCaretContainerBlock(node);\n let tempNode;\n if (isBackwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.prev.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n if (isForwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.next.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.next.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getEditingHost = (node, rootNode) => {\n const isCETrue = node => isContentEditableTrue$1(node.dom);\n const isRoot = node => node.dom === rootNode;\n return ancestor$3(SugarElement.fromDom(node), isCETrue, isRoot).map(elm => elm.dom).getOr(rootNode);\n };\n const getParentBlock$3 = (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 const isInSameBlock = (caretPosition1, caretPosition2, rootNode) => getParentBlock$3(caretPosition1.container(), rootNode) === getParentBlock$3(caretPosition2.container(), rootNode);\n const getChildNodeAtRelativeOffset = (relativeOffset, caretPosition) => {\n if (!caretPosition) {\n return Optional.none();\n }\n const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (!isElement$2(container)) {\n return Optional.none();\n }\n return Optional.from(container.childNodes[offset + relativeOffset]);\n };\n const beforeAfter = (before, node) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const range = doc.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 const isNodesInSameBlock = (root, node1, node2) => getParentBlock$3(node1, root) === getParentBlock$3(node2, root);\n const lean = (left, root, node) => {\n const siblingName = left ? 'previousSibling' : 'nextSibling';\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n let sibling = tempNode[siblingName];\n if (sibling && isCaretContainer(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$6(sibling) || isMedia(sibling)) {\n if (isNodesInSameBlock(root, sibling, tempNode)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$1(sibling)) {\n break;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n const before$2 = curry(beforeAfter, true);\n const after$2 = curry(beforeAfter, false);\n const normalizeRange = (direction, root, range) => {\n let node;\n const leanLeft = curry(lean, true, root);\n const leanRight = curry(lean, false, root);\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isCaretContainerBlock$1(container)) {\n const block = isText$4(container) ? container.parentNode : container;\n const location = block.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = block.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = block.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$2(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$a(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 const getRelativeCefElm = (forward, caretPosition) => getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition).filter(isContentEditableFalse$6);\n const getNormalizedRangeEndPoint = (direction, root, range) => {\n const normalizedRange = normalizeRange(direction, root, range);\n return direction === -1 ? CaretPosition.fromRangeStart(normalizedRange) : CaretPosition.fromRangeEnd(normalizedRange);\n };\n const getElementFromPosition = pos => Optional.from(pos.getNode()).map(SugarElement.fromDom);\n const getElementFromPrevPosition = pos => Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n const getVisualCaretPosition = (walkFn, caretPosition) => {\n let pos = caretPosition;\n while (pos = walkFn(pos)) {\n if (pos.isVisible()) {\n return pos;\n }\n }\n return pos;\n };\n const isMoveInsideSameBlock = (from, to) => {\n const inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && isBr$6(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 const isContentEditableFalse$5 = isContentEditableFalse$a;\n const isText$3 = isText$a;\n const isElement$1 = isElement$6;\n const isBr$2 = isBr$6;\n const isCaretCandidate = isCaretCandidate$3;\n const isAtomic = isAtomic$1;\n const isEditableCaretCandidate = isEditableCaretCandidate$1;\n const getParents$3 = (node, root) => {\n const parents = [];\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n parents.push(tempNode);\n tempNode = tempNode.parentNode;\n }\n return parents;\n };\n const nodeAtIndex = (container, offset) => {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n const getCaretCandidatePosition = (direction, node) => {\n if (isForwards(direction)) {\n if (isCaretCandidate(node.previousSibling) && !isText$3(node.previousSibling)) {\n return CaretPosition.before(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate(node.nextSibling) && !isText$3(node.nextSibling)) {\n return CaretPosition.after(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$2(node)) {\n return CaretPosition.before(node);\n }\n return CaretPosition.after(node);\n }\n return CaretPosition.before(node);\n };\n const moveForwardFromBr = (root, nextNode) => {\n const nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate(nextSibling)) {\n if (isText$3(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 const findCaretPosition$1 = (direction, startPos, root) => {\n let node;\n let nextNode;\n let innerNode;\n let caretPosition;\n if (!isElement$1(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$1(root.lastChild)) {\n return isBr$2(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n const container = caretPosition.container();\n let offset = caretPosition.offset();\n if (isText$3(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(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$3(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$2(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (node && (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart())) {\n node = findNode(node, direction, always, root, true);\n if (isEditableCaretCandidate(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = node ? findNode(node, direction, isEditableCaretCandidate, root) : node;\n const rootContentEditableFalseElm = last$2(filter$5(getParents$3(container, root), isContentEditableFalse$5));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n const CaretWalker = root => ({\n next: caretPosition => {\n return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n },\n prev: caretPosition => {\n return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n }\n });\n\n const walkToPositionIn = (forward, root, start) => {\n const position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n const afterElement = node => isBr$6(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n const isBeforeOrStart = position => {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate$3(position.getNode());\n }\n };\n const isAfterOrEnd = position => {\n if (CaretPosition.isTextPosition(position)) {\n const container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate$3(position.getNode(true));\n }\n };\n const isBeforeAfterSameElement = (from, to) => !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n const isAtBr = position => !CaretPosition.isTextPosition(position) && isBr$6(position.getNode());\n const shouldSkipPosition = (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 const fromPosition = (forward, root, pos) => {\n const walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n const navigate = (forward, root, from) => fromPosition(forward, root, from).bind(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 const navigateIgnore = (forward, root, from, ignoreFilter) => navigate(forward, root, from).bind(pos => ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos));\n const positionIn = (forward, element) => {\n const startNode = forward ? element.firstChild : element.lastChild;\n if (isText$a(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 const nextPosition = curry(fromPosition, true);\n const prevPosition = curry(fromPosition, false);\n const firstPositionIn = curry(positionIn, true);\n const lastPositionIn = curry(positionIn, false);\n\n const CARET_ID = '_mce_caret';\n const isCaretNode = node => isElement$6(node) && node.id === CARET_ID;\n const getParentCaretContainer = (body, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== body) {\n if (isCaretNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n\n const isStringPathBookmark = bookmark => isString(bookmark.start);\n const isRangeBookmark = bookmark => has$2(bookmark, 'rng');\n const isIdBookmark = bookmark => has$2(bookmark, 'id');\n const isIndexBookmark = bookmark => has$2(bookmark, 'name');\n const isPathBookmark = bookmark => Tools.isArray(bookmark.start);\n\n const isForwardBookmark = bookmark => !isIndexBookmark(bookmark) && isBoolean(bookmark.forward) ? bookmark.forward : true;\n const addBogus = (dom, node) => {\n if (isElement$6(node) && dom.isBlock(node) && !node.innerHTML) {\n node.innerHTML = '<br data-mce-bogus=\"1\" />';\n }\n return node;\n };\n const resolveCaretPositionBookmark = (dom, bookmark) => {\n const startPos = Optional.from(resolve$1(dom.getRoot(), bookmark.start));\n const endPos = Optional.from(resolve$1(dom.getRoot(), bookmark.end));\n return lift2(startPos, endPos, (start, end) => {\n const range = dom.createRng();\n range.setStart(start.container(), start.offset());\n range.setEnd(end.container(), end.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const insertZwsp = (node, rng) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n const isEmpty$1 = node => !node.hasChildNodes();\n const tryFindRangePosition = (node, rng) => lastPositionIn(node).fold(never, pos => {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n const padEmptyCaretContainer = (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 const setEndPoint = (dom, start, bookmark, rng) => {\n const point = bookmark[start ? 'start' : 'end'];\n const root = dom.getRoot();\n if (point) {\n let node = root;\n let offset = point[0];\n for (let i = point.length - 1; node && i >= 1; i--) {\n const 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 (isText$a(node)) {\n offset = Math.min(point[0], node.data.length);\n }\n if (isElement$6(node)) {\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 const isValidTextNode = node => isText$a(node) && node.data.length > 0;\n const restoreEndPoint = (dom, suffix, bookmark) => {\n const marker = dom.get(bookmark.id + '_' + suffix);\n const markerParent = marker === null || marker === void 0 ? void 0 : marker.parentNode;\n const keep = bookmark.keep;\n if (marker && markerParent) {\n let container;\n let offset;\n if (suffix === 'start') {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n container = marker.nextSibling;\n offset = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker) + 1;\n }\n }\n } else {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n }\n }\n }\n if (!keep) {\n const prev = marker.previousSibling;\n const next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), node => {\n if (isText$a(node)) {\n node.data = node.data.replace(/\\uFEFF/g, '');\n }\n });\n let otherMarker;\n while (otherMarker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(otherMarker, true);\n }\n if (isText$a(next) && isText$a(prev) && !Env.browser.isOpera()) {\n const idx = prev.data.length;\n prev.appendData(next.data);\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 const resolvePaths = (dom, bookmark) => {\n const range = dom.createRng();\n if (setEndPoint(dom, true, bookmark, range) && setEndPoint(dom, false, bookmark, range)) {\n return Optional.some({\n range,\n forward: isForwardBookmark(bookmark)\n });\n } else {\n return Optional.none();\n }\n };\n const resolveId = (dom, bookmark) => {\n const startPos = restoreEndPoint(dom, 'start', bookmark);\n const endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, endPos.or(startPos), (spos, epos) => {\n const range = dom.createRng();\n range.setStart(addBogus(dom, spos.container()), spos.offset());\n range.setEnd(addBogus(dom, epos.container()), epos.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const resolveIndex = (dom, bookmark) => Optional.from(dom.select(bookmark.name)[bookmark.index]).map(elm => {\n const range = dom.createRng();\n range.selectNode(elm);\n return {\n range,\n forward: true\n };\n });\n const resolve = (selection, bookmark) => {\n const dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return 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({\n range: bookmark.rng,\n forward: isForwardBookmark(bookmark)\n });\n }\n }\n return Optional.none();\n };\n\n const getBookmark$1 = (selection, type, normalized) => {\n return getBookmark$2(selection, type, normalized);\n };\n const moveToBookmark = (selection, bookmark) => {\n resolve(selection, bookmark).each(({range, forward}) => {\n selection.setRng(range, forward);\n });\n };\n const isBookmarkNode$1 = node => {\n return isElement$6(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n const is = expected => actual => expected === actual;\n const isNbsp = is(nbsp);\n const isWhiteSpace = chr => chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n const isContent = chr => !isWhiteSpace(chr) && !isNbsp(chr) && !isZwsp$1(chr);\n\n const hexColour = value => ({ value });\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const fromString = rgbaString => {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const 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 const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n const getRanges$1 = selection => {\n const ranges = [];\n if (selection) {\n for (let i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n const getSelectedNodes = ranges => {\n return bind$3(ranges, range => {\n const node = getSelectedNode(range);\n return node ? [SugarElement.fromDom(node)] : [];\n });\n };\n const hasMultipleRanges = selection => {\n return getRanges$1(selection).length > 1;\n };\n\n const getCellsFromRanges = ranges => filter$5(getSelectedNodes(ranges), isTableCell$2);\n const getCellsFromElement = elm => descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n const getCellsFromElementOrRanges = (ranges, element) => {\n const selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n const getCellsFromEditor = editor => getCellsFromElementOrRanges(getRanges$1(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n const getClosestTable = (cell, isRoot) => ancestor$2(cell, 'table', isRoot);\n\n const getStartNode = rng => {\n const sc = rng.startContainer, so = rng.startOffset;\n if (isText$a(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 const getEndNode = rng => {\n const ec = rng.endContainer, eo = rng.endOffset;\n if (isText$a(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 const getFirstChildren = node => {\n return firstChild(node).fold(constant([node]), child => {\n return [node].concat(getFirstChildren(child));\n });\n };\n const getLastChildren = node => {\n return lastChild(node).fold(constant([node]), child => {\n if (name(child) === 'br') {\n return prevSibling(child).map(sibling => {\n return [node].concat(getLastChildren(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren(child));\n }\n });\n };\n const hasAllContentsSelected = (elm, rng) => {\n return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {\n const start = find$2(getFirstChildren(elm), curry(eq, startNode));\n const end = find$2(getLastChildren(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n const moveEndPoint = (dom, rng, node, start) => {\n const root = node;\n const walker = new DomTreeWalker(node, root);\n const moveCaretBeforeOnEnterElementsMap = filter$4(dom.schema.getMoveCaretBeforeOnEnterElements(), (_, name) => !contains$2([\n 'td',\n 'th',\n 'table'\n ], name.toLowerCase()));\n let currentNode = node;\n do {\n if (isText$a(currentNode) && Tools.trim(currentNode.data).length !== 0) {\n if (start) {\n rng.setStart(currentNode, 0);\n } else {\n rng.setEnd(currentNode, currentNode.data.length);\n }\n return;\n }\n if (moveCaretBeforeOnEnterElementsMap[currentNode.nodeName]) {\n if (start) {\n rng.setStartBefore(currentNode);\n } else {\n if (currentNode.nodeName === 'BR') {\n rng.setEndBefore(currentNode);\n } else {\n rng.setEndAfter(currentNode);\n }\n }\n return;\n }\n } while (currentNode = 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 const hasAnyRanges = editor => {\n const sel = editor.selection.getSel();\n return isNonNullable(sel) && sel.rangeCount > 0;\n };\n const runOnRanges = (editor, executor) => {\n const fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each$e(fakeSelectionNodes, elem => {\n const node = elem.dom;\n const 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 const preserve = (selection, fillBookmark, executor) => {\n const bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n const isNode = node => isNumber(node === null || node === void 0 ? void 0 : node.nodeType);\n const isElementNode$1 = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n const isElementDirectlySelected = (dom, node) => {\n if (isElementNode$1(node) && !/^(TD|TH)$/.test(node.nodeName)) {\n const selectedAttr = dom.getAttrib(node, 'data-mce-selected');\n const value = parseInt(selectedAttr, 10);\n return !isNaN(value) && value > 0;\n } else {\n return false;\n }\n };\n const isEditable$3 = elm => elm.isContentEditable === true;\n const preserveSelection = (editor, action, shouldMoveStart) => {\n const {selection, dom} = editor;\n const selectedNodeBeforeAction = selection.getNode();\n const isSelectedBeforeNodeNoneditable = isContentEditableFalse$a(selectedNodeBeforeAction);\n preserve(selection, true, () => {\n action();\n });\n const isBeforeNodeStillNoneditable = isSelectedBeforeNodeNoneditable && isContentEditableFalse$a(selectedNodeBeforeAction);\n if (isBeforeNodeStillNoneditable && dom.isChildOf(selectedNodeBeforeAction, editor.getBody())) {\n editor.selection.select(selectedNodeBeforeAction);\n } else if (shouldMoveStart(selection.getStart())) {\n moveStartToNearestText(dom, selection);\n }\n };\n const moveStartToNearestText = (dom, selection) => {\n var _a, _b;\n const rng = selection.getRng();\n const {startContainer, startOffset} = rng;\n const selectedNode = selection.getNode();\n if (isElementDirectlySelected(dom, selectedNode)) {\n return;\n }\n if (isElement$6(startContainer)) {\n const nodes = startContainer.childNodes;\n const root = dom.getRoot();\n let walker;\n if (startOffset < nodes.length) {\n const startNode = nodes[startOffset];\n walker = new DomTreeWalker(startNode, (_a = dom.getParent(startNode, dom.isBlock)) !== null && _a !== void 0 ? _a : root);\n } else {\n const startNode = nodes[nodes.length - 1];\n walker = new DomTreeWalker(startNode, (_b = dom.getParent(startNode, dom.isBlock)) !== null && _b !== void 0 ? _b : root);\n walker.next(true);\n }\n for (let node = walker.current(); node; node = walker.next()) {\n if (dom.getContentEditable(node) === 'false') {\n return;\n } else if (isText$a(node) && !isWhiteSpaceNode$1(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n const getNonWhiteSpaceSibling = (node, next, inc) => {\n if (node) {\n const nextName = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n if (isElement$6(node) || !isWhiteSpaceNode$1(node)) {\n return node;\n }\n }\n }\n return undefined;\n };\n const isTextBlock$1 = (schema, node) => !!schema.getTextBlockElements()[node.nodeName.toLowerCase()] || isTransparentBlock(schema, node);\n const isValid = (ed, parent, child) => {\n return ed.schema.isValidChild(parent, child);\n };\n const isWhiteSpaceNode$1 = (node, allowSpaces = false) => {\n if (isNonNullable(node) && isText$a(node)) {\n const data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n return isWhitespaceText(data);\n } else {\n return false;\n }\n };\n const isEmptyTextNode$1 = node => {\n return isNonNullable(node) && isText$a(node) && node.length === 0;\n };\n const isWrapNoneditableTarget = (editor, node) => {\n const baseDataSelector = '[data-mce-cef-wrappable]';\n const formatNoneditableSelector = getFormatNoneditableSelector(editor);\n const selector = isEmpty$3(formatNoneditableSelector) ? baseDataSelector : `${ baseDataSelector },${ formatNoneditableSelector }`;\n return is$1(SugarElement.fromDom(node), selector);\n };\n const isWrappableNoneditable = (editor, node) => {\n const dom = editor.dom;\n return isElementNode$1(node) && dom.getContentEditable(node) === 'false' && isWrapNoneditableTarget(editor, node) && dom.select('[contenteditable=\"true\"]', node).length === 0;\n };\n const replaceVars = (value, vars) => {\n if (isFunction(value)) {\n return value(vars);\n } else if (isNonNullable(vars)) {\n value = value.replace(/%(\\w+)/g, (str, name) => {\n return vars[name] || str;\n });\n }\n return value;\n };\n const isEq$5 = (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 const normalizeStyleValue = (value, name) => {\n if (isNullable(value)) {\n return null;\n } else {\n let strValue = String(value);\n if (name === 'color' || name === 'backgroundColor') {\n strValue = rgbaToHexString(strValue);\n }\n if (name === 'fontWeight' && value === 700) {\n strValue = 'bold';\n }\n if (name === 'fontFamily') {\n strValue = strValue.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return strValue;\n }\n };\n const getStyle = (dom, node, name) => {\n const style = dom.getStyle(node, name);\n return normalizeStyleValue(style, name);\n };\n const getTextDecoration = (dom, node) => {\n let decoration;\n dom.getParent(node, n => {\n if (isElement$6(n)) {\n decoration = dom.getStyle(n, 'text-decoration');\n return !!decoration && decoration !== 'none';\n } else {\n return false;\n }\n });\n return decoration;\n };\n const getParents$2 = (dom, node, selector) => {\n return dom.getParents(node, selector, dom.getRoot());\n };\n const isFormatPredicate = (editor, formatName, predicate) => {\n const formats = editor.formatter.get(formatName);\n return isNonNullable(formats) && exists(formats, predicate);\n };\n const isVariableFormatName = (editor, formatName) => {\n const hasVariableValues = format => {\n const isVariableValue = val => isFunction(val) || val.length > 1 && val.charAt(0) === '%';\n return exists([\n 'styles',\n 'attributes'\n ], key => get$a(format, key).exists(field => {\n const fieldValues = isArray$1(field) ? field : values(field);\n return exists(fieldValues, isVariableValue);\n }));\n };\n return isFormatPredicate(editor, formatName, hasVariableValues);\n };\n const areSimilarFormats = (editor, formatName, otherFormatName) => {\n const validKeys = [\n 'inline',\n 'block',\n 'selector',\n 'attributes',\n 'styles',\n 'classes'\n ];\n const filterObj = format => filter$4(format, (_, key) => exists(validKeys, validKey => validKey === key));\n return isFormatPredicate(editor, formatName, fmt1 => {\n const filteredFmt1 = filterObj(fmt1);\n return isFormatPredicate(editor, otherFormatName, fmt2 => {\n const filteredFmt2 = filterObj(fmt2);\n return equal$1(filteredFmt1, filteredFmt2);\n });\n });\n };\n const isBlockFormat = format => hasNonNullableKey(format, 'block');\n const isWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper === true;\n const isNonWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper !== true;\n const isSelectorFormat = format => hasNonNullableKey(format, 'selector');\n const isInlineFormat = format => hasNonNullableKey(format, 'inline');\n const isMixedFormat = format => isSelectorFormat(format) && isInlineFormat(format) && is$2(get$a(format, 'mixed'), true);\n const shouldExpandToSelector = format => isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n\n const isBookmarkNode = isBookmarkNode$1;\n const getParents$1 = getParents$2;\n const isWhiteSpaceNode = isWhiteSpaceNode$1;\n const isTextBlock = isTextBlock$1;\n const isBogusBr = node => {\n return isBr$6(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n const findParentContentEditable = (dom, node) => {\n let parent = node;\n while (parent) {\n if (isElement$6(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n const walkText = (start, node, offset, predicate) => {\n const str = node.data;\n if (start) {\n for (let i = offset; i > 0; i--) {\n if (predicate(str.charAt(i - 1))) {\n return i;\n }\n }\n } else {\n for (let i = offset; i < str.length; i++) {\n if (predicate(str.charAt(i))) {\n return i;\n }\n }\n }\n return -1;\n };\n const findSpace = (start, node, offset) => walkText(start, node, offset, c => isNbsp(c) || isWhiteSpace(c));\n const findContent = (start, node, offset) => walkText(start, node, offset, isContent);\n const findWordEndPoint = (dom, body, container, offset, start, includeTrailingSpaces) => {\n let lastTextNode;\n const rootNode = dom.getParent(container, dom.isBlock) || body;\n const walk = (container, offset, pred) => {\n const textSeeker = TextSeeker(dom);\n const walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Optional.from(walker(container, offset, (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 const spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(result => includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none());\n };\n const findSelectorEndPoint = (dom, formatList, rng, container, siblingName) => {\n const sibling = container[siblingName];\n if (isText$a(container) && isEmpty$3(container.data) && sibling) {\n container = sibling;\n }\n const parents = getParents$1(dom, container);\n for (let i = 0; i < parents.length; i++) {\n for (let y = 0; y < formatList.length; y++) {\n const 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 const findBlockEndPoint = (dom, formatList, container, siblingName) => {\n var _a;\n let node = container;\n const root = dom.getRoot();\n const format = formatList[0];\n if (isBlockFormat(format)) {\n node = format.wrapper ? null : dom.getParent(container, format.block, root);\n }\n if (!node) {\n const scopeRoot = (_a = dom.getParent(container, 'LI,TD,TH')) !== null && _a !== void 0 ? _a : root;\n node = dom.getParent(isText$a(container) ? container.parentNode : container, node => node !== root && isTextBlock(dom.schema, node), 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 && 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 const isAtBlockBoundary$1 = (dom, root, container, siblingName) => {\n const 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 const findParentContainer = (dom, formatList, container, offset, start) => {\n let parent = container;\n const siblingName = start ? 'previousSibling' : 'nextSibling';\n const root = dom.getRoot();\n if (isText$a(container) && !isWhiteSpaceNode(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (parent) {\n if (!formatList[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n const allowSpaces = isText$a(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 const isSelfOrParentBookmark = container => isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n const expandRng = (dom, rng, formatList, includeTrailingSpace = false) => {\n let {startContainer, startOffset, endContainer, endOffset} = rng;\n const format = formatList[0];\n if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode$1(startContainer, startOffset);\n if (isText$a(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$6(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$a(endContainer)) {\n endOffset = endContainer.data.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$a(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$a(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n const startPoint = findWordEndPoint(dom, dom.getRoot(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(({container, offset}) => {\n startContainer = container;\n startOffset = offset;\n });\n const endPoint = findWordEndPoint(dom, dom.getRoot(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(({container, offset}) => {\n endContainer = container;\n endOffset = offset;\n });\n }\n if (isInlineFormat(format) || format.block_expand) {\n if (!isInlineFormat(format) || (!isText$a(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!isInlineFormat(format) || (!isText$a(endContainer) || endOffset === endContainer.data.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(dom, formatList, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(dom, 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$6(startContainer) && startContainer.parentNode) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$6(endContainer) && endContainer.parentNode) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const walk$3 = (dom, rng, callback) => {\n var _a;\n const startOffset = rng.startOffset;\n const startContainer = getNode$1(rng.startContainer, startOffset);\n const endOffset = rng.endOffset;\n const endContainer = getNode$1(rng.endContainer, endOffset - 1);\n const exclude = nodes => {\n const firstNode = nodes[0];\n if (isText$a(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n nodes.splice(0, 1);\n }\n const lastNode = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$a(lastNode)) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n const collectSiblings = (node, name, endNode) => {\n const siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n const findEndPoint = (node, root) => dom.getParent(node, node => node.parentNode === root, root);\n const walkBoundary = (startNode, endNode, next) => {\n const siblingName = next ? 'nextSibling' : 'previousSibling';\n for (let node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n parent = node.parentNode;\n const siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings.length) {\n if (!next) {\n siblings.reverse();\n }\n callback(exclude(siblings));\n }\n }\n };\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n const ancestor = (_a = dom.findCommonAncestor(startContainer, endContainer)) !== null && _a !== void 0 ? _a : dom.getRoot();\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 const startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n const endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n const 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 const validBlocks = [\n 'pre[class*=language-][contenteditable=\"false\"]',\n 'figure.image',\n 'div[data-ephox-embed-iri]',\n 'div.tiny-pageembed',\n 'div.mce-toc',\n 'div[data-mce-toc]'\n ];\n const isZeroWidth = elem => isText$b(elem) && get$3(elem) === ZWSP$1;\n const context = (editor, elem, wrapName, nodeName) => parent(elem).fold(() => 'skipping', 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 (exists(validBlocks, selector => is$1(elem, selector))) {\n return 'valid-block';\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 const applyWordGrab = (editor, rng) => {\n const r = expandRng(editor.dom, rng, [{ inline: 'span' }]);\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n const applyAnnotation = (elem, masterUId, data, annotationName, decorate, directAnnotation) => {\n const {uid = masterUId, ...otherData} = data;\n add$2(elem, annotation());\n set$2(elem, `${ dataAnnotationId() }`, uid);\n set$2(elem, `${ dataAnnotation() }`, annotationName);\n const {attributes = {}, classes = []} = decorate(uid, otherData);\n setAll$1(elem, attributes);\n add(elem, classes);\n if (directAnnotation) {\n if (classes.length > 0) {\n set$2(elem, `${ dataAnnotationClasses() }`, classes.join(','));\n }\n const attributeNames = keys(attributes);\n if (attributeNames.length > 0) {\n set$2(elem, `${ dataAnnotationAttributes() }`, attributeNames.join(','));\n }\n }\n };\n const removeDirectAnnotation = elem => {\n remove$8(elem, annotation());\n remove$b(elem, `${ dataAnnotationId() }`);\n remove$b(elem, `${ dataAnnotation() }`);\n remove$b(elem, `${ dataAnnotationActive() }`);\n const customAttrNames = getOpt(elem, `${ dataAnnotationAttributes() }`).map(names => names.split(',')).getOr([]);\n const customClasses = getOpt(elem, `${ dataAnnotationClasses() }`).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => remove$b(elem, name));\n remove$5(elem, customClasses);\n remove$b(elem, `${ dataAnnotationClasses() }`);\n remove$b(elem, `${ dataAnnotationAttributes() }`);\n };\n const makeAnnotation = (eDoc, uid, data, annotationName, decorate) => {\n const master = SugarElement.fromTag('span', eDoc);\n applyAnnotation(master, uid, data, annotationName, decorate, false);\n return master;\n };\n const annotate = (editor, rng, uid, annotationName, decorate, data) => {\n const newWrappers = [];\n const master = makeAnnotation(editor.getDoc(), uid, data, annotationName, decorate);\n const wrapper = value$2();\n const finishWrapper = () => {\n wrapper.clear();\n };\n const getOrOpenWrapper = () => wrapper.get().getOrThunk(() => {\n const nu = shallow$1(master);\n newWrappers.push(nu);\n wrapper.set(nu);\n return nu;\n });\n const processElements = elems => {\n each$e(elems, processElement);\n };\n const processElement = elem => {\n const ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n const children = children$1(elem);\n processElements(children);\n finishWrapper();\n break;\n }\n case 'valid-block': {\n finishWrapper();\n applyAnnotation(elem, uid, data, annotationName, decorate, true);\n break;\n }\n case 'valid': {\n const w = getOrOpenWrapper();\n wrap$2(elem, w);\n break;\n }\n }\n };\n const processNodes = nodes => {\n const elems = map$3(nodes, SugarElement.fromDom);\n processElements(elems);\n };\n walk$3(editor.dom, rng, nodes => {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n const annotateWithBookmark = (editor, name, settings, data) => {\n editor.undoManager.transact(() => {\n const selection = editor.selection;\n const initialRng = selection.getRng();\n const hasFakeSelection = getCellsFromEditor(editor).length > 0;\n const masterUid = generate$1('mce-annotation');\n if (initialRng.collapsed && !hasFakeSelection) {\n applyWordGrab(editor, initialRng);\n }\n if (selection.getRng().collapsed && !hasFakeSelection) {\n const wrapper = makeAnnotation(editor.getDoc(), masterUid, 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, () => {\n runOnRanges(editor, selectionRng => {\n annotate(editor, selectionRng, masterUid, name, settings.decorate, data);\n });\n });\n }\n });\n };\n\n const Annotator = editor => {\n const registry = create$c();\n setup$w(editor, registry);\n const changes = setup$x(editor, registry);\n const isSpan = isTag('span');\n const removeAnnotations = elements => {\n each$e(elements, element => {\n if (isSpan(element)) {\n unwrap(element);\n } else {\n removeDirectAnnotation(element);\n }\n });\n };\n return {\n register: (name, settings) => {\n registry.register(name, settings);\n },\n annotate: (name, data) => {\n registry.lookup(name).each(settings => {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: (name, callback) => {\n changes.addListener(name, callback);\n },\n remove: name => {\n const bookmark = editor.selection.getBookmark();\n identify(editor, Optional.some(name)).each(({elements}) => {\n removeAnnotations(elements);\n });\n editor.selection.moveToBookmark(bookmark);\n },\n removeAll: name => {\n const bookmark = editor.selection.getBookmark();\n each$d(findAll(editor, name), (elements, _) => {\n removeAnnotations(elements);\n });\n editor.selection.moveToBookmark(bookmark);\n },\n getAll: name => {\n const directory = findAll(editor, name);\n return map$2(directory, elems => map$3(elems, elem => elem.dom));\n }\n };\n };\n\n const BookmarkManager = selection => {\n return {\n getBookmark: curry(getBookmark$1, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n };\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n const isXYWithinRange = (clientX, clientY, range) => {\n if (range.collapsed) {\n return false;\n } else {\n return exists(range.getClientRects(), rect => containsXY(rect, clientX, clientY));\n }\n };\n\n const firePreProcess = (editor, args) => editor.dispatch('PreProcess', args);\n const firePostProcess = (editor, args) => editor.dispatch('PostProcess', args);\n const fireRemove = editor => {\n editor.dispatch('remove');\n };\n const fireDetach = editor => {\n editor.dispatch('detach');\n };\n const fireSwitchMode = (editor, mode) => {\n editor.dispatch('SwitchMode', { mode });\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const firePreInit = editor => {\n editor.dispatch('PreInit');\n };\n const firePostRender = editor => {\n editor.dispatch('PostRender');\n };\n const fireInit = editor => {\n editor.dispatch('Init');\n };\n const firePlaceholderToggle = (editor, state) => {\n editor.dispatch('PlaceholderToggle', { state });\n };\n const fireError = (editor, errorType, error) => {\n editor.dispatch(errorType, error);\n };\n const fireFormatApply = (editor, format, node, vars) => {\n editor.dispatch('FormatApply', {\n format,\n node,\n vars\n });\n };\n const fireFormatRemove = (editor, format, node, vars) => {\n editor.dispatch('FormatRemove', {\n format,\n node,\n vars\n });\n };\n const fireBeforeSetContent = (editor, args) => editor.dispatch('BeforeSetContent', args);\n const fireSetContent = (editor, args) => editor.dispatch('SetContent', args);\n const fireBeforeGetContent = (editor, args) => editor.dispatch('BeforeGetContent', args);\n const fireGetContent = (editor, args) => editor.dispatch('GetContent', args);\n const fireAutocompleterStart = (editor, args) => {\n editor.dispatch('AutocompleterStart', args);\n };\n const fireAutocompleterUpdate = (editor, args) => {\n editor.dispatch('AutocompleterUpdate', args);\n };\n const fireAutocompleterEnd = editor => {\n editor.dispatch('AutocompleterEnd');\n };\n const firePastePreProcess = (editor, html, internal) => editor.dispatch('PastePreProcess', {\n content: html,\n internal\n });\n const firePastePostProcess = (editor, node, internal) => editor.dispatch('PastePostProcess', {\n node,\n internal\n });\n const firePastePlainTextToggle = (editor, state) => editor.dispatch('PastePlainTextToggle', { state });\n\n const VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n ESC: 27,\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: e => {\n return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n },\n metaKeyPressed: e => {\n return Env.os.isMacOS() || Env.os.isiOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n const elementSelectionAttr = 'data-mce-selected';\n const controlElmSelector = 'table,img,figure.image,hr,video,span.mce-preview-object';\n const abs = Math.abs;\n const round$1 = Math.round;\n const 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 const isTouchEvent = evt => evt.type === 'longpress' || evt.type.indexOf('touch') === 0;\n const ControlSelection = (selection, editor) => {\n const dom = editor.dom;\n const editableDoc = editor.getDoc();\n const rootDocument = document;\n const rootElement = editor.getBody();\n let selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n let startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n let width;\n let height;\n let startScrollWidth;\n let startScrollHeight;\n const isImage = elm => isNonNullable(elm) && (isImg(elm) || dom.is(elm, 'figure.image'));\n const isMedia = elm => isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n const isEventOnImageOutsideRange = (evt, range) => {\n if (isTouchEvent(evt)) {\n const 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 const contextMenuSelectImage = evt => {\n const target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n const getResizeTargets = elm => {\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return [\n elm,\n elm.firstElementChild\n ];\n } else if (dom.is(elm, 'figure.image')) {\n return [elm.querySelector('img')];\n } else {\n return [elm];\n }\n };\n const isResizable = elm => {\n const 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') && isNonNullable(elm.firstElementChild)) {\n return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n } else {\n return is$1(SugarElement.fromDom(elm), selector);\n }\n };\n const createGhostElement = elm => {\n if (isMedia(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else {\n return elm.cloneNode(true);\n }\n };\n const setSizeProp = (element, name, value) => {\n if (isNonNullable(value)) {\n const targets = getResizeTargets(element);\n each$e(targets, 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 const setGhostElmSize = (ghostElm, width, height) => {\n setSizeProp(ghostElm, 'width', width);\n setSizeProp(ghostElm, 'height', height);\n };\n const resizeGhostElement = e => {\n let deltaX, deltaY, proportional;\n let 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$1(width * ratio);\n width = round$1(height / ratio);\n } else {\n width = round$1(height / ratio);\n height = round$1(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 const endGhostResize = () => {\n const 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 const showResizeRect = targetElm => {\n unbindResizeHandleEvents();\n const position = dom.getPos(targetElm, rootElement);\n const selectedElmX = position.x;\n const selectedElmY = position.y;\n const rect = targetElm.getBoundingClientRect();\n const targetWidth = rect.width || rect.right - rect.left;\n const targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n const e = editor.dispatch('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each$d(resizeHandles, (handle, name) => {\n const startDrag = e => {\n const 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', {\n 'class': 'mce-resize-backdrop',\n 'data-mce-bogus': 'all'\n });\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 let 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 dom.bind(handleElm, 'mousedown', 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(false);\n }\n };\n const throttledShowResizeRect = first$1(showResizeRect, 0);\n const hideResizeRect = (removeSelected = true) => {\n throttledShowResizeRect.cancel();\n unbindResizeHandleEvents();\n if (selectedElm && removeSelected) {\n selectedElm.removeAttribute(elementSelectionAttr);\n }\n each$d(resizeHandles, (value, name) => {\n const handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n const isChildOrEqual = (node, parent) => dom.isChildOf(node, parent);\n const updateResizeRect = e => {\n if (resizeStarted || editor.removed || editor.composing) {\n return;\n }\n const targetElm = e.type === 'mousedown' ? e.target : selection.getNode();\n const controlElm = closest$3(SugarElement.fromDom(targetElm), controlElmSelector).map(e => e.dom).getOrUndefined();\n const selectedValue = isNonNullable(controlElm) ? dom.getAttrib(controlElm, elementSelectionAttr, '1') : '1';\n each$e(dom.select(`img[${ elementSelectionAttr }],hr[${ elementSelectionAttr }]`), img => {\n img.removeAttribute(elementSelectionAttr);\n });\n if (isNonNullable(controlElm) && isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n const startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n dom.setAttrib(controlElm, elementSelectionAttr, selectedValue);\n throttledShowResizeRect.throttle(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n const unbindResizeHandleEvents = () => {\n each$d(resizeHandles, handle => {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n const disableGeckoResize = () => {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n } catch (ex) {\n }\n };\n editor.on('init', () => {\n disableGeckoResize();\n editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', updateResizeRect);\n editor.on('keyup compositionend', e => {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n updateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n const destroy = () => {\n throttledShowResizeRect.cancel();\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable,\n showResizeRect,\n hideResizeRect,\n updateResizeRect,\n destroy\n };\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n\n const adt$3 = 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 const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$a = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$a };\n\n const caretPositionFromPoint = (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(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.dom.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (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 const availableSearch = (() => {\n if (document.caretPositionFromPoint) {\n return caretPositionFromPoint;\n } else if (document.caretRangeFromPoint) {\n return caretRangeFromPoint;\n } else {\n return Optional.none;\n }\n })();\n const fromPoint$1 = (win, x, y) => {\n const doc = SugarElement.fromDom(win.document);\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$2 = situ => situ.fold(identity, identity, identity);\n const before$1 = adt$2.before;\n const on = adt$2.on;\n const after$1 = adt$2.after;\n const Situ = {\n before: before$1,\n on,\n after: after$1,\n cata,\n getStart: getStart$2\n };\n\n const adt$1 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$1.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart$1 = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt$1.domRange;\n const relative = adt$1.relative;\n const exact = adt$1.exact;\n const getWin = selection => {\n const start = getStart$1(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const beforeSpecial = (element, offset) => {\n const 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 const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n const preprocess = selection => selection.match({\n domRange: rng => {\n const start = SugarElement.fromDom(rng.startContainer);\n const finish = SugarElement.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$e(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const toNative = selection => {\n const win = SimSelection.getWin(selection).dom;\n const getDomRange = (start, soffset, finish, foffset) => exactToNative(win, start, soffset, finish, foffset);\n const filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n const getAtPoint = (win, x, y) => fromPoint$1(win, x, y);\n\n const fromPoint = (clientX, clientY, doc) => {\n const win = defaultView(SugarElement.fromDom(doc));\n return getAtPoint(win.dom, clientX, clientY).map(simRange => {\n const rng = doc.createRange();\n rng.setStart(simRange.start.dom, simRange.soffset);\n rng.setEnd(simRange.finish.dom, simRange.foffset);\n return rng;\n }).getOrUndefined();\n };\n\n const isEq$4 = (rng1, rng2) => {\n return isNonNullable(rng1) && isNonNullable(rng2) && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n\n const findParent = (node, rootNode, predicate) => {\n let currentNode = node;\n while (currentNode && currentNode !== rootNode) {\n if (predicate(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n const hasParent$1 = (node, rootNode, predicate) => findParent(node, rootNode, predicate) !== null;\n const hasParentWithName = (node, rootNode, name) => hasParent$1(node, rootNode, node => node.nodeName === name);\n const isCeFalseCaretContainer = (node, rootNode) => isCaretContainer$2(node) && !hasParent$1(node, rootNode, isCaretNode);\n const hasBrBeforeAfter = (dom, node, left) => {\n const parentNode = node.parentNode;\n if (parentNode) {\n const walker = new DomTreeWalker(node, dom.getParent(parentNode, dom.isBlock) || dom.getRoot());\n let currentNode;\n while (currentNode = walker[left ? 'prev' : 'next']()) {\n if (isBr$6(currentNode)) {\n return true;\n }\n }\n }\n return false;\n };\n const isPrevNode = (node, name) => {\n var _a;\n return ((_a = node.previousSibling) === null || _a === void 0 ? void 0 : _a.nodeName) === name;\n };\n const hasContentEditableFalseParent = (root, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== root) {\n if (isContentEditableFalse$a(currentNode)) {\n return true;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n };\n const findTextNodeRelative = (dom, isAfterNode, collapsed, left, startNode) => {\n const body = dom.getRoot();\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n const parentNode = startNode.parentNode;\n let lastInlineElement;\n let node;\n if (!parentNode) {\n return Optional.none();\n }\n const parentBlockContainer = dom.getParent(parentNode, dom.isBlock) || body;\n if (left && isBr$6(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Optional.some(CaretPosition(parentNode, dom.nodeIndex(startNode)));\n }\n const 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$a(node) && node.data.length > 0) {\n if (!hasParentWithName(node, body, 'A')) {\n return Optional.some(CaretPosition(node, left ? node.data.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 (isComment(lastInlineElement)) {\n return Optional.none();\n }\n if (collapsed && lastInlineElement) {\n return Optional.some(CaretPosition(lastInlineElement, 0));\n }\n return Optional.none();\n };\n const normalizeEndPoint = (dom, collapsed, start, rng) => {\n const body = dom.getRoot();\n let node;\n let normalized = false;\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const isAfterNode = isElement$6(container) && offset === container.childNodes.length;\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n let directionLeft = start;\n if (isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isElement$6(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$2(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$a(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$2(container)) {\n return Optional.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (container.hasChildNodes() && !isTable$2(container)) {\n node = container;\n const walker = new DomTreeWalker(container, body);\n do {\n if (isContentEditableFalse$a(node) || isCaretContainer$2(node)) {\n normalized = false;\n break;\n }\n if (isText$a(node) && node.data.length > 0) {\n offset = directionLeft ? 0 : node.data.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCellOrCaption(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$a(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (isElement$6(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr$6(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && isText$a(container) && offset === container.data.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized && container ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n };\n const normalize$2 = (dom, rng) => {\n const collapsed = rng.collapsed, normRng = rng.cloneRange();\n const startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(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(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 const splitText = (node, offset) => {\n return node.splitText(offset);\n };\n const split = rng => {\n let startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$a(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.data.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n startContainer = endContainer = newContainer;\n endOffset = newContainer.data.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (isText$a(startContainer) && startOffset > 0 && startOffset < startContainer.data.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$a(endContainer) && endOffset > 0 && endOffset < endContainer.data.length) {\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n endContainer = newContainer;\n endOffset = newContainer.data.length;\n }\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const RangeUtils = dom => {\n const walk = (rng, callback) => {\n return walk$3(dom, rng, callback);\n };\n const split$1 = split;\n const normalize = rng => {\n return normalize$2(dom, rng).fold(never, normalizedRng => {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n const expand = (rng, options = { type: 'word' }) => {\n if (options.type === 'word') {\n const rangeLike = expandRng(dom, rng, [{ inline: 'span' }]);\n const newRange = dom.createRng();\n newRange.setStart(rangeLike.startContainer, rangeLike.startOffset);\n newRange.setEnd(rangeLike.endContainer, rangeLike.endOffset);\n return newRange;\n }\n return rng;\n };\n return {\n walk,\n split: split$1,\n expand,\n normalize\n };\n };\n RangeUtils.compareRanges = isEq$4;\n RangeUtils.getCaretRangeFromPoint = fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode$1;\n\n const Dimension = (name, getOffset) => {\n const set = (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 const dom = element.dom;\n if (isSupported$1(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$7(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$7(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const api = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$2 = element => api.get(element);\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant([]), f => {\n const parent = navigation.owner(f);\n const rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n const pathTo = (element, navigation) => {\n const d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n const view = doc => {\n var _a;\n const 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 const owner = element => documentOrOwner(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner\n });\n\n const find = element => {\n const doc = getDocument();\n const scroll = get$5(doc);\n const frames = pathTo(element, Navigation);\n const offset = viewport(element);\n const r = foldr(frames, (b, a) => {\n const 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 const excludeFromDescend = element => name(element) === 'textarea';\n const fireScrollIntoViewEvent = (editor, data) => {\n const scrollEvent = editor.dispatch('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n const fireAfterScrollIntoViewEvent = (editor, data) => {\n editor.dispatch('AfterScrollIntoView', data);\n };\n const descend = (element, offset) => {\n const children = children$1(element);\n if (children.length === 0 || excludeFromDescend(element)) {\n return {\n element,\n offset\n };\n } else if (offset < children.length && !excludeFromDescend(children[offset])) {\n return {\n element: children[offset],\n offset: 0\n };\n } else {\n const last = children[children.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element,\n offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText$b(last)) {\n return {\n element: last,\n offset: get$3(last).length\n };\n } else {\n return {\n element: last,\n offset: children$1(last).length\n };\n }\n }\n }\n };\n const markerInfo = (element, cleanupFun) => {\n const pos = absolute(element);\n const height = get$2(element);\n return {\n element,\n bottom: pos.top + height,\n height,\n pos,\n cleanup: cleanupFun\n };\n };\n const createMarker$1 = (element, offset) => {\n const startPoint = descend(element, offset);\n const span = SugarElement.fromHtml('<span data-mce-bogus=\"all\" style=\"display: inline-block;\">' + ZWSP$1 + '</span>');\n before$3(startPoint.element, span);\n return markerInfo(span, () => remove$6(span));\n };\n const elementMarker = element => markerInfo(SugarElement.fromDom(element), noop);\n const withMarker = (editor, f, rng, alignToTop) => {\n preserveWith(editor, (_s, _e) => applyWithMarker(editor, f, rng, alignToTop), rng);\n };\n const withScrollEvents = (editor, doc, f, marker, alignToTop) => {\n const data = {\n elm: marker.element.dom,\n alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n const scrollTop = get$5(doc).top;\n f(doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n const applyWithMarker = (editor, f, rng, alignToTop) => {\n const body = SugarElement.fromDom(editor.getBody());\n const doc = SugarElement.fromDom(editor.getDoc());\n reflow(body);\n const marker = createMarker$1(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n const withElement = (editor, element, f, alignToTop) => {\n const doc = SugarElement.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n const preserveWith = (editor, f, rng) => {\n const startElement = rng.startContainer;\n const startOffset = rng.startOffset;\n const endElement = rng.endContainer;\n const endOffset = rng.endOffset;\n f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n const newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n const scrollToMarker = (marker, viewHeight, alignToTop, doc) => {\n const pos = marker.pos;\n if (alignToTop) {\n to(pos.left, pos.top, doc);\n } else {\n const y = pos.top - viewHeight + marker.height;\n to(pos.left, y, doc);\n }\n };\n const intoWindowIfNeeded = (doc, scrollTop, viewHeight, marker, alignToTop) => {\n const viewportBottom = viewHeight + scrollTop;\n const markerTop = marker.pos.top;\n const markerBottom = marker.bottom;\n const largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n const 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 const intoWindow = (doc, scrollTop, marker, alignToTop) => {\n const viewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n };\n const intoFrame = (doc, scrollTop, marker, alignToTop) => {\n const frameViewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n const op = find(marker.element);\n const 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 const rangeIntoWindow = (editor, rng, alignToTop) => withMarker(editor, intoWindow, rng, alignToTop);\n const elementIntoWindow = (editor, element, alignToTop) => withElement(editor, element, intoWindow, alignToTop);\n const rangeIntoFrame = (editor, rng, alignToTop) => withMarker(editor, intoFrame, rng, alignToTop);\n const elementIntoFrame = (editor, element, alignToTop) => withElement(editor, element, intoFrame, alignToTop);\n const scrollElementIntoView = (editor, element, alignToTop) => {\n const scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n const scrollRangeIntoView = (editor, rng, alignToTop) => {\n const scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n const focus$1 = element => element.dom.focus();\n const hasFocus$1 = element => {\n const root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n const clamp$1 = (offset, element) => {\n const max = isText$b(element) ? get$3(element).length : children$1(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n const normalizeRng = rng => SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n const isOrContains = (root, elm) => !isRestrictedNode(elm.dom) && (contains(root, elm) || eq(root, elm));\n const isRngInRoot = root => rng => isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n const shouldStore = editor => editor.inline || Env.browser.isFirefox();\n const nativeRangeToSelectionRange = r => SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n const readRange = win => {\n const selection = win.getSelection();\n const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n const getBookmark = root => {\n const win = defaultView(root);\n return readRange(win.dom).filter(isRngInRoot(root));\n };\n const validate = (root, bookmark) => Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n const bookmarkToNativeRng = bookmark => {\n const 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 const store = editor => {\n const newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n const getRng = editor => {\n const bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n return bookmark.bind(x => validate(SugarElement.fromDom(editor.getBody()), x)).bind(bookmarkToNativeRng);\n };\n const restore = editor => {\n getRng(editor).each(rng => editor.selection.setRng(rng));\n };\n\n const isEditorUIElement$1 = elm => {\n const className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n };\n const FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n const wrappedSetTimeout = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n const wrappedSetInterval = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setInterval(callback, time);\n };\n const Delay = {\n setEditorTimeout: (editor, callback, time) => {\n return wrappedSetTimeout(() => {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: (editor, callback, time) => {\n const timer = wrappedSetInterval(() => {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n }\n };\n\n const isManualNodeChange = e => {\n return e.type === 'nodechange' && e.selectionChange;\n };\n const registerPageMouseUp = (editor, throttledStore) => {\n const mouseUpPage = () => {\n throttledStore.throttle();\n };\n DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n editor.on('remove', () => {\n DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n });\n };\n const registerMouseUp = (editor, throttledStore) => {\n editor.on('mouseup touchend', _e => {\n throttledStore.throttle();\n });\n };\n const registerEditorEvents = (editor, throttledStore) => {\n registerMouseUp(editor, throttledStore);\n editor.on('keyup NodeChange AfterSetSelectionRange', e => {\n if (!isManualNodeChange(e)) {\n store(editor);\n }\n });\n };\n const register$6 = editor => {\n const throttledStore = first$1(() => {\n store(editor);\n }, 0);\n editor.on('init', () => {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', () => {\n throttledStore.cancel();\n });\n };\n\n let documentFocusInHandler;\n const DOM$9 = DOMUtils.DOM;\n const isEditorUIElement = elm => {\n return isElement$6(elm) && FocusManager.isEditorUIElement(elm);\n };\n const isEditorContentAreaElement = elm => {\n const 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 const isUIElement = (editor, elm) => {\n const customSelector = getCustomUiSelector(editor);\n const parent = DOM$9.getParent(elm, elm => {\n return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n const getActiveElement = editor => {\n try {\n const root = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(root).fold(() => document.body, x => x.dom);\n } catch (ex) {\n return document.body;\n }\n };\n const registerEvents$1 = (editorManager, e) => {\n const editor = e.editor;\n register$6(editor);\n editor.on('focusin', () => {\n const focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== editor) {\n if (focusedEditor) {\n focusedEditor.dispatch('blur', { focusedEditor: editor });\n }\n editorManager.setActive(editor);\n editorManager.focusedEditor = editor;\n editor.dispatch('focus', { blurredEditor: focusedEditor });\n editor.focus(true);\n }\n });\n editor.on('focusout', () => {\n Delay.setEditorTimeout(editor, () => {\n const focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n editor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = e => {\n const activeEditor = editorManager.activeEditor;\n if (activeEditor) {\n getOriginalEventTarget(e).each(target => {\n const elem = target;\n if (elem.ownerDocument === document) {\n if (elem !== document.body && !isUIElement(activeEditor, elem) && editorManager.focusedEditor === activeEditor) {\n activeEditor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n });\n }\n };\n DOM$9.bind(document, 'focusin', documentFocusInHandler);\n }\n };\n const unregisterDocumentEvents = (editorManager, e) => {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor && documentFocusInHandler) {\n DOM$9.unbind(document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n const setup$v = editorManager => {\n editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n\n const getContentEditableHost = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'true');\n const getCollapsedNode = rng => rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n const getFocusInElement = (root, rng) => getCollapsedNode(rng).bind(node => {\n if (isTableSection(node)) {\n return Optional.some(node);\n } else if (!contains(root, node)) {\n return Optional.some(root);\n } else {\n return Optional.none();\n }\n });\n const normalizeSelection = (editor, rng) => {\n getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(elm => {\n return firstPositionIn(elm.dom);\n }).fold(() => {\n editor.selection.normalize();\n }, caretPos => editor.selection.setRng(caretPos.toRange()));\n };\n const focusBody = 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 const hasElementFocus = elm => hasFocus$1(elm) || search(elm).isSome();\n const hasIframeFocus = editor => isNonNullable(editor.iframeElement) && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n const hasInlineFocus = editor => {\n const rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n const hasUiFocus = editor => {\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(dos).filter(elem => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n };\n const hasFocus = editor => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n const hasEditorOrUiFocus = editor => hasFocus(editor) || hasUiFocus(editor);\n const focusEditor = editor => {\n const selection = editor.selection;\n const body = editor.getBody();\n let rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n getRng(editor).each(bookmarkRng => {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {\n focusBody(contentEditableHost);\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (!editor.inline) {\n if (!Env.browser.isOpera()) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.browser.isFirefox() || editor.inline) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n const activateEditor = editor => editor.editorManager.setActive(editor);\n const focus = (editor, skipFocus) => {\n if (editor.removed) {\n return;\n }\n if (skipFocus) {\n activateEditor(editor);\n } else {\n focusEditor(editor);\n }\n };\n\n const getEndpointElement = (root, rng, start, real, resolve) => {\n const container = start ? rng.startContainer : rng.endContainer;\n const offset = start ? rng.startOffset : rng.endOffset;\n return Optional.from(container).map(SugarElement.fromDom).map(elm => !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm).bind(elm => isElement$7(elm) ? Optional.some(elm) : parent(elm).filter(isElement$7)).map(elm => elm.dom).getOr(root);\n };\n const getStart = (root, rng, real = false) => getEndpointElement(root, rng, true, real, (elm, offset) => Math.min(childNodesCount(elm), offset));\n const getEnd$1 = (root, rng, real = false) => getEndpointElement(root, rng, false, real, (elm, offset) => offset > 0 ? offset - 1 : offset);\n const skipEmptyTextNodes = (node, forwards) => {\n const orig = node;\n while (node && isText$a(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n const getNode = (root, rng) => {\n if (!rng) {\n return root;\n }\n let startContainer = rng.startContainer;\n let endContainer = rng.endContainer;\n const startOffset = rng.startOffset;\n const endOffset = rng.endOffset;\n let node = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n node = startContainer.childNodes[startOffset];\n }\n }\n }\n if (isText$a(startContainer) && isText$a(endContainer)) {\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 node = startContainer;\n }\n }\n }\n const elm = isText$a(node) ? node.parentNode : node;\n return isElement$6(elm) ? elm : root;\n };\n const getSelectedBlocks = (dom, rng, startElm, endElm) => {\n const selectedBlocks = [];\n const root = dom.getRoot();\n const start = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n const end = dom.getParent(endElm || getEnd$1(root, rng, rng.collapsed), dom.isBlock);\n if (start && start !== root) {\n selectedBlocks.push(start);\n }\n if (start && end && start !== end) {\n let node = start;\n const walker = new DomTreeWalker(start, root);\n while ((node = walker.next()) && node !== end) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (end && start !== end && end !== root) {\n selectedBlocks.push(end);\n }\n return selectedBlocks;\n };\n const select = (dom, node, content) => Optional.from(node).bind(node => Optional.from(node.parentNode).map(parent => {\n const idx = dom.nodeIndex(node);\n const rng = dom.createRng();\n rng.setStart(parent, idx);\n rng.setEnd(parent, idx + 1);\n if (content) {\n moveEndPoint(dom, rng, node, true);\n moveEndPoint(dom, rng, node, false);\n }\n return rng;\n }));\n\n const processRanges = (editor, ranges) => map$3(ranges, range => {\n const evt = editor.dispatch('GetSelectionRange', { range });\n return evt.range !== range ? evt.range : range;\n });\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$1(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem));\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children = children$1(element);\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n const autocompleteSelector = '[data-mce-autocompleter]';\n const create$9 = (editor, range) => {\n if (findIn(SugarElement.fromDom(editor.getBody())).isNone()) {\n const wrapper = SugarElement.fromHtml('<span data-mce-autocompleter=\"1\" data-mce-bogus=\"1\"></span>', editor.getDoc());\n append$1(wrapper, SugarElement.fromDom(range.extractContents()));\n range.insertNode(wrapper.dom);\n parent(wrapper).each(elm => elm.dom.normalize());\n last(wrapper).map(last => {\n editor.selection.setCursorLocation(last.dom, getEnd(last));\n });\n }\n };\n const detect$1 = elm => closest$3(elm, autocompleteSelector);\n const findIn = elm => descendant(elm, autocompleteSelector);\n const remove$3 = (editor, elm) => findIn(elm).each(wrapper => {\n const bookmark = editor.selection.getBookmark();\n unwrap(wrapper);\n editor.selection.moveToBookmark(bookmark);\n });\n\n const typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n const walk$2 = (node, root, prev) => {\n const startName = prev ? 'lastChild' : 'firstChild';\n const siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let parent = node.parent; parent && parent !== root; parent = parent.parent) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n return undefined;\n };\n const isEmptyTextNode = node => {\n var _a;\n const text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n if (!isWhitespaceText(text)) {\n return false;\n }\n const parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(text)) {\n return false;\n }\n return true;\n };\n const isNonEmptyElement = node => {\n const 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 class AstNode {\n constructor(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n static create(name, attrs) {\n const node = new AstNode(name, typeLookup[name] || 1);\n if (attrs) {\n each$d(attrs, (value, attrName) => {\n node.attr(attrName, value);\n });\n }\n return node;\n }\n replace(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n }\n attr(name, value) {\n const self = this;\n if (!isString(name)) {\n if (isNonNullable(name)) {\n each$d(name, (value, key) => {\n self.attr(key, value);\n });\n }\n return self;\n }\n const attrs = self.attributes;\n if (attrs) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n let 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 let 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,\n value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n return undefined;\n }\n clone() {\n const self = this;\n const clone = new AstNode(self.name, self.type);\n const selfAttrs = self.attributes;\n if (selfAttrs) {\n const cloneAttrs = [];\n cloneAttrs.map = {};\n for (let i = 0, l = selfAttrs.length; i < l; i++) {\n const 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 return clone;\n }\n wrap(wrapper) {\n const self = this;\n if (self.parent) {\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n }\n return self;\n }\n unwrap() {\n const self = this;\n for (let node = self.firstChild; node;) {\n const next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n }\n remove() {\n const 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 if (prev) {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else if (next) {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n }\n append(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n const 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 insert(node, refNode, before) {\n if (node.parent) {\n node.remove();\n }\n const parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else if (refNode.prev) {\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 if (refNode.next) {\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 getAll(name) {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n }\n children() {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = node.next) {\n collection.push(node);\n }\n return collection;\n }\n empty() {\n const self = this;\n if (self.firstChild) {\n const nodes = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n let i = nodes.length;\n while (i--) {\n const 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 isEmpty(elements, whitespace = {}, predicate) {\n var _a;\n const self = this;\n let 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((_a = node.value) !== null && _a !== void 0 ? _a : '')) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n }\n walk(prev) {\n return walk$2(this, null, prev);\n }\n }\n\n const isConditionalComment = (html, startIndex) => /^\\s*\\[if [\\w\\W]+\\]>.*<!\\[endif\\](--!?)?>/.test(html.substr(startIndex));\n const findCommentEndIndex = (html, isBogus, startIndex = 0) => {\n const lcHtml = html.toLowerCase();\n if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n const endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n return lcHtml.indexOf('>', endIfIndex);\n } else {\n if (isBogus) {\n const endIndex = lcHtml.indexOf('>', startIndex);\n return endIndex !== -1 ? endIndex : lcHtml.length;\n } else {\n const endCommentRegexp = /--!?>/g;\n endCommentRegexp.lastIndex = startIndex;\n const match = endCommentRegexp.exec(html);\n return match ? match.index + match[0].length : lcHtml.length;\n }\n }\n };\n const findMatchingEndTagIndex = (schema, html, startIndex) => {\n const startTagRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g;\n const endTagRegExp = /(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n const voidElements = schema.getVoidElements();\n let count = 1, index = startIndex;\n while (count !== 0) {\n startTagRegExp.lastIndex = index;\n while (true) {\n const 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 const 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(voidElements, startMatch[2])) {\n count += 1;\n }\n index = startTagRegExp.lastIndex + endMatch[0].length;\n break;\n }\n }\n }\n return index;\n };\n const trimHtml$1 = (tempAttrs, html) => {\n const trimContentRegExp = new RegExp(['\\\\s?(' + tempAttrs.join('|') + ')=\"[^\"]+\"'].join('|'), 'gi');\n return html.replace(trimContentRegExp, '');\n };\n const trimInternal = (serializer, html) => {\n const bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n const schema = serializer.schema;\n let content = trimHtml$1(serializer.getTempAttrs(), html);\n const voidElements = schema.getVoidElements();\n let matches;\n while (matches = bogusAllRegExp.exec(content)) {\n const index = bogusAllRegExp.lastIndex;\n const matchLength = matches[0].length;\n let endTagIndex;\n if (voidElements[matches[1]]) {\n endTagIndex = index;\n } else {\n endTagIndex = findMatchingEndTagIndex(schema, content, index);\n }\n content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n bogusAllRegExp.lastIndex = index - matchLength;\n }\n return trim$1(content);\n };\n const trimExternal = trimInternal;\n\n const cleanupBogusElements = parent => {\n const bogusElements = descendants(parent, '[data-mce-bogus]');\n each$e(bogusElements, elem => {\n const bogusValue = get$9(elem, 'data-mce-bogus');\n if (bogusValue === 'all') {\n remove$6(elem);\n } else if (isBr$5(elem)) {\n before$3(elem, SugarElement.fromText(zeroWidth));\n remove$6(elem);\n } else {\n unwrap(elem);\n }\n });\n };\n const cleanupInputNames = parent => {\n const inputs = descendants(parent, 'input');\n each$e(inputs, input => {\n remove$b(input, 'name');\n });\n };\n\n const trimEmptyContents = (editor, html) => {\n const blockName = getForcedRootBlock(editor);\n const emptyRegExp = new RegExp(`^(<${ blockName }[^>]*>( | |\\\\s|\\u00a0|<br \\\\/>|)<\\\\/${ blockName }>[\\r\\n]*|<br \\\\/>[\\r\\n]*)$`);\n return html.replace(emptyRegExp, '');\n };\n const getPlainTextContent = (editor, body) => {\n const doc = editor.getDoc();\n const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n const offscreenDiv = SugarElement.fromTag('div', doc);\n set$2(offscreenDiv, 'data-mce-bogus', 'all');\n setAll(offscreenDiv, {\n position: 'fixed',\n left: '-9999999px',\n top: '0'\n });\n set(offscreenDiv, body.innerHTML);\n cleanupBogusElements(offscreenDiv);\n cleanupInputNames(offscreenDiv);\n const root = getContentContainer(dos);\n append$1(root, offscreenDiv);\n const content = trim$1(offscreenDiv.dom.innerText);\n remove$6(offscreenDiv);\n return content;\n };\n const getContentFromBody = (editor, args, body) => {\n let content;\n if (args.format === 'raw') {\n content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = getPlainTextContent(editor, body);\n } else if (args.format === 'tree') {\n content = editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n const shouldTrim = args.format !== 'text' && !isWsPreserveElement(SugarElement.fromDom(body));\n return shouldTrim && isString(content) ? Tools.trim(content) : content;\n };\n const getContentInternal = (editor, args) => Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), body => getContentFromBody(editor, args, body));\n\n const makeMap$1 = Tools.makeMap;\n const Writer = settings => {\n const html = [];\n settings = settings || {};\n const indent = settings.indent;\n const indentBefore = makeMap$1(settings.indent_before || '');\n const indentAfter = makeMap$1(settings.indent_after || '');\n const encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n const htmlOutput = settings.element_format !== 'xhtml';\n return {\n start: (name, attrs, empty) => {\n if (indent && indentBefore[name] && html.length > 0) {\n const 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 (let i = 0, l = attrs.length; i < l; i++) {\n const 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 const value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: name => {\n let value;\n html.push('</', name, '>');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: (text, raw) => {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: text => {\n html.push('<![CDATA[', text, ']]>');\n },\n comment: text => {\n html.push('<!--', text, '-->');\n },\n pi: (name, text) => {\n if (text) {\n html.push('<?', name, ' ', encode(text), '?>');\n } else {\n html.push('<?', name, '?>');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: text => {\n html.push('<!DOCTYPE', text, '>', indent ? '\\n' : '');\n },\n reset: () => {\n html.length = 0;\n },\n getContent: () => {\n return html.join('').replace(/\\n$/, '');\n }\n };\n };\n\n const HtmlSerializer = (settings = {}, schema = Schema()) => {\n const writer = Writer(settings);\n settings.validate = 'validate' in settings ? settings.validate : true;\n const serialize = node => {\n const validate = settings.validate;\n const handlers = {\n 3: node => {\n var _a;\n writer.text((_a = node.value) !== null && _a !== void 0 ? _a : '', node.raw);\n },\n 8: node => {\n var _a;\n writer.comment((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 7: node => {\n writer.pi(node.name, node.value);\n },\n 10: node => {\n var _a;\n writer.doctype((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 4: node => {\n var _a;\n writer.cdata((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 11: node => {\n let tempNode = node;\n if (tempNode = tempNode.firstChild) {\n do {\n walk(tempNode);\n } while (tempNode = tempNode.next);\n }\n }\n };\n writer.reset();\n const walk = node => {\n var _a;\n const handler = handlers[node.type];\n if (!handler) {\n const name = node.name;\n const isEmpty = name in schema.getVoidElements();\n let attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n const sortedAttrs = [];\n sortedAttrs.map = {};\n const elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (let i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n const attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n const attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (let i = 0, l = attrs.length; i < l; i++) {\n const attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n const 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(name, attrs, isEmpty);\n if (!isEmpty) {\n let child = node.firstChild;\n if (child) {\n if ((name === 'pre' || name === 'textarea') && child.type === 3 && ((_a = child.value) === null || _a === void 0 ? void 0 : _a[0]) === '\\n') {\n writer.text('\\n', true);\n }\n do {\n walk(child);\n } while (child = child.next);\n }\n writer.end(name);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else if (node.type === 3) {\n handlers[3](node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize };\n };\n\n const nonInheritableStyles = new Set();\n (() => {\n const 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$e(nonInheritableStylesArr, style => {\n nonInheritableStyles.add(style);\n });\n })();\n const shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n const getStyleProps = (dom, node) => keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n const isNonInheritableStyle = style => nonInheritableStyles.has(style);\n const hasInheritableStyles = (dom, node) => forall(getStyleProps(dom, node), style => !isNonInheritableStyle(style));\n const getLonghandStyleProps = styles => filter$5(styles, style => exists(shorthandStyleProps, prop => startsWith(style, prop)));\n const hasStyleConflict = (dom, node, parentNode) => {\n const nodeStyleProps = getStyleProps(dom, node);\n const parentNodeStyleProps = getStyleProps(dom, parentNode);\n const valueMismatch = prop => {\n var _a, _b;\n const nodeValue = (_a = dom.getStyle(node, prop)) !== null && _a !== void 0 ? _a : '';\n const parentValue = (_b = dom.getStyle(parentNode, prop)) !== null && _b !== void 0 ? _b : '';\n return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n };\n return exists(nodeStyleProps, nodeStyleProp => {\n const propExists = props => exists(props, prop => prop === nodeStyleProp);\n if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n const longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n return exists(longhandProps, valueMismatch);\n } else {\n return valueMismatch(nodeStyleProp);\n }\n });\n };\n\n const isChar = (forward, predicate, pos) => Optional.from(pos.container()).filter(isText$a).exists(text => {\n const delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n const isBeforeSpace = curry(isChar, true, isWhiteSpace);\n const isAfterSpace = curry(isChar, false, isWhiteSpace);\n const isEmptyText = pos => {\n const container = pos.container();\n return isText$a(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n };\n const matchesElementPosition = (before, predicate) => pos => getChildNodeAtRelativeOffset(before ? 0 : -1, pos).filter(predicate).isSome();\n const isImageBlock = node => isImg(node) && get$7(SugarElement.fromDom(node), 'display') === 'block';\n const isCefNode = node => isContentEditableFalse$a(node) && !isBogusAll$1(node);\n const isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n const isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n const isBeforeMedia = matchesElementPosition(true, isMedia$2);\n const isAfterMedia = matchesElementPosition(false, isMedia$2);\n const isBeforeTable = matchesElementPosition(true, isTable$2);\n const isAfterTable = matchesElementPosition(false, isTable$2);\n const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n const dropLast = xs => xs.slice(0, -1);\n const parentsUntil = (start, root, predicate) => {\n if (contains(root, start)) {\n return dropLast(parents$1(start, elm => {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n const parents = (start, root) => parentsUntil(start, root, never);\n const parentsAndSelf = (start, root) => [start].concat(parents(start, root));\n\n const navigateIgnoreEmptyTextNodes = (forward, root, from) => navigateIgnore(forward, root, from, isEmptyText);\n const getClosestBlock$1 = (root, pos) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n const isAtBeforeAfterBlockBoundary = (forward, root, pos) => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => getClosestBlock$1(root, pos).fold(() => !isInSameBlock(newPos, pos, root.dom), fromBlock => !isInSameBlock(newPos, pos, root.dom) && contains(fromBlock, SugarElement.fromDom(newPos.container()))));\n const isAtBlockBoundary = (forward, root, pos) => getClosestBlock$1(root, pos).fold(() => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => !isInSameBlock(newPos, pos, root.dom)), parent => navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone());\n const isAtStartOfBlock = curry(isAtBlockBoundary, false);\n const isAtEndOfBlock = curry(isAtBlockBoundary, true);\n const isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n const isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n const isBr$1 = pos => getElementFromPosition(pos).exists(isBr$5);\n const findBr = (forward, root, pos) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n const scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr$1);\n };\n const isBeforeBr$1 = (root, pos) => getElementFromPosition(pos).exists(isBr$5) || findBr(true, root, pos).isSome();\n const isAfterBr = (root, pos) => getElementFromPrevPosition(pos).exists(isBr$5) || findBr(false, root, pos).isSome();\n const findPreviousBr = curry(findBr, false);\n const findNextBr = curry(findBr, true);\n\n const isInMiddleOfText = pos => CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n const getClosestBlock = (root, pos) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n return head(parentBlocks).getOr(root);\n };\n const hasSpaceBefore = (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 const hasSpaceAfter = (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 const isPreValue = value => contains$2([\n 'pre',\n 'pre-wrap'\n ], value);\n const isInPre = pos => getElementFromPosition(pos).bind(elm => closest$4(elm, isElement$7)).exists(elm => isPreValue(get$7(elm, 'white-space')));\n const isAtBeginningOfBody = (root, pos) => prevPosition(root.dom, pos).isNone();\n const isAtEndOfBody = (root, pos) => nextPosition(root.dom, pos).isNone();\n const isAtLineBoundary = (root, pos) => isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr$1(root, pos);\n const isCefBlock = node => isNonNullable(node) && isContentEditableFalse$a(node) && isBlockLike(node);\n const isSiblingCefBlock = (root, direction) => container => {\n return isCefBlock(new DomTreeWalker(container, root)[direction]());\n };\n const isBeforeCefBlock = (root, pos) => {\n const nextPos = nextPosition(root.dom, pos).getOr(pos);\n const isNextCefBlock = isSiblingCefBlock(root.dom, 'next');\n return pos.isAtEnd() && (isNextCefBlock(pos.container()) || isNextCefBlock(nextPos.container()));\n };\n const isAfterCefBlock = (root, pos) => {\n const prevPos = prevPosition(root.dom, pos).getOr(pos);\n const isPrevCefBlock = isSiblingCefBlock(root.dom, 'prev');\n return pos.isAtStart() && (isPrevCefBlock(pos.container()) || isPrevCefBlock(prevPos.container()));\n };\n const needsToHaveNbsp = (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 const needsToBeNbspLeft = (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) || isAfterCefBlock(root, pos);\n }\n };\n const leanRight = pos => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$a(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n const needsToBeNbspRight = (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) || isBeforeCefBlock(root, pos);\n }\n };\n const needsToBeNbsp = (root, pos) => needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos));\n const isNbspAt = (text, offset) => isNbsp(text.charAt(offset));\n const isWhiteSpaceAt = (text, offset) => isWhiteSpace(text.charAt(offset));\n const hasNbsp = pos => {\n const container = pos.container();\n return isText$a(container) && contains$1(container.data, nbsp);\n };\n const normalizeNbspMiddle = text => {\n const chars = text.split('');\n return map$3(chars, (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 const normalizeNbspAtStart = (root, node, makeNbsp) => {\n const text = node.data;\n const firstPos = CaretPosition(node, 0);\n if (!makeNbsp && isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, 0) && needsToBeNbspLeft(root, firstPos)) {\n node.data = nbsp + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspInMiddleOfTextNode = node => {\n const text = node.data;\n const newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspAtEnd = (root, node, makeNbsp) => {\n const text = node.data;\n const lastPos = CaretPosition(node, text.length - 1);\n if (!makeNbsp && isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, text.length - 1) && needsToBeNbspRight(root, lastPos)) {\n node.data = text.slice(0, -1) + nbsp;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbsps = (root, pos) => {\n const container = pos.container();\n if (!isText$a(container)) {\n return Optional.none();\n }\n if (hasNbsp(pos)) {\n const normalized = normalizeNbspAtStart(root, container, false) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container, false);\n return someIf(normalized, pos);\n } else if (needsToBeNbsp(root, pos)) {\n const normalized = normalizeNbspAtStart(root, container, true) || normalizeNbspAtEnd(root, container, true);\n return someIf(normalized, pos);\n } else {\n return Optional.none();\n }\n };\n const normalizeNbspsInEditor = editor => {\n const root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n const normalize$1 = (node, offset, count) => {\n if (count === 0) {\n return;\n }\n const elm = SugarElement.fromDom(node);\n const root = ancestor$3(elm, isBlock$2).getOr(elm);\n const whitespace = node.data.slice(offset, offset + count);\n const isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length));\n const isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0));\n node.replaceData(offset, count, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n };\n const normalizeWhitespaceAfter = (node, offset) => {\n const content = node.data.slice(offset);\n const whitespaceCount = content.length - lTrim(content).length;\n normalize$1(node, offset, whitespaceCount);\n };\n const normalizeWhitespaceBefore = (node, offset) => {\n const content = node.data.slice(0, offset);\n const whitespaceCount = content.length - rTrim(content).length;\n normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n const mergeTextNodes = (prevNode, nextNode, normalizeWhitespace, mergeToPrev = true) => {\n const whitespaceOffset = rTrim(prevNode.data).length;\n const newNode = mergeToPrev ? prevNode : nextNode;\n const removeNode = mergeToPrev ? nextNode : prevNode;\n if (mergeToPrev) {\n newNode.appendData(removeNode.data);\n } else {\n newNode.insertData(0, removeNode.data);\n }\n remove$6(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset);\n }\n return newNode;\n };\n\n const needsReposition = (pos, elm) => {\n const container = pos.container();\n const offset = pos.offset();\n return !CaretPosition.isTextPosition(pos) && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n };\n const reposition = (elm, pos) => needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n const beforeOrStartOf = node => isText$a(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n const afterOrEndOf = node => isText$a(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n const getPreviousSiblingCaretPosition = 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 const getNextSiblingCaretPosition = 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 const findCaretPositionBackwardsFromElm = (rootElement, elm) => {\n return Optional.from(elm.previousSibling ? elm.previousSibling : elm.parentNode).bind(node => prevPosition(rootElement, CaretPosition.before(node))).orThunk(() => nextPosition(rootElement, CaretPosition.after(elm)));\n };\n const findCaretPositionForwardsFromElm = (rootElement, elm) => nextPosition(rootElement, CaretPosition.after(elm)).orThunk(() => prevPosition(rootElement, CaretPosition.before(elm)));\n const findCaretPositionBackwards = (rootElement, elm) => getPreviousSiblingCaretPosition(elm).orThunk(() => getNextSiblingCaretPosition(elm)).orThunk(() => findCaretPositionBackwardsFromElm(rootElement, elm));\n const findCaretPositionForward = (rootElement, elm) => getNextSiblingCaretPosition(elm).orThunk(() => getPreviousSiblingCaretPosition(elm)).orThunk(() => findCaretPositionForwardsFromElm(rootElement, elm));\n const findCaretPosition = (forward, rootElement, elm) => forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n const findCaretPosOutsideElmAfterDelete = (forward, rootElement, elm) => findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n const setSelection$1 = (editor, forward, pos) => {\n pos.fold(() => {\n editor.focus();\n }, pos => {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n const eqRawNode = rawNode => elm => elm.dom === rawNode;\n const isBlock = (editor, elm) => elm && has$2(editor.schema.getBlockElements(), name(elm));\n const paddEmptyBlock = elm => {\n if (isEmpty$2(elm)) {\n const br = SugarElement.fromHtml('<br data-mce-bogus=\"1\">');\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 const deleteNormalized = (elm, afterDeletePosOpt, normalizeWhitespace) => {\n const prevTextOpt = prevSibling(elm).filter(isText$b);\n const nextTextOpt = nextSibling(elm).filter(isText$b);\n remove$6(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, (prev, next, pos) => {\n const prevNode = prev.dom, nextNode = next.dom;\n const offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n }).orThunk(() => {\n if (normalizeWhitespace) {\n prevTextOpt.each(elm => normalizeWhitespaceBefore(elm.dom, elm.dom.length));\n nextTextOpt.each(elm => normalizeWhitespaceAfter(elm.dom, 0));\n }\n return afterDeletePosOpt;\n });\n };\n const isInlineElement = (editor, element) => has$2(editor.schema.getTextInlineElements(), name(element));\n const deleteElement$2 = (editor, forward, elm, moveCaret = true) => {\n const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n const parentBlock = ancestor$3(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n const 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(() => {\n if (moveCaret) {\n setSelection$1(editor, forward, normalizedAfterDeletePos);\n }\n }, paddPos => {\n if (moveCaret) {\n setSelection$1(editor, forward, Optional.some(paddPos));\n }\n });\n }\n };\n\n const strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n const hasStrongRtl = text => strongRtl.test(text);\n\n const isInlineTarget = (editor, elm) => is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor)) && !isTransparentBlock(editor.schema, elm);\n const isRtl = element => {\n var _a;\n return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl((_a = element.textContent) !== null && _a !== void 0 ? _a : '');\n };\n const findInlineParents = (isInlineTarget, rootNode, pos) => filter$5(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n const findRootInline = (isInlineTarget, rootNode, pos) => {\n const parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Optional.from(parents[parents.length - 1]);\n };\n const hasSameParentBlock = (rootNode, node1, node2) => {\n const block1 = getParentBlock$3(node1, rootNode);\n const block2 = getParentBlock$3(node2, rootNode);\n return isNonNullable(block1) && block1 === block2;\n };\n const isAtZwsp = pos => isBeforeInline(pos) || isAfterInline(pos);\n const normalizePosition = (forward, pos) => {\n const container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (isText$a(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$a(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 const normalizeForwards = curry(normalizePosition, true);\n const normalizeBackwards = curry(normalizePosition, false);\n\n const execCommandIgnoreInputEvents = (editor, command) => {\n const inputBlocker = e => e.stopImmediatePropagation();\n editor.on('beforeinput input', inputBlocker, true);\n editor.getDoc().execCommand(command);\n editor.off('beforeinput input', inputBlocker);\n };\n const execEditorDeleteCommand = editor => {\n editor.execCommand('delete');\n };\n const execNativeDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'Delete');\n const execNativeForwardDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'ForwardDelete');\n const isBeforeRoot = rootNode => elm => is$2(parent(elm), rootNode, eq);\n const isTextBlockOrListItem = element => isTextBlock$2(element) || isListItem$1(element);\n const getParentBlock$2 = (rootNode, elm) => {\n if (contains(rootNode, elm)) {\n return closest$4(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n } else {\n return Optional.none();\n }\n };\n const paddEmptyBody = (editor, moveSelection = true) => {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('', { no_selection: !moveSelection });\n }\n };\n const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n const normalizedFirstPos = normalizePosition(true, firstPos);\n const normalizedLastPos = normalizePosition(false, lastPos);\n const normalizedFromPos = normalizePosition(false, fromPos);\n if (forward) {\n return nextPosition(elm, normalizedFromPos).exists(nextPos => nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos));\n } else {\n return prevPosition(elm, normalizedFromPos).exists(prevPos => prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos));\n }\n }).getOr(true);\n const freefallRtl = root => {\n const child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(() => Optional.some(root));\n };\n const deleteRangeContents = (editor, rng, root, moveSelection = true) => {\n var _a;\n rng.deleteContents();\n const lastNode = freefallRtl(root).getOr(root);\n const lastBlock = SugarElement.fromDom((_a = editor.dom.getParent(lastNode.dom, editor.dom.isBlock)) !== null && _a !== void 0 ? _a : root.dom);\n if (lastBlock.dom === editor.getBody()) {\n paddEmptyBody(editor, moveSelection);\n } else if (isEmpty$2(lastBlock)) {\n fillWithPaddingBr(lastBlock);\n if (moveSelection) {\n editor.selection.setCursorLocation(lastBlock.dom, 0);\n }\n }\n if (!eq(root, lastBlock)) {\n const additionalCleanupNodes = is$2(parent(lastBlock), root) ? [] : siblings(lastBlock);\n each$e(additionalCleanupNodes.concat(children$1(root)), node => {\n if (!eq(node, lastBlock) && !contains(node, lastBlock) && isEmpty$2(node)) {\n remove$6(node);\n }\n });\n }\n };\n\n const isRootFromElement = root => cur => eq(root, cur);\n const getTableCells = table => descendants(table, 'td,th');\n const getTableDetailsFromRange = (rng, isRoot) => {\n const getTable = node => getClosestTable(SugarElement.fromDom(node), isRoot);\n const startTable = getTable(rng.startContainer);\n const endTable = getTable(rng.endContainer);\n const isStartInTable = startTable.isSome();\n const isEndInTable = endTable.isSome();\n const isSameTable = lift2(startTable, endTable, eq).getOr(false);\n const isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n return {\n startTable,\n endTable,\n isStartInTable,\n isEndInTable,\n isSameTable,\n isMultiTable\n };\n };\n\n const tableCellRng = (start, end) => ({\n start,\n end\n });\n const tableSelection = (rng, table, cells) => ({\n rng,\n table,\n cells\n });\n const 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 const getClosestCell$1 = (container, isRoot) => closest$3(SugarElement.fromDom(container), 'td,th', isRoot);\n const isExpandedCellRng = cellRng => !eq(cellRng.start, cellRng.end);\n const getTableFromCellRng = (cellRng, isRoot) => getClosestTable(cellRng.start, isRoot).bind(startParentTable => getClosestTable(cellRng.end, isRoot).bind(endParentTable => someIf(eq(startParentTable, endParentTable), startParentTable)));\n const isSingleCellTable = (cellRng, isRoot) => !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(table => {\n const rows = table.dom.rows;\n return rows.length === 1 && rows[0].cells.length === 1;\n });\n const getCellRng = (rng, isRoot) => {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n const getCellRangeFromStartTable = isRoot => startCell => getClosestTable(startCell, isRoot).bind(table => last$3(getTableCells(table)).map(endCell => tableCellRng(startCell, endCell)));\n const getCellRangeFromEndTable = isRoot => endCell => getClosestTable(endCell, isRoot).bind(table => head(getTableCells(table)).map(startCell => tableCellRng(startCell, endCell)));\n const getTableSelectionFromCellRng = isRoot => cellRng => getTableFromCellRng(cellRng, isRoot).map(table => tableSelection(cellRng, table, getTableCells(table)));\n const getTableSelections = (cellRng, selectionDetails, rng, isRoot) => {\n if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n return Optional.none();\n } else if (selectionDetails.isSameTable) {\n const sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: sameTableSelection,\n end: sameTableSelection\n });\n } else {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n const startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n const endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: startTableSelection,\n end: endTableSelection\n });\n }\n };\n const getCellIndex = (cells, cell) => findIndex$2(cells, x => eq(x, cell));\n const getSelectedCells = tableSelection => lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), (startIndex, endIndex) => tableSelection.cells.slice(startIndex, endIndex + 1));\n const isSingleCellTableContentSelected = (optCellRng, rng, isRoot) => optCellRng.exists(cellRng => isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng));\n const unselectCells = (rng, selectionDetails) => {\n const {startTable, endTable} = selectionDetails;\n const otherContentRng = rng.cloneRange();\n startTable.each(table => otherContentRng.setStartAfter(table.dom));\n endTable.each(table => otherContentRng.setEndBefore(table.dom));\n return otherContentRng;\n };\n const handleSingleTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => start.or(end)).bind(tableSelection => {\n const {isSameTable} = selectionDetails;\n const 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 const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.some({\n ...selectionDetails,\n rng: otherContentRng\n })));\n }\n } else {\n return Optional.none();\n }\n });\n const handleMultiTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => {\n const startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n const endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n } else {\n return Optional.none();\n }\n });\n const getActionFromRange = (root, rng) => {\n const isRoot = isRootFromElement(root);\n const optCellRng = getCellRng(rng, isRoot);\n const selectionDetails = getTableDetailsFromRange(rng, isRoot);\n if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n return optCellRng.map(cellRng => deleteAction.singleCellTable(rng, cellRng.start));\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 const cleanCells = cells => each$e(cells, cell => {\n remove$b(cell, 'contenteditable');\n fillWithPaddingBr(cell);\n });\n const getOutsideBlock = (editor, container) => Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n const handleEmptyBlock = (editor, startInTable, emptyBlock) => {\n emptyBlock.each(block => {\n if (startInTable) {\n remove$6(block);\n } else {\n fillWithPaddingBr(block);\n editor.selection.setCursorLocation(block.dom, 0);\n }\n });\n };\n const deleteContentInsideCell = (editor, cell, rng, isFirstCellInSelection) => {\n const insideTableRng = rng.cloneRange();\n if (isFirstCellInSelection) {\n insideTableRng.setStart(rng.startContainer, rng.startOffset);\n insideTableRng.setEndAfter(cell.dom.lastChild);\n } else {\n insideTableRng.setStartBefore(cell.dom.firstChild);\n insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n }\n deleteCellContents(editor, insideTableRng, cell, false).each(action => action());\n };\n const collapseAndRestoreCellSelection = editor => {\n const selectedCells = getCellsFromEditor(editor);\n const selectedNode = SugarElement.fromDom(editor.selection.getNode());\n if (isTableCell$3(selectedNode.dom) && isEmpty$2(selectedNode)) {\n editor.selection.setCursorLocation(selectedNode.dom, 0);\n } else {\n editor.selection.collapse(true);\n }\n if (selectedCells.length > 1 && exists(selectedCells, cell => eq(cell, selectedNode))) {\n set$2(selectedNode, 'data-mce-selected', '1');\n }\n };\n const emptySingleTableCells = (editor, cells, outsideDetails) => Optional.some(() => {\n const editorRng = editor.selection.getRng();\n const cellsToClean = outsideDetails.bind(({rng, isStartInTable}) => {\n const outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n rng.deleteContents();\n handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n const endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n if (!isEmpty$2(endPointCell)) {\n return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n } else {\n return Optional.none();\n }\n }).getOr(cells);\n cleanCells(cellsToClean);\n collapseAndRestoreCellSelection(editor);\n });\n const emptyMultiTableCells = (editor, startTableCells, endTableCells, betweenRng) => Optional.some(() => {\n const rng = editor.selection.getRng();\n const startCell = startTableCells[0];\n const endCell = endTableCells[endTableCells.length - 1];\n deleteContentInsideCell(editor, startCell, rng, true);\n deleteContentInsideCell(editor, endCell, rng, false);\n const startTableCellsToClean = isEmpty$2(startCell) ? startTableCells : startTableCells.slice(1);\n const endTableCellsToClean = isEmpty$2(endCell) ? endTableCells : endTableCells.slice(0, -1);\n cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n betweenRng.deleteContents();\n collapseAndRestoreCellSelection(editor);\n });\n const deleteCellContents = (editor, rng, cell, moveSelection = true) => Optional.some(() => {\n deleteRangeContents(editor, rng, cell, moveSelection);\n });\n const deleteTableElement = (editor, table) => Optional.some(() => deleteElement$2(editor, false, table));\n const deleteCellRange = (editor, rootElm, rng) => getActionFromRange(rootElm, rng).bind(action => action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor)));\n const deleteCaptionRange = (editor, caption) => emptyElement(editor, caption);\n const deleteTableRange = (editor, rootElm, rng, startElm) => getParentCaption(rootElm, startElm).fold(() => deleteCellRange(editor, rootElm, rng), caption => deleteCaptionRange(editor, caption));\n const deleteRange$2 = (editor, startElm, selectedCells) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const rng = editor.selection.getRng();\n return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n const getParentCell = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTableCell$2);\n const getParentCaption = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTag('caption'));\n const deleteBetweenCells = (editor, rootElm, forward, fromCell, from) => navigate(forward, editor.getBody(), from).bind(to => getParentCell(rootElm, SugarElement.fromDom(to.getNode())).bind(toCell => eq(toCell, fromCell) ? Optional.none() : Optional.some(noop)));\n const emptyElement = (editor, elm) => Optional.some(() => {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom, 0);\n });\n const isDeleteOfLastCharPos = (fromCaption, forward, from, to) => firstPositionIn(fromCaption.dom).bind(first => lastPositionIn(fromCaption.dom).map(last => forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first))).getOr(true);\n const emptyCaretCaption = (editor, elm) => emptyElement(editor, elm);\n const validateCaretCaption = (rootElm, fromCaption, to) => getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).fold(() => Optional.some(noop), toCaption => someIf(!eq(toCaption, fromCaption), noop));\n const deleteCaretInsideCaption = (editor, rootElm, forward, fromCaption, from) => navigate(forward, editor.getBody(), from).fold(() => Optional.some(noop), to => isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to));\n const deleteCaretCells = (editor, forward, rootElm, startElm) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(fromCell => isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from));\n };\n const deleteCaretCaption = (editor, forward, rootElm, fromCaption) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n const isNearTable = (forward, pos) => forward ? isBeforeTable(pos) : isAfterTable(pos);\n const isBeforeOrAfterTable = (editor, forward) => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(pos => isNearTable(forward, pos));\n };\n const deleteCaret$3 = (editor, forward, startElm) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), fromCaption => deleteCaretCaption(editor, forward, rootElm, fromCaption));\n };\n const backspaceDelete$9 = (editor, forward) => {\n const startElm = SugarElement.fromDom(editor.selection.getStart(true));\n const cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$2(editor, startElm, cells);\n };\n\n const getContentEditableRoot$1 = (root, node) => {\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n if (isContentEditableTrue$3(tempNode) || isContentEditableFalse$a(tempNode)) {\n return tempNode;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n\n const internalAttributesPrefixes = [\n 'data-ephox-',\n 'data-mce-',\n 'data-alloy-',\n 'data-snooker-',\n '_'\n ];\n const each$9 = Tools.each;\n const ElementUtils = editor => {\n const dom = editor.dom;\n const internalAttributes = new Set(editor.serializer.getTempAttrs());\n const compare = (node1, node2) => {\n if (node1.nodeName !== node2.nodeName || node1.nodeType !== node2.nodeType) {\n return false;\n }\n const getAttribs = node => {\n const attribs = {};\n each$9(dom.getAttribs(node), attr => {\n const name = attr.nodeName.toLowerCase();\n if (name !== 'style' && !isAttributeInternal(name)) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n const compareObjects = (obj1, obj2) => {\n for (const name in obj1) {\n if (has$2(obj1, name)) {\n const value = obj2[name];\n if (isUndefined(value)) {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (const name in obj2) {\n if (has$2(obj2, name)) {\n return false;\n }\n }\n return true;\n };\n if (isElement$6(node1) && isElement$6(node2)) {\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 }\n return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n const isAttributeInternal = attributeName => exists(internalAttributesPrefixes, value => startsWith(attributeName, value)) || internalAttributes.has(attributeName);\n return {\n compare,\n isAttributeInternal\n };\n };\n\n const traverse = (root, fn) => {\n let node = root;\n while (node = node.walk()) {\n fn(node);\n }\n };\n const matchNode$1 = (nodeFilters, attributeFilters, node, matches) => {\n const name = node.name;\n for (let ni = 0, nl = nodeFilters.length; ni < nl; ni++) {\n const filter = nodeFilters[ni];\n if (filter.name === name) {\n const match = matches.nodes[name];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.nodes[name] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n if (node.attributes) {\n for (let ai = 0, al = attributeFilters.length; ai < al; ai++) {\n const filter = attributeFilters[ai];\n const attrName = filter.name;\n if (attrName in node.attributes.map) {\n const match = matches.attributes[attrName];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.attributes[attrName] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n }\n };\n const findMatchingNodes = (nodeFilters, attributeFilters, node) => {\n const matches = {\n nodes: {},\n attributes: {}\n };\n if (node.firstChild) {\n traverse(node, childNode => {\n matchNode$1(nodeFilters, attributeFilters, childNode, matches);\n });\n }\n return matches;\n };\n const runFilters = (matches, args) => {\n const run = (matchRecord, filteringAttributes) => {\n each$d(matchRecord, match => {\n const nodes = from(match.nodes);\n each$e(match.filter.callbacks, callback => {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n const valueMatches = filteringAttributes ? node.attr(match.filter.name) !== undefined : node.name === match.filter.name;\n if (!valueMatches || isNullable(node.parent)) {\n nodes.splice(i, 1);\n }\n }\n if (nodes.length > 0) {\n callback(nodes, match.filter.name, args);\n }\n });\n });\n };\n run(matches.nodes, false);\n run(matches.attributes, true);\n };\n const filter$2 = (nodeFilters, attributeFilters, node, args = {}) => {\n const matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n runFilters(matches, args);\n };\n\n const paddEmptyNode = (args, isBlock, node) => {\n if (args.insert && isBlock(node)) {\n const astNode = new AstNode('br', 1);\n astNode.attr('data-mce-bogus', '1');\n node.empty().append(astNode);\n } else {\n node.empty().append(new AstNode('#text', 3)).value = nbsp;\n }\n };\n const isPaddedWithNbsp = node => {\n var _a;\n return hasOnlyChild(node, '#text') && ((_a = node === null || node === void 0 ? void 0 : node.firstChild) === null || _a === void 0 ? void 0 : _a.value) === nbsp;\n };\n const hasOnlyChild = (node, name) => {\n const firstChild = node === null || node === void 0 ? void 0 : node.firstChild;\n return isNonNullable(firstChild) && firstChild === node.lastChild && firstChild.name === name;\n };\n const isPadded = (schema, node) => {\n const rule = schema.getElementRule(node.name);\n return (rule === null || rule === void 0 ? void 0 : rule.paddEmpty) === true;\n };\n const isEmpty = (schema, nonEmptyElements, whitespaceElements, node) => node.isEmpty(nonEmptyElements, whitespaceElements, node => isPadded(schema, node));\n const isLineBreakNode = (node, isBlock) => isNonNullable(node) && (isBlock(node) || node.name === 'br');\n\n const removeOrUnwrapInvalidNode = (node, schema, originalNodeParent = node.parent) => {\n if (schema.getSpecialElements()[node.name]) {\n node.empty().remove();\n } else {\n const children = node.children();\n for (const childNode of children) {\n if (originalNodeParent && !schema.isValidChild(originalNodeParent.name, childNode.name)) {\n removeOrUnwrapInvalidNode(childNode, schema, originalNodeParent);\n }\n }\n node.unwrap();\n }\n };\n const cleanInvalidNodes = (nodes, schema, onCreate = noop) => {\n const textBlockElements = schema.getTextBlockElements();\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n const nonSplittableElements = Tools.makeMap('tr,td,th,tbody,thead,tfoot,table');\n const fixed = new Set();\n for (let ni = 0; ni < nodes.length; ni++) {\n const node = nodes[ni];\n let parent;\n let newParent;\n let tempNode;\n if (!node.parent || fixed.has(node)) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n let sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n fixed.add(sibling);\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap();\n continue;\n }\n const parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplittableElements[parent.name]; parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n if (schema.isValidChild(parent.name, node.name)) {\n parents.reverse();\n newParent = parents[0].clone();\n onCreate(newParent);\n let currentNode = newParent;\n for (let i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = parents[i].clone();\n onCreate(tempNode);\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (let childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n const nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n let 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') && sibling.firstChild) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n const wrapper = new AstNode('ul', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n const wrapper = new AstNode('div', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n }\n }\n };\n const hasClosest = (node, parentName) => {\n let tempNode = node;\n while (tempNode) {\n if (tempNode.name === parentName) {\n return true;\n }\n tempNode = tempNode.parent;\n }\n return false;\n };\n const isInvalid = (schema, node, parent = node.parent) => {\n if (parent && schema.children[node.name] && !schema.isValidChild(parent.name, node.name)) {\n return true;\n } else if (parent && node.name === 'a' && hasClosest(parent, 'a')) {\n return true;\n } else {\n return false;\n }\n };\n\n const createRange = (sc, so, ec, eo) => {\n const rng = document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n const normalizeBlockSelectionRange = rng => {\n const startPos = CaretPosition.fromRangeStart(rng);\n const endPos = CaretPosition.fromRangeEnd(rng);\n const rootNode = rng.commonAncestorContainer;\n return fromPosition(false, rootNode, endPos).map(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 const normalize = rng => rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n\n const hasOnlyOneChild$1 = node => {\n return isNonNullable(node.firstChild) && node.firstChild === node.lastChild;\n };\n const isPaddingNode = node => {\n return node.name === 'br' || node.value === nbsp;\n };\n const isPaddedEmptyBlock = (schema, node) => {\n const blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n };\n const isEmptyFragmentElement = (schema, node) => {\n const nonEmptyElements = schema.getNonEmptyElements();\n return isNonNullable(node) && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n const isListFragment = (schema, fragment) => {\n let firstChild = fragment.firstChild;\n let 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 === null || lastChild === void 0 ? void 0 : lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n const cleanupDomFragment = domFragment => {\n var _a, _b;\n const firstChild = domFragment.firstChild;\n const lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n (_a = firstChild.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n (_b = lastChild.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(lastChild);\n }\n return domFragment;\n };\n const toDomFragment = (dom, serializer, fragment) => {\n const html = serializer.serialize(fragment);\n const domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n const listItems = elm => {\n var _a;\n return filter$5((_a = elm === null || elm === void 0 ? void 0 : elm.childNodes) !== null && _a !== void 0 ? _a : [], child => {\n return child.nodeName === 'LI';\n });\n };\n const isPadding = node => {\n return node.data === nbsp || isBr$6(node);\n };\n const isListItemPadded = node => {\n return isNonNullable(node === null || node === void 0 ? void 0 : node.firstChild) && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n const isEmptyOrPadded = elm => {\n return !elm.firstChild || isListItemPadded(elm);\n };\n const trimListItems = elms => {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n const getParentLi = (dom, node) => {\n const parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n const isParentBlockLi = (dom, node) => {\n return !!getParentLi(dom, node);\n };\n const getSplit = (parentNode, rng) => {\n const beforeRng = rng.cloneRange();\n const afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n const findFirstIn = (node, rootNode) => {\n const caretPos = CaretPosition.before(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const findLastOf = (node, rootNode) => {\n const caretPos = CaretPosition.after(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const insertMiddle = (target, elms, rootNode, rng) => {\n const parts = getSplit(target, rng);\n const parentElm = target.parentNode;\n if (parentElm) {\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, li => {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n }\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n const insertBefore$1 = (target, elms, rootNode) => {\n const parentElm = target.parentNode;\n if (parentElm) {\n Tools.each(elms, elm => {\n parentElm.insertBefore(elm, target);\n });\n }\n return findFirstIn(target, rootNode);\n };\n const insertAfter$1 = (target, elms, rootNode, dom) => {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n const insertAtCaret$1 = (serializer, dom, rng, fragment) => {\n const domFragment = toDomFragment(dom, serializer, fragment);\n const liTarget = getParentLi(dom, rng.startContainer);\n const liElms = trimListItems(listItems(domFragment.firstChild));\n const BEGINNING = 1, END = 2;\n const rootNode = dom.getRoot();\n const isAt = location => {\n const caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(dom.getRoot());\n const newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n const newPosNode = newPos === null || newPos === void 0 ? void 0 : newPos.getNode();\n return newPosNode ? getParentLi(dom, newPosNode) !== liTarget : true;\n };\n if (!liTarget) {\n return null;\n } else if (isAt(BEGINNING)) {\n return insertBefore$1(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$1(liTarget, liElms, rootNode, dom);\n } else {\n return insertMiddle(liTarget, liElms, rootNode, rng);\n }\n };\n\n const mergeableWrappedElements = ['pre'];\n const shouldPasteContentOnly = (dom, fragment, parentNode, root) => {\n var _a;\n const firstNode = fragment.firstChild;\n const lastNode = fragment.lastChild;\n const last = lastNode.attr('data-mce-type') === 'bookmark' ? lastNode.prev : lastNode;\n const isPastingSingleElement = firstNode === last;\n const isWrappedElement = contains$2(mergeableWrappedElements, firstNode.name);\n if (isPastingSingleElement && isWrappedElement) {\n const isContentEditable = firstNode.attr('contenteditable') !== 'false';\n const isPastingInTheSameBlockTag = ((_a = dom.getParent(parentNode, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === firstNode.name;\n const isPastingInContentEditable = Optional.from(getContentEditableRoot$1(root, parentNode)).forall(isContentEditableTrue$3);\n return isContentEditable && isPastingInTheSameBlockTag && isPastingInContentEditable;\n } else {\n return false;\n }\n };\n const isTableCell = isTableCell$3;\n const isTableCellContentSelected = (dom, rng, cell) => {\n if (isNonNullable(cell)) {\n const endCell = dom.getParent(rng.endContainer, isTableCell);\n return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n } else {\n return false;\n }\n };\n const validInsertion = (editor, value, parentNode) => {\n var _a;\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n const node = parentNode.firstChild;\n const node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value, { no_events: true });\n }\n }\n };\n const trimBrsFromTableCell = (dom, elm) => {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n };\n const reduceInlineTextElements = (editor, merge) => {\n const textInlineElements = editor.schema.getTextInlineElements();\n const dom = editor.dom;\n if (merge) {\n const root = editor.getBody();\n const elementUtils = ElementUtils(editor);\n Tools.each(dom.select('*[data-mce-fragment]'), node => {\n const isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n if (isInline && hasInheritableStyles(dom, node)) {\n for (let parentNode = node.parentElement; isNonNullable(parentNode) && parentNode !== root; parentNode = parentNode.parentElement) {\n const styleConflict = hasStyleConflict(dom, node, parentNode);\n if (styleConflict) {\n break;\n }\n if (elementUtils.compare(parentNode, node)) {\n dom.remove(node, true);\n break;\n }\n }\n }\n });\n }\n };\n const markFragmentElements = fragment => {\n let node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n const unmarkFragmentElements = elm => {\n Tools.each(elm.getElementsByTagName('*'), elm => {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n const isPartOfFragment = node => {\n return !!node.getAttribute('data-mce-fragment');\n };\n const canHaveChildren = (editor, node) => {\n return isNonNullable(node) && !editor.schema.getVoidElements()[node.nodeName];\n };\n const moveSelectionToMarker = (editor, marker) => {\n var _a, _b, _c;\n let nextRng;\n const dom = editor.dom;\n const selection = editor.selection;\n if (!marker) {\n return;\n }\n selection.scrollIntoView(marker);\n const parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n if (parentEditableElm && dom.getContentEditable(parentEditableElm) === 'false') {\n dom.remove(marker);\n selection.select(parentEditableElm);\n return;\n }\n let rng = dom.createRng();\n const node = marker.previousSibling;\n if (isText$a(node)) {\n rng.setStart(node, (_b = (_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);\n const node2 = marker.nextSibling;\n if (isText$a(node2)) {\n node.appendData(node2.data);\n (_c = node2.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(node2);\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n const findNextCaretRng = rng => {\n let caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n return caretPos === null || caretPos === void 0 ? void 0 : caretPos.toRange();\n };\n const parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n empty(SugarElement.fromDom(parentBlock));\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell(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 const deleteSelectedContent = editor => {\n const dom = editor.dom;\n const rng = normalize(editor.selection.getRng());\n editor.selection.setRng(rng);\n const startCell = dom.getParent(rng.startContainer, isTableCell);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n } else if (rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset === 1 && isText$a(rng.startContainer.childNodes[rng.startOffset])) {\n rng.deleteContents();\n } else {\n editor.getDoc().execCommand('Delete', false);\n }\n };\n const insertHtmlAtCaret = (editor, value, details) => {\n var _a, _b;\n const selection = editor.selection;\n const dom = editor.dom;\n const parser = editor.parser;\n const merge = details.merge;\n const serializer = HtmlSerializer({ validate: true }, editor.schema);\n const bookmarkHtml = '<span id=\"mce_marker\" data-mce-type=\"bookmark\"></span>';\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n let rng = selection.getRng();\n const caretElement = rng.startContainer;\n const 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 const parentNode = selection.getNode();\n const parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n const 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 if (rng) {\n selection.setRng(rng);\n }\n return value;\n }\n if (details.paste === true && shouldPasteContentOnly(dom, fragment, parentNode, editor.getBody())) {\n (_a = fragment.firstChild) === null || _a === void 0 ? void 0 : _a.unwrap();\n }\n markFragmentElements(fragment);\n let node = fragment.lastChild;\n if (node && node.attr('id') === 'mce_marker') {\n const marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (node.parent && 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 let parentNode = selection.getNode();\n let tempNode;\n const rootNode = editor.getBody();\n if (isDocument$1(parentNode)) {\n parentNode = tempNode = rootNode;\n } else {\n tempNode = parentNode;\n }\n while (tempNode && tempNode !== rootNode) {\n parentNode = tempNode;\n tempNode = tempNode.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n const root = parser.parse(value);\n for (let markerNode = root; markerNode; markerNode = markerNode.walk()) {\n if (markerNode.attr('id') === 'mce_marker') {\n markerNode.replace(fragment);\n break;\n }\n }\n const toExtract = fragment.children();\n const parent = (_b = fragment.parent) !== null && _b !== void 0 ? _b : root;\n fragment.unwrap();\n const invalidChildren = filter$5(toExtract, node => isInvalid(editor.schema, node, parent));\n cleanInvalidNodes(invalidChildren, editor.schema);\n filter$2(parser.getNodeFilters(), parser.getAttributeFilters(), root);\n value = serializer.serialize(root);\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 updateCaret(editor.schema, editor.getBody(), selection.getStart());\n return value;\n };\n\n const isTreeNode = content => content instanceof AstNode;\n\n const moveSelection = editor => {\n if (hasFocus(editor)) {\n firstPositionIn(editor.getBody()).each(pos => {\n const node = pos.getNode();\n const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n const setEditorHtml = (editor, html, noSelection) => {\n editor.dom.setHTML(editor.getBody(), html);\n if (noSelection !== true) {\n moveSelection(editor);\n }\n };\n const setContentString = (editor, body, content, args) => {\n if (content.length === 0 || /^\\s+$/.test(content)) {\n const padd = '<br data-mce-bogus=\"1\">';\n if (body.nodeName === 'TABLE') {\n content = '<tr><td>' + padd + '</td></tr>';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '<li>' + padd + '</li>';\n }\n const forcedRootBlockName = getForcedRootBlock(editor);\n if (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 = padd;\n }\n setEditorHtml(editor, content, args.no_selection);\n return {\n content,\n html: content\n };\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: false }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content: trimmedHtml,\n html: trimmedHtml\n };\n }\n };\n const setContentTree = (editor, body, content, args) => {\n filter$2(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n const html = HtmlSerializer({ validate: false }, editor.schema).serialize(content);\n const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content,\n html: trimmedHtml\n };\n };\n const setContentInternal = (editor, content, args) => {\n return Optional.from(editor.getBody()).map(body => {\n if (isTreeNode(content)) {\n return setContentTree(editor, body, content, args);\n } else {\n return setContentString(editor, body, content, args);\n }\n }).getOr({\n content,\n html: isTreeNode(args.content) ? '' : args.content\n });\n };\n\n const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor = (scope, transform, isRoot) => {\n let element = scope.dom;\n const stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n const 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 const closest$2 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor(scope, transform, stop));\n };\n\n const isEq$3 = isEq$5;\n const matchesUnInheritedFormatSelector = (ed, node, name) => {\n const formatList = ed.formatter.get(name);\n if (formatList) {\n for (let i = 0; i < formatList.length; i++) {\n const 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 const matchParents = (editor, node, name, vars, similar) => {\n const root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n const matchedNode = editor.dom.getParent(node, elm => {\n if (matchesUnInheritedFormatSelector(editor, elm, name)) {\n return true;\n }\n return elm.parentNode === root || !!matchNode(editor, elm, name, vars, true);\n });\n return !!matchNode(editor, matchedNode, name, vars, similar);\n };\n const matchName = (dom, node, format) => {\n if (isInlineFormat(format) && isEq$3(node, format.inline)) {\n return true;\n }\n if (isBlockFormat(format) && isEq$3(node, format.block)) {\n return true;\n }\n if (isSelectorFormat(format)) {\n return isElement$6(node) && dom.is(node, format.selector);\n }\n return false;\n };\n const matchItems = (dom, node, format, itemName, similar, vars) => {\n const items = format[itemName];\n const matchAttributes = itemName === 'attributes';\n if (isFunction(format.onmatch)) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (!isArrayLike(items)) {\n for (const key in items) {\n if (has$2(items, key)) {\n const value = matchAttributes ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n const expectedValue = replaceVars(items[key], vars);\n const 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(expectedValue, key))) {\n return false;\n }\n }\n }\n } else {\n for (let i = 0; i < items.length; i++) {\n if (matchAttributes ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return true;\n }\n }\n }\n }\n return true;\n };\n const matchNode = (ed, node, name, vars, similar) => {\n const formatList = ed.formatter.get(name);\n const dom = ed.dom;\n if (formatList && isElement$6(node)) {\n for (let i = 0; i < formatList.length; i++) {\n const format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n const classes = format.classes;\n if (classes) {\n for (let 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 return undefined;\n };\n const match$2 = (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 const 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 const matchAll = (editor, names, vars) => {\n const matchedFormatNames = [];\n const checkedMap = {};\n const startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, node => {\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n const closest$1 = (editor, names) => {\n const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n const match = (elm, name) => matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n return Optional.from(editor.selection.getStart(true)).bind(rawElm => closest$2(SugarElement.fromDom(rawElm), elm => findMap(names, name => match(elm, name)), isRoot)).getOrNull();\n };\n const canApply = (editor, name) => {\n const formatList = editor.formatter.get(name);\n const dom = editor.dom;\n if (formatList) {\n const startNode = editor.selection.getStart();\n const parents = getParents$2(dom, startNode);\n for (let x = formatList.length - 1; x >= 0; x--) {\n const format = formatList[x];\n if (!isSelectorFormat(format)) {\n return true;\n }\n for (let 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 const matchAllOnNode = (editor, node, formatNames) => foldl(formatNames, (acc, name) => {\n const 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 const ZWSP = ZWSP$1;\n const importNode = (ownerDocument, node) => {\n return ownerDocument.importNode(node, true);\n };\n const getEmptyCaretContainers = node => {\n const nodes = [];\n let tempNode = node;\n while (tempNode) {\n if (isText$a(tempNode) && tempNode.data !== ZWSP || tempNode.childNodes.length > 1) {\n return [];\n }\n if (isElement$6(tempNode)) {\n nodes.push(tempNode);\n }\n tempNode = tempNode.firstChild;\n }\n return nodes;\n };\n const isCaretContainerEmpty = node => {\n return getEmptyCaretContainers(node).length > 0;\n };\n const findFirstTextNode = node => {\n if (node) {\n const walker = new DomTreeWalker(node, node);\n for (let tempNode = walker.current(); tempNode; tempNode = walker.next()) {\n if (isText$a(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const createCaretContainer = fill => {\n const 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 const trimZwspFromCaretContainer = caretContainerNode => {\n const textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.data.charAt(0) === ZWSP) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n const removeCaretContainerNode = (editor, node, moveCaret = true) => {\n const dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret);\n } else {\n const rng = selection.getRng();\n const block = dom.getParent(node, dom.isBlock);\n const startContainer = rng.startContainer;\n const startOffset = rng.startOffset;\n const endContainer = rng.endContainer;\n const endOffset = rng.endOffset;\n const 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 const removeCaretContainer = (editor, node, moveCaret = true) => {\n const 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 const insertCaretContainerNode = (editor, caretContainer, formatNode) => {\n var _a, _b;\n const dom = editor.dom;\n const block = dom.getParent(formatNode, curry(isTextBlock$1, editor.schema));\n if (block && dom.isEmpty(block)) {\n (_a = formatNode.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(caretContainer, formatNode);\n } else {\n removeTrailingBr(SugarElement.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n (_b = formatNode.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n const appendNode = (parentNode, node) => {\n parentNode.appendChild(node);\n return node;\n };\n const insertFormatNodesIntoCaretContainer = (formatNodes, caretContainer) => {\n var _a;\n const innerMostFormatNode = foldr(formatNodes, (parentNode, formatNode) => {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n const doc = (_a = innerMostFormatNode.ownerDocument) !== null && _a !== void 0 ? _a : document;\n return appendNode(innerMostFormatNode, doc.createTextNode(ZWSP));\n };\n const cleanFormatNode = (editor, caretContainer, formatNode, name, vars, similar) => {\n const formatter = editor.formatter;\n const dom = editor.dom;\n const validFormats = filter$5(keys(formatter.get()), formatName => formatName !== name && !contains$1(formatName, 'removeformat'));\n const matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n const uniqueFormats = filter$5(matchedFormats, fmtName => !areSimilarFormats(editor, fmtName, name));\n if (uniqueFormats.length > 0) {\n const 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 const applyCaretFormat = (editor, name, vars) => {\n let caretContainer;\n const selection = editor.selection;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const selectionRng = selection.getRng();\n let offset = selectionRng.startOffset;\n const container = selectionRng.startContainer;\n const text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n const 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 const bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n let rng = expandRng(editor.dom, selectionRng, formatList);\n rng = split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n let textNode = caretContainer ? findFirstTextNode(caretContainer) : null;\n if (!caretContainer || (textNode === null || textNode === void 0 ? void 0 : textNode.data) !== 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 const removeCaretFormat = (editor, name, vars, similar) => {\n const dom = editor.dom;\n const selection = editor.selection;\n let hasContentAfter = false;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const rng = selection.getRng();\n const container = rng.startContainer;\n const offset = rng.startOffset;\n let node = container;\n if (isText$a(container)) {\n if (offset !== container.data.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n const parents = [];\n let formatNode;\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 const bookmark = selection.getBookmark();\n rng.collapse(true);\n let expandedRng = expandRng(dom, rng, formatList, true);\n expandedRng = split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng, similar);\n selection.moveToBookmark(bookmark);\n } else {\n const caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n const newCaretContainer = createCaretContainer(false).dom;\n insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null && caretContainer !== void 0 ? caretContainer : formatNode);\n const cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n const caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer);\n if (caretContainer) {\n removeCaretContainerNode(editor, caretContainer, false);\n }\n selection.setCursorLocation(caretTextNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n const disableCaretContainer = (editor, keyCode) => {\n const 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 const setup$u = editor => {\n editor.on('mouseup keydown', e => {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n const replaceWithCaretFormat = (targetNode, formatNodes) => {\n const caretContainer = createCaretContainer(false);\n const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n before$3(SugarElement.fromDom(targetNode), caretContainer);\n remove$6(SugarElement.fromDom(targetNode));\n return CaretPosition(innerMost, 0);\n };\n const isFormatElement = (editor, element) => {\n const inlineElements = editor.schema.getTextInlineElements();\n return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n };\n const isEmptyCaretFormatElement = element => {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\n\n const postProcessHooks = {};\n const isPre = matchNodeNames(['pre']);\n const addPostProcessHook = (name, hook) => {\n const hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = [];\n }\n postProcessHooks[name].push(hook);\n };\n const postProcess$1 = (name, editor) => {\n if (has$2(postProcessHooks, name)) {\n each$e(postProcessHooks[name], hook => {\n hook(editor);\n });\n }\n };\n addPostProcessHook('pre', editor => {\n const rng = editor.selection.getRng();\n const hasPreSibling = blocks => pre => {\n const prev = pre.previousSibling;\n return isPre(prev) && contains$2(blocks, prev);\n };\n const joinPre = (pre1, pre2) => {\n const sPre2 = SugarElement.fromDom(pre2);\n const doc = documentOrOwner(sPre2).dom;\n remove$6(sPre2);\n append(SugarElement.fromDom(pre1), [\n SugarElement.fromTag('br', doc),\n SugarElement.fromTag('br', doc),\n ...children$1(sPre2)\n ]);\n };\n if (!rng.collapsed) {\n const blocks = editor.selection.getSelectedBlocks();\n const preBlocks = filter$5(filter$5(blocks, isPre), hasPreSibling(blocks));\n each$e(preBlocks, pre => {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n const listItemStyles = [\n 'fontWeight',\n 'fontStyle',\n 'color',\n 'fontSize',\n 'fontFamily'\n ];\n const hasListStyles = fmt => isObject(fmt.styles) && exists(keys(fmt.styles), name => contains$2(listItemStyles, name));\n const findExpandedListItemFormat = formats => find$2(formats, fmt => isInlineFormat(fmt) && fmt.inline === 'span' && hasListStyles(fmt));\n const getExpandedListItemFormat = (formatter, format) => {\n const formatList = formatter.get(format);\n return isArray$1(formatList) ? findExpandedListItemFormat(formatList) : Optional.none();\n };\n const isRngStartAtStartOfElement = (rng, elm) => prevPosition(elm, CaretPosition.fromRangeStart(rng)).isNone();\n const isRngEndAtEndOfElement = (rng, elm) => {\n return nextPosition(elm, CaretPosition.fromRangeEnd(rng)).exists(pos => !isBr$6(pos.getNode()) || nextPosition(elm, pos).isSome()) === false;\n };\n const isEditableListItem = dom => elm => isListItem$2(elm) && dom.getContentEditableParent(elm) !== 'false';\n const getFullySelectedBlocks = selection => {\n const blocks = selection.getSelectedBlocks();\n const rng = selection.getRng();\n if (selection.isCollapsed()) {\n return [];\n }\n if (blocks.length === 1) {\n return isRngStartAtStartOfElement(rng, blocks[0]) && isRngEndAtEndOfElement(rng, blocks[0]) ? blocks : [];\n } else {\n const first = head(blocks).filter(elm => isRngStartAtStartOfElement(rng, elm)).toArray();\n const last = last$3(blocks).filter(elm => isRngEndAtEndOfElement(rng, elm)).toArray();\n const middle = blocks.slice(1, -1);\n return first.concat(middle).concat(last);\n }\n };\n const getFullySelectedListItems = selection => filter$5(getFullySelectedBlocks(selection), isEditableListItem(selection.dom));\n const getPartiallySelectedListItems = selection => filter$5(selection.getSelectedBlocks(), isEditableListItem(selection.dom));\n\n const each$8 = Tools.each;\n const isElementNode = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n const findElementSibling = (node, siblingName) => {\n for (let sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$a(sibling) && isNotEmpty(sibling.data)) {\n return node;\n }\n if (isElement$6(sibling) && !isBookmarkNode$1(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n const mergeSiblingsNodes = (editor, prev, next) => {\n const elementUtils = ElementUtils(editor);\n const isPrevEditable = isElement$6(prev) && isEditable$3(prev);\n const isNextEditable = isElement$6(next) && isEditable$3(next);\n if (isPrevEditable && isNextEditable) {\n const prevSibling = findElementSibling(prev, 'previousSibling');\n const nextSibling = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prevSibling, nextSibling)) {\n for (let sibling = prevSibling.nextSibling; sibling && sibling !== nextSibling;) {\n const tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prevSibling.appendChild(tmpSibling);\n }\n editor.dom.remove(nextSibling);\n Tools.each(Tools.grep(nextSibling.childNodes), node => {\n prevSibling.appendChild(node);\n });\n return prevSibling;\n }\n }\n return next;\n };\n const mergeSiblings = (editor, format, vars, node) => {\n var _a;\n if (node && format.merge_siblings !== false) {\n const newNode = (_a = mergeSiblingsNodes(editor, getNonWhiteSpaceSibling(node), node)) !== null && _a !== void 0 ? _a : node;\n mergeSiblingsNodes(editor, newNode, getNonWhiteSpaceSibling(newNode, true));\n }\n };\n const clearChildStyles = (dom, format, node) => {\n if (format.clear_child_styles) {\n const selector = format.links ? '*:not(a)' : '*';\n each$8(dom.select(selector, node), childNode => {\n if (isElementNode(childNode) && isEditable$3(childNode)) {\n each$8(format.styles, (_value, name) => {\n dom.setStyle(childNode, name, '');\n });\n }\n });\n }\n };\n const processChildElements = (node, filter, process) => {\n each$8(node.childNodes, node => {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n const unwrapEmptySpan = (dom, node) => {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n const hasStyle = (dom, name) => node => !!(node && getStyle(dom, node, name));\n const applyStyle = (dom, name, value) => node => {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n };\n\n const removeResult = Adt.generate([\n { keep: [] },\n { rename: ['name'] },\n { removed: [] }\n ]);\n const MCE_ATTR_RE = /^(src|href|style)$/;\n const each$7 = Tools.each;\n const isEq$2 = isEq$5;\n const isTableCellOrRow = node => /^(TR|TH|TD)$/.test(node.nodeName);\n const isChildOfInlineParent = (dom, node, parent) => dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n const getContainer = (ed, rng, start) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement$6(container)) {\n const lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (isText$a(container) && start && offset >= container.data.length) {\n container = new DomTreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$a(container) && !start && offset === 0) {\n container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n const normalizeTableSelection = (node, start) => {\n const prop = start ? 'firstChild' : 'lastChild';\n const childNode = node[prop];\n if (isTableCellOrRow(node) && childNode) {\n if (node.nodeName === 'TR') {\n return childNode[prop] || childNode;\n } else {\n return childNode;\n }\n }\n return node;\n };\n const wrap$1 = (dom, node, name, attrs) => {\n var _a;\n const wrapper = dom.create(name, attrs);\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n const wrapWithSiblings = (dom, node, next, name, attrs) => {\n const start = SugarElement.fromDom(node);\n const wrapper = SugarElement.fromDom(dom.create(name, attrs));\n const siblings = next ? nextSiblings(start) : prevSiblings(start);\n append(wrapper, siblings);\n if (next) {\n before$3(start, wrapper);\n prepend(wrapper, start);\n } else {\n after$4(start, wrapper);\n append$1(wrapper, start);\n }\n return wrapper.dom;\n };\n const isColorFormatAndAnchor = (node, format) => format.links && node.nodeName === 'A';\n const removeNode = (ed, node, format) => {\n const parentNode = node.parentNode;\n let rootBlockElm;\n const dom = ed.dom;\n const forcedRootBlock = getForcedRootBlock(ed);\n if (isBlockFormat(format)) {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$2(node, format.list_block)) {\n each$e(from(node.childNodes), node => {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, getForcedRootBlockAttrs(ed));\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = null;\n }\n });\n }\n }\n }\n if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n const processFormatAttrOrStyle = (name, value, vars) => {\n if (isNumber(name)) {\n return {\n name: value,\n value: null\n };\n } else {\n return {\n name,\n value: replaceVars(value, vars)\n };\n }\n };\n const removeEmptyStyleAttributeIfNeeded = (dom, elm) => {\n if (dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n };\n const removeStyles = (dom, elm, format, vars, compareNode) => {\n let stylesModified = false;\n each$7(format.styles, (value, name) => {\n const {\n name: styleName,\n value: styleValue\n } = processFormatAttrOrStyle(name, value, vars);\n const normalizedStyleValue = normalizeStyleValue(styleValue, styleName);\n if (format.remove_similar || isNull(styleValue) || !isElement$6(compareNode) || isEq$2(getStyle(dom, compareNode, styleName), normalizedStyleValue)) {\n dom.setStyle(elm, styleName, '');\n }\n stylesModified = true;\n });\n if (stylesModified) {\n removeEmptyStyleAttributeIfNeeded(dom, elm);\n }\n };\n const removeListStyleFormats = (editor, name, vars) => {\n if (name === 'removeformat') {\n each$e(getPartiallySelectedListItems(editor.selection), li => {\n each$e(listItemStyles, name => editor.dom.setStyle(li, name, ''));\n removeEmptyStyleAttributeIfNeeded(editor.dom, li);\n });\n } else {\n getExpandedListItemFormat(editor.formatter, name).each(liFmt => {\n each$e(getPartiallySelectedListItems(editor.selection), li => removeStyles(editor.dom, li, liFmt, vars, null));\n });\n }\n };\n const removeFormatInternal = (ed, format, vars, node, compareNode) => {\n const dom = ed.dom;\n const elementUtils = ElementUtils(ed);\n const schema = ed.schema;\n if (isInlineFormat(format) && isTransparentElementName(schema, format.inline) && isTransparentBlock(schema, node) && node.parentElement === ed.getBody()) {\n removeNode(ed, node, format);\n return removeResult.removed();\n }\n if (!format.ceFalseOverride && node && dom.getContentEditableParent(node) === 'false') {\n return removeResult.keep();\n }\n if (node && !matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return removeResult.keep();\n }\n const elm = node;\n const preserveAttributes = format.preserve_attributes;\n if (isInlineFormat(format) && format.remove === 'all' && isArray$1(preserveAttributes)) {\n const attrsToPreserve = filter$5(dom.getAttribs(elm), attr => contains$2(preserveAttributes, attr.name.toLowerCase()));\n dom.removeAllAttribs(elm);\n each$e(attrsToPreserve, attr => dom.setAttrib(elm, attr.name, attr.value));\n if (attrsToPreserve.length > 0) {\n return removeResult.rename('span');\n }\n }\n if (format.remove !== 'all') {\n removeStyles(dom, elm, format, vars, compareNode);\n each$7(format.attributes, (value, name) => {\n const {\n name: attrName,\n value: attrValue\n } = processFormatAttrOrStyle(name, value, vars);\n if (format.remove_similar || isNull(attrValue) || !isElement$6(compareNode) || isEq$2(dom.getAttrib(compareNode, attrName), attrValue)) {\n if (attrName === 'class') {\n const currentValue = dom.getAttrib(elm, attrName);\n if (currentValue) {\n let valueOut = '';\n each$e(currentValue.split(/\\s+/), cls => {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, attrName, valueOut);\n return;\n }\n }\n }\n if (MCE_ATTR_RE.test(attrName)) {\n elm.removeAttribute('data-mce-' + attrName);\n }\n if (attrName === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n elm.removeAttribute(attrName);\n dom.setStyle(elm, 'list-style-type', 'none');\n return;\n }\n if (attrName === 'class') {\n elm.removeAttribute('className');\n }\n elm.removeAttribute(attrName);\n }\n });\n each$7(format.classes, value => {\n value = replaceVars(value, vars);\n if (!isElement$6(compareNode) || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n const attrs = dom.getAttribs(elm);\n for (let i = 0; i < attrs.length; i++) {\n const attrName = attrs[i].nodeName;\n if (!elementUtils.isAttributeInternal(attrName)) {\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 const removeFormat$1 = (ed, format, vars, node, compareNode) => removeFormatInternal(ed, format, vars, node, compareNode).fold(never, newName => {\n ed.dom.rename(node, newName);\n return true;\n }, always);\n const findFormatRoot = (editor, container, name, vars, similar) => {\n let formatRoot;\n if (container.parentNode) {\n each$e(getParents$2(editor.dom, container.parentNode).reverse(), parent => {\n if (!formatRoot && isElement$6(parent) && parent.id !== '_start' && parent.id !== '_end') {\n const format = matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n }\n return formatRoot;\n };\n const removeFormatFromClone = (editor, format, vars, clone) => removeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), newName => {\n const fragment = editor.dom.createFragment();\n fragment.appendChild(clone);\n return editor.dom.rename(clone, newName);\n }, constant(null));\n const wrapAndSplit = (editor, formatList, formatRoot, container, target, split, format, vars) => {\n var _a, _b;\n let lastClone;\n let firstClone;\n const dom = editor.dom;\n if (formatRoot) {\n const formatRootParent = formatRoot.parentNode;\n for (let parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n let clone = dom.clone(parent, false);\n for (let 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 = (_a = dom.split(formatRoot, container)) !== null && _a !== void 0 ? _a : container;\n }\n if (lastClone && firstClone) {\n (_b = target.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n if (isInlineFormat(format)) {\n mergeSiblings(editor, format, vars, lastClone);\n }\n }\n }\n return container;\n };\n const remove$2 = (ed, name, vars, node, similar) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const dom = ed.dom;\n const selection = ed.selection;\n const splitToFormatRoot = container => {\n const formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n const isRemoveBookmarkNode = node => isBookmarkNode$1(node) && isElement$6(node) && (node.id === '_start' || node.id === '_end');\n const removeNodeFormat = node => exists(formatList, fmt => removeFormat$1(ed, fmt, vars, node, node));\n const process = node => {\n const children = from(node.childNodes);\n const removed = removeNodeFormat(node);\n const currentNodeMatches = removed || exists(formatList, f => matchName(dom, node, f));\n const parentNode = node.parentNode;\n if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n removeNodeFormat(parentNode);\n }\n if (format.deep) {\n if (children.length) {\n for (let i = 0; i < children.length; i++) {\n process(children[i]);\n }\n }\n }\n const textDecorations = [\n 'underline',\n 'line-through',\n 'overline'\n ];\n each$e(textDecorations, decoration => {\n if (isElement$6(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 }, undefined, node);\n }\n });\n };\n const unwrap = start => {\n const node = dom.get(start ? '_start' : '_end');\n if (node) {\n let out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (isText$a(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 } else {\n return null;\n }\n };\n const removeRngStyle = rng => {\n let startContainer;\n let endContainer;\n let expandedRng = expandRng(dom, 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 const 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 const 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 const newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n walk$3(dom, newRng, nodes => {\n each$e(nodes, 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$3(dom, expandedRng, nodes => {\n each$e(nodes, process);\n });\n };\n if (node) {\n if (isNode(node)) {\n const 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 (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n preserveSelection(ed, () => runOnRanges(ed, removeRngStyle), startNode => isInlineFormat(format) && match$2(ed, name, vars, startNode));\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n removeListStyleFormats(ed, name, vars);\n fireFormatRemove(ed, name, node, vars);\n };\n\n const each$6 = Tools.each;\n const mergeTextDecorationsAndColor = (dom, format, vars, node) => {\n const processTextDecorationsAndColor = n => {\n if (isElement$6(n) && isElement$6(n.parentNode) && isEditable$3(n)) {\n const parentTextDecoration = getTextDecoration(dom, n.parentNode);\n if (dom.getStyle(n, 'color') && parentTextDecoration) {\n dom.setStyle(n, 'text-decoration', parentTextDecoration);\n } else if (dom.getStyle(n, 'text-decoration') === parentTextDecoration) {\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 const mergeBackgroundColorAndFontSize = (dom, format, vars, node) => {\n if (format.styles && format.styles.backgroundColor) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && isEditable$3(elm), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n const mergeSubSup = (dom, format, vars, node) => {\n if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && isEditable$3(elm), applyStyle(dom, 'fontSize', ''));\n const inverseTagDescendants = filter$5(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), isEditable$3);\n dom.remove(inverseTagDescendants, true);\n }\n };\n const mergeWithChildren = (editor, formatList, vars, node) => {\n each$6(formatList, format => {\n if (isInlineFormat(format)) {\n each$6(editor.dom.select(format.inline, node), child => {\n if (isElementNode(child)) {\n removeFormat$1(editor, format, vars, child, format.exact ? child : null);\n }\n });\n }\n clearChildStyles(editor.dom, format, node);\n });\n };\n const mergeWithParents = (editor, format, name, vars, node) => {\n const parentNode = node.parentNode;\n if (matchNode(editor, parentNode, name, vars)) {\n if (removeFormat$1(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents && parentNode) {\n editor.dom.getParent(parentNode, parent => {\n if (matchNode(editor, parent, name, vars)) {\n removeFormat$1(editor, format, vars, node);\n return true;\n } else {\n return false;\n }\n });\n }\n };\n\n const each$5 = Tools.each;\n const canFormatBR = (editor, format, node, parentName) => {\n if (canFormatEmptyLines(editor) && isInlineFormat(format) && node.parentNode) {\n const validBRParentElements = getTextRootBlockElements(editor.schema);\n const hasCaretNodeSibling = sibling(SugarElement.fromDom(node), sibling => isCaretNode(sibling.dom));\n return hasNonNullableKey(validBRParentElements, parentName) && isEmpty$2(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n } else {\n return false;\n }\n };\n const applyStyles = (dom, elm, format, vars) => {\n each$5(format.styles, (value, name) => {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (format.styles) {\n const styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n };\n const applyFormat$1 = (ed, name, vars, node) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const isCollapsed = !node && ed.selection.isCollapsed();\n const dom = ed.dom;\n const selection = ed.selection;\n const setElementFormat = (elm, fmt = format) => {\n if (isFunction(fmt.onformat)) {\n fmt.onformat(elm, fmt, vars, node);\n }\n applyStyles(dom, elm, fmt, vars);\n each$5(fmt.attributes, (value, name) => {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$5(fmt.classes, value => {\n const newValue = replaceVars(value, vars);\n if (!dom.hasClass(elm, newValue)) {\n dom.addClass(elm, newValue);\n }\n });\n };\n const applyNodeStyle = (formatList, node) => {\n let found = false;\n each$5(formatList, format => {\n if (!isSelectorFormat(format)) {\n return false;\n }\n if (dom.getContentEditable(node) === 'false' && !format.ceFalseOverride) {\n return true;\n }\n if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n return true;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n return true;\n });\n return found;\n };\n const createWrapElement = wrapName => {\n if (isString(wrapName)) {\n const wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n return wrapElm;\n } else {\n return null;\n }\n };\n const applyRngStyle = (dom, rng, nodeSpecific) => {\n const newWrappers = [];\n let contentEditable = true;\n const wrapName = format.inline || format.block;\n const wrapElm = createWrapElement(wrapName);\n const isMatchingWrappingBlock = node => isWrappingBlockFormat(format) && matchNode(ed, node, name, vars);\n const canRenameBlock = (node, parentName, isEditableDescendant) => {\n const isValidBlockFormatForNode = isNonWrappingBlockFormat(format) && isTextBlock$1(ed.schema, node) && isValid(ed, parentName, wrapName);\n return isEditableDescendant && isValidBlockFormatForNode;\n };\n const canWrapNode = (node, parentName, isEditableDescendant, isWrappableNoneditableElm) => {\n const nodeName = node.nodeName.toLowerCase();\n const isValidWrapNode = isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName);\n const isZwsp$1 = !nodeSpecific && isText$a(node) && isZwsp(node.data);\n const isCaret = isCaretNode(node);\n const isCorrectFormatForNode = !isInlineFormat(format) || !dom.isBlock(node);\n return (isEditableDescendant || isWrappableNoneditableElm) && isValidWrapNode && !isZwsp$1 && !isCaret && isCorrectFormatForNode;\n };\n walk$3(dom, rng, nodes => {\n let currentWrapElm;\n const process = node => {\n let hasContentEditableState = false;\n let lastContentEditable = contentEditable;\n let isWrappableNoneditableElm = false;\n const parentNode = node.parentNode;\n const parentName = parentNode.nodeName.toLowerCase();\n const contentEditableValue = dom.getContentEditable(node);\n if (isNonNullable(contentEditableValue)) {\n lastContentEditable = contentEditable;\n contentEditable = contentEditableValue === 'true';\n hasContentEditableState = true;\n isWrappableNoneditableElm = isWrappableNoneditable(ed, node);\n }\n const isEditableDescendant = contentEditable && !hasContentEditableState;\n if (isBr$6(node) && !canFormatBR(ed, format, node, parentName)) {\n currentWrapElm = null;\n if (isBlockFormat(format)) {\n dom.remove(node);\n }\n return;\n }\n if (isMatchingWrappingBlock(node)) {\n currentWrapElm = null;\n return;\n }\n if (canRenameBlock(node, parentName, isEditableDescendant)) {\n const elm = dom.rename(node, wrapName);\n setElementFormat(elm);\n newWrappers.push(elm);\n currentWrapElm = null;\n return;\n }\n if (isSelectorFormat(format)) {\n let 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 (isNonNullable(wrapElm) && canWrapNode(node, parentName, isEditableDescendant, isWrappableNoneditableElm)) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n if (isWrappableNoneditableElm && hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = null;\n each$e(from(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = null;\n }\n };\n each$e(nodes, process);\n });\n if (format.links === true) {\n each$e(newWrappers, node => {\n const process = node => {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$e(from(node.childNodes), process);\n };\n process(node);\n });\n }\n each$e(newWrappers, node => {\n const getChildCount = node => {\n let count = 0;\n each$e(node.childNodes, node => {\n if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n count++;\n }\n });\n return count;\n };\n const mergeStyles = node => {\n const childElement = find$2(node.childNodes, isElementNode$1).filter(child => dom.getContentEditable(child) !== 'false' && matchName(dom, child, format));\n return childElement.map(child => {\n const 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 const 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(ed, format, vars, node);\n }\n });\n };\n const targetNode = isNode(node) ? node : selection.getNode();\n if (dom.getContentEditable(targetNode) === 'false' && !isWrappableNoneditable(ed, targetNode)) {\n node = targetNode;\n applyNodeStyle(formatList, node);\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 const rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, expandRng(dom, rng, formatList), true);\n }\n } else {\n applyRngStyle(dom, node, true);\n }\n } else {\n if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n selection.setRng(normalize(selection.getRng()));\n preserveSelection(ed, () => {\n runOnRanges(ed, (selectionRng, fake) => {\n const expandedRng = fake ? selectionRng : expandRng(dom, selectionRng, formatList);\n applyRngStyle(dom, expandedRng, false);\n });\n }, always);\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n getExpandedListItemFormat(ed.formatter, name).each(liFmt => {\n each$e(getFullySelectedListItems(ed.selection), li => applyStyles(dom, li, liFmt, vars));\n });\n }\n postProcess$1(name, ed);\n }\n fireFormatApply(ed, name, node, vars);\n };\n\n const hasVars = value => has$2(value, 'vars');\n const setup$t = (registeredFormatListeners, editor) => {\n registeredFormatListeners.set({});\n editor.on('NodeChange', e => {\n updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n });\n editor.on('FormatApply FormatRemove', e => {\n const element = Optional.from(e.node).map(nodeOrRange => isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer).bind(node => isElement$6(node) ? Optional.some(node) : Optional.from(node.parentElement)).getOrThunk(() => fallbackElement(editor));\n updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n });\n };\n const fallbackElement = editor => editor.selection.getStart();\n const matchingNode = (editor, parents, format, similar, vars) => {\n const isMatchingNode = node => {\n const matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n return !isUndefined(matchingFormat);\n };\n const isUnableToMatch = 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 const getParents = (editor, elm) => {\n const element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n return filter$5(getParents$2(editor.dom, element), node => isElement$6(node) && !isBogus$2(node));\n };\n const updateAndFireChangeCallbacks = (editor, elm, registeredCallbacks) => {\n const parents = getParents(editor, elm);\n each$d(registeredCallbacks, (data, format) => {\n const runIfChanged = spec => {\n const match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n const isSet = match.isSome();\n if (spec.state.get() !== isSet) {\n spec.state.set(isSet);\n const node = match.getOr(elm);\n if (hasVars(spec)) {\n spec.callback(isSet, {\n node,\n format,\n parents\n });\n } else {\n each$e(spec.callbacks, callback => callback(isSet, {\n node,\n format,\n parents\n }));\n }\n }\n };\n each$e([\n data.withSimilar,\n data.withoutSimilar\n ], runIfChanged);\n each$e(data.withVars, runIfChanged);\n });\n };\n const addListeners = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => {\n const group = get$a(formatChangeItems, format).getOrThunk(() => {\n const 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 const getCurrent = () => {\n const parents = getParents(editor);\n return matchingNode(editor, parents, format, similar, vars).isSome();\n };\n if (isUndefined(vars)) {\n const 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,\n vars,\n callback\n });\n }\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n const removeListeners = (registeredFormatListeners, formats, callback) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => get$a(formatChangeItems, format).each(group => {\n formatChangeItems[format] = {\n withSimilar: {\n ...group.withSimilar,\n callbacks: filter$5(group.withSimilar.callbacks, cb => cb !== callback)\n },\n withoutSimilar: {\n ...group.withoutSimilar,\n callbacks: filter$5(group.withoutSimilar.callbacks, cb => cb !== callback)\n },\n withVars: filter$5(group.withVars, item => item.callback !== callback)\n };\n }));\n registeredFormatListeners.set(formatChangeItems);\n };\n const formatChangedInternal = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n return { unbind: () => removeListeners(registeredFormatListeners, formats, callback) };\n };\n\n const toggle = (editor, name, vars, node) => {\n const fmt = editor.formatter.get(name);\n if (fmt) {\n if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n remove$2(editor, name, vars, node);\n } else {\n applyFormat$1(editor, name, vars, node);\n }\n }\n };\n\n function _typeof(obj) {\n '@babel/helpers - typeof';\n return _typeof = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && 'function' == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n }, _typeof(obj);\n }\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n function _isNativeReflectConstruct() {\n if (typeof Reflect === 'undefined' || !Reflect.construct)\n return false;\n if (Reflect.construct.sham)\n return false;\n if (typeof Proxy === 'function')\n return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {\n }));\n return true;\n } catch (e) {\n return false;\n }\n }\n function _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class)\n _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr))\n return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== 'undefined' && iter[Symbol.iterator] != null || iter['@@iterator'] != null)\n return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o)\n return;\n if (typeof o === 'string')\n return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === 'Object' && o.constructor)\n n = o.constructor.name;\n if (n === 'Map' || n === 'Set')\n return Array.from(o);\n if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length)\n len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++)\n arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError('Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n }\n var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze, seal = Object.seal, create$8 = Object.create;\n var _ref = typeof Reflect !== 'undefined' && Reflect, apply = _ref.apply, construct = _ref.construct;\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return _construct(Func, _toConsumableArray(args));\n };\n }\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n var regExpTest = unapply(RegExp.prototype.test);\n var typeErrorCreate = unconstruct(TypeError);\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n function addToSet(set, array) {\n if (setPrototypeOf) {\n setPrototypeOf(set, null);\n }\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n function clone(object) {\n var newObject = create$8(null);\n var property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n return newObject;\n }\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n return fallbackValue;\n }\n var html$1 = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr'\n ]);\n var svg$1 = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern'\n ]);\n var svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence'\n ]);\n var svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use'\n ]);\n var mathMl$1 = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover'\n ]);\n var mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none'\n ]);\n var text = freeze(['#text']);\n var html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot'\n ]);\n var svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan'\n ]);\n var mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns'\n ]);\n var xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink'\n ]);\n var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm);\n var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/);\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\n var DOCTYPE_NAME = seal(/^html$/i);\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html) {\n return html;\n }\n });\n } catch (_) {\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n DOMPurify.version = '2.3.8';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== 9) {\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n var originalDocument = window.document;\n var document = window.document;\n var DocumentFragment = window.DocumentFragment, HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter, _window$NamedNodeMap = window.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window.HTMLFormElement, DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;\n var ElementPrototype = Element.prototype;\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n var _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n var importNode = originalDocument.importNode;\n var documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {\n }\n var hooks = {};\n DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n var MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n var FORBID_TAGS = null;\n var FORBID_ATTR = null;\n var ALLOW_ARIA_ATTR = true;\n var ALLOW_DATA_ATTR = true;\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n var SAFE_FOR_TEMPLATES = false;\n var WHOLE_DOCUMENT = false;\n var SET_CONFIG = false;\n var FORCE_BODY = false;\n var RETURN_DOM = false;\n var RETURN_DOM_FRAGMENT = false;\n var RETURN_TRUSTED_TYPE = false;\n var SANITIZE_DOM = true;\n var KEEP_CONTENT = true;\n var IN_PLACE = false;\n var USE_PROFILES = {};\n var FORBID_CONTENTS = null;\n var DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp'\n ]);\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track'\n ]);\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns'\n ]);\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n var NAMESPACE = HTML_NAMESPACE;\n var IS_EMPTY_INPUT = false;\n var PARSER_MEDIA_TYPE;\n var SUPPORTED_PARSER_MEDIA_TYPES = [\n 'application/xhtml+xml',\n 'text/html'\n ];\n var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n var transformCaseFunc;\n var CONFIG = null;\n var formElement = document.createElement('form');\n var isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n if (!cfg || _typeof(cfg) !== 'object') {\n cfg = {};\n }\n cfg = clone(cfg);\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n RETURN_DOM = cfg.RETURN_DOM || false;\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n FORCE_BODY = cfg.FORCE_BODY || false;\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n IN_PLACE = cfg.IN_PLACE || false;\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? function (x) {\n return x;\n } : stringToLowerCase;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n }\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, [\n 'html',\n 'head',\n 'body'\n ]);\n }\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext'\n ]);\n var HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml'\n ]);\n var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script'\n ]);\n var ALL_SVG_TAGS = addToSet({}, svg$1);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element);\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template'\n };\n }\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n if (element.namespaceURI === SVG_NAMESPACE) {\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n return false;\n };\n var _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {\n }\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {\n }\n }\n }\n };\n var _initDocument = function _initDocument(dirty) {\n var doc;\n var leadingWhitespace;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') {\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {\n }\n }\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n }\n }\n var body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n };\n var _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function');\n };\n var _isNode = function _isNode(object) {\n return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content;\n _executeHook('beforeSanitizeElements', currentNode, null);\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n _forceRemove(currentNode);\n return true;\n }\n var tagName = transformCaseFunc(currentNode.nodeName);\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))\n return false;\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName))\n return false;\n }\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n var childCount = childNodes.length;\n for (var i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR$1, ' ');\n content = stringReplace(content, ERB_EXPR$1, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName));\n else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName));\n else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (_basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)));\n else {\n return false;\n }\n } else if (URI_SAFE_ATTRIBUTES[lcName]);\n else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, '')));\n else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]);\n else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, '')));\n else if (!value);\n else {\n return false;\n }\n return true;\n };\n var _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n return tagName.indexOf('-') > 0;\n };\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr;\n var value;\n var lcName;\n var l;\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n var attributes = currentNode.attributes;\n if (!attributes) {\n return;\n }\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n while (l--) {\n attr = attributes[l];\n var _attr = attr, name = _attr.name, namespaceURI = _attr.namespaceURI;\n value = name === 'value' ? attr.value : stringTrim(attr.value);\n lcName = transformCaseFunc(name);\n var initValue = value;\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined;\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n if (regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n value = stringReplace(value, ERB_EXPR$1, ' ');\n }\n var lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n currentNode.setAttribute(name, value);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode;\n var shadowIterator = _createIterator(fragment);\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n _sanitizeAttributes(shadowNode);\n }\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n DOMPurify.sanitize = function (dirty, cfg) {\n var body;\n var importedNode;\n var currentNode;\n var oldNode;\n var returnNode;\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString !== 'function') {\n throw typeErrorCreate('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n }\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n return dirty;\n }\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n DOMPurify.removed = [];\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n if (dirty.nodeName) {\n var tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n body.appendChild(importedNode);\n }\n } else {\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n body = _initDocument(dirty);\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n while (currentNode = nodeIterator.nextNode()) {\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n _sanitizeAttributes(currentNode);\n oldNode = currentNode;\n }\n oldNode = null;\n if (IN_PLACE) {\n return dirty;\n }\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot) {\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, ' ');\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n if (!CONFIG) {\n _parseConfig({});\n }\n var lcTag = transformCaseFunc(tag);\n var lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n\n const explode$1 = Tools.explode;\n const create$7 = () => {\n const filters = {};\n const addFilter = (name, callback) => {\n each$e(explode$1(name), name => {\n if (!has$2(filters, name)) {\n filters[name] = {\n name,\n callbacks: []\n };\n }\n filters[name].callbacks.push(callback);\n });\n };\n const getFilters = () => values(filters);\n const removeFilter = (name, callback) => {\n each$e(explode$1(name), name => {\n if (has$2(filters, name)) {\n if (isNonNullable(callback)) {\n const filter = filters[name];\n const newCallbacks = filter$5(filter.callbacks, c => c !== callback);\n if (newCallbacks.length > 0) {\n filter.callbacks = newCallbacks;\n } else {\n delete filters[name];\n }\n } else {\n delete filters[name];\n }\n }\n });\n };\n return {\n addFilter,\n getFilters,\n removeFilter\n };\n };\n\n const removeAttrs = (node, names) => {\n each$e(names, name => {\n node.attr(name, null);\n });\n };\n const addFontToSpansFilter = (domParser, styles, fontSizes) => {\n domParser.addNodeFilter('font', nodes => {\n each$e(nodes, node => {\n const props = styles.parse(node.attr('style'));\n const color = node.attr('color');\n const face = node.attr('face');\n const 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 toInt(size).each(num => {\n props['font-size'] = fontSizes[num - 1];\n });\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 const addStrikeFilter = (domParser, schema, styles) => {\n domParser.addNodeFilter('strike', nodes => {\n const convertToSTag = schema.type !== 'html4';\n each$e(nodes, node => {\n if (convertToSTag) {\n node.name = 's';\n } else {\n const 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 };\n const addFilters = (domParser, settings, schema) => {\n var _a;\n const styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode((_a = settings.font_size_legacy_values) !== null && _a !== void 0 ? _a : ''));\n }\n addStrikeFilter(domParser, schema, styles);\n };\n const register$5 = (domParser, settings, schema) => {\n if (settings.inline_styles) {\n addFilters(domParser, settings, schema);\n }\n };\n\n const blobUriToBlob = url => fetch(url).then(res => res.ok ? res.blob() : Promise.reject()).catch(() => Promise.reject(`Cannot convert ${ url } to Blob. Resource might not exist or is inaccessible.`));\n const extractBase64Data = data => {\n const matches = /([a-z0-9+\\/=\\s]+)/i.exec(data);\n return matches ? matches[1] : '';\n };\n const parseDataUri = uri => {\n const [type, ...rest] = uri.split(',');\n const data = rest.join(',');\n const matches = /data:([^/]+\\/[^;]+)(;.+)?/.exec(type);\n if (matches) {\n const base64Encoded = matches[2] === ';base64';\n const extractedData = base64Encoded ? extractBase64Data(data) : decodeURIComponent(data);\n return Optional.some({\n type: matches[1],\n data: extractedData,\n base64Encoded\n });\n } else {\n return Optional.none();\n }\n };\n const buildBlob = (type, data, base64Encoded = true) => {\n let str = data;\n if (base64Encoded) {\n try {\n str = atob(data);\n } catch (e) {\n return Optional.none();\n }\n }\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return Optional.some(new Blob([arr], { type }));\n };\n const dataUriToBlob = uri => {\n return new Promise((resolve, reject) => {\n parseDataUri(uri).bind(({type, data, base64Encoded}) => buildBlob(type, data, base64Encoded)).fold(() => reject('Invalid data URI'), resolve);\n });\n };\n const uriToBlob = url => {\n if (startsWith(url, 'blob:')) {\n return blobUriToBlob(url);\n } else if (startsWith(url, 'data:')) {\n return dataUriToBlob(url);\n } else {\n return Promise.reject('Unknown URI format');\n }\n };\n const blobToDataUri = blob => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result);\n };\n reader.onerror = () => {\n var _a;\n reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n\n let count$1 = 0;\n const uniqueId$1 = prefix => {\n return (prefix || 'blobid') + count$1++;\n };\n const processDataUri = (dataUri, base64Only, generateBlobInfo) => {\n return parseDataUri(dataUri).bind(({data, type, base64Encoded}) => {\n if (base64Only && !base64Encoded) {\n return Optional.none();\n } else {\n const base64 = base64Encoded ? data : btoa(data);\n return generateBlobInfo(base64, type);\n }\n });\n };\n const createBlobInfo$1 = (blobCache, blob, base64) => {\n const blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const dataUriToBlobInfo = (blobCache, dataUri, base64Only = false) => {\n return processDataUri(dataUri, base64Only, (base64, type) => Optional.from(blobCache.getByData(base64, type)).orThunk(() => buildBlob(type, base64).map(blob => createBlobInfo$1(blobCache, blob, base64))));\n };\n const imageToBlobInfo = (blobCache, imageSrc) => {\n const invalidDataUri = () => Promise.reject('Invalid data URI');\n if (startsWith(imageSrc, 'blob:')) {\n const blobInfo = blobCache.getByUri(imageSrc);\n if (isNonNullable(blobInfo)) {\n return Promise.resolve(blobInfo);\n } else {\n return uriToBlob(imageSrc).then(blob => {\n return blobToDataUri(blob).then(dataUri => {\n return processDataUri(dataUri, false, base64 => {\n return Optional.some(createBlobInfo$1(blobCache, blob, base64));\n }).getOrThunk(invalidDataUri);\n });\n });\n }\n } else if (startsWith(imageSrc, 'data:')) {\n return dataUriToBlobInfo(blobCache, imageSrc).fold(invalidDataUri, blobInfo => Promise.resolve(blobInfo));\n } else {\n return Promise.reject('Unknown image data format');\n }\n };\n\n const isBogusImage = img => isNonNullable(img.attr('data-mce-bogus'));\n const isInternalImageSource = img => img.attr('src') === Env.transparentSrc || isNonNullable(img.attr('data-mce-placeholder'));\n const registerBase64ImageFilter = (parser, settings) => {\n const {blob_cache: blobCache} = settings;\n if (blobCache) {\n const processImage = img => {\n const inputSrc = img.attr('src');\n if (isInternalImageSource(img) || isBogusImage(img) || isNullable(inputSrc)) {\n return;\n }\n dataUriToBlobInfo(blobCache, inputSrc, true).each(blobInfo => {\n img.attr('src', blobInfo.blobUri());\n });\n };\n parser.addAttributeFilter('src', nodes => each$e(nodes, processImage));\n }\n };\n const register$4 = (parser, settings) => {\n const schema = parser.schema;\n if (settings.remove_trailing_brs) {\n parser.addNodeFilter('br', (nodes, _, args) => {\n const blockElements = Tools.extend({}, schema.getBlockElements());\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n blockElements.body = 1;\n const isBlock = node => node.name in blockElements && isTransparentAstInline(schema, node);\n for (let i = 0, l = nodes.length; i < l; i++) {\n let node = nodes[i];\n let parent = node.parent;\n if (parent && blockElements[parent.name] && node === parent.lastChild) {\n let prev = node.prev;\n while (prev) {\n const 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 const elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(args, isBlock, parent);\n }\n }\n }\n }\n } else {\n let 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) {\n const textNode = new AstNode('#text', 3);\n textNode.value = nbsp;\n node.replace(textNode);\n }\n }\n }\n });\n }\n parser.addAttributeFilter('href', nodes => {\n let i = nodes.length;\n const appendRel = rel => {\n const parts = rel.split(' ').filter(p => p.length > 0);\n return parts.concat(['noopener']).sort().join(' ');\n };\n const addNoOpener = rel => {\n const 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 const 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', nodes => {\n let 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 while (sibling && parent) {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n }\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', nodes => {\n let i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode && (parentNode.name === 'ul' || parentNode.name === 'ol')) {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n const li = new AstNode('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n const validClasses = schema.getValidClasses();\n if (settings.validate && validClasses) {\n parser.addAttributeFilter('class', nodes => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const clazz = (_a = node.attr('class')) !== null && _a !== void 0 ? _a : '';\n const classList = Tools.explode(clazz, ' ');\n let classValue = '';\n for (let ci = 0; ci < classList.length; ci++) {\n const className = classList[ci];\n let valid = false;\n let 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 const each$4 = Tools.each, trim = Tools.trim;\n const queryParts = [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ];\n const DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n const safeSvgDataUrlElements = [\n 'img',\n 'video'\n ];\n const blockSvgDataUris = (allowSvgDataUrls, tagName) => {\n if (isNonNullable(allowSvgDataUrls)) {\n return !allowSvgDataUrls;\n } else {\n return isNonNullable(tagName) ? !contains$2(safeSvgDataUrlElements, tagName) : true;\n }\n };\n const decodeUri = encodedUri => {\n try {\n return decodeURIComponent(encodedUri);\n } catch (ex) {\n return unescape(encodedUri);\n }\n };\n const isInvalidUri = (settings, uri, tagName) => {\n const decodedUri = decodeUri(uri);\n if (settings.allow_script_urls) {\n return false;\n } else if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n return true;\n } else if (settings.allow_html_data_urls) {\n return false;\n } else if (/^data:image\\//i.test(decodedUri)) {\n return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(decodedUri);\n } else {\n return /^data:/i.test(decodedUri);\n }\n };\n class URI {\n constructor(url, settings = {}) {\n this.path = '';\n this.directory = '';\n url = trim(url);\n this.settings = settings;\n const baseUri = settings.base_uri;\n const self = this;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n const 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 const baseUrl = baseUri ? baseUri.path : new URI(document.location.href).directory;\n if ((baseUri === null || baseUri === void 0 ? void 0 : baseUri.protocol) === '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n const match = /([^#?]*)([#?]?.*)/.exec(url);\n if (match) {\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n }\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n const urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n if (urlMatch) {\n each$4(queryParts, (v, i) => {\n let part = urlMatch[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\n });\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 static parseDataUri(uri) {\n let type;\n const uriComponents = decodeURIComponent(uri).split(',');\n const matches = /data:([^;]+)/.exec(uriComponents[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type,\n data: uriComponents[1]\n };\n }\n static isDomSafe(uri, context, options = {}) {\n if (options.allow_script_urls) {\n return true;\n } else {\n const decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, '');\n return !isInvalidUri(options, decodedUri, context);\n }\n }\n static getDocumentBaseUrl(loc) {\n var _a;\n let baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = (_a = loc.href) !== null && _a !== void 0 ? _a : '';\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 setPath(path) {\n const pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n if (pathMatch) {\n this.path = pathMatch[0];\n this.directory = pathMatch[1];\n this.file = pathMatch[2];\n }\n this.source = '';\n this.getURI();\n }\n toRelative(uri) {\n if (uri === './') {\n return uri;\n }\n const 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 const 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 let 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 toAbsolute(uri, noHost) {\n const absoluteUri = new URI(uri, { base_uri: this });\n return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n }\n isSameOrigin(uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n const defaultPort = this.protocol ? DEFAULT_PORTS[this.protocol] : null;\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n }\n toRelPath(base, path) {\n let breakPoint = 0, out = '', i, l;\n const normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n const 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 toAbsPath(base, path) {\n let nb = 0;\n const tr = /\\/$/.test(path) ? '/' : '';\n const normalizedBase = base.split('/');\n const normalizedPath = path.split('/');\n const baseParts = [];\n each$4(normalizedBase, k => {\n if (k) {\n baseParts.push(k);\n }\n });\n const pathParts = [];\n for (let i = normalizedPath.length - 1; 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 pathParts.push(normalizedPath[i]);\n }\n const i = baseParts.length - nb;\n let outPath;\n if (i <= 0) {\n outPath = reverse(pathParts).join('/');\n } else {\n outPath = baseParts.slice(0, i).join('/') + '/' + reverse(pathParts).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 getURI(noProtoHost = false) {\n let 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 }\n\n const makeMap = Tools.makeMap, extend$1 = Tools.extend;\n const basePurifyConfig = {\n IN_PLACE: true,\n ALLOW_UNKNOWN_PROTOCOLS: true,\n ALLOWED_TAGS: [\n '#comment',\n '#cdata-section',\n 'body'\n ],\n ALLOWED_ATTR: []\n };\n const filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n const internalElementAttr = 'data-mce-type';\n const getPurifyConfig = (settings, mimeType) => {\n const config = { ...basePurifyConfig };\n config.PARSER_MEDIA_TYPE = mimeType;\n if (settings.allow_script_urls) {\n config.ALLOWED_URI_REGEXP = /.*/;\n } else if (settings.allow_html_data_urls) {\n config.ALLOWED_URI_REGEXP = /^(?!(\\w+script|mhtml):)/i;\n }\n return config;\n };\n const setupPurify = (settings, schema) => {\n const purify$1 = purify();\n const specialElements = schema.getSpecialElements();\n const validate = settings.validate;\n let uid = 0;\n purify$1.addHook('uponSanitizeElement', (ele, evt) => {\n var _a, _b, _c;\n if (ele.nodeType === COMMENT && !settings.allow_conditional_comments && /^\\[if/i.test((_a = ele.nodeValue) !== null && _a !== void 0 ? _a : '')) {\n ele.nodeValue = ' ' + ele.nodeValue;\n }\n const tagName = evt.tagName;\n if (ele.nodeType !== ELEMENT || tagName === 'body') {\n return;\n }\n const element = SugarElement.fromDom(ele);\n const lcTagName = tagName.toLowerCase();\n const isInternalElement = has$1(element, internalElementAttr);\n const bogus = get$9(element, 'data-mce-bogus');\n if (!isInternalElement && isString(bogus)) {\n if (bogus === 'all') {\n remove$6(element);\n } else {\n unwrap(element);\n }\n return;\n }\n const rule = schema.getElementRule(lcTagName);\n if (validate && !rule) {\n if (has$2(specialElements, lcTagName)) {\n remove$6(element);\n } else {\n unwrap(element);\n }\n return;\n } else {\n evt.allowedTags[tagName] = true;\n }\n if (validate && rule && !isInternalElement) {\n each$e((_b = rule.attributesForced) !== null && _b !== void 0 ? _b : [], attr => {\n set$2(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n });\n each$e((_c = rule.attributesDefault) !== null && _c !== void 0 ? _c : [], attr => {\n if (!has$1(element, attr.name)) {\n set$2(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n }\n });\n if (rule.attributesRequired && !exists(rule.attributesRequired, attr => has$1(element, attr))) {\n unwrap(element);\n return;\n }\n if (rule.removeEmptyAttrs && hasNone(element)) {\n unwrap(element);\n return;\n }\n if (rule.outputName && rule.outputName !== lcTagName) {\n mutate(element, rule.outputName);\n }\n }\n });\n purify$1.addHook('uponSanitizeAttribute', (ele, evt) => {\n const tagName = ele.tagName.toLowerCase();\n const {attrName, attrValue} = evt;\n evt.keepAttr = !validate || schema.isValid(tagName, attrName) || startsWith(attrName, 'data-') || startsWith(attrName, 'aria-');\n if (attrName in filteredUrlAttrs && isInvalidUri(settings, attrValue, tagName)) {\n evt.keepAttr = false;\n }\n if (evt.keepAttr) {\n evt.allowedAttributes[attrName] = true;\n if (attrName in schema.getBoolAttrs()) {\n evt.attrValue = attrName;\n }\n if (settings.allow_svg_data_urls && startsWith(attrValue, 'data:image/svg+xml')) {\n evt.forceKeepAttr = true;\n }\n } else if (ele.hasAttribute(internalElementAttr) && (attrName === 'id' || attrName === 'class' || attrName === 'style')) {\n evt.forceKeepAttr = true;\n }\n });\n return purify$1;\n };\n const transferChildren = (parent, nativeParent, specialElements) => {\n const parentName = parent.name;\n const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea';\n const childNodes = nativeParent.childNodes;\n for (let ni = 0, nl = childNodes.length; ni < nl; ni++) {\n const nativeChild = childNodes[ni];\n const child = new AstNode(nativeChild.nodeName.toLowerCase(), nativeChild.nodeType);\n if (isElement$6(nativeChild)) {\n const attributes = nativeChild.attributes;\n for (let ai = 0, al = attributes.length; ai < al; ai++) {\n const attr = attributes[ai];\n child.attr(attr.name, attr.value);\n }\n } else if (isText$a(nativeChild)) {\n child.value = nativeChild.data;\n if (isSpecial) {\n child.raw = true;\n }\n } else if (isComment(nativeChild) || isCData(nativeChild) || isPi(nativeChild)) {\n child.value = nativeChild.data;\n }\n transferChildren(child, nativeChild, specialElements);\n parent.append(child);\n }\n };\n const walkTree = (root, preprocessors, postprocessors) => {\n const traverseOrder = [];\n for (let node = root, lastNode = node; node; lastNode = node, node = node.walk()) {\n const tempNode = node;\n each$e(preprocessors, preprocess => preprocess(tempNode));\n if (isNullable(tempNode.parent) && tempNode !== root) {\n node = lastNode;\n } else {\n traverseOrder.push(tempNode);\n }\n }\n for (let i = traverseOrder.length - 1; i >= 0; i--) {\n const node = traverseOrder[i];\n each$e(postprocessors, postprocess => postprocess(node));\n }\n };\n const whitespaceCleaner = (root, schema, settings, args) => {\n const validate = settings.validate;\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n const textRootBlockElements = getTextRootBlockElements(schema);\n const allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n const hasWhitespaceParent = node => {\n let tempNode = node.parent;\n while (isNonNullable(tempNode)) {\n if (tempNode.name in whitespaceElements) {\n return true;\n } else {\n tempNode = tempNode.parent;\n }\n }\n return false;\n };\n const isTextRootBlockEmpty = node => {\n let tempNode = node;\n while (isNonNullable(tempNode)) {\n if (tempNode.name in textRootBlockElements) {\n return isEmpty(schema, nonEmptyElements, whitespaceElements, tempNode);\n } else {\n tempNode = tempNode.parent;\n }\n }\n return false;\n };\n const isBlock = node => node.name in blockElements && !isTransparentAstInline(schema, node);\n const isAtEdgeOfBlock = (node, start) => {\n const neighbour = start ? node.prev : node.next;\n if (isNonNullable(neighbour) || isNullable(node.parent)) {\n return false;\n }\n return isBlock(node.parent) && (node.parent !== root || args.isRootContent === true);\n };\n const preprocess = node => {\n var _a;\n if (node.type === 3) {\n if (!hasWhitespaceParent(node)) {\n let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.prev, isBlock) || isAtEdgeOfBlock(node, true)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n if (text.length === 0) {\n node.remove();\n } else {\n node.value = text;\n }\n }\n }\n };\n const postprocess = node => {\n var _a;\n if (node.type === 1) {\n const elementRule = schema.getElementRule(node.name);\n if (validate && elementRule) {\n const isNodeEmpty = isEmpty(schema, nonEmptyElements, whitespaceElements, node);\n if (elementRule.paddInEmptyBlock && isNodeEmpty && isTextRootBlockEmpty(node)) {\n paddEmptyNode(args, isBlock, node);\n } else if (elementRule.removeEmpty && isNodeEmpty) {\n if (isBlock(node)) {\n node.remove();\n } else {\n node.unwrap();\n }\n } else if (elementRule.paddEmpty && (isNodeEmpty || isPaddedWithNbsp(node))) {\n paddEmptyNode(args, isBlock, node);\n }\n }\n } else if (node.type === 3) {\n if (!hasWhitespaceParent(node)) {\n let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n if (node.next && isBlock(node.next) || isAtEdgeOfBlock(node, false)) {\n text = text.replace(endWhiteSpaceRegExp, '');\n }\n if (text.length === 0) {\n node.remove();\n } else {\n node.value = text;\n }\n }\n }\n };\n return [\n preprocess,\n postprocess\n ];\n };\n const getRootBlockName = (settings, args) => {\n var _a;\n const name = (_a = args.forced_root_block) !== null && _a !== void 0 ? _a : settings.forced_root_block;\n if (name === false) {\n return '';\n } else if (name === true) {\n return 'p';\n } else {\n return name;\n }\n };\n const DomParser = (settings = {}, schema = Schema()) => {\n const nodeFilterRegistry = create$7();\n const attributeFilterRegistry = create$7();\n const defaultedSettings = {\n validate: true,\n root_name: 'body',\n ...settings\n };\n const parser = new DOMParser();\n const purify = setupPurify(defaultedSettings, schema);\n const parseAndSanitizeWithContext = (html, rootName, format = 'html') => {\n const mimeType = format === 'xhtml' ? 'application/xhtml+xml' : 'text/html';\n const isSpecialRoot = has$2(schema.getSpecialElements(), rootName.toLowerCase());\n const content = isSpecialRoot ? `<${ rootName }>${ html }</${ rootName }>` : html;\n const wrappedHtml = format === 'xhtml' ? `<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>${ content }</body></html>` : `<body>${ content }</body>`;\n const body = parser.parseFromString(wrappedHtml, mimeType).body;\n purify.sanitize(body, getPurifyConfig(defaultedSettings, mimeType));\n purify.removed = [];\n return isSpecialRoot ? body.firstChild : body;\n };\n const addNodeFilter = nodeFilterRegistry.addFilter;\n const getNodeFilters = nodeFilterRegistry.getFilters;\n const removeNodeFilter = nodeFilterRegistry.removeFilter;\n const addAttributeFilter = attributeFilterRegistry.addFilter;\n const getAttributeFilters = attributeFilterRegistry.getFilters;\n const removeAttributeFilter = attributeFilterRegistry.removeFilter;\n const findInvalidChildren = (node, invalidChildren) => {\n if (isInvalid(schema, node)) {\n invalidChildren.push(node);\n }\n };\n const isWrappableNode = (blockElements, node) => {\n const isInternalElement = isString(node.attr(internalElementAttr));\n const isInlineElement = node.type === 1 && (!has$2(blockElements, node.name) && !isTransparentAstBlock(schema, node));\n return node.type === 3 || isInlineElement && !isInternalElement;\n };\n const addRootBlocks = (rootNode, rootBlockName) => {\n const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n let node = rootNode.firstChild, rootBlockNode = null;\n const trim = rootBlock => {\n var _a, _b;\n if (rootBlock) {\n node = rootBlock.firstChild;\n if (node && node.type === 3) {\n node.value = (_a = node.value) === null || _a === void 0 ? void 0 : _a.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlock.lastChild;\n if (node && node.type === 3) {\n node.value = (_b = node.value) === null || _b === void 0 ? void 0 : _b.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n const next = node.next;\n if (isWrappableNode(blockElements, node)) {\n if (!rootBlockNode) {\n rootBlockNode = new AstNode(rootBlockName, 1);\n rootBlockNode.attr(defaultedSettings.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 const parse = (html, args = {}) => {\n var _a;\n const validate = defaultedSettings.validate;\n const rootName = (_a = args.context) !== null && _a !== void 0 ? _a : defaultedSettings.root_name;\n const element = parseAndSanitizeWithContext(html, rootName, args.format);\n updateChildren(schema, element);\n const rootNode = new AstNode(rootName, 11);\n transferChildren(rootNode, element, schema.getSpecialElements());\n element.innerHTML = '';\n const [whitespacePre, whitespacePost] = whitespaceCleaner(rootNode, schema, defaultedSettings, args);\n const invalidChildren = [];\n const invalidFinder = validate ? node => findInvalidChildren(node, invalidChildren) : noop;\n const matches = {\n nodes: {},\n attributes: {}\n };\n const matchFinder = node => matchNode$1(getNodeFilters(), getAttributeFilters(), node, matches);\n walkTree(rootNode, [\n whitespacePre,\n matchFinder\n ], [\n whitespacePost,\n invalidFinder\n ]);\n invalidChildren.reverse();\n if (validate && invalidChildren.length > 0) {\n if (args.context) {\n const {\n pass: topLevelChildren,\n fail: otherChildren\n } = partition$2(invalidChildren, child => child.parent === rootNode);\n cleanInvalidNodes(otherChildren, schema, matchFinder);\n args.invalid = topLevelChildren.length > 0;\n } else {\n cleanInvalidNodes(invalidChildren, schema, matchFinder);\n }\n }\n const rootBlockName = getRootBlockName(defaultedSettings, args);\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks(rootNode, rootBlockName);\n }\n if (!args.invalid) {\n runFilters(matches, args);\n }\n return rootNode;\n };\n const exports = {\n schema,\n addAttributeFilter,\n getAttributeFilters,\n removeAttributeFilter,\n addNodeFilter,\n getNodeFilters,\n removeNodeFilter,\n parse\n };\n register$4(exports, defaultedSettings);\n register$5(exports, defaultedSettings, schema);\n return exports;\n };\n\n const serializeContent = content => isTreeNode(content) ? HtmlSerializer({ validate: false }).serialize(content) : content;\n const withSerializedContent = (content, fireEvent) => {\n const serializedContent = serializeContent(content);\n const eventArgs = fireEvent(serializedContent);\n if (eventArgs.isDefaultPrevented()) {\n return eventArgs;\n } else if (isTreeNode(content)) {\n if (eventArgs.content !== serializedContent) {\n const rootNode = DomParser({\n validate: false,\n forced_root_block: false\n }).parse(eventArgs.content, { context: content.name });\n return {\n ...eventArgs,\n content: rootNode\n };\n } else {\n return {\n ...eventArgs,\n content\n };\n }\n } else {\n return eventArgs;\n }\n };\n const preProcessGetContent = (editor, args) => {\n if (args.no_events) {\n return Result.value(args);\n } else {\n const eventArgs = fireBeforeGetContent(editor, args);\n if (eventArgs.isDefaultPrevented()) {\n return Result.error(fireGetContent(editor, {\n content: '',\n ...eventArgs\n }).content);\n } else {\n return Result.value(eventArgs);\n }\n }\n };\n const postProcessGetContent = (editor, content, args) => {\n if (args.no_events) {\n return content;\n } else {\n const processedEventArgs = withSerializedContent(content, c => fireGetContent(editor, {\n ...args,\n content: c\n }));\n return processedEventArgs.content;\n }\n };\n const preProcessSetContent = (editor, args) => {\n if (args.no_events) {\n return Result.value(args);\n } else {\n const processedEventArgs = withSerializedContent(args.content, content => fireBeforeSetContent(editor, {\n ...args,\n content\n }));\n if (processedEventArgs.isDefaultPrevented()) {\n fireSetContent(editor, processedEventArgs);\n return Result.error(undefined);\n } else {\n return Result.value(processedEventArgs);\n }\n }\n };\n const postProcessSetContent = (editor, content, args) => {\n if (!args.no_events) {\n fireSetContent(editor, {\n ...args,\n content\n });\n }\n };\n\n const tableModel = (element, width, rows) => ({\n element,\n width,\n rows\n });\n const tableRow = (element, cells) => ({\n element,\n cells\n });\n const cellPosition = (x, y) => ({\n x,\n y\n });\n const getSpan = (td, key) => {\n return getOpt(td, key).bind(toInt).getOr(1);\n };\n const fillout = (table, x, y, tr, td) => {\n const rowspan = getSpan(td, 'rowspan');\n const colspan = getSpan(td, 'colspan');\n const rows = table.rows;\n for (let y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep$1(tr), []);\n }\n for (let x2 = x; x2 < x + colspan; x2++) {\n const cells = rows[y2].cells;\n cells[x2] = y2 === y && x2 === x ? td : shallow$1(td);\n }\n }\n };\n const cellExists = (table, x, y) => {\n const rows = table.rows;\n const cells = rows[y] ? rows[y].cells : [];\n return !!cells[x];\n };\n const skipCellsX = (table, x, y) => {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n const getWidth = rows => {\n return foldl(rows, (acc, row) => {\n return row.cells.length > acc ? row.cells.length : acc;\n }, 0);\n };\n const findElementPos = (table, element) => {\n const rows = table.rows;\n for (let y = 0; y < rows.length; y++) {\n const cells = rows[y].cells;\n for (let 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 const extractRows = (table, sx, sy, ex, ey) => {\n const newRows = [];\n const rows = table.rows;\n for (let y = sy; y <= ey; y++) {\n const cells = rows[y].cells;\n const 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 const subTable = (table, startPos, endPos) => {\n const sx = startPos.x, sy = startPos.y;\n const ex = endPos.x, ey = endPos.y;\n const 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 const createDomTable = (table, rows) => {\n const tableElement = shallow$1(table.element);\n const tableBody = SugarElement.fromTag('tbody');\n append(tableBody, rows);\n append$1(tableElement, tableBody);\n return tableElement;\n };\n const modelRowsToDomRows = table => {\n return map$3(table.rows, row => {\n const cells = map$3(row.cells, cell => {\n const td = deep$1(cell);\n remove$b(td, 'colspan');\n remove$b(td, 'rowspan');\n return td;\n });\n const tr = shallow$1(row.element);\n append(tr, cells);\n return tr;\n });\n };\n const fromDom = tableElm => {\n const table = tableModel(shallow$1(tableElm), 0, []);\n each$e(descendants(tableElm, 'tr'), (tr, y) => {\n each$e(descendants(tr, 'td,th'), (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 const toDom = table => {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n const subsection = (table, startElement, endElement) => {\n return findElementPos(table, startElement).bind(startPos => {\n return findElementPos(table, endElement).map(endPos => {\n return subTable(table, startPos, endPos);\n });\n });\n };\n\n const findParentListContainer = parents => find$2(parents, elm => name(elm) === 'ul' || name(elm) === 'ol');\n const getFullySelectedListWrappers = (parents, rng) => find$2(parents, elm => name(elm) === 'li' && hasAllContentsSelected(elm, rng)).fold(constant([]), _li => findParentListContainer(parents).map(listCont => {\n const listElm = SugarElement.fromTag(name(listCont));\n const listStyles = filter$4(getAllRaw(listCont), (_style, name) => startsWith(name, 'list-style'));\n setAll(listElm, listStyles);\n return [\n SugarElement.fromTag('li'),\n listElm\n ];\n }).getOr([]));\n const wrap = (innerElm, elms) => {\n const wrapped = foldl(elms, (acc, elm) => {\n append$1(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n const directListWrappers = commonAnchorContainer => {\n if (isListItem$1(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), listElm => [\n commonAnchorContainer,\n listElm\n ]);\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n const getWrapElements = (rootNode, rng) => {\n const commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n const parents = parentsAndSelf(commonAnchorContainer, rootNode);\n const wrapElements = filter$5(parents, isWrapElement);\n const listWrappers = getFullySelectedListWrappers(parents, rng);\n const allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map$3(allWrappers, shallow$1);\n };\n const emptyFragment = () => fromElements([]);\n const getFragmentFromRange = (rootNode, rng) => wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n const getParentTable = (rootElm, cell) => ancestor$2(cell, 'table', curry(eq, rootElm));\n const getTableFragment = (rootNode, selectedTableCells) => getParentTable(rootNode, selectedTableCells[0]).bind(tableElm => {\n const firstCell = selectedTableCells[0];\n const lastCell = selectedTableCells[selectedTableCells.length - 1];\n const fullTableModel = fromDom(tableElm);\n return subsection(fullTableModel, firstCell, lastCell).map(sectionedTableModel => fromElements([toDom(sectionedTableModel)]));\n }).getOrThunk(emptyFragment);\n const getSelectionFragment = (rootNode, ranges) => ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n const read$3 = (rootNode, ranges) => {\n const selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n\n const isCollapsibleWhitespace = (text, index) => index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n const getInnerText = bin => {\n return trim$1(bin.innerText);\n };\n const getContextNodeName = parentBlockOpt => parentBlockOpt.map(block => block.nodeName).getOr('div').toLowerCase();\n const getTextContent = editor => Optional.from(editor.selection.getRng()).map(rng => {\n var _a;\n const parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n const body = editor.getBody();\n const contextNodeName = getContextNodeName(parentBlockOpt);\n const rangeContentClone = SugarElement.fromDom(rng.cloneContents());\n cleanupBogusElements(rangeContentClone);\n cleanupInputNames(rangeContentClone);\n const bin = editor.dom.add(body, contextNodeName, {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rangeContentClone.dom);\n const text = getInnerText(bin);\n const nonRenderedText = trim$1((_a = bin.textContent) !== null && _a !== void 0 ? _a : '');\n editor.dom.remove(bin);\n if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n const parentBlock = parentBlockOpt.getOr(body);\n const parentBlockText = getInnerText(parentBlock);\n const textIndex = parentBlockText.indexOf(text);\n if (textIndex === -1) {\n return text;\n } else {\n const hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n const hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n }\n } else {\n return text;\n }\n }).getOr('');\n const getSerializedContent = (editor, args) => {\n const rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n const sel = editor.selection.getSel();\n const ranges = processRanges(editor, getRanges$1(sel));\n const 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 const extractSelectedContent = (editor, args) => {\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n const content = getSerializedContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n return editor.selection.isCollapsed() ? '' : content;\n }\n }\n };\n const setupArgs$3 = (args, format) => ({\n ...args,\n format,\n get: true,\n selection: true,\n getInner: true\n });\n const getSelectedContentInternal = (editor, format, args = {}) => {\n const defaultedArgs = setupArgs$3(args, format);\n return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n const content = extractSelectedContent(editor, updatedArgs);\n return postProcessGetContent(editor, content, updatedArgs);\n });\n };\n\n const KEEP = 0, INSERT = 1, DELETE = 2;\n const diff = (left, right) => {\n const size = left.length + right.length + 2;\n const vDown = new Array(size);\n const vUp = new Array(size);\n const snake = (start, end, diag) => {\n return {\n start,\n end,\n diag\n };\n };\n const buildScript = (start1, end1, start2, end2, script) => {\n const 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 let i = start1;\n let 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 (let 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 const buildSnake = (start, diag, end1, end2) => {\n let 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 const getMiddleSnake = (start1, end1, start2, end2) => {\n const m = end1 - start1;\n const n = end2 - start2;\n if (m === 0 || n === 0) {\n return null;\n }\n const delta = m - n;\n const sum = n + m;\n const offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n vDown[1 + offset] = start1;\n vUp[1 + offset] = end1 + 1;\n let 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 return null;\n };\n const script = [];\n buildScript(0, left.length, 0, right.length, script);\n return script;\n };\n\n const getOuterHtml = elm => {\n if (isElement$6(elm)) {\n return elm.outerHTML;\n } else if (isText$a(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (isComment(elm)) {\n return '<!--' + elm.data + '-->';\n }\n return '';\n };\n const createFragment = html => {\n let node;\n const container = document.createElement('div');\n const 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 const insertAt = (elm, html, index) => {\n const fragment = createFragment(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n const target = elm.childNodes[index];\n elm.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n const removeAt = (elm, index) => {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n const target = elm.childNodes[index];\n elm.removeChild(target);\n }\n };\n const applyDiff = (diff, elm) => {\n let index = 0;\n each$e(diff, 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 const read$2 = elm => {\n return filter$5(map$3(from(elm.childNodes), getOuterHtml), item => {\n return item.length > 0;\n });\n };\n const write = (fragments, elm) => {\n const currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n applyDiff(diff(currentFragments, fragments), elm);\n return elm;\n };\n\n const lazyTempDocument = cached(() => document.implementation.createHTMLDocument('undo'));\n const hasIframes = html => {\n return html.indexOf('</iframe>') !== -1;\n };\n const createFragmentedLevel = fragments => {\n return {\n type: 'fragmented',\n fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n const createCompleteLevel = content => {\n return {\n type: 'complete',\n fragments: null,\n content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n const createFromEditor = editor => {\n const fragments = read$2(editor.getBody());\n const trimmedFragments = bind$3(fragments, html => {\n const trimmed = trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n const content = trimmedFragments.join('');\n return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n };\n const applyToEditor = (editor, level, before) => {\n const 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 if (bookmark) {\n editor.selection.moveToBookmark(bookmark);\n editor.selection.scrollIntoView();\n }\n };\n const getLevelContent = level => {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n const getCleanLevelContent = level => {\n const elm = SugarElement.fromTag('body', lazyTempDocument());\n set(elm, getLevelContent(level));\n each$e(descendants(elm, '*[data-mce-bogus]'), unwrap);\n return get$6(elm);\n };\n const hasEqualContent = (level1, level2) => getLevelContent(level1) === getLevelContent(level2);\n const hasEqualCleanedContent = (level1, level2) => getCleanLevelContent(level1) === getCleanLevelContent(level2);\n const isEq$1 = (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 const isUnlocked = locks => locks.get() === 0;\n\n const setTyping = (undoManager, typing, locks) => {\n if (isUnlocked(locks)) {\n undoManager.typing = typing;\n }\n };\n const endTyping = (undoManager, locks) => {\n if (undoManager.typing) {\n setTyping(undoManager, false, locks);\n undoManager.add();\n }\n };\n const endTypingLevelIgnoreLocks = undoManager => {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n\n const beforeChange$1 = (editor, locks, beforeBookmark) => {\n if (isUnlocked(locks)) {\n beforeBookmark.set(getUndoBookmark(editor.selection));\n }\n };\n const addUndoLevel$1 = (editor, undoManager, index, locks, beforeBookmark, level, event) => {\n const currentLevel = createFromEditor(editor);\n const newLevel = Tools.extend(level || {}, currentLevel);\n if (!isUnlocked(locks) || editor.removed) {\n return null;\n }\n const lastLevel = undoManager.data[index.get()];\n if (editor.dispatch('BeforeAddUndo', {\n level: newLevel,\n lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && isEq$1(lastLevel, newLevel)) {\n return null;\n }\n if (undoManager.data[index.get()]) {\n beforeBookmark.get().each(bm => {\n undoManager.data[index.get()].beforeBookmark = bm;\n });\n }\n const customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n if (customUndoRedoLevels) {\n if (undoManager.data.length > customUndoRedoLevels) {\n for (let 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 newLevel.bookmark = getUndoBookmark(editor.selection);\n if (index.get() < undoManager.data.length - 1) {\n undoManager.data.length = index.get() + 1;\n }\n undoManager.data.push(newLevel);\n index.set(undoManager.data.length - 1);\n const args = {\n level: newLevel,\n lastLevel,\n originalEvent: event\n };\n if (index.get() > 0) {\n editor.setDirty(true);\n editor.dispatch('AddUndo', args);\n editor.dispatch('change', args);\n } else {\n editor.dispatch('AddUndo', args);\n }\n return newLevel;\n };\n const clear$1 = (editor, undoManager, index) => {\n undoManager.data = [];\n index.set(0);\n undoManager.typing = false;\n editor.dispatch('ClearUndos');\n };\n const extra$1 = (editor, undoManager, index, callback1, callback2) => {\n if (undoManager.transact(callback1)) {\n const bookmark = undoManager.data[index.get()].bookmark;\n const 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 const redo$1 = (editor, index, data) => {\n let 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.dispatch('Redo', { level });\n }\n return level;\n };\n const undo$1 = (editor, undoManager, locks, index) => {\n let 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.dispatch('Undo', { level });\n }\n return level;\n };\n const reset$1 = undoManager => {\n undoManager.clear();\n undoManager.add();\n };\n const hasUndo$1 = (editor, undoManager, index) => index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n const hasRedo$1 = (undoManager, index) => index.get() < undoManager.data.length - 1 && !undoManager.typing;\n const transact$1 = (undoManager, locks, callback) => {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n undoManager.ignore(callback);\n return undoManager.add();\n };\n const ignore$1 = (locks, callback) => {\n try {\n locks.set(locks.get() + 1);\n callback();\n } finally {\n locks.set(locks.get() - 1);\n }\n };\n\n const addVisualInternal = (editor, elm) => {\n const dom = editor.dom;\n const scope = isNonNullable(elm) ? elm : editor.getBody();\n each$e(dom.select('table,a', scope), matchedElm => {\n switch (matchedElm.nodeName) {\n case 'TABLE':\n const cls = getVisualAidsTableClass(editor);\n const 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 const value = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n const cls = getVisualAidsAnchorClass(editor);\n if (value && editor.hasVisual) {\n dom.addClass(matchedElm, cls);\n } else {\n dom.removeClass(matchedElm, cls);\n }\n }\n break;\n }\n });\n editor.dispatch('VisualAid', {\n element: elm,\n hasVisual: editor.hasVisual\n });\n };\n\n const makePlainAdaptor = editor => ({\n init: { bindEvents: noop },\n undoManager: {\n beforeChange: (locks, beforeBookmark) => beforeChange$1(editor, locks, beforeBookmark),\n add: (undoManager, index, locks, beforeBookmark, level, event) => addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event),\n undo: (undoManager, locks, index) => undo$1(editor, undoManager, locks, index),\n redo: (index, data) => redo$1(editor, index, data),\n clear: (undoManager, index) => clear$1(editor, undoManager, index),\n reset: undoManager => reset$1(undoManager),\n hasUndo: (undoManager, index) => hasUndo$1(editor, undoManager, index),\n hasRedo: (undoManager, index) => hasRedo$1(undoManager, index),\n transact: (undoManager, locks, callback) => transact$1(undoManager, locks, callback),\n ignore: (locks, callback) => ignore$1(locks, callback),\n extra: (undoManager, index, callback1, callback2) => extra$1(editor, undoManager, index, callback1, callback2)\n },\n formatter: {\n match: (name, vars, node, similar) => match$2(editor, name, vars, node, similar),\n matchAll: (names, vars) => matchAll(editor, names, vars),\n matchNode: (node, name, vars, similar) => matchNode(editor, node, name, vars, similar),\n canApply: name => canApply(editor, name),\n closest: names => closest$1(editor, names),\n apply: (name, vars, node) => applyFormat$1(editor, name, vars, node),\n remove: (name, vars, node, similar) => remove$2(editor, name, vars, node, similar),\n toggle: (name, vars, node) => toggle(editor, name, vars, node),\n formatChanged: (registeredFormatListeners, formats, callback, similar, vars) => formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars)\n },\n editor: {\n getContent: args => getContentInternal(editor, args),\n setContent: (content, args) => setContentInternal(editor, content, args),\n insertContent: (value, details) => insertHtmlAtCaret(editor, value, details),\n addVisual: elm => addVisualInternal(editor, elm)\n },\n selection: { getContent: (format, args) => getSelectedContentInternal(editor, format, args) },\n autocompleter: {\n addDecoration: range => create$9(editor, range),\n removeDecoration: () => remove$3(editor, SugarElement.fromDom(editor.getBody()))\n },\n raw: { getModel: () => Optional.none() }\n });\n const makeRtcAdaptor = rtcEditor => {\n const defaultVars = vars => isObject(vars) ? vars : {};\n const {init, undoManager, formatter, editor, selection, autocompleter, raw} = rtcEditor;\n return {\n init: { bindEvents: init.bindEvents },\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: (_undoManager, _locks, fn) => undoManager.transact(fn),\n ignore: (_locks, callback) => undoManager.ignore(callback),\n extra: (_undoManager, _index, callback1, callback2) => undoManager.extra(callback1, callback2)\n },\n formatter: {\n match: (name, vars, _node, similar) => formatter.match(name, defaultVars(vars), similar),\n matchAll: formatter.matchAll,\n matchNode: formatter.matchNode,\n canApply: name => formatter.canApply(name),\n closest: names => formatter.closest(names),\n apply: (name, vars, _node) => formatter.apply(name, defaultVars(vars)),\n remove: (name, vars, _node, _similar) => formatter.remove(name, defaultVars(vars)),\n toggle: (name, vars, _node) => formatter.toggle(name, defaultVars(vars)),\n formatChanged: (_rfl, formats, callback, similar, vars) => formatter.formatChanged(formats, callback, similar, vars)\n },\n editor: {\n getContent: args => editor.getContent(args),\n setContent: (content, args) => {\n return {\n content: editor.setContent(content, args),\n html: ''\n };\n },\n insertContent: (content, _details) => {\n editor.insertContent(content);\n return '';\n },\n addVisual: editor.addVisual\n },\n selection: { getContent: (_format, args) => selection.getContent(args) },\n autocompleter: {\n addDecoration: autocompleter.addDecoration,\n removeDecoration: autocompleter.removeDecoration\n },\n raw: { getModel: () => Optional.some(raw.getRawModel()) }\n };\n };\n const makeNoopAdaptor = () => {\n const nul = constant(null);\n const empty = constant('');\n return {\n init: { bindEvents: noop },\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: constant({\n content: '',\n html: ''\n }),\n insertContent: constant(''),\n addVisual: noop\n },\n selection: { getContent: empty },\n autocompleter: {\n addDecoration: noop,\n removeDecoration: noop\n },\n raw: { getModel: constant(Optional.none()) }\n };\n };\n const isRtc = editor => has$2(editor.plugins, 'rtc');\n const getRtcSetup = editor => get$a(editor.plugins, 'rtc').bind(rtcPlugin => Optional.from(rtcPlugin.setup));\n const setup$s = editor => {\n const editorCast = editor;\n return getRtcSetup(editor).fold(() => {\n editorCast.rtcInstance = makePlainAdaptor(editor);\n return Optional.none();\n }, setup => {\n editorCast.rtcInstance = makeNoopAdaptor();\n return Optional.some(() => setup().then(rtcEditor => {\n editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n return rtcEditor.rtc.isRemote;\n }));\n });\n };\n const getRtcInstanceWithFallback = editor => editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n const getRtcInstanceWithError = editor => {\n const 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 const beforeChange = (editor, locks, beforeBookmark) => {\n getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n };\n const addUndoLevel = (editor, undoManager, index, locks, beforeBookmark, level, event) => getRtcInstanceWithError(editor).undoManager.add(undoManager, index, locks, beforeBookmark, level, event);\n const undo = (editor, undoManager, locks, index) => getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n const redo = (editor, index, data) => getRtcInstanceWithError(editor).undoManager.redo(index, data);\n const clear = (editor, undoManager, index) => {\n getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n };\n const reset = (editor, undoManager) => {\n getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n };\n const hasUndo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n const hasRedo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n const transact = (editor, undoManager, locks, callback) => getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n const ignore = (editor, locks, callback) => {\n getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n };\n const extra = (editor, undoManager, index, callback1, callback2) => {\n getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n };\n const matchFormat = (editor, name, vars, node, similar) => getRtcInstanceWithError(editor).formatter.match(name, vars, node, similar);\n const matchAllFormats = (editor, names, vars) => getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n const matchNodeFormat = (editor, node, name, vars, similar) => getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n const canApplyFormat = (editor, name) => getRtcInstanceWithError(editor).formatter.canApply(name);\n const closestFormat = (editor, names) => getRtcInstanceWithError(editor).formatter.closest(names);\n const applyFormat = (editor, name, vars, node) => {\n getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n };\n const removeFormat = (editor, name, vars, node, similar) => {\n getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n };\n const toggleFormat = (editor, name, vars, node) => {\n getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n };\n const formatChanged = (editor, registeredFormatListeners, formats, callback, similar, vars) => getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n const getContent$2 = (editor, args) => getRtcInstanceWithFallback(editor).editor.getContent(args);\n const setContent$2 = (editor, content, args) => getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n const insertContent$1 = (editor, value, details) => getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n const getSelectedContent = (editor, format, args) => getRtcInstanceWithError(editor).selection.getContent(format, args);\n const addVisual$1 = (editor, elm) => getRtcInstanceWithError(editor).editor.addVisual(elm);\n const bindEvents = editor => getRtcInstanceWithError(editor).init.bindEvents();\n const addAutocompleterDecoration = (editor, range) => getRtcInstanceWithError(editor).autocompleter.addDecoration(range);\n const removeAutocompleterDecoration = editor => getRtcInstanceWithError(editor).autocompleter.removeDecoration();\n\n const getContent$1 = (editor, args = {}) => {\n const format = args.format ? args.format : 'html';\n return getSelectedContent(editor, format, args);\n };\n\n const removeEmpty = text => {\n if (text.dom.length === 0) {\n remove$6(text);\n return Optional.none();\n } else {\n return Optional.some(text);\n }\n };\n const walkPastBookmark = (node, start) => node.filter(elm => BookmarkManager.isBookmarkNode(elm.dom)).bind(start ? nextSibling : prevSibling);\n const merge$1 = (outer, inner, rng, start) => {\n const outerElm = outer.dom;\n const innerElm = inner.dom;\n const 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 const normalizeTextIfRequired = (inner, start) => {\n parent(inner).each(root => {\n const 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 const mergeAndNormalizeText = (outerNode, innerNode, rng, start) => {\n outerNode.bind(outer => {\n const normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n normalizer(outer.dom, start ? outer.dom.length : 0);\n return innerNode.filter(isText$b).map(inner => merge$1(outer, inner, rng, start));\n }).orThunk(() => {\n const innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$b);\n return innerTextNode.map(inner => normalizeTextIfRequired(inner, start));\n });\n };\n const rngSetContent = (rng, fragment) => {\n const firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n const lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n rng.deleteContents();\n rng.insertNode(fragment);\n const prevText = firstChild.bind(prevSibling).filter(isText$b).bind(removeEmpty);\n const nextText = lastChild.bind(nextSibling).filter(isText$b).bind(removeEmpty);\n mergeAndNormalizeText(prevText, firstChild, rng, true);\n mergeAndNormalizeText(nextText, lastChild, rng, false);\n rng.collapse(false);\n };\n const setupArgs$2 = (args, content) => ({\n format: 'html',\n ...args,\n set: true,\n selection: true,\n content\n });\n const cleanContent = (editor, args) => {\n if (args.format !== 'raw') {\n const rng = editor.selection.getRng();\n const contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n const contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n const node = editor.parser.parse(args.content, {\n forced_root_block: false,\n ...contextArgs,\n ...args\n });\n return HtmlSerializer({ validate: false }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n const setContent$1 = (editor, content, args = {}) => {\n const defaultedArgs = setupArgs$2(args, content);\n preProcessSetContent(editor, defaultedArgs).each(updatedArgs => {\n const cleanedContent = cleanContent(editor, updatedArgs);\n const rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(cleanedContent));\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n postProcessSetContent(editor, cleanedContent, updatedArgs);\n });\n };\n\n const deleteFromCallbackMap = (callbackMap, selector, callback) => {\n if (has$2(callbackMap, selector)) {\n const newCallbacks = filter$5(callbackMap[selector], cb => cb !== callback);\n if (newCallbacks.length === 0) {\n delete callbackMap[selector];\n } else {\n callbackMap[selector] = newCallbacks;\n }\n }\n };\n var SelectorChanged = (dom, editor) => {\n let selectorChangedData;\n let currentSelectors;\n const findMatchingNode = (selector, nodes) => find$2(nodes, node => dom.is(node, selector));\n const getParents = elem => dom.getParents(elem, undefined, dom.getRoot());\n const setup = () => {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', e => {\n const node = e.element;\n const parents = getParents(node);\n const matchedSelectors = {};\n each$d(selectorChangedData, (callbacks, selector) => {\n findMatchingNode(selector, parents).each(node => {\n if (!currentSelectors[selector]) {\n each$e(callbacks, callback => {\n callback(true, {\n node,\n selector,\n parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n });\n });\n each$d(currentSelectors, (callbacks, selector) => {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n each$e(callbacks, callback => {\n callback(false, {\n node,\n selector,\n parents\n });\n });\n }\n });\n });\n };\n return {\n selectorChangedWithUnbind: (selector, callback) => {\n if (!selectorChangedData) {\n setup();\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n findMatchingNode(selector, getParents(editor.selection.getStart())).each(() => {\n currentSelectors[selector] = selectorChangedData[selector];\n });\n return {\n unbind: () => {\n deleteFromCallbackMap(selectorChangedData, selector, callback);\n deleteFromCallbackMap(currentSelectors, selector, callback);\n }\n };\n }\n };\n };\n\n const isAttachedToDom = node => {\n return !!(node && node.ownerDocument) && contains(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n };\n const isValidRange = rng => {\n if (!rng) {\n return false;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n const EditorSelection = (dom, win, serializer, editor) => {\n let selectedRange;\n let explicitRange;\n const {selectorChangedWithUnbind} = SelectorChanged(dom, editor);\n const setCursorLocation = (node, offset) => {\n const 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 const getContent = args => getContent$1(editor, args);\n const setContent = (content, args) => setContent$1(editor, content, args);\n const getStart$1 = real => getStart(editor.getBody(), getRng$1(), real);\n const getEnd = real => getEnd$1(editor.getBody(), getRng$1(), real);\n const getBookmark = (type, normalized) => bookmarkManager.getBookmark(type, normalized);\n const moveToBookmark = bookmark => bookmarkManager.moveToBookmark(bookmark);\n const select$1 = (node, content) => {\n select(dom, node, content).each(setRng);\n return node;\n };\n const isCollapsed = () => {\n const 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 const collapse = toStart => {\n const rng = getRng$1();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n const getSel = () => win.getSelection ? win.getSelection() : win.document.selection;\n const getRng$1 = () => {\n let rng;\n const tryCompareBoundaryPoints = (how, sourceRange, destinationRange) => {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n const doc = win.document;\n if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n const bookmark = getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(r => processRanges(editor, [r])[0]).getOr(doc.createRange());\n }\n }\n try {\n const selection = getSel();\n if (selection && !isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = doc.createRange();\n }\n rng = processRanges(editor, [rng])[0];\n }\n } catch (ex) {\n }\n if (!rng) {\n rng = doc.createRange();\n }\n if (isDocument$1(rng.startContainer) && rng.collapsed) {\n const 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 const setRng = (rng, forward) => {\n if (!isValidRange(rng)) {\n return;\n }\n const sel = getSel();\n const evt = editor.dispatch('SetSelectionRange', {\n range: rng,\n 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 === null || sel === void 0 ? void 0 : sel.setBaseAndExtent)) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n const node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.nodeName === '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.dispatch('AfterSetSelectionRange', {\n range: rng,\n forward\n });\n };\n const setNode = elm => {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n const getNode$1 = () => getNode(editor.getBody(), getRng$1());\n const getSelectedBlocks$1 = (startElm, endElm) => getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n const isForward = () => {\n const sel = getSel();\n const anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n const focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n return true;\n }\n const anchorRange = dom.createRng();\n const focusRange = dom.createRng();\n try {\n anchorRange.setStart(anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange.setStart(focusNode, sel.focusOffset);\n focusRange.collapse(true);\n } catch (e) {\n return true;\n }\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n const normalize = () => {\n const rng = getRng$1();\n const sel = getSel();\n if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n const normRng = normalize$2(dom, rng);\n normRng.each(normRng => {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n const selectorChanged = (selector, callback) => {\n selectorChangedWithUnbind(selector, callback);\n return exports;\n };\n const getScrollContainer = () => {\n let scrollContainer;\n let 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 const scrollIntoView = (elm, alignToTop) => {\n if (isNonNullable(elm)) {\n scrollElementIntoView(editor, elm, alignToTop);\n } else {\n scrollRangeIntoView(editor, getRng$1(), alignToTop);\n }\n };\n const placeCaretAt = (clientX, clientY) => setRng(fromPoint(clientX, clientY, editor.getDoc()));\n const getBoundingClientRect = () => {\n const rng = getRng$1();\n return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n const destroy = () => {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n const expand = (options = { type: 'word' }) => setRng(RangeUtils(dom).expand(getRng$1(), options));\n const exports = {\n dom,\n win,\n serializer,\n editor,\n expand,\n collapse,\n setCursorLocation,\n getContent,\n setContent,\n getBookmark,\n moveToBookmark,\n select: select$1,\n isCollapsed,\n isForward,\n setNode,\n getNode: getNode$1,\n getSel,\n setRng,\n getRng: getRng$1,\n getStart: getStart$1,\n getEnd,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize,\n selectorChanged,\n selectorChangedWithUnbind,\n getScrollContainer,\n scrollIntoView,\n placeCaretAt,\n getBoundingClientRect,\n destroy\n };\n const bookmarkManager = BookmarkManager(exports);\n const controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n const register$3 = (htmlParser, settings, dom) => {\n htmlParser.addAttributeFilter('data-mce-tabindex', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n const 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', (nodes, name) => {\n const internalName = 'data-mce-' + name;\n const urlConverter = settings.url_converter;\n const urlConverterScope = settings.url_converter_scope;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let 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', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let value = node.attr('class');\n if (value) {\n value = value.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', (nodes, name, args) => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n const hasChildren = Optional.from(node.firstChild).exists(firstChild => {\n var _a;\n return !isZwsp((_a = firstChild.value) !== null && _a !== void 0 ? _a : '');\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('noscript', nodes => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i].firstChild;\n if (node) {\n node.value = Entities.decode((_a = node.value) !== null && _a !== void 0 ? _a : '');\n }\n }\n });\n htmlParser.addNodeFilter('script,style', (nodes, name) => {\n var _a;\n const trim = value => {\n return value.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi, '').replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const firstChild = node.firstChild;\n const value = (_a = firstChild === null || firstChild === void 0 ? void 0 : firstChild.value) !== null && _a !== void 0 ? _a : '';\n if (name === 'script') {\n const 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' && firstChild && value.length > 0) {\n firstChild.value = '// <![CDATA[\\n' + trim(value) + '\\n// ]]>';\n }\n } else {\n if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n firstChild.value = '<!--\\n' + trim(value) + '\\n-->';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const value = node.value;\n if (settings.preserve_cdata && (value === null || value === void 0 ? void 0 : value.indexOf('[CDATA[')) === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = dom.decode(value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n } else if ((value === null || value === void 0 ? void 0 : value.indexOf('mce:protected ')) === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n const 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', nodes => {\n each$e(nodes, 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-block,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n };\n const trimTrailingBr = rootNode => {\n const isBr = node => {\n return (node === null || node === void 0 ? void 0 : node.name) === 'br';\n };\n const brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n const brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n\n const preProcess$1 = (editor, node, args) => {\n let oldDoc;\n const dom = editor.dom;\n let clonedNode = node.cloneNode(true);\n const impl = document.implementation;\n if (impl.createHTMLDocument) {\n const doc = impl.createHTMLDocument('');\n Tools.each(clonedNode.nodeName === 'BODY' ? clonedNode.childNodes : [clonedNode], node => {\n doc.body.appendChild(doc.importNode(node, true));\n });\n if (clonedNode.nodeName !== 'BODY') {\n clonedNode = doc.body.firstChild;\n } else {\n clonedNode = doc.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc;\n }\n firePreProcess(editor, {\n ...args,\n node: clonedNode\n });\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return clonedNode;\n };\n const shouldFireEvent = (editor, args) => {\n return isNonNullable(editor) && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n const process$1 = (editor, node, args) => {\n return shouldFireEvent(editor, args) ? preProcess$1(editor, node, args) : node;\n };\n\n const addTempAttr = (htmlParser, tempAttrs, name) => {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n const postProcess = (editor, args, content) => {\n if (!args.no_events && editor) {\n const outArgs = firePostProcess(editor, {\n ...args,\n content\n });\n return outArgs.content;\n } else {\n return content;\n }\n };\n const getHtmlFromNode = (dom, node, args) => {\n const html = trim$1(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n };\n const parseHtml = (htmlParser, html, args) => {\n const parserArgs = args.selection ? {\n forced_root_block: false,\n ...args\n } : args;\n const rootNode = htmlParser.parse(html, parserArgs);\n trimTrailingBr(rootNode);\n return rootNode;\n };\n const serializeNode = (settings, schema, node) => {\n const htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n const toHtml = (editor, settings, schema, rootNode, args) => {\n const content = serializeNode(settings, schema, rootNode);\n return postProcess(editor, args, content);\n };\n const DomSerializerImpl = (settings, editor) => {\n const tempAttrs = ['data-mce-selected'];\n const dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n const 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 const htmlParser = DomParser(settings, schema);\n register$3(htmlParser, settings, dom);\n const serialize = (node, parserArgs = {}) => {\n const args = {\n format: 'html',\n ...parserArgs\n };\n const targetNode = process$1(editor, node, args);\n const html = getHtmlFromNode(dom, targetNode, args);\n const rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n };\n return {\n 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 removeNodeFilter: htmlParser.removeNodeFilter,\n removeAttributeFilter: htmlParser.removeAttributeFilter\n };\n };\n\n const DomSerializer = (settings, editor) => {\n const 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 removeNodeFilter: domSerializer.removeNodeFilter,\n removeAttributeFilter: domSerializer.removeAttributeFilter\n };\n };\n\n const defaultFormat$1 = 'html';\n const setupArgs$1 = (args, format) => ({\n ...args,\n format,\n get: true,\n getInner: true\n });\n const getContent = (editor, args = {}) => {\n const format = args.format ? args.format : defaultFormat$1;\n const defaultedArgs = setupArgs$1(args, format);\n return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n const content = getContent$2(editor, updatedArgs);\n return postProcessGetContent(editor, content, updatedArgs);\n });\n };\n\n const defaultFormat = 'html';\n const setupArgs = (args, content) => ({\n format: defaultFormat,\n ...args,\n set: true,\n content\n });\n const setContent = (editor, content, args = {}) => {\n const defaultedArgs = setupArgs(args, content);\n return preProcessSetContent(editor, defaultedArgs).map(updatedArgs => {\n const result = setContent$2(editor, updatedArgs.content, updatedArgs);\n postProcessSetContent(editor, result.html, updatedArgs);\n return result.content;\n }).getOr(content);\n };\n\n const removedOptions = ('autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,' + 'boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,' + 'force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,' + 'non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,' + 'tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,' + 'paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists').split(',');\n const removedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor'.split(',');\n const getRemovedOptions = options => {\n const settingNames = filter$5(removedOptions, setting => has$2(options, setting));\n const forcedRootBlock = options.forced_root_block;\n if (forcedRootBlock === false || forcedRootBlock === '') {\n settingNames.push('forced_root_block (false only)');\n }\n return sort(settingNames);\n };\n const getRemovedPlugins = options => {\n const plugins = Tools.makeMap(options.plugins, ' ');\n const hasPlugin = plugin => has$2(plugins, plugin);\n const pluginNames = filter$5(removedPlugins, hasPlugin);\n return sort(pluginNames);\n };\n const logRemovedWarnings = (rawOptions, normalizedOptions) => {\n const removedOptions = getRemovedOptions(rawOptions);\n const removedPlugins = getRemovedPlugins(normalizedOptions);\n const hasRemovedPlugins = removedPlugins.length > 0;\n const hasRemovedOptions = removedOptions.length > 0;\n const isLegacyMobileTheme = normalizedOptions.theme === 'mobile';\n if (hasRemovedPlugins || hasRemovedOptions || isLegacyMobileTheme) {\n const listJoiner = '\\n- ';\n const themesMessage = isLegacyMobileTheme ? `\\n\\nThemes:${ listJoiner }mobile` : '';\n const pluginsMessage = hasRemovedPlugins ? `\\n\\nPlugins:${ listJoiner }${ removedPlugins.join(listJoiner) }` : '';\n const optionsMessage = hasRemovedOptions ? `\\n\\nOptions:${ listJoiner }${ removedOptions.join(listJoiner) }` : '';\n console.warn('The following deprecated features are currently enabled and have been removed in TinyMCE 6.0. These features will no longer work and should be removed from the TinyMCE configuration. ' + 'See https://www.tiny.cloud/docs/tinymce/6/migration-from-5x/ for more information.' + themesMessage + pluginsMessage + optionsMessage);\n }\n };\n const logWarnings = (rawOptions, normalizedOptions) => {\n logRemovedWarnings(rawOptions, normalizedOptions);\n };\n\n const DOM$8 = DOMUtils.DOM;\n const restoreOriginalStyles = editor => {\n DOM$8.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n const safeDestroy = x => Optional.from(x).each(x => x.destroy());\n const clearDomReferences = editor => {\n const ed = editor;\n ed.contentAreaContainer = ed.formElement = ed.container = ed.editorContainer = null;\n ed.bodyElement = ed.contentDocument = ed.contentWindow = null;\n ed.iframeElement = ed.targetElm = null;\n const selection = editor.selection;\n if (selection) {\n const dom = selection.dom;\n ed.selection = selection.win = selection.dom = dom.doc = null;\n }\n };\n const restoreForm = editor => {\n const form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n delete form._mceOldSubmit;\n }\n DOM$8.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n const remove$1 = editor => {\n if (!editor.removed) {\n const {_selectionOverrides, editorUpload} = editor;\n const body = editor.getBody();\n const element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && isNonNullable(element === null || element === void 0 ? void 0 : element.nextSibling)) {\n DOM$8.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$8.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n const destroy = (editor, automatic) => {\n const {selection, dom} = editor;\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 const CreateIconManager = () => {\n const lookup = {};\n const add = (id, iconPack) => {\n lookup[id] = iconPack;\n };\n const get = id => {\n if (lookup[id]) {\n return lookup[id];\n } else {\n return { icons: {} };\n }\n };\n const has = id => has$2(lookup, id);\n return {\n add,\n get,\n has\n };\n };\n const IconManager = CreateIconManager();\n\n const ModelManager = AddOnManager.ModelManager;\n\n const getProp = (propName, elm) => {\n const rawElm = elm.dom;\n return rawElm[propName];\n };\n const getComputedSizeProp = (propName, elm) => parseInt(get$7(elm, propName), 10);\n const getClientWidth = curry(getProp, 'clientWidth');\n const getClientHeight = curry(getProp, 'clientHeight');\n const getMarginTop = curry(getComputedSizeProp, 'margin-top');\n const getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n const getBoundingClientRect = elm => elm.dom.getBoundingClientRect();\n const isInsideElementContentArea = (bodyElm, clientX, clientY) => {\n const clientWidth = getClientWidth(bodyElm);\n const clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n const transpose = (inline, elm, clientX, clientY) => {\n const clientRect = getBoundingClientRect(elm);\n const deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n const deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n const x = clientX - deltaX;\n const y = clientY - deltaY;\n return {\n x,\n y\n };\n };\n const isXYInContentArea = (editor, clientX, clientY) => {\n const bodyElm = SugarElement.fromDom(editor.getBody());\n const targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n const transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n const fromDomSafe = node => Optional.from(node).map(SugarElement.fromDom);\n const isEditorAttachedToDom = editor => {\n const rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(inBody).getOr(false);\n };\n\n var NotificationManagerImpl = () => {\n const unimplemented = () => {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n getArgs: unimplemented\n };\n };\n\n const NotificationManager = editor => {\n const notifications = [];\n const getImplementation = () => {\n const theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n const getTopNotification = () => {\n return Optional.from(notifications[0]);\n };\n const isEqual = (a, b) => {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n const reposition = () => {\n each$e(notifications, notification => {\n notification.reposition();\n });\n };\n const addNotification = notification => {\n notifications.push(notification);\n };\n const closeNotification = notification => {\n findIndex$2(notifications, otherNotification => {\n return otherNotification === notification;\n }).each(index => {\n notifications.splice(index, 1);\n });\n };\n const open = (spec, fireEvent = true) => {\n if (editor.removed || !isEditorAttachedToDom(editor)) {\n return {};\n }\n if (fireEvent) {\n editor.dispatch('BeforeOpenNotification', { notification: spec });\n }\n return find$2(notifications, notification => {\n return isEqual(getImplementation().getArgs(notification), spec);\n }).getOrThunk(() => {\n editor.editorManager.setActive(editor);\n const notification = getImplementation().open(spec, () => {\n closeNotification(notification);\n reposition();\n getTopNotification().fold(() => editor.focus(), top => focus$1(SugarElement.fromDom(top.getEl())));\n });\n addNotification(notification);\n reposition();\n editor.dispatch('OpenNotification', { notification: { ...notification } });\n return notification;\n });\n };\n const close = () => {\n getTopNotification().each(notification => {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n const getNotifications = constant(notifications);\n const registerEvents = editor => {\n editor.on('SkinLoaded', () => {\n const serviceMessage = getServiceMessage(editor);\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0\n }, false);\n }\n reposition();\n });\n editor.on('show ResizeEditor ResizeWindow NodeChange', () => {\n requestAnimationFrame(reposition);\n });\n editor.on('remove', () => {\n each$e(notifications.slice(), notification => {\n getImplementation().close(notification);\n });\n });\n };\n registerEvents(editor);\n return {\n open,\n close,\n getNotifications\n };\n };\n\n const PluginManager = AddOnManager.PluginManager;\n\n const ThemeManager = AddOnManager.ThemeManager;\n\n var WindowManagerImpl = () => {\n const unimplemented = () => {\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 };\n };\n\n const WindowManager = editor => {\n let dialogs = [];\n const getImplementation = () => {\n const theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n const funcBind = (scope, f) => {\n return (...args) => {\n return f ? f.apply(scope, args) : undefined;\n };\n };\n const fireOpenEvent = dialog => {\n editor.dispatch('OpenWindow', { dialog });\n };\n const fireCloseEvent = dialog => {\n editor.dispatch('CloseWindow', { dialog });\n };\n const addDialog = dialog => {\n dialogs.push(dialog);\n fireOpenEvent(dialog);\n };\n const closeDialog = dialog => {\n fireCloseEvent(dialog);\n dialogs = filter$5(dialogs, otherDialog => {\n return otherDialog !== dialog;\n });\n if (dialogs.length === 0) {\n editor.focus();\n }\n };\n const getTopDialog = () => {\n return Optional.from(dialogs[dialogs.length - 1]);\n };\n const storeSelectionAndOpenDialog = openDialog => {\n editor.editorManager.setActive(editor);\n store(editor);\n editor.ui.show();\n const dialog = openDialog();\n addDialog(dialog);\n return dialog;\n };\n const open = (args, params) => {\n return storeSelectionAndOpenDialog(() => getImplementation().open(args, params, closeDialog));\n };\n const openUrl = args => {\n return storeSelectionAndOpenDialog(() => getImplementation().openUrl(args, closeDialog));\n };\n const alert = (message, callback, scope) => {\n const windowManagerImpl = getImplementation();\n windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n const confirm = (message, callback, scope) => {\n const windowManagerImpl = getImplementation();\n windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n const close = () => {\n getTopDialog().each(dialog => {\n getImplementation().close(dialog);\n closeDialog(dialog);\n });\n };\n editor.on('remove', () => {\n each$e(dialogs, dialog => {\n getImplementation().close(dialog);\n });\n });\n return {\n open,\n openUrl,\n alert,\n confirm,\n close\n };\n };\n\n const displayNotification = (editor, message) => {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n const displayError = (editor, message) => {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', () => {\n displayNotification(editor, message);\n });\n }\n };\n const uploadError = (editor, message) => {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n const logError = (editor, errorType, msg) => {\n fireError(editor, errorType, { message: msg });\n console.error(msg);\n };\n const createLoadError = (type, url, name) => name ? `Failed to load ${ type }: ${ name } from url ${ url }` : `Failed to load ${ type } url: ${ url }`;\n const pluginLoadError = (editor, url, name) => {\n logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n };\n const iconsLoadError = (editor, url, name) => {\n logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n };\n const languageLoadError = (editor, url, name) => {\n logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n };\n const themeLoadError = (editor, url, name) => {\n logError(editor, 'ThemeLoadError', createLoadError('theme', url, name));\n };\n const modelLoadError = (editor, url, name) => {\n logError(editor, 'ModelLoadError', createLoadError('model', url, name));\n };\n const pluginInitError = (editor, name, err) => {\n const message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n fireError(editor, 'PluginLoadError', { message });\n initError(message, err);\n displayError(editor, message);\n };\n const initError = (message, ...x) => {\n const console = window.console;\n if (console) {\n if (console.error) {\n console.error(message, ...x);\n } else {\n console.log(message, ...x);\n }\n }\n };\n\n const isContentCssSkinName = url => /^[a-z0-9\\-]+$/i.test(url);\n const getContentCssUrls = editor => {\n return transformToUrls(editor, getContentCss(editor));\n };\n const getFontCssUrls = editor => {\n return transformToUrls(editor, getFontCss(editor));\n };\n const transformToUrls = (editor, cssLinks) => {\n const skinUrl = editor.editorManager.baseURL + '/skins/content';\n const suffix = editor.editorManager.suffix;\n const contentCssFile = `content${ suffix }.css`;\n return map$3(cssLinks, url => {\n if (isContentCssSkinName(url) && !editor.inline) {\n return `${ skinUrl }/${ url }/${ contentCssFile }`;\n } else {\n return editor.documentBaseURI.toAbsolute(url);\n }\n });\n };\n const appendContentCssFromSettings = editor => {\n editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n };\n\n const filter$1 = always;\n const bind$1 = (element, event, handler) => bind$2(element, event, filter$1, handler);\n\n const getAllImages = elm => {\n return elm ? from(elm.getElementsByTagName('img')) : [];\n };\n const ImageScanner = (uploadStatus, blobCache) => {\n const cachedPromises = {};\n const findAll = (elm, predicate = always) => {\n const images = filter$5(getAllImages(elm), img => {\n const src = img.src;\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 (startsWith(src, 'blob:')) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (startsWith(src, 'data:')) {\n return predicate(img);\n }\n return false;\n });\n const promises = map$3(images, img => {\n const imageSrc = img.src;\n if (has$2(cachedPromises, imageSrc)) {\n return cachedPromises[imageSrc].then(imageInfo => {\n if (isString(imageInfo)) {\n return imageInfo;\n } else {\n return {\n image: img,\n blobInfo: imageInfo.blobInfo\n };\n }\n });\n } else {\n const newPromise = imageToBlobInfo(blobCache, imageSrc).then(blobInfo => {\n delete cachedPromises[imageSrc];\n return {\n image: img,\n blobInfo\n };\n }).catch(error => {\n delete cachedPromises[imageSrc];\n return error;\n });\n cachedPromises[imageSrc] = newPromise;\n return newPromise;\n }\n });\n return Promise.all(promises);\n };\n return { findAll };\n };\n\n const UploadStatus = () => {\n const PENDING = 1, UPLOADED = 2;\n let blobUriStatuses = {};\n const createStatus = (status, resultUri) => {\n return {\n status,\n resultUri\n };\n };\n const hasBlobUri = blobUri => {\n return blobUri in blobUriStatuses;\n };\n const getResultUri = blobUri => {\n const result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n const isPending = blobUri => {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n const isUploaded = blobUri => {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n const markPending = blobUri => {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n const markUploaded = (blobUri, resultUri) => {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n const removeFailed = blobUri => {\n delete blobUriStatuses[blobUri];\n };\n const destroy = () => {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri,\n getResultUri,\n isPending,\n isUploaded,\n markPending,\n markUploaded,\n removeFailed,\n destroy\n };\n };\n\n let count = 0;\n const seed = () => {\n const rnd = () => {\n return Math.round(Math.random() * 4294967295).toString(36);\n };\n const now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n const uuid = prefix => {\n return prefix + count++ + seed();\n };\n\n const BlobCache = () => {\n let cache = [];\n const mimeToExt = mime => {\n const 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 const create = (o, blob, base64, name, filename) => {\n if (isString(o)) {\n const id = o;\n return toBlobInfo({\n id,\n name,\n 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 const toBlobInfo = 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 const id = o.id || uuid('blobid');\n const name = o.name || id;\n const 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 const add = blobInfo => {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n const findFirst = predicate => find$2(cache, predicate).getOrUndefined();\n const get = id => findFirst(cachedBlobInfo => cachedBlobInfo.id() === id);\n const getByUri = blobUri => findFirst(blobInfo => blobInfo.blobUri() === blobUri);\n const getByData = (base64, type) => findFirst(blobInfo => blobInfo.base64() === base64 && blobInfo.blob().type === type);\n const removeByUri = blobUri => {\n cache = filter$5(cache, blobInfo => {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n const destroy = () => {\n each$e(cache, cachedBlobInfo => {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create,\n add,\n get,\n getByUri,\n getByData,\n findFirst,\n removeByUri,\n destroy\n };\n };\n\n const Uploader = (uploadStatus, settings) => {\n const pendingPromises = {};\n const pathJoin = (path1, path2) => {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n const defaultHandler = (blobInfo, progress) => new Promise((success, failure) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = e => {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = () => {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n const json = JSON.parse(xhr.responseText);\n if (!json || !isString(json.location)) {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n const formData = new FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n });\n const uploadHandler = isFunction(settings.handler) ? settings.handler : defaultHandler;\n const noUpload = () => new Promise(resolve => {\n resolve([]);\n });\n const handlerSuccess = (blobInfo, url) => ({\n url,\n blobInfo,\n status: true\n });\n const handlerFailure = (blobInfo, error) => ({\n url: '',\n blobInfo,\n status: false,\n error\n });\n const resolvePending = (blobUri, result) => {\n Tools.each(pendingPromises[blobUri], resolve => {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n const uploadBlobInfo = (blobInfo, handler, openNotification) => {\n uploadStatus.markPending(blobInfo.blobUri());\n return new Promise(resolve => {\n let notification;\n let progress;\n try {\n const closeNotification = () => {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n const success = url => {\n closeNotification();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n const failure = error => {\n closeNotification();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n resolve(handlerFailure(blobInfo, error));\n };\n progress = percent => {\n if (percent < 0 || percent > 100) {\n return;\n }\n Optional.from(notification).orThunk(() => Optional.from(openNotification).map(apply$1)).each(n => {\n notification = n;\n n.progressBar.value(percent);\n });\n };\n handler(blobInfo, progress).then(success, err => {\n failure(isString(err) ? { message: err } : err);\n });\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex));\n }\n });\n };\n const isDefaultHandler = handler => handler === defaultHandler;\n const pendingUploadBlobInfo = blobInfo => {\n const blobUri = blobInfo.blobUri();\n return new Promise(resolve => {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n const uploadBlobs = (blobInfos, openNotification) => {\n blobInfos = Tools.grep(blobInfos, blobInfo => !uploadStatus.isUploaded(blobInfo.blobUri()));\n return Promise.all(Tools.map(blobInfos, blobInfo => uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, uploadHandler, openNotification)));\n };\n const upload = (blobInfos, openNotification) => !settings.url && isDefaultHandler(uploadHandler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n return { upload };\n };\n\n const openNotification = editor => () => editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n const createUploader = (editor, uploadStatus) => Uploader(uploadStatus, {\n url: getImageUploadUrl(editor),\n basePath: getImageUploadBasePath(editor),\n credentials: getImagesUploadCredentials(editor),\n handler: getImagesUploadHandler(editor)\n });\n const ImageUploader = editor => {\n const uploadStatus = UploadStatus();\n const uploader = createUploader(editor, uploadStatus);\n return { upload: (blobInfos, showNotification = true) => uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined) };\n };\n\n const EditorUpload = editor => {\n const blobCache = BlobCache();\n let uploader, imageScanner;\n const uploadStatus = UploadStatus();\n const urlFilters = [];\n const aliveGuard = callback => {\n return result => {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n const cacheInvalidator = url => url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n const replaceString = (content, search, replace) => {\n let 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 const replaceImageUrl = (content, targetUrl, replacementUrl) => {\n const 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 const replaceUrlInUndoStack = (targetUrl, replacementUrl) => {\n each$e(editor.undoManager.data, level => {\n if (level.type === 'fragmented') {\n level.fragments = map$3(level.fragments, fragment => replaceImageUrl(fragment, targetUrl, replacementUrl));\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n const replaceImageUriInView = (image, resultUri) => {\n const src = editor.convertURL(resultUri, 'src');\n replaceUrlInUndoStack(image.src, resultUri);\n setAll$1(SugarElement.fromDom(image), {\n 'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n 'data-mce-src': src\n });\n };\n const uploadImages = () => {\n if (!uploader) {\n uploader = createUploader(editor, uploadStatus);\n }\n return scanForImages().then(aliveGuard(imageInfos => {\n const blobInfos = map$3(imageInfos, imageInfo => imageInfo.blobInfo);\n return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(result => {\n const imagesToRemove = [];\n let shouldDispatchChange = false;\n const filteredResult = map$3(result, (uploadInfo, index) => {\n const {blobInfo, image} = imageInfos[index];\n let removed = false;\n if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n if (uploadInfo.url && !contains$1(image.src, uploadInfo.url)) {\n shouldDispatchChange = true;\n }\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.remove) {\n replaceUrlInUndoStack(image.src, Env.transparentSrc);\n imagesToRemove.push(image);\n removed = true;\n }\n uploadError(editor, uploadInfo.error.message);\n }\n return {\n element: image,\n status: uploadInfo.status,\n uploadUri: uploadInfo.url,\n blobInfo,\n removed\n };\n });\n if (imagesToRemove.length > 0 && !isRtc(editor)) {\n editor.undoManager.transact(() => {\n each$e(imagesToRemove, element => {\n editor.dom.remove(element);\n blobCache.removeByUri(element.src);\n });\n });\n } else if (shouldDispatchChange) {\n editor.undoManager.dispatchChange();\n }\n return filteredResult;\n }));\n }));\n };\n const uploadImagesAuto = () => isAutomaticUploadsEnabled(editor) ? uploadImages() : Promise.resolve([]);\n const isValidDataUriImage = imgElm => forall(urlFilters, filter => filter(imgElm));\n const addFilter = filter => {\n urlFilters.push(filter);\n };\n const scanForImages = () => {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(result => {\n const filteredResult = filter$5(result, resultItem => {\n if (isString(resultItem)) {\n displayError(editor, resultItem);\n return false;\n } else {\n return true;\n }\n });\n if (isRtc(editor)) ; else {\n each$e(filteredResult, 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 filteredResult;\n }));\n };\n const destroy = () => {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n const replaceBlobUris = content => {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, (match, blobUri) => {\n const resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n let blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), (result, editor) => {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, undefined);\n }\n if (blobInfo) {\n const blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('SetContent', () => {\n if (isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', e => {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('GetContent', 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', () => {\n editor.parser.addNodeFilter('img', images => {\n each$e(images, img => {\n const src = img.attr('src');\n if (!src || blobCache.getByUri(src)) {\n return;\n }\n const resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache,\n addFilter,\n uploadImages,\n uploadImagesAuto,\n scanForImages,\n destroy\n };\n };\n\n const get$1 = editor => {\n const dom = editor.dom;\n const schemaType = editor.schema.type;\n const 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,pre',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: '0px',\n marginRight: 'auto'\n },\n onformat: table => {\n dom.setStyle(table, 'float', null);\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object,[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: { float: 'left' }\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size'\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 selector: '.mce-preview-object',\n ceFalseOverride: true,\n styles: {\n display: 'table',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: '[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\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,pre',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size'\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginRight: '0px',\n marginLeft: 'auto'\n },\n onformat: table => {\n dom.setStyle(table, 'float', null);\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object,[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: { float: 'right' },\n preview: false\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'justify' },\n inherit: false,\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 const span = {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n };\n const strike = {\n inline: 'strike',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n };\n const s = {\n inline: 's',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n };\n return schemaType !== 'html4' ? [\n s,\n span,\n strike\n ] : [\n span,\n s,\n strike\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 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: (node, _fmt, _itemName) => {\n return isElement$6(node) && node.hasAttribute('href');\n },\n onformat: (elm, _fmt, vars) => {\n Tools.each(vars, (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': 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/), name => {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n\n const genericBase = {\n remove_similar: true,\n inherit: false\n };\n const cellBase = {\n selector: 'td,th',\n ...genericBase\n };\n const cellFormats = {\n tablecellbackgroundcolor: {\n styles: { backgroundColor: '%value' },\n ...cellBase\n },\n tablecellverticalalign: {\n styles: { 'vertical-align': '%value' },\n ...cellBase\n },\n tablecellbordercolor: {\n styles: { borderColor: '%value' },\n ...cellBase\n },\n tablecellclass: {\n classes: ['%value'],\n ...cellBase\n },\n tableclass: {\n selector: 'table',\n classes: ['%value'],\n ...genericBase\n },\n tablecellborderstyle: {\n styles: { borderStyle: '%value' },\n ...cellBase\n },\n tablecellborderwidth: {\n styles: { borderWidth: '%value' },\n ...cellBase\n }\n };\n const get = constant(cellFormats);\n\n const FormatRegistry = editor => {\n const formats = {};\n const get$2 = name => isNonNullable(name) ? formats[name] : formats;\n const has = name => has$2(formats, name);\n const register = (name, format) => {\n if (name) {\n if (!isString(name)) {\n each$d(name, (format, name) => {\n register(name, format);\n });\n } else {\n if (!isArray$1(format)) {\n format = [format];\n }\n each$e(format, 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(format.classes)) {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n const unregister = name => {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(get$1(editor));\n register(get());\n register(getFormats(editor));\n return {\n get: get$2,\n has,\n register,\n unregister\n };\n };\n\n const each$3 = Tools.each;\n const dom = DOMUtils.DOM;\n const isPreviewItem = item => isNonNullable(item) && isObject(item);\n const parsedSelectorToHtml = (ancestry, editor) => {\n const schema = editor && editor.schema || Schema({});\n const decorate = (elm, item) => {\n if (item.classes.length > 0) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n const createElement = sItem => {\n const item = isString(sItem) ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n const elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n const getRequiredParent = (elm, candidate) => {\n const elmRule = schema.getElementRule(elm.nodeName.toLowerCase());\n const parentsRequired = elmRule === null || elmRule === void 0 ? void 0 : elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && contains$2(parentsRequired, candidate) ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n const wrapInHtml = (elm, ancestors, siblings) => {\n let parentCandidate;\n const ancestor = ancestors[0];\n const ancestorName = isPreviewItem(ancestor) ? ancestor.name : undefined;\n const parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestor;\n ancestors = ancestors.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestor;\n ancestors = ancestors.slice(1);\n } else if (!siblings) {\n return elm;\n }\n const parent = parentCandidate ? createElement(parentCandidate) : dom.create('div');\n parent.appendChild(elm);\n if (siblings) {\n Tools.each(siblings, sibling => {\n const siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n const parentSiblings = isPreviewItem(parentCandidate) ? parentCandidate.siblings : undefined;\n return wrapInHtml(parent, ancestors, parentSiblings);\n };\n const fragment = dom.create('div');\n if (ancestry.length > 0) {\n const item = ancestry[0];\n const elm = createElement(item);\n const siblings = isPreviewItem(item) ? item.siblings : undefined;\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), siblings));\n }\n return fragment;\n };\n const parseSelectorItem = item => {\n item = Tools.trim(item);\n let tagName = 'div';\n const obj = {\n name: tagName,\n classes: [],\n attrs: {},\n selector: item\n };\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, ($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 const 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 const parseSelector = selector => {\n if (!isString(selector)) {\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+(?![^\\[\\]]+\\]))/), item => {\n const siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n const obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n const getCssText = (editor, format) => {\n let previewCss = '';\n let previewStyles = getPreviewStyles(editor);\n if (previewStyles === '') {\n return '';\n }\n const removeVars = val => {\n return isString(val) ? val.replace(/%(\\w+)/g, '') : '';\n };\n const getComputedStyle = (name, elm) => {\n return dom.getStyle(elm !== null && elm !== void 0 ? elm : editor.getBody(), name, true);\n };\n if (isString(format)) {\n const formats = editor.formatter.get(format);\n if (!formats) {\n return '';\n }\n format = formats[0];\n }\n if ('preview' in format) {\n const preview = format.preview;\n if (preview === false) {\n return '';\n } else {\n previewStyles = preview || previewStyles;\n }\n }\n let name = format.block || format.inline || 'span';\n let previewFrag;\n const items = parseSelector(format.selector);\n if (items.length > 0) {\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 const previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$3(format.styles, (value, name) => {\n const newValue = removeVars(value);\n if (newValue) {\n dom.setStyle(previewElm, name, newValue);\n }\n });\n each$3(format.attributes, (value, name) => {\n const newValue = removeVars(value);\n if (newValue) {\n dom.setAttrib(previewElm, name, newValue);\n }\n });\n each$3(format.classes, value => {\n const newValue = removeVars(value);\n if (!dom.hasClass(previewElm, newValue)) {\n dom.addClass(previewElm, newValue);\n }\n });\n editor.dispatch('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n const rawParentFontSize = getComputedStyle('fontSize');\n const parentFontSize = /px$/.test(rawParentFontSize) ? parseInt(rawParentFontSize, 10) : 0;\n each$3(previewStyles.split(' '), name => {\n let value = getComputedStyle(name, previewElm);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = getComputedStyle(name);\n if (rgbaToHexString(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (rgbaToHexString(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 const 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.dispatch('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n\n const setup$r = editor => {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (let 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 const Formatter = editor => {\n const formats = FormatRegistry(editor);\n const formatChangeState = Cell({});\n setup$r(editor);\n setup$u(editor);\n if (!isRtc(editor)) {\n setup$t(formatChangeState, editor);\n }\n return {\n get: formats.get,\n has: formats.has,\n register: formats.register,\n unregister: formats.unregister,\n apply: (name, vars, node) => {\n applyFormat(editor, name, vars, node);\n },\n remove: (name, vars, node, similar) => {\n removeFormat(editor, name, vars, node, similar);\n },\n toggle: (name, vars, node) => {\n toggleFormat(editor, name, vars, node);\n },\n match: (name, vars, node, similar) => matchFormat(editor, name, vars, node, similar),\n closest: names => closestFormat(editor, names),\n matchAll: (names, vars) => matchAllFormats(editor, names, vars),\n matchNode: (node, name, vars, similar) => matchNodeFormat(editor, node, name, vars, similar),\n canApply: name => canApplyFormat(editor, name),\n formatChanged: (formats, callback, similar, vars) => formatChanged(editor, formatChangeState, formats, callback, similar, vars),\n getCssText: curry(getCssText, editor)\n };\n };\n\n const shouldIgnoreCommand = cmd => {\n switch (cmd.toLowerCase()) {\n case 'undo':\n case 'redo':\n case 'mcefocus':\n return true;\n default:\n return false;\n }\n };\n const registerEvents = (editor, undoManager, locks) => {\n const isFirstTypedCharacter = Cell(false);\n const addNonTypingUndoLevel = e => {\n setTyping(undoManager, false, locks);\n undoManager.add({}, e);\n };\n editor.on('init', () => {\n undoManager.add();\n });\n editor.on('BeforeExecCommand', e => {\n const cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n }\n });\n editor.on('ExecCommand', e => {\n const cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart cut', () => {\n undoManager.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('dragend', addNonTypingUndoLevel);\n editor.on('keyup', e => {\n const 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])) {\n if (!editor.isDirty()) {\n editor.setDirty(true);\n }\n editor.dispatch('TypingUndo');\n isFirstTypedCharacter.set(false);\n editor.nodeChanged();\n }\n });\n editor.on('keydown', e => {\n const 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 const 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', e => {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n const isInsertReplacementText = event => event.inputType === 'insertReplacementText';\n const isInsertTextDataNull = event => event.inputType === 'insertText' && event.data === null;\n const isInsertFromPasteOrDrop = event => event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n editor.on('input', e => {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('AddUndo Undo Redo ClearUndos', e => {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n };\n const addKeyboardShortcuts = editor => {\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n };\n\n const UndoManager = editor => {\n const beforeBookmark = value$2();\n const locks = Cell(0);\n const index = Cell(0);\n const undoManager = {\n data: [],\n typing: false,\n beforeChange: () => {\n beforeChange(editor, locks, beforeBookmark);\n },\n add: (level, event) => {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n dispatchChange: () => {\n editor.setDirty(true);\n const level = createFromEditor(editor);\n level.bookmark = getUndoBookmark(editor.selection);\n editor.dispatch('change', {\n level,\n lastLevel: get$b(undoManager.data, index.get()).getOrUndefined()\n });\n },\n undo: () => {\n return undo(editor, undoManager, locks, index);\n },\n redo: () => {\n return redo(editor, index, undoManager.data);\n },\n clear: () => {\n clear(editor, undoManager, index);\n },\n reset: () => {\n reset(editor, undoManager);\n },\n hasUndo: () => {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: () => {\n return hasRedo(editor, undoManager, index);\n },\n transact: callback => {\n return transact(editor, undoManager, locks, callback);\n },\n ignore: callback => {\n ignore(editor, locks, callback);\n },\n extra: (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 const 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 const placeholderAttr = 'data-mce-placeholder';\n const isKeyboardEvent = e => e.type === 'keydown' || e.type === 'keyup';\n const isDeleteEvent = e => {\n const keyCode = e.keyCode;\n return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n };\n const isNonTypingKeyboardEvent = e => {\n if (isKeyboardEvent(e)) {\n const keyCode = e.keyCode;\n return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains$2(nonTypingKeycodes, keyCode));\n } else {\n return false;\n }\n };\n const isTypingKeyboardEvent = e => isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n const isVisuallyEmpty = (dom, rootElm, forcedRootBlock) => {\n if (isEmpty$2(SugarElement.fromDom(rootElm), false)) {\n const 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 forcedRootBlock === firstElement.nodeName.toLowerCase();\n }\n } else {\n return false;\n }\n };\n const setup$q = editor => {\n var _a;\n const dom = editor.dom;\n const rootBlock = getForcedRootBlock(editor);\n const placeholder = (_a = getPlaceholder(editor)) !== null && _a !== void 0 ? _a : '';\n const updatePlaceholder = (e, initial) => {\n if (isNonTypingKeyboardEvent(e)) {\n return;\n }\n const body = editor.getBody();\n const showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n const 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 (isNotEmpty(placeholder)) {\n editor.on('init', e => {\n updatePlaceholder(e, true);\n editor.on('change SetContent ExecCommand', updatePlaceholder);\n editor.on('paste', e => Delay.setEditorTimeout(editor, () => updatePlaceholder(e)));\n });\n }\n };\n\n const blockPosition = (block, position) => ({\n block,\n position\n });\n const blockBoundary = (from, to) => ({\n from,\n to\n });\n const getBlockPosition = (rootNode, pos) => {\n const rootElm = SugarElement.fromDom(rootNode);\n const containerElm = SugarElement.fromDom(pos.container());\n return getParentBlock$2(rootElm, containerElm).map(block => blockPosition(block, pos));\n };\n const isDifferentBlocks = blockBoundary => !eq(blockBoundary.from.block, blockBoundary.to.block);\n const getClosestHost = (root, scope) => {\n const isRoot = node => eq(node, root);\n const isHost = node => isTableCell$2(node) || isContentEditableTrue$3(node.dom);\n return closest$4(scope, isHost, isRoot).filter(isElement$7).getOr(root);\n };\n const hasSameHost = (rootNode, blockBoundary) => {\n const root = SugarElement.fromDom(rootNode);\n return eq(getClosestHost(root, blockBoundary.from.block), getClosestHost(root, blockBoundary.to.block));\n };\n const isEditable$2 = blockBoundary => isContentEditableFalse$a(blockBoundary.from.block.dom) === false && isContentEditableFalse$a(blockBoundary.to.block.dom) === false;\n const hasValidBlocks = blockBoundary => {\n const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom);\n return isValidBlock(blockBoundary.from.block) && isValidBlock(blockBoundary.to.block);\n };\n const skipLastBr = (rootNode, forward, blockPosition) => {\n if (isBr$6(blockPosition.position.getNode()) && !isEmpty$2(blockPosition.block)) {\n return positionIn(false, blockPosition.block.dom).bind(lastPositionInBlock => {\n if (lastPositionInBlock.isEqual(blockPosition.position)) {\n return fromPosition(forward, rootNode, lastPositionInBlock).bind(to => getBlockPosition(rootNode, to));\n } else {\n return Optional.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n const readFromRange = (rootNode, forward, rng) => {\n const fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n const toBlockPos = fromBlockPos.bind(blockPos => fromPosition(forward, rootNode, blockPos.position).bind(to => getBlockPosition(rootNode, to).map(blockPos => skipLastBr(rootNode, forward, blockPos))));\n return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(blockBoundary => isDifferentBlocks(blockBoundary) && hasSameHost(rootNode, blockBoundary) && isEditable$2(blockBoundary) && hasValidBlocks(blockBoundary));\n };\n const read$1 = (rootNode, forward, rng) => rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none();\n\n const getChildrenUntilBlockBoundary = block => {\n const children = children$1(block);\n return findIndex$2(children, isBlock$2).fold(constant(children), index => children.slice(0, index));\n };\n const extractChildren = block => {\n const children = getChildrenUntilBlockBoundary(block);\n each$e(children, remove$6);\n return children;\n };\n const removeEmptyRoot = (rootNode, block) => {\n const parents = parentsAndSelf(block, rootNode);\n return find$2(parents.reverse(), element => isEmpty$2(element)).each(remove$6);\n };\n const isEmptyBefore = el => filter$5(prevSiblings(el), el => !isEmpty$2(el)).length === 0;\n const nestedBlockMerge = (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$3(insertionPoint, SugarElement.fromTag('br'));\n }\n const position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n each$e(extractChildren(fromBlock), child => {\n before$3(insertionPoint, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n const sidelongBlockMerge = (rootNode, fromBlock, toBlock) => {\n if (isEmpty$2(toBlock)) {\n remove$6(toBlock);\n if (isEmpty$2(fromBlock)) {\n fillWithPaddingBr(fromBlock);\n }\n return firstPositionIn(fromBlock.dom);\n }\n const position = lastPositionIn(toBlock.dom);\n each$e(extractChildren(fromBlock), child => {\n append$1(toBlock, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n const findInsertionPoint = (toBlock, block) => {\n const parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n };\n const getInsertionPoint = (fromBlock, toBlock) => contains(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n const trimBr = (first, block) => {\n positionIn(first, block.dom).bind(position => Optional.from(position.getNode())).map(SugarElement.fromDom).filter(isBr$5).each(remove$6);\n };\n const mergeBlockInto = (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 const mergeBlocks = (rootNode, forward, block1, block2) => forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n\n const backspaceDelete$8 = (editor, forward) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const position = read$1(rootNode.dom, forward, editor.selection.getRng()).map(blockBoundary => () => {\n mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n });\n return position;\n };\n\n const deleteRangeMergeBlocks = (rootNode, selection) => {\n const rng = selection.getRng();\n return lift2(getParentBlock$2(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$2(rootNode, SugarElement.fromDom(rng.endContainer)), (block1, block2) => {\n if (!eq(block1, block2)) {\n return Optional.some(() => {\n rng.deleteContents();\n mergeBlocks(rootNode, true, block1, block2).each(pos => {\n selection.setRng(pos.toRange());\n });\n });\n } else {\n return Optional.none();\n }\n }).getOr(Optional.none());\n };\n const isRawNodeInTable = (root, rawNode) => {\n const node = SugarElement.fromDom(rawNode);\n const isRoot = curry(eq, root);\n return ancestor$3(node, isTableCell$2, isRoot).isSome();\n };\n const isSelectionInTable = (root, rng) => isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n const isEverythingSelected = (root, rng) => {\n const noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n const noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n const emptyEditor = editor => {\n return Optional.some(() => {\n editor.setContent('');\n editor.selection.setCursorLocation();\n });\n };\n const deleteRange$1 = editor => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n };\n const backspaceDelete$7 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$1(editor);\n\n const showCaret = (direction, editor, node, before, scrollIntoView) => Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n const getNodeRange = node => {\n const rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n const selectNode = (editor, node) => {\n const e = editor.dispatch('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return Optional.none();\n }\n return Optional.some(getNodeRange(node));\n };\n const renderCaretAtRange = (editor, range, scrollIntoView) => {\n const normalizedRange = normalizeRange(1, editor.getBody(), range);\n const caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n const caretPositionNode = caretPosition.getNode();\n if (isInlineFakeCaretTarget(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n const caretPositionBeforeNode = caretPosition.getNode(true);\n if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n const ceRoot = getContentEditableRoot$1(editor.dom.getRoot(), caretPosition.getNode());\n if (isInlineFakeCaretTarget(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return Optional.none();\n };\n const renderRangeCaret = (editor, range, scrollIntoView) => range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n\n const isBeforeBoundary = pos => isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n const isAfterBoundary = pos => isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n const trimEmptyTextNode = (dom, node) => {\n if (isText$a(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n const deleteContentAndShowCaret = (editor, range, node, direction, forward, peekCaretPosition) => {\n showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(caretRange => {\n if (range.collapsed) {\n const 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 };\n const deleteBoundaryText = (editor, forward) => {\n const range = editor.selection.getRng();\n if (!isText$a(range.commonAncestorContainer)) {\n return Optional.none();\n }\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const nextCaretPosition = getNextPosFn(caretPosition);\n const normalizedNextCaretPosition = nextCaretPosition ? normalizePosition(forward, nextCaretPosition) : nextCaretPosition;\n if (!normalizedNextCaretPosition || !isMoveInsideSameBlock(caretPosition, normalizedNextCaretPosition)) {\n return Optional.none();\n } else if (isBeforeFn(normalizedNextCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, normalizedNextCaretPosition));\n }\n const peekCaretPosition = getNextPosFn(normalizedNextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(normalizedNextCaretPosition, peekCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition));\n }\n }\n return Optional.none();\n };\n const backspaceDelete$6 = (editor, forward) => deleteBoundaryText(editor, forward);\n\n const getEdgeCefPosition = (editor, atStart) => {\n const root = editor.getBody();\n return atStart ? firstPositionIn(root).filter(isBeforeContentEditableFalse) : lastPositionIn(root).filter(isAfterContentEditableFalse);\n };\n const isCefAtEdgeSelected = editor => {\n const rng = editor.selection.getRng();\n return !rng.collapsed && (getEdgeCefPosition(editor, true).exists(pos => pos.isEqual(CaretPosition.fromRangeStart(rng))) || getEdgeCefPosition(editor, false).exists(pos => pos.isEqual(CaretPosition.fromRangeEnd(rng))));\n };\n\n const isCompoundElement = node => isNonNullable(node) && (isTableCell$2(SugarElement.fromDom(node)) || isListItem$1(SugarElement.fromDom(node)));\n const DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n const isAtContentEditableBlockCaret = (forward, from) => {\n const elm = from.getNode(!forward);\n const caretLocation = forward ? 'after' : 'before';\n return isElement$6(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n const isDeleteFromCefDifferentBlocks = (root, forward, from, to) => {\n const inSameBlock = elm => isInline$1(SugarElement.fromDom(elm)) && !isInSameBlock(from, to, root);\n return getRelativeCefElm(!forward, from).fold(() => getRelativeCefElm(forward, to).fold(never, inSameBlock), inSameBlock);\n };\n const deleteEmptyBlockOrMoveToCef = (root, forward, from, to) => {\n const toCefElm = to.getNode(!forward);\n return getParentBlock$2(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(blockElm => isEmpty$2(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm)).orThunk(() => Optional.some(DeleteAction.moveToElement(toCefElm)));\n };\n const findCefPosition = (root, forward, from) => fromPosition(forward, root, from).bind(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$a(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (!forward && isContentEditableFalse$a(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 && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else {\n return Optional.none();\n }\n });\n const getContentEditableBlockAction = (forward, elm) => {\n if (isNullable(elm)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse$a(elm.nextSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (!forward && isContentEditableFalse$a(elm.previousSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Optional.none();\n }\n };\n const skipMoveToActionFromInlineCefToContent = (root, from, deleteAction) => deleteAction.fold(elm => Optional.some(DeleteAction.remove(elm)), elm => Optional.some(DeleteAction.moveToElement(elm)), to => {\n if (isInSameBlock(from, to, root)) {\n return Optional.none();\n } else {\n return Optional.some(DeleteAction.moveToPosition(to));\n }\n });\n const getContentEditableAction = (root, forward, from) => {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(!forward)).orThunk(() => findCefPosition(root, forward, from));\n } else {\n return findCefPosition(root, forward, from).bind(deleteAction => skipMoveToActionFromInlineCefToContent(root, from, deleteAction));\n }\n };\n const read = (root, forward, rng) => {\n const normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n const from = CaretPosition.fromRangeStart(normalizedRange);\n const rootElement = SugarElement.fromDom(root);\n if (!forward && 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 && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n return findPreviousBr(rootElement, from).map(br => DeleteAction.remove(br.getNode()));\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from)) {\n return findNextBr(rootElement, from).map(br => DeleteAction.remove(br.getNode()));\n } else {\n return getContentEditableAction(root, forward, from);\n }\n };\n\n const deleteElement$1 = (editor, forward) => element => {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n return true;\n };\n const moveToElement = (editor, forward) => element => {\n const pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n const moveToPosition = editor => pos => {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n const getAncestorCe = (editor, node) => Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n const backspaceDeleteCaret = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$a).fold(() => read(editor.getBody(), forward, editor.selection.getRng()).map(deleteAction => () => deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor))), () => Optional.some(noop));\n };\n const deleteOffscreenSelection = rootElement => {\n each$e(descendants(rootElement, '.mce-offscreen-selection'), remove$6);\n };\n const backspaceDeleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n if (isContentEditableFalse$a(selectedNode) && !isTableCell$3(selectedNode)) {\n const hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$a);\n return hasCefAncestor.fold(() => Optional.some(() => {\n deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n paddEmptyBody(editor);\n }), () => Optional.some(noop));\n }\n if (isCefAtEdgeSelected(editor)) {\n return Optional.some(() => {\n deleteRangeContents(editor, editor.selection.getRng(), SugarElement.fromDom(editor.getBody()));\n });\n }\n return Optional.none();\n };\n const paddEmptyElement = editor => {\n const dom = editor.dom, selection = editor.selection;\n const ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n if (isContentEditableTrue$3(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n const 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 const backspaceDelete$5 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n\n const deleteCaret$2 = (editor, forward) => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return fromPosition(forward, editor.getBody(), fromPos).filter(pos => forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos)).bind(pos => getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)).map(elm => () => editor.selection.select(elm));\n };\n const backspaceDelete$4 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : Optional.none();\n\n const isText$2 = isText$a;\n const startsWithCaretContainer = node => isText$2(node) && node.data[0] === ZWSP$1;\n const endsWithCaretContainer = node => isText$2(node) && node.data[node.data.length - 1] === ZWSP$1;\n const createZwsp = node => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n return doc.createTextNode(ZWSP$1);\n };\n const insertBefore = node => {\n var _a;\n if (isText$2(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$2(node)) {\n if (startsWithCaretContainer(node)) {\n return node;\n } else {\n node.insertData(0, ZWSP$1);\n return node;\n }\n } else {\n const newNode = createZwsp(node);\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node);\n return newNode;\n }\n };\n const insertAfter = node => {\n var _a, _b;\n if (isText$2(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$2(node)) {\n if (endsWithCaretContainer(node)) {\n return node;\n } else {\n node.appendData(ZWSP$1);\n return node;\n }\n } else {\n const newNode = createZwsp(node);\n if (node.nextSibling) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node.nextSibling);\n } else {\n (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.appendChild(newNode);\n }\n return newNode;\n }\n };\n const insertInline = (before, node) => before ? insertBefore(node) : insertAfter(node);\n const insertInlineBefore = curry(insertInline, true);\n const insertInlineAfter = curry(insertInline, false);\n\n const insertInlinePos = (pos, before) => {\n if (isText$a(pos.container())) {\n return insertInline(before, pos.container());\n } else {\n return insertInline(before, pos.getNode());\n }\n };\n const isPosCaretContainer = (pos, caret) => {\n const caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n const renderCaret = (caret, location) => location.fold(element => {\n remove$4(caret.get());\n const text = insertInlineBefore(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, text.length - 1));\n }, element => firstPositionIn(element).map(pos => {\n if (!isPosCaretContainer(pos, caret)) {\n remove$4(caret.get());\n const text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition(text, 1);\n } else {\n const node = caret.get();\n return CaretPosition(node, 1);\n }\n }), element => lastPositionIn(element).map(pos => {\n if (!isPosCaretContainer(pos, caret)) {\n remove$4(caret.get());\n const text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition(text, text.length - 1);\n } else {\n const node = caret.get();\n return CaretPosition(node, node.length - 1);\n }\n }), element => {\n remove$4(caret.get());\n const text = insertInlineAfter(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, 1));\n });\n\n const evaluateUntil = (fns, args) => {\n for (let i = 0; i < fns.length; i++) {\n const result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n };\n\n const Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n const rescope$1 = (rootNode, node) => {\n const parentBlock = getParentBlock$3(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n const before = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeForwards(pos);\n const scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(() => nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.before(inline)), Optional.none);\n };\n const isNotInsideFormatCaretContainer = (rootNode, elm) => getParentCaretContainer(rootNode, elm) === null;\n const findInsideRootInline = (isInlineTarget, rootNode, pos) => findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n const start$1 = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n const prevPos = prevPosition(inline, nPos);\n return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n });\n };\n const end = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n const nextPos = nextPosition(inline, nPos);\n return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n });\n };\n const after = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeBackwards(pos);\n const scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(() => prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.after(inline)), Optional.none);\n };\n const isValidLocation = location => !isRtl(getElement(location));\n const readLocation = (isInlineTarget, rootNode, pos) => {\n const 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 const getElement = location => location.fold(identity, identity, identity, identity);\n const getName = location => location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n const outside = location => location.fold(Location.before, Location.before, Location.after, Location.after);\n const inside = location => location.fold(Location.start, Location.start, Location.end, Location.end);\n const isEq = (location1, location2) => getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n const betweenInlines = (forward, isInlineTarget, rootNode, from, to, location) => lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), (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 const skipNoMovement = (fromLocation, toLocation) => fromLocation.fold(always, fromLocation => !isEq(fromLocation, toLocation));\n const findLocationTraverse = (forward, isInlineTarget, rootNode, fromLocation, pos) => {\n const from = normalizePosition(forward, pos);\n const to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n const location = to.fold(() => fromLocation.map(outside), to => readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation)));\n return location.filter(isValidLocation);\n };\n const findLocationSimple = (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 const findLocation$1 = (forward, isInlineTarget, rootNode, pos) => {\n const from = normalizePosition(forward, pos);\n const fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(() => findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos));\n };\n\n const hasSelectionModifyApi = editor => {\n return isFunction(editor.selection.getSel().modify);\n };\n const moveRel = (forward, selection, pos) => {\n const 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 const moveByWord = (forward, editor) => {\n const rng = editor.selection.getRng();\n const 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 const flip = (direction, positions) => direction === HDirection.Backwards ? reverse(positions) : positions;\n const walk$1 = (direction, caretWalker, pos) => direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n const getBreakType = (scope, direction, currentPos, nextPos) => {\n if (isBr$6(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 const getPositionsUntil = (predicate, direction, scope, start) => {\n const caretWalker = CaretWalker(scope);\n let currentPos = start;\n const positions = [];\n while (currentPos) {\n const nextPos = walk$1(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (isBr$6(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 const breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n 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 const getAdjacentLinePositions = (direction, getPositionsUntilBreak, scope, start) => getPositionsUntilBreak(scope, start).breakAt.map(pos => {\n const positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n const findClosestHorizontalPositionFromPoint = (positions, x) => foldl(positions, (acc, newPos) => acc.fold(() => Optional.some(newPos), lastPos => lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), (lastRect, newRect) => {\n const lastDist = Math.abs(x - lastRect.left);\n const newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc)), Optional.none());\n const findClosestHorizontalPosition = (positions, pos) => head(pos.getClientRects()).bind(targetRect => findClosestHorizontalPositionFromPoint(positions, targetRect.left));\n const getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n const getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n const getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n const getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n const isAtFirstLine = (scope, pos) => getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n const isAtLastLine = (scope, pos) => getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n const getFirstLinePositions = scope => firstPositionIn(scope).map(pos => [pos].concat(getPositionsUntilNextLine(scope, pos).positions)).getOr([]);\n const getLastLinePositions = scope => lastPositionIn(scope).map(pos => getPositionsUntilPreviousLine(scope, pos).positions.concat(pos)).getOr([]);\n const getClosestPositionAbove = (scope, pos) => findClosestHorizontalPosition(getPositionsAbove(scope, pos), pos);\n const getClosestPositionBelow = (scope, pos) => findClosestHorizontalPosition(getPositionsBelow(scope, pos), pos);\n\n const isContentEditableFalse$4 = isContentEditableFalse$a;\n const distanceToRectLeft$1 = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n const distanceToRectRight$1 = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n const isNodeClientRect = rect => hasNonNullableKey(rect, 'node');\n const findClosestClientRect = (clientRects, clientX) => reduce(clientRects, (oldClientRect, clientRect) => {\n const oldDistance = Math.min(distanceToRectLeft$1(oldClientRect, clientX), distanceToRectRight$1(oldClientRect, clientX));\n const newDistance = Math.min(distanceToRectLeft$1(clientRect, clientX), distanceToRectRight$1(clientRect, clientX));\n if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$4(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n\n const getNodeClientRects = node => {\n const toArrayWithNode = clientRects => {\n return map$3(clientRects, rect => {\n const clientRect = clone$1(rect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (isElement$6(node)) {\n return toArrayWithNode(node.getClientRects());\n } else if (isText$a(node)) {\n const rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n } else {\n return [];\n }\n };\n const getClientRects = nodes => bind$3(nodes, getNodeClientRects);\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n const findUntil = (direction, root, predicateFn, node) => {\n let currentNode = node;\n while (currentNode = findNode(currentNode, direction, isEditableCaretCandidate$1, root)) {\n if (predicateFn(currentNode)) {\n return;\n }\n }\n };\n const walkUntil = (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) => {\n let line = 0;\n const result = [];\n const add = node => {\n let clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (let i = 0; i < clientRects.length; i++) {\n const clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, last$2(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n return false;\n };\n const targetClientRect = last$2(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n const node = caretPosition.getNode();\n if (node) {\n add(node);\n findUntil(direction, root, add, node);\n }\n return result;\n };\n const aboveLineNumber = (lineNumber, clientRect) => clientRect.line > lineNumber;\n const isLineNumber = (lineNumber, clientRect) => clientRect.line === lineNumber;\n const upUntil = curry(walkUntil, VDirection.Up, isAbove$1, isBelow$1);\n const downUntil = curry(walkUntil, VDirection.Down, isBelow$1, isAbove$1);\n const getLastClientRect = caretPosition => {\n return last$2(caretPosition.getClientRects());\n };\n const positionsUntil = (direction, root, predicateFn, node) => {\n const caretWalker = CaretWalker(root);\n let walkFn;\n let isBelowFn;\n let isAboveFn;\n let caretPosition;\n const result = [];\n let line = 0;\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 const targetClientRect = getLastClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n const rect = getLastClientRect(caretPosition);\n if (isAboveFn(rect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(rect, last$2(result))) {\n line++;\n }\n const clientRect = clone$1(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 const isAboveLine = lineNumber => clientRect => aboveLineNumber(lineNumber, clientRect);\n const isLine = lineNumber => clientRect => isLineNumber(lineNumber, clientRect);\n\n const moveToRange = (editor, rng) => {\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, editor.selection.getRng());\n };\n const renderRangeCaretOpt = (editor, range, scrollIntoView) => Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n const moveHorizontally = (editor, direction, range, isBefore, isAfter, isElement) => {\n const forwards = direction === HDirection.Forwards;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forwards ? isBefore : isAfter;\n if (!range.collapsed) {\n const node = getSelectedNode(range);\n if (isElement(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n } else if (isCefAtEdgeSelected(editor)) {\n const newRange = range.cloneRange();\n newRange.collapse(direction === HDirection.Backwards);\n return Optional.from(newRange);\n }\n }\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n let nextCaretPosition = getNextPosFn(caretPosition);\n const rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n if (!nextCaretPosition) {\n return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n } else {\n nextCaretPosition = normalizePosition(forwards, nextCaretPosition);\n }\n if (isBeforeFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n }\n const 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 const moveVertically = (editor, direction, range, isBefore, isAfter, isElement) => {\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const caretClientRect = last$2(caretPosition.getClientRects());\n const forwards = direction === VDirection.Down;\n const root = editor.getBody();\n if (!caretClientRect) {\n return Optional.none();\n }\n if (isCefAtEdgeSelected(editor)) {\n const caretPosition = forwards ? CaretPosition.fromRangeEnd(range) : CaretPosition.fromRangeStart(range);\n const getClosestFn = !forwards ? getClosestPositionAbove : getClosestPositionBelow;\n return getClosestFn(root, caretPosition).orThunk(() => Optional.from(caretPosition)).map(pos => pos.toRange());\n }\n const walkerFn = forwards ? downUntil : upUntil;\n const linePositions = walkerFn(root, isAboveLine(1), caretPosition);\n const nextLinePositions = filter$5(linePositions, isLine(1));\n const clientX = caretClientRect.left;\n const nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (nextLineRect && isElement(nextLineRect.node)) {\n const dist1 = Math.abs(clientX - nextLineRect.left);\n const dist2 = Math.abs(clientX - nextLineRect.right);\n return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n }\n let 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 const caretPositions = positionsUntil(direction, root, isAboveLine(1), currentNode);\n let closestNextLineRect = findClosestClientRect(filter$5(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n closestNextLineRect = last$2(filter$5(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(pos => renderRangeCaret(editor, pos.toRange(), false));\n }\n return Optional.none();\n };\n const getLineEndPoint = (editor, forward) => {\n const rng = editor.selection.getRng();\n const from = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n const host = getEditingHost(from.container(), editor.getBody());\n if (forward) {\n const lineInfo = getPositionsUntilNextLine(host, from);\n return last$3(lineInfo.positions);\n } else {\n const lineInfo = getPositionsUntilPreviousLine(host, from);\n return head(lineInfo.positions);\n }\n };\n const moveToLineEndPoint$3 = (editor, forward, isElementPosition) => getLineEndPoint(editor, forward).filter(isElementPosition).exists(pos => {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n\n const setCaretPosition = (editor, pos) => {\n const 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 const setSelected = (state, elm) => {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n const renderCaretLocation = (editor, caret, location) => renderCaret(caret, location).map(pos => {\n setCaretPosition(editor, pos);\n return location;\n });\n const getPositionFromRange = (range, root, forward) => {\n const start = CaretPosition.fromRangeStart(range);\n if (range.collapsed) {\n return start;\n } else {\n const end = CaretPosition.fromRangeEnd(range);\n return forward ? prevPosition(root, end).getOr(end) : nextPosition(root, start).getOr(start);\n }\n };\n const findLocation = (editor, caret, forward) => {\n const rootNode = editor.getBody();\n const from = getPositionFromRange(editor.selection.getRng(), rootNode, forward);\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const location = findLocation$1(forward, isInlineTarget$1, rootNode, from);\n return location.bind(location => renderCaretLocation(editor, caret, location));\n };\n const toggleInlines = (isInlineTarget, dom, elms) => {\n const inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), e => e.dom);\n const selectedInlines = filter$5(inlineBoundaries, isInlineTarget);\n const targetInlines = filter$5(elms, isInlineTarget);\n each$e(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each$e(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n const safeRemoveCaretContainer = (editor, caret) => {\n const caretValue = caret.get();\n if (editor.selection.isCollapsed() && !editor.composing && caretValue) {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (CaretPosition.isTextPosition(pos) && !isAtZwsp(pos)) {\n setCaretPosition(editor, removeAndReposition(caretValue, pos));\n caret.set(null);\n }\n }\n };\n const renderInsideInlineCaret = (isInlineTarget, editor, caret, elms) => {\n if (editor.selection.isCollapsed()) {\n const inlines = filter$5(elms, isInlineTarget);\n each$e(inlines, _inline => {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n readLocation(isInlineTarget, editor.getBody(), pos).bind(location => renderCaretLocation(editor, caret, location));\n });\n }\n };\n const move$2 = (editor, caret, forward) => isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n const moveWord = (forward, editor, _caret) => isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n const setupSelectedState = editor => {\n const caret = Cell(null);\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.on('NodeChange', e => {\n if (isInlineBoundariesEnabled(editor)) {\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 const moveNextWord = curry(moveWord, true);\n const movePrevWord = curry(moveWord, false);\n const moveToLineEndPoint$2 = (editor, forward, caret) => {\n if (isInlineBoundariesEnabled(editor)) {\n const linePoint = getLineEndPoint(editor, forward).getOrThunk(() => {\n const rng = editor.selection.getRng();\n return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n });\n return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(loc => {\n const outsideLoc = outside(loc);\n return renderCaret(caret, outsideLoc).exists(pos => {\n setCaretPosition(editor, pos);\n return true;\n });\n });\n } else {\n return false;\n }\n };\n\n const rangeFromPositions = (from, to) => {\n const range = document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n const hasOnlyTwoOrLessPositionsLeft = elm => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n const normalizedFirstPos = normalizePosition(true, firstPos);\n const normalizedLastPos = normalizePosition(false, lastPos);\n return nextPosition(elm, normalizedFirstPos).forall(pos => pos.isEqual(normalizedLastPos));\n }).getOr(true);\n const setCaretLocation = (editor, caret) => location => renderCaret(caret, location).map(pos => () => setCaretPosition(editor, pos));\n const deleteFromTo = (editor, caret, from, to) => {\n const rootNode = editor.getBody();\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.undoManager.ignore(() => {\n editor.selection.setRng(rangeFromPositions(from, to));\n execNativeDeleteCommand(editor);\n readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).bind(setCaretLocation(editor, caret)).each(call);\n });\n editor.nodeChanged();\n };\n const rescope = (rootNode, node) => {\n const parentBlock = getParentBlock$3(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n const backspaceDeleteCollapsed = (editor, caret, forward, from) => {\n const rootNode = rescope(editor.getBody(), from.container());\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n const location = fromLocation.bind(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 });\n return location.map(setCaretLocation(editor, caret)).getOrThunk(() => {\n const toPosition = navigate(forward, rootNode, from);\n const toLocation = toPosition.bind(pos => readLocation(isInlineTarget$1, rootNode, pos));\n return lift2(fromLocation, toLocation, () => findRootInline(isInlineTarget$1, rootNode, from).bind(elm => {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n return Optional.some(() => {\n deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n });\n } else {\n return Optional.none();\n }\n })).getOrThunk(() => toLocation.bind(() => toPosition.map(to => {\n return () => {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n };\n })));\n });\n };\n const backspaceDelete$3 = (editor, caret, forward) => {\n if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return Optional.none();\n };\n\n const getParentInlines = (rootElm, startElm) => {\n const parents = parentsAndSelf(startElm, rootElm);\n return findIndex$2(parents, isBlock$2).fold(constant(parents), index => parents.slice(0, index));\n };\n const hasOnlyOneChild = elm => childNodesCount(elm) === 1;\n const deleteLastPosition = (forward, editor, target, parentInlines) => {\n const isFormatElement$1 = curry(isFormatElement, editor);\n const formatNodes = map$3(filter$5(parentInlines, isFormatElement$1), elm => elm.dom);\n if (formatNodes.length === 0) {\n deleteElement$2(editor, forward, target);\n } else {\n const pos = replaceWithCaretFormat(target.dom, formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n const deleteCaret$1 = (editor, forward) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n const startElm = SugarElement.fromDom(editor.selection.getStart());\n const parentInlines = filter$5(getParentInlines(rootElm, startElm), hasOnlyOneChild);\n return last$3(parentInlines).bind(target => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n return Optional.some(() => deleteLastPosition(forward, editor, target, parentInlines));\n } else {\n return Optional.none();\n }\n });\n };\n const backspaceDelete$2 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : Optional.none();\n\n const deleteElement = (editor, forward, element) => {\n if (isNonNullable(element)) {\n return Optional.some(() => {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n });\n } else {\n return Optional.none();\n }\n };\n const deleteCaret = (editor, forward) => {\n const isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const 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(pos => isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos)).bind(pos => deleteElement(editor, forward, pos.getNode(!forward)));\n }\n };\n const deleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : Optional.none();\n };\n const backspaceDelete$1 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n\n const isEditable$1 = target => closest$4(target, elm => isContentEditableTrue$3(elm.dom) || isContentEditableFalse$a(elm.dom)).exists(elm => isContentEditableTrue$3(elm.dom));\n const parseIndentValue = value => toInt(value !== null && value !== void 0 ? value : '').getOr(0);\n const getIndentStyleName = (useMargin, element) => {\n const indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n const suffix = get$7(element, 'direction') === 'rtl' ? '-right' : '-left';\n return indentStyleName + suffix;\n };\n const indentElement = (dom, command, useMargin, value, unit, element) => {\n const indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n const parsedValue = parseIndentValue(dom.getStyle(element, indentStyleName));\n if (command === 'outdent') {\n const styleValue = Math.max(0, parsedValue - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n const styleValue = parsedValue + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n const validateBlocks = (editor, blocks) => forall(blocks, block => {\n const indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n const intentValue = getRaw$1(block, indentStyleName).map(parseIndentValue).getOr(0);\n const contentEditable = editor.dom.getContentEditable(block.dom);\n return contentEditable !== 'false' && intentValue > 0;\n });\n const canOutdent = editor => {\n const blocks = getBlocksToIndent(editor);\n return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n };\n const isListComponent = el => isList(el) || isListItem$1(el);\n const parentIsListComponent = el => parent(el).exists(isListComponent);\n const getBlocksToIndent = editor => filter$5(fromDom$1(editor.selection.getSelectedBlocks()), el => !isListComponent(el) && !parentIsListComponent(el) && isEditable$1(el));\n const handle = (editor, command) => {\n var _a, _b;\n const {dom} = editor;\n const indentation = getIndentation(editor);\n const indentUnit = (_b = (_a = /[a-z%]+$/i.exec(indentation)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 'px';\n const indentValue = parseIndentValue(indentation);\n const useMargin = shouldIndentUseMargin(editor);\n each$e(getBlocksToIndent(editor), block => {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n });\n };\n const indent = editor => handle(editor, 'indent');\n const outdent = editor => handle(editor, 'outdent');\n\n const backspaceDelete = editor => {\n if (editor.selection.isCollapsed() && canOutdent(editor)) {\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const block = dom.getParent(rng.startContainer, dom.isBlock);\n if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos)) {\n return Optional.some(() => outdent(editor));\n }\n }\n return Optional.none();\n };\n\n const findAction = (editor, caret, forward) => findMap([\n backspaceDelete,\n backspaceDelete$5,\n backspaceDelete$6,\n (editor, forward) => backspaceDelete$3(editor, caret, forward),\n backspaceDelete$8,\n backspaceDelete$9,\n backspaceDelete$4,\n backspaceDelete$1,\n backspaceDelete$7,\n backspaceDelete$2\n ], item => item(editor, forward));\n const deleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, false);\n result.fold(() => {\n execNativeDeleteCommand(editor);\n paddEmptyBody(editor);\n }, call);\n };\n const forwardDeleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, true);\n result.fold(() => execNativeForwardDeleteCommand(editor), call);\n };\n const setup$p = (editor, caret) => {\n editor.addCommand('delete', () => {\n deleteCommand(editor, caret);\n });\n editor.addCommand('forwardDelete', () => {\n forwardDeleteCommand(editor, caret);\n });\n };\n\n const SIGNIFICANT_MOVE = 5;\n const LONGPRESS_DELAY = 400;\n const getTouch = event => {\n if (event.touches === undefined || event.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(event.touches[0]);\n };\n const isFarEnough = (touch, data) => {\n const distX = Math.abs(touch.clientX - data.x);\n const distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n const setup$o = editor => {\n const startData = value$2();\n const longpressFired = Cell(false);\n const debounceLongpress = last$1(e => {\n editor.dispatch('longpress', {\n ...e,\n type: 'longpress'\n });\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n editor.on('touchstart', e => {\n getTouch(e).each(touch => {\n debounceLongpress.cancel();\n const 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', e => {\n debounceLongpress.cancel();\n getTouch(e).each(touch => {\n startData.on(data => {\n if (isFarEnough(touch, data)) {\n startData.clear();\n longpressFired.set(false);\n editor.dispatch('longpresscancel');\n }\n });\n });\n }, true);\n editor.on('touchend touchcancel', e => {\n debounceLongpress.cancel();\n if (e.type === 'touchcancel') {\n return;\n }\n startData.get().filter(data => data.target.isEqualNode(e.target)).each(() => {\n if (longpressFired.get()) {\n e.preventDefault();\n } else {\n editor.dispatch('tap', {\n ...e,\n type: 'tap'\n });\n }\n });\n }, true);\n };\n\n const isBlockElement = (blockElements, node) => has$2(blockElements, node.nodeName);\n const isValidTarget = (schema, node) => {\n if (isText$a(node)) {\n return true;\n } else if (isElement$6(node)) {\n return !isBlockElement(schema.getBlockElements(), node) && !isBookmarkNode$1(node) && !isTransparentBlock(schema, node);\n } else {\n return false;\n }\n };\n const hasBlockParent = (blockElements, root, node) => {\n return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root)), elm => {\n return isBlockElement(blockElements, elm.dom);\n });\n };\n const shouldRemoveTextNode = (blockElements, node) => {\n if (isText$a(node)) {\n if (node.data.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.data) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n return true;\n }\n }\n return false;\n };\n const createRootBlock = editor => editor.dom.create(getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n const addRootBlocks = editor => {\n const dom = editor.dom, selection = editor.selection;\n const schema = editor.schema;\n const blockElements = schema.getBlockElements();\n const startNode = selection.getStart();\n const rootNode = editor.getBody();\n let rootBlockNode;\n let tempNode;\n let wrapped = false;\n const forcedRootBlock = getForcedRootBlock(editor);\n if (!startNode || !isElement$6(startNode)) {\n return;\n }\n const rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, startNode)) {\n return;\n }\n const rng = selection.getRng();\n const {startContainer, startOffset, endContainer, endOffset} = rng;\n const restoreSelection = hasFocus(editor);\n let node = rootNode.firstChild;\n while (node) {\n if (isElement$6(node)) {\n updateElement(schema, node);\n }\n if (isValidTarget(schema, 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 = createRootBlock(editor);\n rootNode.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 const insertEmptyLine = (editor, root, insertBlock) => {\n const block = SugarElement.fromDom(createRootBlock(editor));\n const br = createPaddingBr();\n append$1(block, br);\n insertBlock(root, block);\n const rng = document.createRange();\n rng.setStartBefore(br.dom);\n rng.setEndBefore(br.dom);\n return rng;\n };\n const setup$n = editor => {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n };\n\n const hasClass = checkClassName => node => (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;\n const replaceMatchWithSpan = (editor, content, cls) => {\n return function (match) {\n const args = arguments, index = args[args.length - 2];\n const prevChar = index > 0 ? content.charAt(index - 1) : '';\n if (prevChar === '\"') {\n return match;\n }\n if (prevChar === '>') {\n const findStartTagIndex = content.lastIndexOf('<', index);\n if (findStartTagIndex !== -1) {\n const tagHtml = content.substring(findStartTagIndex, index);\n if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n return match;\n }\n }\n }\n return '<span class=\"' + cls + '\" data-mce-content=\"' + editor.dom.encode(args[0]) + '\">' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '</span>';\n };\n };\n const convertRegExpsToNonEditable = (editor, nonEditableRegExps, e) => {\n let i = nonEditableRegExps.length, content = e.content;\n if (e.format === 'raw') {\n return;\n }\n while (i--) {\n content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, getNonEditableClass(editor)));\n }\n e.content = content;\n };\n const setup$m = editor => {\n const contentEditableAttrName = 'contenteditable';\n const editClass = ' ' + Tools.trim(getEditableClass(editor)) + ' ';\n const nonEditClass = ' ' + Tools.trim(getNonEditableClass(editor)) + ' ';\n const hasEditClass = hasClass(editClass);\n const hasNonEditClass = hasClass(nonEditClass);\n const nonEditableRegExps = getNonEditableRegExps(editor);\n if (nonEditableRegExps.length > 0) {\n editor.on('BeforeSetContent', e => {\n convertRegExpsToNonEditable(editor, nonEditableRegExps, e);\n });\n }\n editor.parser.addAttributeFilter('class', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (hasEditClass(node)) {\n node.attr(contentEditableAttrName, 'true');\n } else if (hasNonEditClass(node)) {\n node.attr(contentEditableAttrName, 'false');\n }\n }\n });\n editor.serializer.addAttributeFilter(contentEditableAttrName, nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (!hasEditClass(node) && !hasNonEditClass(node)) {\n continue;\n }\n if (nonEditableRegExps.length > 0 && node.attr('data-mce-content')) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = node.attr('data-mce-content');\n } else {\n node.attr(contentEditableAttrName, null);\n }\n }\n });\n };\n\n const findBlockCaretContainer = editor => descendant(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').map(elm => elm.dom).getOrNull();\n const showBlockCaretContainer = (editor, blockCaretContainer) => {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n editor.selection.setRng(editor.selection.getRng());\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n const handleBlockContainer = (editor, e) => {\n const 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 const setup$l = editor => {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n\n const isContentEditableFalse$3 = isContentEditableFalse$a;\n const moveToCeFalseHorizontally = (direction, editor, range) => moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$3);\n const moveToCeFalseVertically = (direction, editor, range) => {\n const isBefore = caretPosition => isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n const isAfter = caretPosition => isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$3);\n };\n const createTextBlock = editor => {\n const textBlock = editor.dom.create(getForcedRootBlock(editor));\n textBlock.innerHTML = '<br data-mce-bogus=\"1\">';\n return textBlock;\n };\n const exitPreBlock = (editor, direction, range) => {\n const caretWalker = CaretWalker(editor.getBody());\n const getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n if (range.collapsed) {\n const pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n const caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n if (!caretPos) {\n const newBlock = SugarElement.fromDom(createTextBlock(editor));\n if (direction === 1) {\n after$4(SugarElement.fromDom(pre), newBlock);\n } else {\n before$3(SugarElement.fromDom(pre), newBlock);\n }\n editor.selection.select(newBlock.dom, true);\n editor.selection.collapse();\n }\n }\n };\n const getHorizontalRange = (editor, forward) => {\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const range = editor.selection.getRng();\n return moveToCeFalseHorizontally(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const getVerticalRange = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveToCeFalseVertically(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const moveH$2 = (editor, forward) => getHorizontalRange(editor, forward).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n const moveV$3 = (editor, down) => getVerticalRange(editor, down).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n const moveToLineEndPoint$1 = (editor, forward) => {\n const isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n return moveToLineEndPoint$3(editor, forward, isCefPosition);\n };\n const selectToEndPoint = (editor, forward) => getEdgeCefPosition(editor, !forward).map(pos => {\n const rng = pos.toRange();\n const curRng = editor.selection.getRng();\n if (forward) {\n rng.setStart(curRng.startContainer, curRng.startOffset);\n } else {\n rng.setEnd(curRng.endContainer, curRng.endOffset);\n }\n return rng;\n }).exists(rng => {\n moveToRange(editor, rng);\n return true;\n });\n\n const isTarget = node => contains$2(['figcaption'], name(node));\n const getClosestTargetBlock = (pos, root) => {\n const isRoot = curry(eq, root);\n return closest$4(SugarElement.fromDom(pos.container()), isBlock$2, isRoot).filter(isTarget);\n };\n const isAtFirstOrLastLine = (root, forward, pos) => forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n const moveCaretToNewEmptyLine = (editor, forward) => {\n const root = SugarElement.fromDom(editor.getBody());\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getClosestTargetBlock(pos, root).exists(() => {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n const insertFn = forward ? append$1 : prepend;\n const rng = insertEmptyLine(editor, root, insertFn);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n const moveV$2 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n\n const baseKeyPattern = {\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0\n };\n const defaultPatterns = patterns => map$3(patterns, pattern => ({\n ...baseKeyPattern,\n ...pattern\n }));\n const defaultDelayedPatterns = patterns => map$3(patterns, pattern => ({\n ...baseKeyPattern,\n ...pattern\n }));\n const matchesEvent = (pattern, evt) => evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n const match$1 = (patterns, evt) => bind$3(defaultPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n const matchDelayed = (patterns, evt) => bind$3(defaultDelayedPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n const action = (f, ...x) => () => f.apply(null, x);\n const execute = (patterns, evt) => find$2(match$1(patterns, evt), pattern => pattern.action());\n const executeWithDelayedAction = (patterns, evt) => findMap(matchDelayed(patterns, evt), pattern => pattern.action());\n\n const moveH$1 = (editor, forward) => {\n const direction = forward ? HDirection.Forwards : HDirection.Backwards;\n const range = editor.selection.getRng();\n return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveV$1 = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveToLineEndPoint = (editor, forward) => {\n const isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n return moveToLineEndPoint$3(editor, forward, isNearMedia);\n };\n\n const adt = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n const none = current => adt.none(current);\n const CellLocation = {\n ...adt,\n none\n };\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$3(children$1(scope), x => {\n if (is$1(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup$1 = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$1(elm, 'table') || isRoot(elm);\n return ancestor$2(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup$1([\n 'td',\n 'th'\n ], element, isRoot);\n const cells = ancestor => firstLayer(ancestor, 'th,td');\n const table = (element, isRoot) => closest$3(element, 'table', isRoot);\n\n const walk = (all, current, index, direction, isEligible = always) => {\n const 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 const newIndex = index + direction;\n const elem = all[newIndex];\n return isEligible(elem) ? CellLocation.middle(current, elem) : walk(all, current, newIndex, direction, isEligible);\n }\n };\n const detect = (current, isRoot) => {\n return table(current, isRoot).bind(table => {\n const all = cells(table);\n const index = findIndex$2(all, x => eq(current, x));\n return index.map(index => ({\n index,\n all\n }));\n });\n };\n const next = (current, isEligible, isRoot) => {\n const detection = detect(current, isRoot);\n return detection.fold(() => {\n return CellLocation.none(current);\n }, info => {\n return walk(info.all, current, info.index, 1, isEligible);\n });\n };\n const prev = (current, isEligible, isRoot) => {\n const detection = detect(current, isRoot);\n return detection.fold(() => {\n return CellLocation.none();\n }, info => {\n return walk(info.all, current, info.index, -1, isEligible);\n });\n };\n\n const closest = target => closest$3(target, '[contenteditable]');\n const isEditable = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const deflate = (rect, delta) => ({\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 const getCorners = (getYAxisValue, tds) => bind$3(tds, td => {\n const rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n const findClosestCorner = (corners, x, y) => foldl(corners, (acc, newCorner) => acc.fold(() => Optional.some(newCorner), oldCorner => {\n const oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n const newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n }), Optional.none());\n const getClosestCell = (getYAxisValue, isTargetCorner, table, x, y) => {\n const cells = descendants(SugarElement.fromDom(table), 'td,th,caption').map(e => e.dom);\n const corners = filter$5(getCorners(getYAxisValue, cells), corner => isTargetCorner(corner, y));\n return findClosestCorner(corners, x, y).map(corner => corner.cell);\n };\n const getBottomValue = rect => rect.bottom;\n const getTopValue = rect => rect.top;\n const isAbove = (corner, y) => corner.y < y;\n const isBelow = (corner, y) => corner.y > y;\n const getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n const getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n const findClosestPositionInAboveCell = (table, pos) => head(pos.getClientRects()).bind(rect => getClosestCellAbove(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getLastLinePositions(cell), pos));\n const findClosestPositionInBelowCell = (table, pos) => last$3(pos.getClientRects()).bind(rect => getClosestCellBelow(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getFirstLinePositions(cell), pos));\n\n const hasNextBreak = (getPositionsUntil, scope, lineInfo) => lineInfo.breakAt.exists(breakPos => getPositionsUntil(scope, breakPos).breakAt.isSome());\n const startsWithWrapBreak = lineInfo => lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n const startsWithBrBreak = lineInfo => lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n const isAtTableCellLine = (getPositionsUntil, scope, pos) => {\n const lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !isBr$6(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n const isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n const isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n const isCaretAtStartOrEndOfTable = (forward, rng, table) => {\n const caretPos = CaretPosition.fromRangeStart(rng);\n return positionIn(!forward, table).exists(pos => pos.isEqual(caretPos));\n };\n const navigateHorizontally = (editor, forward, table, _td) => {\n const rng = editor.selection.getRng();\n const direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n showCaret(direction, editor, table, !forward, false).each(newRng => {\n moveToRange(editor, newRng);\n });\n return true;\n }\n return false;\n };\n const getClosestAbovePosition = (root, table, start) => findClosestPositionInAboveCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left))).getOr(CaretPosition.before(table));\n const getClosestBelowPosition = (root, table, start) => findClosestPositionInBelowCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left))).getOr(CaretPosition.after(table));\n const getTable = (previous, pos) => {\n const node = pos.getNode(previous);\n return isTable$2(node) ? Optional.some(node) : Optional.none();\n };\n const renderBlock = (down, editor, table) => {\n editor.undoManager.transact(() => {\n const insertFn = down ? after$4 : before$3;\n const rng = insertEmptyLine(editor, SugarElement.fromDom(table), insertFn);\n moveToRange(editor, rng);\n });\n };\n const moveCaret = (editor, down, pos) => {\n const table = down ? getTable(true, pos) : getTable(false, pos);\n const last = down === false;\n table.fold(() => moveToRange(editor, pos.toRange()), table => positionIn(last, editor.getBody()).filter(lastPos => lastPos.isEqual(pos)).fold(() => moveToRange(editor, pos.toRange()), _ => renderBlock(down, editor, table)));\n };\n const navigateVertically = (editor, down, table, td) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n const newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n const newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n const move$1 = (editor, forward, mover) => Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(td => Optional.from(editor.dom.getParent(td, 'table')).map(table => mover(editor, forward, table, td))).getOr(false);\n const moveH = (editor, forward) => move$1(editor, forward, navigateHorizontally);\n const moveV = (editor, forward) => move$1(editor, forward, navigateVertically);\n const getCellFirstCursorPosition = cell => {\n const selection = SimSelection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n const tabGo = (editor, isRoot, cell) => {\n return cell.fold(Optional.none, Optional.none, (_current, next) => {\n return first(next).map(cell => {\n return getCellFirstCursorPosition(cell);\n });\n }, current => {\n editor.execCommand('mceTableInsertRowAfter');\n return tabForward(editor, isRoot, current);\n });\n };\n const tabForward = (editor, isRoot, cell) => tabGo(editor, isRoot, next(cell, isEditable));\n const tabBackward = (editor, isRoot, cell) => tabGo(editor, isRoot, prev(cell, isEditable));\n const handleTab = (editor, forward) => {\n const rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n const body = SugarElement.fromDom(editor.getBody());\n const isRoot = element => {\n const name$1 = name(element);\n return eq(element, body) || contains$2(rootElements, name$1);\n };\n const rng = editor.selection.getRng();\n const container = SugarElement.fromDom(!forward ? rng.startContainer : rng.endContainer);\n return cell(container, isRoot).map(cell => {\n table(cell, isRoot).each(table => {\n editor.model.table.clearSelectedCells(table.dom);\n });\n editor.selection.collapse(!forward);\n const navigation = !forward ? tabBackward : tabForward;\n const rng = navigation(editor, isRoot, cell);\n rng.each(range => {\n editor.selection.setRng(range);\n });\n return true;\n }).getOr(false);\n };\n\n const executeKeydownOverride$4 = (editor, caret, evt) => {\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\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 ...isMac ? [\n {\n keyCode: VK.UP,\n action: action(selectToEndPoint, editor, false),\n metaKey: true,\n shiftKey: true\n },\n {\n keyCode: VK.DOWN,\n action: action(selectToEndPoint, editor, true),\n metaKey: true,\n shiftKey: true\n }\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: !isMac,\n altKey: isMac,\n action: action(moveNextWord, editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !isMac,\n altKey: isMac,\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(_ => {\n evt.preventDefault();\n });\n };\n const setup$k = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$4(editor, caret, evt);\n }\n });\n };\n\n const point = (container, offset) => ({\n container,\n offset\n });\n\n const DOM$7 = DOMUtils.DOM;\n const alwaysNext = startNode => node => startNode === node ? -1 : 0;\n const isBoundary = dom => node => dom.isBlock(node) || contains$2([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n const textBefore = (node, offset, rootNode) => {\n if (isText$a(node) && offset >= 0) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, prev.container.data.length));\n }\n };\n const textAfter = (node, offset, rootNode) => {\n if (isText$a(node) && offset >= node.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, 0));\n }\n };\n const scanLeft = (node, offset, rootNode) => {\n if (!isText$a(node)) {\n return Optional.none();\n }\n const text = node.data;\n if (offset >= 0 && offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind(prev => {\n const prevText = prev.container.data;\n return scanLeft(prev.container, offset + prevText.length, rootNode);\n });\n }\n };\n const scanRight = (node, offset, rootNode) => {\n if (!isText$a(node)) {\n return Optional.none();\n }\n const text = node.data;\n if (offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind(next => scanRight(next.container, offset - text.length, rootNode));\n }\n };\n const repeatLeft = (dom, node, offset, process, rootNode) => {\n const search = TextSeeker(dom, isBoundary(dom));\n return Optional.from(search.backwards(node, offset, process, rootNode));\n };\n\n const isValidTextRange = rng => rng.collapsed && isText$a(rng.startContainer);\n const getText = rng => trim$1(rng.toString().replace(/\\u00A0/g, ' '));\n const isWhitespace = chr => chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n\n const stripTrigger = (text, trigger) => text.substring(trigger.length);\n const findTrigger = (text, index, trigger) => {\n let i;\n const firstChar = trigger.charAt(0);\n for (i = index - 1; i >= 0; i--) {\n const char = text.charAt(i);\n if (isWhitespace(char)) {\n return Optional.none();\n }\n if (firstChar === char && contains$1(text, trigger, i, index)) {\n break;\n }\n }\n return Optional.some(i);\n };\n const findStart = (dom, initRange, trigger, minChars = 0) => {\n if (!isValidTextRange(initRange)) {\n return Optional.none();\n }\n const buffer = {\n text: '',\n offset: 0\n };\n const findTriggerIndex = (element, offset, text) => {\n buffer.text = text + buffer.text;\n buffer.offset += offset;\n return findTrigger(buffer.text, buffer.offset, trigger).getOr(offset);\n };\n const root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerIndex, root).bind(spot => {\n const 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 const text = getText(range);\n const triggerIndex = text.lastIndexOf(trigger);\n if (triggerIndex !== 0 || stripTrigger(text, trigger).length < minChars) {\n return Optional.none();\n } else {\n return Optional.some({\n text: stripTrigger(text, trigger),\n range,\n trigger\n });\n }\n });\n };\n const getContext = (dom, initRange, trigger, minChars = 0) => detect$1(SugarElement.fromDom(initRange.startContainer)).fold(() => findStart(dom, initRange, trigger, minChars), elm => {\n const range = dom.createRng();\n range.selectNode(elm.dom);\n const text = getText(range);\n return Optional.some({\n range,\n text: stripTrigger(text, trigger),\n trigger\n });\n });\n\n const isText$1 = node => node.nodeType === TEXT;\n const isElement = node => node.nodeType === ELEMENT;\n const toLast = node => {\n if (isText$1(node)) {\n return point(node, node.data.length);\n } else {\n const children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point(node, children.length);\n }\n };\n const toLeaf = (node, offset) => {\n const children = node.childNodes;\n if (children.length > 0 && offset < children.length) {\n return toLeaf(children[offset], 0);\n } else if (children.length > 0 && isElement(node) && children.length === offset) {\n return toLast(children[children.length - 1]);\n } else {\n return point(node, offset);\n }\n };\n\n const isPreviousCharContent = (dom, leaf) => {\n var _a;\n const root = (_a = dom.getParent(leaf.container, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n return repeatLeft(dom, leaf.container, leaf.offset, (_element, offset) => offset === 0 ? -1 : offset, root).filter(spot => {\n const char = spot.container.data.charAt(spot.offset - 1);\n return !isWhitespace(char);\n }).isSome();\n };\n const isStartOfWord = dom => rng => {\n const leaf = toLeaf(rng.startContainer, rng.startOffset);\n return !isPreviousCharContent(dom, leaf);\n };\n const getTriggerContext = (dom, initRange, database) => findMap(database.triggers, trigger => getContext(dom, initRange, trigger));\n const lookup = (editor, getDatabase) => {\n const database = getDatabase();\n const rng = editor.selection.getRng();\n return getTriggerContext(editor.dom, rng, database).bind(context => lookupWithContext(editor, getDatabase, context));\n };\n const lookupWithContext = (editor, getDatabase, context, fetchOptions = {}) => {\n var _a;\n const database = getDatabase();\n const rng = editor.selection.getRng();\n const startText = (_a = rng.startContainer.nodeValue) !== null && _a !== void 0 ? _a : '';\n const autocompleters = filter$5(database.lookupByTrigger(context.trigger), autocompleter => context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(() => isStartOfWord(editor.dom))(context.range, startText, context.text));\n if (autocompleters.length === 0) {\n return Optional.none();\n }\n const lookupData = Promise.all(map$3(autocompleters, ac => {\n const fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(results => ({\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction,\n highlightOn: ac.highlightOn\n }));\n }));\n return Optional.some({\n lookupData,\n context\n });\n };\n\n var SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n const partition = results => {\n const values = [];\n const errors = [];\n each$e(results, obj => {\n fold$1(obj, err => errors.push(err), val => values.push(val));\n });\n return {\n values,\n errors\n };\n };\n const mapError = (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 const map = (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 const bind = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n const bindError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n const svalue = v => ({\n stype: SimpleResultType.Value,\n svalue: v\n });\n const serror = e => ({\n stype: SimpleResultType.Error,\n serror: e\n });\n const toResult = res => fold$1(res, Result.error, Result.value);\n const fromResult = res => res.fold(serror, svalue);\n const SimpleResult = {\n fromResult,\n toResult,\n svalue,\n partition,\n serror,\n bind,\n bindError,\n map,\n mapError,\n fold: fold$1\n };\n\n const formatObj = input => {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n const formatErrors = errors => {\n const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: constant('... (only showing first ten failures)')\n }]) : errors;\n return map$3(es, e => {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n const nu = (path, getErrorInfo) => {\n return SimpleResult.serror([{\n path,\n getErrorInfo\n }]);\n };\n const missingRequired = (path, key, obj) => nu(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n const missingKey = (path, key) => nu(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n const missingBranch = (path, branches, branch) => nu(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n const custom = (path, err) => nu(path, constant(err));\n\n const chooseFrom = (path, input, branches, ch) => {\n const fields = get$a(branches, ch);\n return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n };\n const choose$1 = (key, branches) => {\n const extract = (path, input) => {\n const choice = get$a(input, key);\n return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n };\n const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n return {\n extract,\n toString\n };\n };\n\n const shallow = (old, nu) => {\n return nu;\n };\n const deep = (old, nu) => {\n const bothObjects = isPlainObject(old) && isPlainObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n const baseMerge = merger => {\n return (...objects) => {\n if (objects.length === 0) {\n throw new Error(`Can't merge zero objects`);\n }\n const ret = {};\n for (let j = 0; j < objects.length; j++) {\n const curObject = objects[j];\n for (const 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 const deepMerge = baseMerge(deep);\n const merge = baseMerge(shallow);\n\n const required = () => ({\n tag: 'required',\n process: {}\n });\n const defaultedThunk = fallbackThunk => ({\n tag: 'defaultedThunk',\n process: fallbackThunk\n });\n const defaulted$1 = fallback => defaultedThunk(constant(fallback));\n const asOption = () => ({\n tag: 'option',\n process: {}\n });\n\n const mergeValues = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);\n const mergeErrors = errors => compose(SimpleResult.serror, flatten)(errors);\n const consolidateObj = (objects, base) => {\n const partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors(partition.errors) : mergeValues(partition.values, base);\n };\n const consolidateArr = objects => {\n const partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n const ResultCombine = {\n consolidateObj,\n consolidateArr\n };\n\n const field$1 = (key, newKey, presence, prop) => ({\n tag: 'field',\n key,\n newKey,\n presence,\n prop\n });\n const customField$1 = (newKey, instantiator) => ({\n tag: 'custom',\n newKey,\n instantiator\n });\n const fold = (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 const value = validator => {\n const extract = (path, val) => {\n return SimpleResult.bindError(validator(val), err => custom(path, err));\n };\n const toString = constant('val');\n return {\n extract,\n toString\n };\n };\n const anyValue$1 = value(SimpleResult.svalue);\n\n const requiredAccess = (path, obj, key, bundle) => get$a(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n const fallbackAccess = (obj, key, fallback, bundle) => {\n const v = get$a(obj, key).getOrThunk(() => fallback(obj));\n return bundle(v);\n };\n const optionAccess = (obj, key, bundle) => bundle(get$a(obj, key));\n const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n const opt = get$a(obj, key).map(val => val === true ? fallback(obj) : val);\n return bundle(opt);\n };\n const extractField = (field, path, obj, key, prop) => {\n const bundle = av => prop.extract(path.concat([key]), av);\n const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n const result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\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({}), v => {\n const result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n const extractFields = (path, obj, fields) => {\n const success = {};\n const errors = [];\n for (const field of fields) {\n fold(field, (key, newKey, presence, prop) => {\n const result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, err => {\n errors.push(...err);\n }, res => {\n success[newKey] = res;\n });\n }, (newKey, instantiator) => {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n const objOf = values => {\n const extract = (path, o) => extractFields(path, o, values);\n const toString = () => {\n const fieldStrings = map$3(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract,\n toString\n };\n };\n const arrOf = prop => {\n const extract = (path, array) => {\n const results = map$3(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n return ResultCombine.consolidateArr(results);\n };\n const toString = () => 'array(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n\n const valueOf = validator => value(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n const extractValue = (label, prop, obj) => {\n const res = prop.extract([label], obj);\n return SimpleResult.mapError(res, errs => ({\n input: obj,\n errors: errs\n }));\n };\n const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n const formatError = errInfo => {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n const choose = (key, branches) => choose$1(key, map$2(branches, objOf));\n\n const anyValue = constant(anyValue$1);\n const typedValue = (validator, expectedType) => value(a => {\n const actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n });\n const number = typedValue(isNumber, 'number');\n const string = typedValue(isString, 'string');\n const boolean = typedValue(isBoolean, 'boolean');\n const functionProcessor = typedValue(isFunction, 'function');\n\n const field = field$1;\n const customField = customField$1;\n const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n const requiredOf = (key, schema) => field(key, key, required(), schema);\n const requiredString = key => requiredOf(key, string);\n const requiredFunction = key => requiredOf(key, functionProcessor);\n const requiredArrayOf = (key, schema) => field(key, key, required(), arrOf(schema));\n const optionOf = (key, schema) => field(key, key, asOption(), schema);\n const optionString = key => optionOf(key, string);\n const optionFunction = key => optionOf(key, functionProcessor);\n const defaulted = (key, fallback) => field(key, key, defaulted$1(fallback), anyValue());\n const defaultedOf = (key, fallback, schema) => field(key, key, defaulted$1(fallback), schema);\n const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n\n const type = requiredString('type');\n const fetch$1 = requiredFunction('fetch');\n const onAction = requiredFunction('onAction');\n const onSetup = defaultedFunction('onSetup', () => noop);\n const optionalText = optionString('text');\n const optionalIcon = optionString('icon');\n const optionalTooltip = optionString('tooltip');\n const optionalLabel = optionString('label');\n const active = defaultedBoolean('active', false);\n const enabled = defaultedBoolean('enabled', true);\n const primary = defaultedBoolean('primary', false);\n const defaultedColumns = num => defaulted('columns', num);\n const defaultedType = type => defaultedString('type', type);\n\n const autocompleterSchema = objOf([\n type,\n requiredString('trigger'),\n defaultedNumber('minChars', 1),\n defaultedColumns(1),\n defaultedNumber('maxResults', 10),\n optionFunction('matches'),\n fetch$1,\n onAction,\n defaultedArrayOf('highlightOn', [], string)\n ]);\n const createAutocompleter = spec => asRaw('Autocompleter', autocompleterSchema, {\n trigger: spec.ch,\n ...spec\n });\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup\n ];\n\n const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n\n const 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 const contextButtonFields = baseToolbarButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n const toggleOrNormal = choose('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n objOf([\n defaultedType('contextform'),\n defaultedFunction('initValue', constant('')),\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n\n const register$2 = editor => {\n const popups = editor.ui.registry.getAll().popups;\n const dataset = map$2(popups, popup => createAutocompleter(popup).fold(err => {\n throw new Error(formatError(err));\n }, identity));\n const triggers = stringArray(mapToArray(dataset, v => v.trigger));\n const datasetValues = values(dataset);\n const lookupByTrigger = trigger => filter$5(datasetValues, dv => dv.trigger === trigger);\n return {\n dataset,\n triggers,\n lookupByTrigger\n };\n };\n\n const setupEditorInput = (editor, api) => {\n const update = last$1(api.load, 50);\n editor.on('keypress compositionend', e => {\n if (e.which === 27) {\n return;\n }\n update.throttle();\n });\n editor.on('keydown', e => {\n const keyCode = e.which;\n if (keyCode === 8) {\n update.throttle();\n } else if (keyCode === 27) {\n api.cancelIfNecessary();\n }\n });\n editor.on('remove', update.cancel);\n };\n const setup$j = editor => {\n const activeAutocompleter = value$2();\n const uiActive = Cell(false);\n const isActive = activeAutocompleter.isSet;\n const cancelIfNecessary = () => {\n if (isActive()) {\n removeAutocompleterDecoration(editor);\n fireAutocompleterEnd(editor);\n uiActive.set(false);\n activeAutocompleter.clear();\n }\n };\n const commenceIfNecessary = context => {\n if (!isActive()) {\n addAutocompleterDecoration(editor, context.range);\n activeAutocompleter.set({\n trigger: context.trigger,\n matchLength: context.text.length\n });\n }\n };\n const getAutocompleters = cached(() => register$2(editor));\n const doLookup = fetchOptions => activeAutocompleter.get().map(ac => getContext(editor.dom, editor.selection.getRng(), ac.trigger).bind(newContext => lookupWithContext(editor, getAutocompleters, newContext, fetchOptions))).getOrThunk(() => lookup(editor, getAutocompleters));\n const load = fetchOptions => {\n doLookup(fetchOptions).fold(cancelIfNecessary, lookupInfo => {\n commenceIfNecessary(lookupInfo.context);\n lookupInfo.lookupData.then(lookupData => {\n activeAutocompleter.get().map(ac => {\n const context = lookupInfo.context;\n if (ac.trigger === context.trigger) {\n if (context.text.length - ac.matchLength >= 10) {\n cancelIfNecessary();\n } else {\n activeAutocompleter.set({\n ...ac,\n matchLength: context.text.length\n });\n if (uiActive.get()) {\n fireAutocompleterUpdate(editor, { lookupData });\n } else {\n uiActive.set(true);\n fireAutocompleterStart(editor, { lookupData });\n }\n }\n }\n });\n });\n });\n };\n editor.addCommand('mceAutocompleterReload', (_ui, value) => {\n const fetchOptions = isObject(value) ? value.fetchOptions : {};\n load(fetchOptions);\n });\n editor.addCommand('mceAutocompleterClose', cancelIfNecessary);\n setupEditorInput(editor, {\n cancelIfNecessary,\n load\n });\n };\n\n const createAndFireInputEvent = eventType => (editor, inputType, specifics = {}) => {\n const target = editor.getBody();\n const overrides = {\n bubbles: true,\n composed: true,\n data: null,\n isComposing: false,\n detail: 0,\n view: null,\n target,\n currentTarget: target,\n eventPhase: Event.AT_TARGET,\n originalTarget: target,\n explicitOriginalTarget: target,\n isTrusted: false,\n srcElement: target,\n cancelable: false,\n preventDefault: noop,\n inputType\n };\n const input = clone$3(new InputEvent(eventType));\n return editor.dispatch(eventType, {\n ...input,\n ...overrides,\n ...specifics\n });\n };\n const fireFakeInputEvent = createAndFireInputEvent('input');\n const fireFakeBeforeInputEvent = createAndFireInputEvent('beforeinput');\n\n const executeKeydownOverride$3 = (editor, caret, evt) => {\n const inputType = evt.keyCode === VK.BACKSPACE ? 'deleteContentBackward' : 'deleteContentForward';\n executeWithDelayedAction([\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete, editor)\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(applyAction => {\n evt.preventDefault();\n const beforeInput = fireFakeBeforeInputEvent(editor, inputType);\n if (!beforeInput.isDefaultPrevented()) {\n applyAction();\n fireFakeInputEvent(editor, inputType);\n }\n });\n };\n const executeKeyupOverride = (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 const setup$i = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$3(editor, caret, evt);\n }\n });\n editor.on('keyup', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeyupOverride(editor, evt);\n }\n });\n };\n\n const firstNonWhiteSpaceNodeSibling = node => {\n while (node) {\n if (isElement$6(node) || isText$a(node) && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n };\n const moveToCaretPosition = (editor, root) => {\n const dom = editor.dom;\n const moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n const 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 const rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n const walker = new DomTreeWalker(root, root);\n let lastNode = root;\n let node;\n while (node = walker.current()) {\n if (isText$a(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$6(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 const getEditableRoot = (dom, node) => {\n const root = dom.getRoot();\n let editableRoot;\n let parent = node;\n while (parent !== root && parent && 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 const getParentBlock$1 = editor => {\n return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n const getParentBlockName = editor => {\n return getParentBlock$1(editor).fold(constant(''), parentBlock => {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n const isListItemParentBlock = editor => {\n return getParentBlock$1(editor).filter(elm => {\n return isListItem$1(SugarElement.fromDom(elm));\n }).isSome();\n };\n\n const hasFirstChild = (elm, name) => {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n const isFirstChild = elm => {\n var _a;\n return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n };\n const hasParent = (elm, parentName) => {\n const parentNode = elm === null || elm === void 0 ? void 0 : elm.parentNode;\n return isNonNullable(parentNode) && parentNode.nodeName === parentName;\n };\n const isListBlock = elm => {\n return isNonNullable(elm) && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n const isListItem = elm => {\n return isNonNullable(elm) && /^(LI|DT|DD)$/.test(elm.nodeName);\n };\n const isNestedList = elm => {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n const getContainerBlock = containerBlock => {\n const containerBlockParent = containerBlock.parentNode;\n return isListItem(containerBlockParent) ? containerBlockParent : containerBlock;\n };\n const isFirstOrLastLi = (containerBlock, parentBlock, first) => {\n let node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (isElement$6(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n const insert$3 = (editor, createNewBlock, containerBlock, parentBlock, newBlockName) => {\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const containerParent = containerBlock.parentNode;\n if (containerBlock === editor.getBody() || !containerParent) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n let newBlock = createNewBlock(newBlockName);\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent(containerBlock, 'LI')) {\n const 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 containerParent.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 const tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n const 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 const trimZwsp = fragment => {\n each$e(descendants$1(SugarElement.fromDom(fragment), isText$b), text => {\n const rawNode = text.dom;\n rawNode.nodeValue = trim$1(rawNode.data);\n });\n };\n const isWithinNonEditableList = (editor, node) => {\n const parentList = editor.dom.getParent(node, 'ol,ul,dl');\n return parentList !== null && editor.dom.getContentEditableParent(parentList) === 'false';\n };\n const isEmptyAnchor = (dom, elm) => {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n const emptyBlock = elm => {\n elm.innerHTML = '<br data-mce-bogus=\"1\">';\n };\n const containerAndSiblingName = (container, nodeName) => {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n const canSplitBlock = (dom, node) => {\n return isNonNullable(node) && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n };\n const trimInlineElementsOnLeftSideOfBlock = (dom, nonEmptyElementsMap, block) => {\n var _a;\n const firstChilds = [];\n if (!block) {\n return;\n }\n let currentNode = block;\n while (currentNode = currentNode.firstChild) {\n if (dom.isBlock(currentNode)) {\n return;\n }\n if (isElement$6(currentNode) && !nonEmptyElementsMap[currentNode.nodeName.toLowerCase()]) {\n firstChilds.push(currentNode);\n }\n }\n let i = firstChilds.length;\n while (i--) {\n currentNode = firstChilds[i];\n if (!currentNode.hasChildNodes() || currentNode.firstChild === currentNode.lastChild && ((_a = currentNode.firstChild) === null || _a === void 0 ? void 0 : _a.nodeValue) === '') {\n dom.remove(currentNode);\n } else {\n if (isEmptyAnchor(dom, currentNode)) {\n dom.remove(currentNode);\n }\n }\n }\n };\n const normalizeZwspOffset = (start, container, offset) => {\n if (!isText$a(container)) {\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 const includeZwspInRange = rng => {\n const 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 const trimLeadingLineBreaks = node => {\n let currentNode = node;\n do {\n if (isText$a(currentNode)) {\n currentNode.data = currentNode.data.replace(/^[\\r\\n]+/, '');\n }\n currentNode = currentNode.firstChild;\n } while (currentNode);\n };\n const applyAttributes = (editor, node, forcedRootBlockAttrs) => {\n const dom = editor.dom;\n Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(attrStyles => {\n const currentStyles = getAllRaw(SugarElement.fromDom(node));\n const newStyles = {\n ...currentStyles,\n ...attrStyles\n };\n dom.setStyles(node, newStyles);\n });\n const attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(attrClasses => attrClasses.split(/\\s+/));\n const currentClassesOpt = Optional.from(node.className).map(currentClasses => filter$5(currentClasses.split(/\\s+/), clazz => clazz !== ''));\n lift2(attrClassesOpt, currentClassesOpt, (attrClasses, currentClasses) => {\n const filteredClasses = filter$5(currentClasses, clazz => !contains$2(attrClasses, clazz));\n const newClasses = [\n ...attrClasses,\n ...filteredClasses\n ];\n dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n const appliedAttrs = [\n 'style',\n 'class'\n ];\n const remainingAttrs = filter$4(forcedRootBlockAttrs, (_, attrs) => !contains$2(appliedAttrs, attrs));\n dom.setAttribs(node, remainingAttrs);\n };\n const setForcedBlockAttrs = (editor, node) => {\n const forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n const forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n const wrapSelfAndSiblingsInDefaultBlock = (editor, newBlockName, rng, container, offset) => {\n var _a;\n const dom = editor.dom;\n const editableRoot = (_a = getEditableRoot(dom, container)) !== null && _a !== void 0 ? _a : dom.getRoot();\n let parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n let rootBlockName;\n if (parentBlock === editor.getBody() || isTableCellOrCaption(parentBlock)) {\n rootBlockName = parentBlock.nodeName.toLowerCase();\n } else if (parentBlock.parentNode) {\n rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n } else {\n rootBlockName = '';\n }\n if (!parentBlock.hasChildNodes()) {\n const newBlock = dom.create(newBlockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n let node = container;\n while (node && node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n let startNode;\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n if (startNode && editor.schema.isValidChild(rootBlockName, newBlockName.toLowerCase())) {\n const startNodeParent = startNode.parentNode;\n const newBlock = dom.create(newBlockName);\n setForcedBlockAttrs(editor, newBlock);\n startNodeParent.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n const 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 const addBrToBlockIfNeeded = (dom, block) => {\n block.normalize();\n const lastChild = block.lastChild;\n if (!lastChild || isElement$6(lastChild) && /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n const shouldEndContainer = (editor, container) => {\n const optionValue = shouldEndContainerOnEmptyBlock(editor);\n if (isNullable(container)) {\n return false;\n } else if (isString(optionValue)) {\n return contains$2(Tools.explode(optionValue), container.nodeName.toLowerCase());\n } else {\n return optionValue;\n }\n };\n const insert$2 = (editor, evt) => {\n let container;\n let offset;\n let parentBlockName;\n let containerBlock;\n let isAfterLastNodeInContainer = false;\n const dom = editor.dom;\n const schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n const rng = editor.selection.getRng();\n const newBlockName = getForcedRootBlock(editor);\n const createNewBlock = name => {\n let node = container;\n const textInlineElements = schema.getTextInlineElements();\n let block;\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName);\n } else {\n block = parentBlock.cloneNode(false);\n }\n let 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 const 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 const isCaretAtStartOrEndOfBlock = start => {\n const normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (isText$a(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.data.length)) {\n return false;\n }\n if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && isElement$6(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n const walker = new DomTreeWalker(container, parentBlock);\n if (isText$a(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.data.length) {\n walker.next();\n }\n }\n let node;\n while (node = walker.current()) {\n if (isElement$6(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n const name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (isText$a(node) && !isWhitespaceText(node.data)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n const insertNewBlockAfter = () => {\n let block;\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n block = createNewBlock(newBlockName);\n } else {\n block = createNewBlock();\n }\n if (shouldEndContainer(editor, containerBlock) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n block = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(block, parentBlock);\n }\n moveToCaretPosition(editor, block);\n return block;\n };\n normalize$2(dom, rng).each(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 const shiftKey = !!(evt && evt.shiftKey);\n const ctrlKey = !!(evt && evt.ctrlKey);\n if (isElement$6(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$a(container)) {\n offset = container.data.length;\n } else {\n offset = 0;\n }\n }\n const editableRoot = getEditableRoot(dom, container);\n if (!editableRoot || isWithinNonEditableList(editor, container)) {\n return;\n }\n if (!shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n let parentBlock = dom.getParent(container, dom.isBlock) || dom.getRoot();\n containerBlock = isNonNullable(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.parentNode) ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !ctrlKey) {\n const liBlock = containerBlock;\n parentBlock = liBlock;\n containerBlock = liBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName) && isElement$6(containerBlock)) {\n if (dom.isEmpty(parentBlock)) {\n insert$3(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (parentBlock === editor.getBody()) {\n return;\n }\n const parentBlockParent = parentBlock.parentNode;\n let newBlock;\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(false)) {\n newBlock = insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true) && parentBlockParent) {\n newBlock = parentBlockParent.insertBefore(createNewBlock(), parentBlock);\n moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n } else {\n const tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n const 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.dispatch('NewBlock', { newBlock });\n };\n const fakeEventName$1 = 'insertParagraph';\n const blockbreak = {\n insert: insert$2,\n fakeEventName: fakeEventName$1\n };\n\n const hasRightSideContent = (schema, container, parentBlock) => {\n const walker = new DomTreeWalker(container, parentBlock);\n let node;\n const nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || isText$a(node) && node.length > 0) {\n return true;\n }\n }\n return false;\n };\n const moveSelectionToBr = (editor, brElm, extraBr) => {\n const 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 const insertBrAtCaret = (editor, evt) => {\n const selection = editor.selection;\n const dom = editor.dom;\n const rng = selection.getRng();\n let brElm;\n let extraBr = false;\n normalize$2(dom, rng).each(normRng => {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n let offset = rng.startOffset;\n let container = rng.startContainer;\n if (isElement$6(container) && container.hasChildNodes()) {\n const isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$a(container)) {\n offset = container.data.length;\n } else {\n offset = 0;\n }\n }\n let parentBlock = dom.getParent(container, dom.isBlock);\n const containerBlock = parentBlock && parentBlock.parentNode ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n const isControlKey = !!(evt && evt.ctrlKey);\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (isText$a(container) && offset >= container.data.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock || dom.getRoot())) {\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 const insertBrBefore = (editor, inline) => {\n const br = SugarElement.fromTag('br');\n before$3(SugarElement.fromDom(inline), br);\n editor.undoManager.add();\n };\n const insertBrAfter = (editor, inline) => {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after$4(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n }\n const br = SugarElement.fromTag('br');\n after$4(SugarElement.fromDom(inline), br);\n moveSelectionToBr(editor, br.dom, false);\n editor.undoManager.add();\n };\n const isBeforeBr = pos => {\n return isBr$6(pos.getNode());\n };\n const hasBrAfter = (rootNode, startNode) => {\n if (isBeforeBr(CaretPosition.after(startNode))) {\n return true;\n } else {\n return nextPosition(rootNode, CaretPosition.after(startNode)).map(pos => {\n return isBr$6(pos.getNode());\n }).getOr(false);\n }\n };\n const isAnchorLink = elm => {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n const isInsideAnchor = location => {\n return location.fold(never, isAnchorLink, isAnchorLink, never);\n };\n const readInlineAnchorLocation = editor => {\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const position = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n };\n const insertBrOutsideAnchor = (editor, location) => {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n const insert$1 = (editor, evt) => {\n const anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n const fakeEventName = 'insertLineBreak';\n const linebreak = {\n insert: insert$1,\n fakeEventName\n };\n\n const matchesSelector = (editor, selector) => {\n return getParentBlock$1(editor).filter(parentBlock => {\n return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector);\n }).isSome();\n };\n const shouldInsertBr = editor => {\n return matchesSelector(editor, getBrNewLineSelector(editor));\n };\n const shouldBlockNewLine$1 = editor => {\n return matchesSelector(editor, getNoNewLineSelector(editor));\n };\n\n const newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n const shouldBlockNewLine = (editor, _shiftKey) => {\n return shouldBlockNewLine$1(editor);\n };\n const inListBlock = requiredState => {\n return (editor, _shiftKey) => {\n return isListItemParentBlock(editor) === requiredState;\n };\n };\n const inBlock = (blockName, requiredState) => (editor, _shiftKey) => {\n const state = getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n const inCefBlock = editor => {\n const editableRoot = getEditableRoot(editor.dom, editor.selection.getStart());\n return isNullable(editableRoot);\n };\n const inPreBlock = requiredState => inBlock('pre', requiredState);\n const inSummaryBlock = () => inBlock('summary', true);\n const shouldPutBrInPre = requiredState => {\n return (editor, _shiftKey) => {\n return shouldPutBrInPre$1(editor) === requiredState;\n };\n };\n const inBrContext = (editor, _shiftKey) => {\n return shouldInsertBr(editor);\n };\n const hasShiftKey = (_editor, shiftKey) => {\n return shiftKey;\n };\n const canInsertIntoEditableRoot = editor => {\n const forcedRootBlock = getForcedRootBlock(editor);\n const rootEditable = getEditableRoot(editor.dom, editor.selection.getStart());\n return isNonNullable(rootEditable) && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock);\n };\n const match = (predicates, action) => {\n return (editor, shiftKey) => {\n const isMatch = foldl(predicates, (res, p) => {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Optional.some(action) : Optional.none();\n };\n };\n const getAction = (editor, evt) => {\n return evaluateUntil([\n match([shouldBlockNewLine], newLineAction.none()),\n match([\n inPreBlock(true),\n inCefBlock\n ], 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([inBrContext], newLineAction.br()),\n match([hasShiftKey], newLineAction.br()),\n match([canInsertIntoEditableRoot], newLineAction.block())\n ], [\n editor,\n !!(evt && evt.shiftKey)\n ]).getOr(newLineAction.none());\n };\n\n const insertBreak = (breakType, editor, evt) => {\n if (!editor.selection.isCollapsed()) {\n execEditorDeleteCommand(editor);\n }\n if (isNonNullable(evt)) {\n const event = fireFakeBeforeInputEvent(editor, breakType.fakeEventName);\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n breakType.insert(editor, evt);\n if (isNonNullable(evt)) {\n fireFakeInputEvent(editor, breakType.fakeEventName);\n }\n };\n const insert = (editor, evt) => {\n const br = () => insertBreak(linebreak, editor, evt);\n const block = () => insertBreak(blockbreak, editor, evt);\n const logicalAction = getAction(editor, evt);\n switch (getNewlineBehavior(editor)) {\n case 'linebreak':\n logicalAction.fold(br, br, noop);\n break;\n case 'block':\n logicalAction.fold(block, block, noop);\n break;\n case 'invert':\n logicalAction.fold(block, br, noop);\n break;\n default:\n logicalAction.fold(br, block, noop);\n break;\n }\n };\n\n const handleEnterKeyEvent = (editor, event) => {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevelIgnoreLocks(editor.undoManager);\n editor.undoManager.transact(() => {\n insert(editor, event);\n });\n };\n const setup$h = editor => {\n editor.on('keydown', event => {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n\n const executeKeydownOverride$2 = (editor, caret, evt) => {\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\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 ...!isMac ? [\n {\n keyCode: VK.HOME,\n action: action(selectToEndPoint, editor, false),\n ctrlKey: true,\n shiftKey: true\n },\n {\n keyCode: VK.END,\n action: action(selectToEndPoint, editor, true),\n ctrlKey: true,\n shiftKey: true\n }\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(_ => {\n evt.preventDefault();\n });\n };\n const setup$g = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$2(editor, caret, evt);\n }\n });\n };\n\n const setup$f = editor => {\n editor.on('input', e => {\n if (!e.isComposing) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n const platform = detect$2();\n const executeKeyupAction = (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 const stopImmediatePropagation = e => e.stopImmediatePropagation();\n const isPageUpDown = evt => evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n const setNodeChangeBlocker = (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 const setup$e = (editor, caret) => {\n if (platform.os.isMacOS()) {\n return;\n }\n const blocked = Cell(false);\n editor.on('keydown', evt => {\n if (isPageUpDown(evt)) {\n setNodeChangeBlocker(blocked, editor, true);\n }\n });\n editor.on('keyup', evt => {\n if (!evt.isDefaultPrevented()) {\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 const insertTextAtPosition = (text, pos) => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$a(container)) {\n container.insertData(offset, text);\n return Optional.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(elm => {\n const textNode = SugarElement.fromText(text);\n if (pos.isAtEnd()) {\n after$4(elm, textNode);\n } else {\n before$3(elm, textNode);\n }\n return CaretPosition(textNode.dom, text.length);\n });\n }\n };\n const insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n const insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n const locationToCaretPosition = root => location => location.fold(element => prevPosition(root.dom, CaretPosition.before(element)), element => firstPositionIn(element), element => lastPositionIn(element), element => nextPosition(root.dom, CaretPosition.after(element)));\n const insertInlineBoundarySpaceOrNbsp = (root, pos) => checkPos => needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n const setSelection = editor => pos => {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n return true;\n };\n const insertSpaceOrNbspAtSelection = editor => {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n const root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).map(checkPos => () => insertInlineBoundarySpaceOrNbsp(root, pos)(checkPos).each(setSelection(editor)));\n } else {\n return Optional.none();\n }\n };\n\n const executeKeydownOverride$1 = (editor, evt) => {\n executeWithDelayedAction([{\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(applyAction => {\n evt.preventDefault();\n const event = fireFakeBeforeInputEvent(editor, 'insertText', { data: ' ' });\n if (!event.isDefaultPrevented()) {\n applyAction();\n fireFakeInputEvent(editor, 'insertText', { data: ' ' });\n }\n });\n };\n const setup$d = editor => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$1(editor, evt);\n }\n });\n };\n\n const tableTabNavigation = editor => {\n if (hasTableTabNavigation(editor)) {\n return [\n {\n keyCode: VK.TAB,\n action: action(handleTab, editor, true)\n },\n {\n keyCode: VK.TAB,\n shiftKey: true,\n action: action(handleTab, editor, false)\n }\n ];\n } else {\n return [];\n }\n };\n const executeKeydownOverride = (editor, evt) => {\n execute([...tableTabNavigation(editor)], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$c = editor => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride(editor, evt);\n }\n });\n };\n\n const setup$b = editor => {\n editor.addShortcut('Meta+P', '', 'mcePrint');\n setup$j(editor);\n if (isRtc(editor)) {\n return Cell(null);\n } else {\n const caret = setupSelectedState(editor);\n setup$l(editor);\n setup$k(editor, caret);\n setup$i(editor, caret);\n setup$h(editor);\n setup$d(editor);\n setup$f(editor);\n setup$c(editor);\n setup$g(editor, caret);\n setup$e(editor, caret);\n return caret;\n }\n };\n\n class NodeChange {\n constructor(editor) {\n this.lastPath = [];\n this.editor = editor;\n let lastRng;\n const self = this;\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange click mouseup keyup focus', e => {\n const nativeRng = editor.selection.getRng();\n const 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.dispatch('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', () => {\n editor.dispatch('SelectionChange');\n });\n editor.on('SelectionChange', () => {\n const startElm = editor.selection.getStart(true);\n if (!startElm) {\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', e => {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, () => {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n }\n nodeChanged(args = {}) {\n const selection = this.editor.selection;\n let node;\n if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n const 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 const parents = [];\n this.editor.dom.getParent(node, node => {\n if (node === root) {\n return true;\n } else {\n parents.push(node);\n return false;\n }\n });\n this.editor.dispatch('NodeChange', {\n ...args,\n element: node,\n parents\n });\n }\n }\n isSameElementPath(startElm) {\n let i;\n const editor = this.editor;\n const currentPath = reverse(editor.dom.getParents(startElm, always, editor.getBody()));\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 }\n\n const internalMimeType = 'x-tinymce/html';\n const internalHtmlMime = constant(internalMimeType);\n const internalMark = '<!-- ' + internalMimeType + ' -->';\n const mark = html => internalMark + html;\n const unmark = html => html.replace(internalMark, '');\n const isMarked = html => html.indexOf(internalMark) !== -1;\n\n const isPlainText = text => {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n const openContainer = (rootTag, rootAttrs) => {\n let tag = '<' + rootTag;\n const attrs = mapToArray(rootAttrs, (value, key) => key + '=\"' + Entities.encodeAllRaw(value) + '\"');\n if (attrs.length) {\n tag += ' ' + attrs.join(' ');\n }\n return tag + '>';\n };\n const toBlockElements = (text, rootTag, rootAttrs) => {\n const blocks = text.split(/\\n\\n/);\n const tagOpen = openContainer(rootTag, rootAttrs);\n const tagClose = '</' + rootTag + '>';\n const paragraphs = map$3(blocks, p => {\n return p.split(/\\n/).join('<br />');\n });\n const stitch = p => {\n return tagOpen + p + tagClose;\n };\n return paragraphs.length === 1 ? paragraphs[0] : map$3(paragraphs, stitch).join('');\n };\n\n const pasteBinDefaultContent = '%MCEPASTEBIN%';\n const create$6 = (editor, lastRngCell) => {\n const {dom, selection} = editor;\n const body = editor.getBody();\n lastRngCell.set(selection.getRng());\n const pasteBinElm = dom.add(editor.getBody(), 'div', {\n 'id': 'mcepastebin',\n 'class': 'mce-pastebin',\n 'contentEditable': true,\n 'data-mce-bogus': 'all',\n 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n }, pasteBinDefaultContent);\n if (Env.browser.isFirefox()) {\n dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n }\n dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', e => {\n e.stopPropagation();\n });\n pasteBinElm.focus();\n selection.select(pasteBinElm, true);\n };\n const remove = (editor, lastRngCell) => {\n const dom = editor.dom;\n if (getEl(editor)) {\n let pasteBinClone;\n const lastRng = lastRngCell.get();\n while (pasteBinClone = getEl(editor)) {\n dom.remove(pasteBinClone);\n dom.unbind(pasteBinClone);\n }\n if (lastRng) {\n editor.selection.setRng(lastRng);\n }\n }\n lastRngCell.set(null);\n };\n const getEl = editor => editor.dom.get('mcepastebin');\n const isPasteBin = elm => isNonNullable(elm) && elm.id === 'mcepastebin';\n const getHtml = editor => {\n const dom = editor.dom;\n const copyAndRemove = (toElm, fromElm) => {\n toElm.appendChild(fromElm);\n dom.remove(fromElm, true);\n };\n const [pasteBinElm, ...pasteBinClones] = filter$5(editor.getBody().childNodes, isPasteBin);\n each$e(pasteBinClones, pasteBinClone => {\n copyAndRemove(pasteBinElm, pasteBinClone);\n });\n const dirtyWrappers = dom.select('div[id=mcepastebin]', pasteBinElm);\n for (let i = dirtyWrappers.length - 1; i >= 0; i--) {\n const cleanWrapper = dom.create('div');\n pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n }\n return pasteBinElm ? pasteBinElm.innerHTML : '';\n };\n const isDefaultPasteBinContent = content => content === pasteBinDefaultContent;\n const PasteBin = editor => {\n const lastRng = Cell(null);\n return {\n create: () => create$6(editor, lastRng),\n remove: () => remove(editor, lastRng),\n getEl: () => getEl(editor),\n getHtml: () => getHtml(editor),\n getLastRng: lastRng.get\n };\n };\n\n const filter = (content, items) => {\n Tools.each(items, v => {\n if (is$4(v, RegExp)) {\n content = content.replace(v, '');\n } else {\n content = content.replace(v[0], v[1]);\n }\n });\n return content;\n };\n const innerText = html => {\n const schema = Schema();\n const domParser = DomParser({}, schema);\n let text = '';\n const voidElements = schema.getVoidElements();\n const ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' ');\n const blockElements = schema.getBlockElements();\n const walk = node => {\n const name = node.name, currentNode = node;\n if (name === 'br') {\n text += '\\n';\n return;\n }\n if (name === 'wbr') {\n return;\n }\n if (voidElements[name]) {\n text += ' ';\n }\n if (ignoreElements[name]) {\n text += ' ';\n return;\n }\n if (node.type === 3) {\n text += node.value;\n }\n if (!(node.name in schema.getVoidElements())) {\n let currentNode = node.firstChild;\n if (currentNode) {\n do {\n walk(currentNode);\n } while (currentNode = currentNode.next);\n }\n }\n if (blockElements[name] && currentNode.next) {\n text += '\\n';\n if (name === 'p') {\n text += '\\n';\n }\n }\n };\n html = filter(html, [/<!\\[[^\\]]+\\]>/g]);\n walk(domParser.parse(html));\n return text;\n };\n const trimHtml = html => {\n const trimSpaces = (all, s1, s2) => {\n if (!s1 && !s2) {\n return ' ';\n }\n return nbsp;\n };\n html = filter(html, [\n /^[\\s\\S]*<body[^>]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /<!--StartFragment-->|<!--EndFragment-->/g,\n [\n /( ?)<span class=\"Apple-converted-space\">\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /<br class=\"Apple-interchange-newline\">/g,\n /<br>$/i\n ]);\n return html;\n };\n const createIdGenerator = prefix => {\n let count = 0;\n return () => {\n return prefix + count++;\n };\n };\n const getImageMimeType = ext => {\n const lowerExt = ext.toLowerCase();\n const mimeOverrides = {\n jpg: 'jpeg',\n jpe: 'jpeg',\n jfi: 'jpeg',\n jif: 'jpeg',\n jfif: 'jpeg',\n pjpeg: 'jpeg',\n pjp: 'jpeg',\n svg: 'svg+xml'\n };\n return Tools.hasOwn(mimeOverrides, lowerExt) ? 'image/' + mimeOverrides[lowerExt] : 'image/' + lowerExt;\n };\n\n const preProcess = (editor, html) => {\n const parser = DomParser({}, editor.schema);\n parser.addNodeFilter('meta', nodes => {\n Tools.each(nodes, node => {\n node.remove();\n });\n });\n const fragment = parser.parse(html, {\n forced_root_block: false,\n isRootContent: true\n });\n return HtmlSerializer({ validate: true }, editor.schema).serialize(fragment);\n };\n const processResult = (content, cancelled) => ({\n content,\n cancelled\n });\n const postProcessFilter = (editor, html, internal) => {\n const tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n const postProcessArgs = firePastePostProcess(editor, tempBody, internal);\n return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n };\n const filterContent = (editor, content, internal) => {\n const preProcessArgs = firePastePreProcess(editor, content, internal);\n const filteredContent = preProcess(editor, preProcessArgs.content);\n if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n return postProcessFilter(editor, filteredContent, internal);\n } else {\n return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n }\n };\n const process = (editor, html, internal) => {\n return filterContent(editor, html, internal);\n };\n\n const pasteHtml$1 = (editor, html) => {\n editor.insertContent(html, {\n merge: shouldPasteMergeFormats(editor),\n paste: true\n });\n return true;\n };\n const isAbsoluteUrl = url => /^https?:\\/\\/[\\w\\-\\/+=.,!;:&%@^~(){}?#]+$/i.test(url);\n const isImageUrl = (editor, url) => {\n return isAbsoluteUrl(url) && exists(getAllowedImageFileTypes(editor), type => endsWith(url.toLowerCase(), `.${ type.toLowerCase() }`));\n };\n const createImage = (editor, url, pasteHtmlFn) => {\n editor.undoManager.extra(() => {\n pasteHtmlFn(editor, url);\n }, () => {\n editor.insertContent('<img src=\"' + url + '\">');\n });\n return true;\n };\n const createLink = (editor, url, pasteHtmlFn) => {\n editor.undoManager.extra(() => {\n pasteHtmlFn(editor, url);\n }, () => {\n editor.execCommand('mceInsertLink', false, url);\n });\n return true;\n };\n const linkSelection = (editor, html, pasteHtmlFn) => !editor.selection.isCollapsed() && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n const insertImage = (editor, html, pasteHtmlFn) => isImageUrl(editor, html) ? createImage(editor, html, pasteHtmlFn) : false;\n const smartInsertContent = (editor, html) => {\n Tools.each([\n linkSelection,\n insertImage,\n pasteHtml$1\n ], action => {\n return !action(editor, html, pasteHtml$1);\n });\n };\n const insertContent = (editor, html, pasteAsText) => {\n if (pasteAsText || !isSmartPasteEnabled(editor)) {\n pasteHtml$1(editor, html);\n } else {\n smartInsertContent(editor, html);\n }\n };\n\n const uniqueId = createIdGenerator('mceclip');\n const doPaste = (editor, content, internal, pasteAsText) => {\n const args = process(editor, content, internal);\n if (!args.cancelled) {\n insertContent(editor, args.content, pasteAsText);\n }\n };\n const pasteHtml = (editor, html, internalFlag) => {\n const internal = internalFlag ? internalFlag : isMarked(html);\n doPaste(editor, unmark(html), internal, false);\n };\n const pasteText = (editor, text) => {\n const encodedText = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n const normalizedText = normalize$4(encodedText, getPasteTabSpaces(editor));\n const html = toBlockElements(normalizedText, getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n doPaste(editor, html, false, true);\n };\n const getDataTransferItems = dataTransfer => {\n const items = {};\n if (dataTransfer && dataTransfer.types) {\n for (let i = 0; i < dataTransfer.types.length; i++) {\n const contentType = dataTransfer.types[i];\n try {\n items[contentType] = dataTransfer.getData(contentType);\n } catch (ex) {\n items[contentType] = '';\n }\n }\n }\n return items;\n };\n const hasContentType = (clipboardContent, mimeType) => mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n const hasHtmlOrText = content => hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n const extractFilename = (editor, str) => {\n const m = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n return isNonNullable(m) ? editor.dom.encode(m[1]) : undefined;\n };\n const createBlobInfo = (editor, blobCache, file, base64) => {\n const id = uniqueId();\n const useFileName = shouldReuseFileName(editor) && isNonNullable(file.name);\n const name = useFileName ? extractFilename(editor, file.name) : id;\n const filename = useFileName ? file.name : undefined;\n const blobInfo = blobCache.create(id, file, base64, name, filename);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const pasteImage = (editor, imageItem) => {\n parseDataUri(imageItem.uri).each(({data, type, base64Encoded}) => {\n const base64 = base64Encoded ? data : btoa(data);\n const file = imageItem.file;\n const blobCache = editor.editorUpload.blobCache;\n const existingBlobInfo = blobCache.getByData(base64, type);\n const blobInfo = existingBlobInfo !== null && existingBlobInfo !== void 0 ? existingBlobInfo : createBlobInfo(editor, blobCache, file, base64);\n pasteHtml(editor, `<img src=\"${ blobInfo.blobUri() }\">`, false);\n });\n };\n const isClipboardEvent = event => event.type === 'paste';\n const readFilesAsDataUris = items => Promise.all(map$3(items, file => {\n return blobToDataUri(file).then(uri => ({\n file,\n uri\n }));\n }));\n const isImage = editor => {\n const allowedExtensions = getAllowedImageFileTypes(editor);\n return file => startsWith(file.type, 'image/') && exists(allowedExtensions, extension => {\n return getImageMimeType(extension) === file.type;\n });\n };\n const getImagesFromDataTransfer = (editor, dataTransfer) => {\n const items = dataTransfer.items ? bind$3(from(dataTransfer.items), item => {\n return item.kind === 'file' ? [item.getAsFile()] : [];\n }) : [];\n const files = dataTransfer.files ? from(dataTransfer.files) : [];\n return filter$5(items.length > 0 ? items : files, isImage(editor));\n };\n const pasteImageData = (editor, e, rng) => {\n const dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n if (shouldPasteDataImages(editor) && dataTransfer) {\n const images = getImagesFromDataTransfer(editor, dataTransfer);\n if (images.length > 0) {\n e.preventDefault();\n readFilesAsDataUris(images).then(fileResults => {\n if (rng) {\n editor.selection.setRng(rng);\n }\n each$e(fileResults, result => {\n pasteImage(editor, result);\n });\n });\n return true;\n }\n }\n return false;\n };\n const isBrokenAndroidClipboardEvent = e => {\n var _a, _b;\n return Env.os.isAndroid() && ((_b = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.length) === 0;\n };\n const isKeyboardPasteEvent = e => VK.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n const insertClipboardContent = (editor, clipboardContent, html, plainTextMode) => {\n let content = trimHtml(html);\n const isInternal = hasContentType(clipboardContent, internalHtmlMime()) || isMarked(html);\n const isPlainTextHtml = !isInternal && isPlainText(content);\n const isAbsoluteUrl$1 = isAbsoluteUrl(content);\n if (isDefaultPasteBinContent(content) || !content.length || isPlainTextHtml && !isAbsoluteUrl$1) {\n plainTextMode = true;\n }\n if (plainTextMode || isAbsoluteUrl$1) {\n if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n content = clipboardContent['text/plain'];\n } else {\n content = innerText(content);\n }\n }\n if (isDefaultPasteBinContent(content)) {\n return;\n }\n if (plainTextMode) {\n pasteText(editor, content);\n } else {\n pasteHtml(editor, content, isInternal);\n }\n };\n const registerEventHandlers = (editor, pasteBin, pasteFormat) => {\n let keyboardPastePlainTextState;\n const getLastRng = () => pasteBin.getLastRng() || editor.selection.getRng();\n editor.on('keydown', e => {\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n }\n });\n editor.on('paste', e => {\n if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n return;\n }\n const plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n keyboardPastePlainTextState = false;\n const clipboardContent = getDataTransferItems(e.clipboardData);\n if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n return;\n }\n if (hasContentType(clipboardContent, 'text/html')) {\n e.preventDefault();\n insertClipboardContent(editor, clipboardContent, clipboardContent['text/html'], plainTextMode);\n } else {\n pasteBin.create();\n Delay.setEditorTimeout(editor, () => {\n const html = pasteBin.getHtml();\n pasteBin.remove();\n insertClipboardContent(editor, clipboardContent, html, plainTextMode);\n }, 0);\n }\n });\n };\n const registerDataImageFilter = editor => {\n const isWebKitFakeUrl = src => startsWith(src, 'webkit-fake-url');\n const isDataUri = src => startsWith(src, 'data:');\n const isPasteInsert = args => {\n var _a;\n return ((_a = args.data) === null || _a === void 0 ? void 0 : _a.paste) === true;\n };\n editor.parser.addNodeFilter('img', (nodes, name, args) => {\n if (!shouldPasteDataImages(editor) && isPasteInsert(args)) {\n for (const node of nodes) {\n const src = node.attr('src');\n if (isString(src) && !node.attr('data-mce-object') && src !== Env.transparentSrc) {\n if (isWebKitFakeUrl(src)) {\n node.remove();\n } else if (!shouldAllowHtmlDataUrls(editor) && isDataUri(src)) {\n node.remove();\n }\n }\n }\n }\n });\n };\n const registerEventsAndFilters = (editor, pasteBin, pasteFormat) => {\n registerEventHandlers(editor, pasteBin, pasteFormat);\n registerDataImageFilter(editor);\n };\n\n const togglePlainTextPaste = (editor, pasteFormat) => {\n if (pasteFormat.get() === 'text') {\n pasteFormat.set('html');\n firePastePlainTextToggle(editor, false);\n } else {\n pasteFormat.set('text');\n firePastePlainTextToggle(editor, true);\n }\n editor.focus();\n };\n const register$1 = (editor, pasteFormat) => {\n editor.addCommand('mceTogglePlainTextPaste', () => {\n togglePlainTextPaste(editor, pasteFormat);\n });\n editor.addCommand('mceInsertClipboardContent', (ui, value) => {\n if (value.html) {\n pasteHtml(editor, value.html, value.internal);\n }\n if (value.text) {\n pasteText(editor, value.text);\n }\n });\n };\n\n const setHtml5Clipboard = (clipboardData, html, text) => {\n if (clipboardData) {\n try {\n clipboardData.clearData();\n clipboardData.setData('text/html', html);\n clipboardData.setData('text/plain', text);\n clipboardData.setData(internalHtmlMime(), html);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n };\n const setClipboardData = (evt, data, fallback, done) => {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n const fallback = editor => (html, done) => {\n const {dom, selection} = editor;\n const outer = dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n const inner = dom.create('div', { contenteditable: 'true' }, html);\n dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n dom.add(editor.getBody(), outer);\n const range = selection.getRng();\n inner.focus();\n const offscreenRange = dom.createRng();\n offscreenRange.selectNodeContents(inner);\n selection.setRng(offscreenRange);\n Delay.setEditorTimeout(editor, () => {\n selection.setRng(range);\n dom.remove(outer);\n done();\n }, 0);\n };\n const getData = editor => ({\n html: mark(editor.selection.getContent({ contextual: true })),\n text: editor.selection.getContent({ format: 'text' })\n });\n const isTableSelection = editor => !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n const hasSelectedContent = editor => !editor.selection.isCollapsed() || isTableSelection(editor);\n const cut = editor => evt => {\n if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), () => {\n if (Env.browser.isChromium() || Env.browser.isFirefox()) {\n const rng = editor.selection.getRng();\n Delay.setEditorTimeout(editor, () => {\n editor.selection.setRng(rng);\n editor.execCommand('Delete');\n }, 0);\n } else {\n editor.execCommand('Delete');\n }\n });\n }\n };\n const copy = editor => evt => {\n if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), noop);\n }\n };\n const register = editor => {\n editor.on('cut', cut(editor));\n editor.on('copy', copy(editor));\n };\n\n const getCaretRangeFromEvent = (editor, e) => {\n var _a, _b;\n return RangeUtils.getCaretRangeFromPoint((_a = e.clientX) !== null && _a !== void 0 ? _a : 0, (_b = e.clientY) !== null && _b !== void 0 ? _b : 0, editor.getDoc());\n };\n const isPlainTextFileUrl = content => {\n const plainTextContent = content['text/plain'];\n return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n };\n const setFocusedRange = (editor, rng) => {\n editor.focus();\n if (rng) {\n editor.selection.setRng(rng);\n }\n };\n const hasImage = dataTransfer => exists(dataTransfer.files, file => /^image\\//.test(file.type));\n const setup$a = (editor, draggingInternallyState) => {\n if (shouldPasteBlockDrop(editor)) {\n editor.on('dragend dragover draggesture dragdrop drop drag', e => {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n if (!shouldPasteDataImages(editor)) {\n editor.on('drop', e => {\n const dataTransfer = e.dataTransfer;\n if (dataTransfer && hasImage(dataTransfer)) {\n e.preventDefault();\n }\n });\n }\n editor.on('drop', e => {\n if (e.isDefaultPrevented() || draggingInternallyState.get()) {\n return;\n }\n const rng = getCaretRangeFromEvent(editor, e);\n if (isNullable(rng)) {\n return;\n }\n const dropContent = getDataTransferItems(e.dataTransfer);\n const internal = hasContentType(dropContent, internalHtmlMime());\n if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(editor, e, rng)) {\n return;\n }\n const internalContent = dropContent[internalHtmlMime()];\n const content = internalContent || dropContent['text/html'] || dropContent['text/plain'];\n if (content) {\n e.preventDefault();\n Delay.setEditorTimeout(editor, () => {\n editor.undoManager.transact(() => {\n if (internalContent) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n const trimmedContent = trimHtml(content);\n if (dropContent['text/html']) {\n pasteHtml(editor, trimmedContent, internal);\n } else {\n pasteText(editor, trimmedContent);\n }\n });\n });\n }\n });\n editor.on('dragstart', _e => {\n draggingInternallyState.set(true);\n });\n editor.on('dragover dragend', e => {\n if (shouldPasteDataImages(editor) && !draggingInternallyState.get()) {\n e.preventDefault();\n setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n }\n if (e.type === 'dragend') {\n draggingInternallyState.set(false);\n }\n });\n };\n\n const setup$9 = editor => {\n const processEvent = f => e => {\n f(editor, e);\n };\n const preProcess = getPastePreProcess(editor);\n if (isFunction(preProcess)) {\n editor.on('PastePreProcess', processEvent(preProcess));\n }\n const postProcess = getPastePostProcess(editor);\n if (isFunction(postProcess)) {\n editor.on('PastePostProcess', processEvent(postProcess));\n }\n };\n\n const addPreProcessFilter = (editor, filterFunc) => {\n editor.on('PastePreProcess', e => {\n e.content = filterFunc(editor, e.content, e.internal);\n });\n };\n const rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n const rgbToHex = value => Tools.trim(value).replace(rgbRegExp, rgbaToHexString).toLowerCase();\n const removeWebKitStyles = (editor, content, internal) => {\n const webKitStylesOption = getPasteWebkitStyles(editor);\n if (internal || webKitStylesOption === 'all' || !shouldPasteRemoveWebKitStyles(editor)) {\n return content;\n }\n const webKitStyles = webKitStylesOption ? webKitStylesOption.split(/[, ]/) : [];\n if (webKitStyles && webKitStylesOption !== 'none') {\n const dom = editor.dom, node = editor.selection.getNode();\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, (all, before, value, after) => {\n const inputStyles = dom.parseStyle(dom.decode(value));\n const outputStyles = {};\n for (let i = 0; i < webKitStyles.length; i++) {\n const inputValue = inputStyles[webKitStyles[i]];\n let compareInput = inputValue;\n let currentValue = dom.getStyle(node, webKitStyles[i], true);\n if (/color/.test(webKitStyles[i])) {\n compareInput = rgbToHex(compareInput);\n currentValue = rgbToHex(currentValue);\n }\n if (currentValue !== compareInput) {\n outputStyles[webKitStyles[i]] = inputValue;\n }\n }\n const outputStyle = dom.serializeStyle(outputStyles, 'span');\n if (outputStyle) {\n return before + ' style=\"' + outputStyle + '\"' + after;\n }\n return before + after;\n });\n } else {\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n }\n content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, (all, before, value, after) => {\n return before + ' style=\"' + value + '\"' + after;\n });\n return content;\n };\n const setup$8 = editor => {\n if (Env.browser.isChromium() || Env.browser.isSafari()) {\n addPreProcessFilter(editor, removeWebKitStyles);\n }\n };\n\n const setup$7 = editor => {\n const draggingInternallyState = Cell(false);\n const pasteFormat = Cell(isPasteAsTextEnabled(editor) ? 'text' : 'html');\n const pasteBin = PasteBin(editor);\n setup$8(editor);\n register$1(editor, pasteFormat);\n setup$9(editor);\n editor.on('PreInit', () => {\n register(editor);\n setup$a(editor, draggingInternallyState);\n registerEventsAndFilters(editor, pasteBin, pasteFormat);\n });\n };\n\n const preventSummaryToggle = editor => {\n editor.on('click', e => {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n const filterDetails = editor => {\n editor.parser.addNodeFilter('details', elms => {\n each$e(elms, details => {\n details.attr('data-mce-open', details.attr('open'));\n details.attr('open', 'open');\n });\n });\n editor.serializer.addNodeFilter('details', elms => {\n each$e(elms, details => {\n const open = details.attr('data-mce-open');\n details.attr('open', isString(open) ? open : null);\n details.attr('data-mce-open', null);\n });\n });\n };\n const setup$6 = editor => {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n const isBr = isBr$6;\n const isText = isText$a;\n const isContentEditableFalse$2 = elm => isContentEditableFalse$a(elm.dom);\n const isContentEditableTrue = elm => isContentEditableTrue$3(elm.dom);\n const isRoot = rootNode => elm => eq(SugarElement.fromDom(rootNode), elm);\n const getClosestScope = (node, rootNode) => closest$4(SugarElement.fromDom(node), elm => isContentEditableTrue(elm) || isBlock$2(elm), isRoot(rootNode)).getOr(SugarElement.fromDom(rootNode)).dom;\n const getClosestCef = (node, rootNode) => closest$4(SugarElement.fromDom(node), isContentEditableFalse$2, isRoot(rootNode));\n const findEdgeCaretCandidate = (startNode, scope, forward) => {\n const walker = new DomTreeWalker(startNode, scope);\n const next = forward ? walker.next.bind(walker) : walker.prev.bind(walker);\n let result = startNode;\n for (let current = forward ? startNode : next(); current && !isBr(current); current = next()) {\n if (isCaretCandidate$3(current)) {\n result = current;\n }\n }\n return result;\n };\n const findClosestBlockRange = (startRng, rootNode) => {\n const startPos = CaretPosition.fromRangeStart(startRng);\n const clickNode = startPos.getNode();\n const scope = getClosestScope(clickNode, rootNode);\n const startNode = findEdgeCaretCandidate(clickNode, scope, false);\n const endNode = findEdgeCaretCandidate(clickNode, scope, true);\n const rng = document.createRange();\n getClosestCef(startNode, scope).fold(() => {\n if (isText(startNode)) {\n rng.setStart(startNode, 0);\n } else {\n rng.setStartBefore(startNode);\n }\n }, cef => rng.setStartBefore(cef.dom));\n getClosestCef(endNode, scope).fold(() => {\n if (isText(endNode)) {\n rng.setEnd(endNode, endNode.data.length);\n } else {\n rng.setEndAfter(endNode);\n }\n }, cef => rng.setEndAfter(cef.dom));\n return rng;\n };\n const onTripleClickSelect = editor => {\n const rng = findClosestBlockRange(editor.selection.getRng(), editor.getBody());\n editor.selection.setRng(normalize(rng));\n };\n const setup$5 = editor => {\n editor.on('mousedown', e => {\n if (e.detail >= 3) {\n e.preventDefault();\n onTripleClickSelect(editor);\n }\n });\n };\n\n var FakeCaretPosition;\n (function (FakeCaretPosition) {\n FakeCaretPosition['Before'] = 'before';\n FakeCaretPosition['After'] = 'after';\n }(FakeCaretPosition || (FakeCaretPosition = {})));\n const distanceToRectLeft = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n const distanceToRectRight = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n const isInsideY = (clientY, clientRect) => clientY >= clientRect.top && clientY <= clientRect.bottom;\n const collidesY = (r1, r2) => r1.top < r2.bottom && r1.bottom > r2.top;\n const isOverlapping = (r1, r2) => {\n const overlap = overlapY(r1, r2) / Math.min(r1.height, r2.height);\n return collidesY(r1, r2) && overlap > 0.5;\n };\n const splitRectsPerAxis = (rects, y) => {\n const intersectingRects = filter$5(rects, rect => isInsideY(y, rect));\n return boundingClientRectFromRects(intersectingRects).fold(() => [\n [],\n rects\n ], boundingRect => {\n const {\n pass: horizontal,\n fail: vertical\n } = partition$2(rects, rect => isOverlapping(rect, boundingRect));\n return [\n horizontal,\n vertical\n ];\n });\n };\n const clientInfo = (rect, clientX) => {\n return {\n node: rect.node,\n position: distanceToRectLeft(rect, clientX) < distanceToRectRight(rect, clientX) ? FakeCaretPosition.Before : FakeCaretPosition.After\n };\n };\n const horizontalDistance = (rect, x, _y) => x > rect.left && x < rect.right ? 0 : Math.min(Math.abs(rect.left - x), Math.abs(rect.right - x));\n const closestChildCaretCandidateNodeRect = (children, clientX, clientY) => {\n const caretCandidateRect = rect => {\n if (isCaretCandidate$3(rect.node)) {\n return Optional.some(rect);\n } else if (isElement$6(rect.node)) {\n return closestChildCaretCandidateNodeRect(from(rect.node.childNodes), clientX, clientY);\n } else {\n return Optional.none();\n }\n };\n const getClosestTextNode = (rects, distance) => {\n if (rects.length >= 2) {\n const r1 = caretCandidateRect(rects[0]).getOr(rects[0]);\n const r2 = caretCandidateRect(rects[1]).getOr(rects[1]);\n const deltaDistance = Math.abs(distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n if (deltaDistance < 2) {\n if (isText$a(r1.node)) {\n return Optional.some(r1);\n } else if (isText$a(r2.node)) {\n return Optional.some(r2);\n }\n }\n }\n return Optional.none();\n };\n const findClosestCaretCandidateNodeRect = (rects, distance) => {\n const sortedRects = sort(rects, (r1, r2) => distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n return getClosestTextNode(sortedRects, distance).orThunk(() => findMap(sortedRects, caretCandidateRect));\n };\n const [horizontalRects, verticalRects] = splitRectsPerAxis(getClientRects(children), clientY);\n const {\n pass: above,\n fail: below\n } = partition$2(verticalRects, rect => rect.top < clientY);\n return findClosestCaretCandidateNodeRect(horizontalRects, horizontalDistance).orThunk(() => findClosestCaretCandidateNodeRect(below, distanceToRectEdgeFromXY)).orThunk(() => findClosestCaretCandidateNodeRect(above, distanceToRectEdgeFromXY));\n };\n const traverseUp = (rootElm, scope, clientX, clientY) => {\n const helper = (scope, prevScope) => {\n const isDragGhostContainer = node => isElement$6(node) && node.classList.contains('mce-drag-container');\n const childNodesWithoutGhost = filter$5(scope.dom.childNodes, not(isDragGhostContainer));\n return prevScope.fold(() => closestChildCaretCandidateNodeRect(childNodesWithoutGhost, clientX, clientY), prevScope => {\n const uncheckedChildren = filter$5(childNodesWithoutGhost, node => node !== prevScope.dom);\n return closestChildCaretCandidateNodeRect(uncheckedChildren, clientX, clientY);\n }).orThunk(() => {\n const parent = eq(scope, rootElm) ? Optional.none() : parentElement(scope);\n return parent.bind(newScope => helper(newScope, Optional.some(scope)));\n });\n };\n return helper(scope, Optional.none());\n };\n const closestCaretCandidateNodeRect = (root, clientX, clientY) => {\n const rootElm = SugarElement.fromDom(root);\n const ownerDoc = documentOrOwner(rootElm);\n const elementAtPoint = SugarElement.fromPoint(ownerDoc, clientX, clientY).filter(elm => contains(rootElm, elm));\n const element = elementAtPoint.getOr(rootElm);\n return traverseUp(rootElm, element, clientX, clientY);\n };\n const closestFakeCaretCandidate = (root, clientX, clientY) => closestCaretCandidateNodeRect(root, clientX, clientY).filter(rect => isFakeCaretTarget(rect.node)).map(rect => clientInfo(rect, clientX));\n\n const getAbsolutePosition = elm => {\n var _a, _b;\n const clientRect = elm.getBoundingClientRect();\n const doc = elm.ownerDocument;\n const docElem = doc.documentElement;\n const win = doc.defaultView;\n return {\n top: clientRect.top + ((_a = win === null || win === void 0 ? void 0 : win.scrollY) !== null && _a !== void 0 ? _a : 0) - docElem.clientTop,\n left: clientRect.left + ((_b = win === null || win === void 0 ? void 0 : win.scrollX) !== null && _b !== void 0 ? _b : 0) - docElem.clientLeft\n };\n };\n const getBodyPosition = editor => editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n const getScrollPosition = editor => {\n const 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 const getBodyScroll = editor => {\n const body = editor.getBody(), docElm = editor.getDoc().documentElement;\n const inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n const iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n const getMousePosition = (editor, event) => {\n if (event.target.ownerDocument !== editor.getDoc()) {\n const iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n const 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 const calculatePosition = (bodyPosition, scrollPosition, mousePosition) => ({\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n });\n const calc = (editor, event) => calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n\n const scrollPixelsPerInterval = 32;\n const scrollIntervalValue = 100;\n const mouseRangeToTriggerScrollInsideEditor = 8;\n const mouseRangeToTriggerScrollOutsideEditor = 16;\n const isContentEditableFalse$1 = isContentEditableFalse$a;\n const isContentEditable = or(isContentEditableFalse$1, isContentEditableTrue$3);\n const isDraggable = (rootElm, elm) => isContentEditableFalse$1(elm) && elm !== rootElm;\n const isValidDropTarget = (editor, targetElement, dragElement) => {\n if (isNullable(targetElement)) {\n return false;\n } else if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n } else {\n return !isContentEditableFalse$1(targetElement);\n }\n };\n const cloneElement = elm => {\n const cloneElm = elm.cloneNode(true);\n cloneElm.removeAttribute('data-mce-selected');\n return cloneElm;\n };\n const createGhost = (editor, elm, width, height) => {\n const dom = editor.dom;\n const clonedElm = elm.cloneNode(true);\n dom.setStyles(clonedElm, {\n width,\n height\n });\n dom.setAttrib(clonedElm, 'data-mce-selected', null);\n const 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,\n height\n });\n dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n const appendGhostToBody = (ghostElm, bodyElm) => {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n const scrollEditor = (direction, amount) => win => () => {\n const current = direction === 'left' ? win.scrollX : win.scrollY;\n win.scroll({\n [direction]: current + amount,\n behavior: 'smooth'\n });\n };\n const scrollLeft = scrollEditor('left', -scrollPixelsPerInterval);\n const scrollRight = scrollEditor('left', scrollPixelsPerInterval);\n const scrollUp = scrollEditor('top', -scrollPixelsPerInterval);\n const scrollDown = scrollEditor('top', scrollPixelsPerInterval);\n const moveGhost = (ghostElm, position, width, height, maxX, maxY, mouseY, mouseX, contentAreaContainer, win, state, mouseEventOriginatedFromWithinTheEditor) => {\n let 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 const clientHeight = contentAreaContainer.clientHeight;\n const clientWidth = contentAreaContainer.clientWidth;\n const outerMouseY = mouseY + contentAreaContainer.getBoundingClientRect().top;\n const outerMouseX = mouseX + contentAreaContainer.getBoundingClientRect().left;\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging && mouseEventOriginatedFromWithinTheEditor) {\n if (mouseY + mouseRangeToTriggerScrollInsideEditor >= clientHeight) {\n state.intervalId.set(scrollDown(win));\n } else if (mouseY - mouseRangeToTriggerScrollInsideEditor <= 0) {\n state.intervalId.set(scrollUp(win));\n } else if (mouseX + mouseRangeToTriggerScrollInsideEditor >= clientWidth) {\n state.intervalId.set(scrollRight(win));\n } else if (mouseX - mouseRangeToTriggerScrollInsideEditor <= 0) {\n state.intervalId.set(scrollLeft(win));\n } else if (outerMouseY + mouseRangeToTriggerScrollOutsideEditor >= window.innerHeight) {\n state.intervalId.set(scrollDown(window));\n } else if (outerMouseY - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n state.intervalId.set(scrollUp(window));\n } else if (outerMouseX + mouseRangeToTriggerScrollOutsideEditor >= window.innerWidth) {\n state.intervalId.set(scrollRight(window));\n } else if (outerMouseX - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n state.intervalId.set(scrollLeft(window));\n }\n }\n });\n };\n const removeElement = elm => {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n const isLeftMouseButtonPressed = e => e.button === 0;\n const applyRelPos = (state, position) => ({\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n });\n const start = (state, editor) => e => {\n if (isLeftMouseButtonPressed(e)) {\n const ceElm = find$2(editor.dom.getParents(e.target), isContentEditable).getOr(null);\n if (isNonNullable(ceElm) && isDraggable(editor.getBody(), ceElm)) {\n const elmPos = editor.dom.getPos(ceElm);\n const bodyElm = editor.getBody();\n const 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 intervalId: repeatable(scrollIntervalValue)\n });\n }\n }\n };\n const move = (state, editor) => {\n const throttledPlaceCaretAt = first$1((clientX, clientY) => {\n editor._selectionOverrides.hideFakeCaret();\n closestFakeCaretCandidate(editor.getBody(), clientX, clientY).fold(() => editor.selection.placeCaretAt(clientX, clientY), caretInfo => {\n const range = editor._selectionOverrides.showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n if (range) {\n editor.selection.setRng(range);\n } else {\n editor.selection.placeCaretAt(clientX, clientY);\n }\n });\n }, 0);\n editor.on('remove', throttledPlaceCaretAt.cancel);\n const state_ = state;\n return e => state.on(state => {\n const movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (!state.dragging && movement > 10) {\n const args = editor.dispatch('dragstart', { target: state.element });\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n const mouseEventOriginatedFromWithinTheEditor = e.currentTarget === editor.getDoc().documentElement;\n const 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, e.clientY, e.clientX, editor.getContentAreaContainer(), editor.getWin(), state_, mouseEventOriginatedFromWithinTheEditor);\n throttledPlaceCaretAt.throttle(e.clientX, e.clientY);\n }\n });\n };\n const getRawTarget = selection => {\n const sel = selection.getSel();\n if (isNonNullable(sel)) {\n const rng = sel.getRangeAt(0);\n const startContainer = rng.startContainer;\n return isText$a(startContainer) ? startContainer.parentNode : startContainer;\n } else {\n return null;\n }\n };\n const drop = (state, editor) => e => {\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n const targetClone = cloneElement(state.element);\n const args = editor.dispatch('drop', {\n clientX: e.clientX,\n clientY: e.clientY\n });\n if (!args.isDefaultPrevented()) {\n editor.undoManager.transact(() => {\n removeElement(state.element);\n editor.insertContent(editor.dom.getOuterHTML(targetClone));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n editor.dispatch('dragend');\n }\n });\n removeDragState(state);\n };\n const stop = (state, editor) => () => {\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging) {\n editor.dispatch('dragend');\n }\n });\n removeDragState(state);\n };\n const removeDragState = state => {\n state.on(state => {\n state.intervalId.clear();\n removeElement(state.ghost);\n });\n state.clear();\n };\n const bindFakeDragEvents = editor => {\n const state = value$2();\n const pageDom = DOMUtils.DOM;\n const rootDocument = document;\n const dragStartHandler = start(state, editor);\n const dragHandler = move(state, editor);\n const dropHandler = drop(state, editor);\n const 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', () => {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n editor.on('keydown', e => {\n if (e.keyCode === VK.ESC) {\n dragEndHandler();\n }\n });\n };\n const blockUnsupportedFileDrop = editor => {\n const preventFileDrop = e => {\n if (!e.isDefaultPrevented()) {\n const dataTransfer = e.dataTransfer;\n if (dataTransfer && (contains$2(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 const preventFileDropIfUIElement = e => {\n if (isUIElement(editor, e.target)) {\n preventFileDrop(e);\n }\n };\n const setup = () => {\n const pageDom = DOMUtils.DOM;\n const dom = editor.dom;\n const doc = document;\n const editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n const eventNames = [\n 'drop',\n 'dragover'\n ];\n each$e(eventNames, name => {\n pageDom.bind(doc, name, preventFileDropIfUIElement);\n dom.bind(editorRoot, name, preventFileDrop);\n });\n editor.on('remove', () => {\n each$e(eventNames, name => {\n pageDom.unbind(doc, name, preventFileDropIfUIElement);\n dom.unbind(editorRoot, name, preventFileDrop);\n });\n });\n };\n editor.on('init', () => {\n Delay.setEditorTimeout(editor, setup, 0);\n });\n };\n const init$2 = editor => {\n bindFakeDragEvents(editor);\n if (shouldBlockUnsupportedDrop(editor)) {\n blockUnsupportedFileDrop(editor);\n }\n };\n\n const setup$4 = editor => {\n const renderFocusCaret = first$1(() => {\n if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n const rng = editor.selection.getRng();\n if (rng.collapsed) {\n const caretRange = renderRangeCaret(editor, rng, false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', () => {\n renderFocusCaret.throttle();\n });\n editor.on('blur', () => {\n renderFocusCaret.cancel();\n });\n };\n\n const setup$3 = editor => {\n editor.on('init', () => {\n editor.on('focusin', e => {\n const target = e.target;\n if (isMedia$2(target)) {\n const ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n const node = isContentEditableFalse$a(ceRoot) ? ceRoot : target;\n if (editor.selection.getNode() !== node) {\n selectNode(editor, node).each(rng => editor.selection.setRng(rng));\n }\n }\n });\n });\n };\n\n const isContentEditableFalse = isContentEditableFalse$a;\n const getContentEditableRoot = (editor, node) => getContentEditableRoot$1(editor.getBody(), node);\n const SelectionOverrides = editor => {\n const selection = editor.selection, dom = editor.dom;\n const rootNode = editor.getBody();\n const fakeCaret = FakeCaret(editor, rootNode, dom.isBlock, () => hasFocus(editor));\n const realSelectionId = 'sel-' + dom.uniqueId();\n const elementSelectionAttr = 'data-mce-selected';\n let selectedElement;\n const isFakeSelectionElement = node => isNonNullable(node) && dom.hasClass(node, 'mce-offscreen-selection');\n const isFakeSelectionTargetElement = node => node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom.isChildOf(node, rootNode);\n const setRange = range => {\n if (range) {\n selection.setRng(range);\n }\n };\n const showCaret = (direction, node, before, scrollIntoView = true) => {\n const e = editor.dispatch('ShowCaret', {\n target: node,\n direction,\n 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 const showBlockCaretContainer = blockCaretContainer => {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n selection.scrollIntoView(blockCaretContainer);\n }\n };\n const registerEvents = () => {\n editor.on('click', e => {\n const contentEditableRoot = getContentEditableRoot(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n }\n });\n editor.on('blur NewBlock', removeElementSelection);\n editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n editor.on('tap', e => {\n const targetElm = e.target;\n const 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', e => {\n const 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)) {\n return;\n }\n removeElementSelection();\n hideFakeCaret();\n const closestContentEditable = getContentEditableRoot(editor, targetElm);\n if (isContentEditableFalse(closestContentEditable)) {\n e.preventDefault();\n selectNode(editor, closestContentEditable).each(setElementSelection);\n } else {\n closestFakeCaretCandidate(rootNode, e.clientX, e.clientY).each(caretInfo => {\n e.preventDefault();\n const range = showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n setRange(range);\n if (isElement$6(closestContentEditable)) {\n closestContentEditable.focus();\n } else {\n editor.getBody().focus();\n }\n });\n }\n });\n editor.on('keypress', e => {\n if (VK.modifierPressed(e)) {\n return;\n }\n if (isContentEditableFalse(selection.getNode())) {\n e.preventDefault();\n }\n });\n editor.on('GetSelectionRange', e => {\n let 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', e => {\n e.range = normalizeVoidElementSelection(e.range);\n const rng = setElementSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n const isPasteBin = node => isElement$6(node) && node.id === 'mcepastebin';\n editor.on('AfterSetSelectionRange', e => {\n const rng = e.range;\n const parent = rng.startContainer.parentElement;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(parent)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(parent)) {\n removeElementSelection();\n }\n });\n init$2(editor);\n setup$4(editor);\n setup$3(editor);\n };\n const isWithinCaretContainer = node => isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n const isRangeInCaretContainer = rng => isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n const normalizeVoidElementSelection = rng => {\n const voidElements = editor.schema.getVoidElements();\n const newRng = dom.createRng();\n const startContainer = rng.startContainer;\n const startOffset = rng.startOffset;\n const endContainer = rng.endContainer;\n const endOffset = rng.endOffset;\n if (has$2(voidElements, 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(voidElements, 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 const setupOffscreenSelection = (node, targetClone) => {\n const body = SugarElement.fromDom(editor.getBody());\n const doc = editor.getDoc();\n const realSelectionContainer = descendant(body, '#' + realSelectionId).getOrThunk(() => {\n const newContainer = SugarElement.fromHtml('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>', doc);\n set$2(newContainer, 'id', realSelectionId);\n append$1(body, newContainer);\n return newContainer;\n });\n const newRange = dom.createRng();\n empty(realSelectionContainer);\n append(realSelectionContainer, [\n SugarElement.fromText(nbsp, doc),\n SugarElement.fromDom(targetClone),\n SugarElement.fromText(nbsp, doc)\n ]);\n newRange.setStart(realSelectionContainer.dom.firstChild, 1);\n newRange.setEnd(realSelectionContainer.dom.lastChild, 0);\n setAll(realSelectionContainer, { top: dom.getPos(node, editor.getBody()).y + 'px' });\n focus$1(realSelectionContainer);\n const sel = selection.getSel();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(newRange);\n }\n return newRange;\n };\n const selectElement = elm => {\n const targetClone = elm.cloneNode(true);\n const e = editor.dispatch('ObjectSelected', {\n target: elm,\n targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n const range = setupOffscreenSelection(elm, e.targetClone);\n const nodeElm = SugarElement.fromDom(elm);\n each$e(descendants(SugarElement.fromDom(editor.getBody()), `*[${ elementSelectionAttr }]`), elm => {\n if (!eq(nodeElm, elm)) {\n remove$b(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 const setElementSelection = (range, forward) => {\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n const dir = forward ? 1 : -1;\n const caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n const beforeNode = caretPosition.getNode(!forward);\n if (isNonNullable(beforeNode)) {\n if (isFakeCaretTarget(beforeNode)) {\n return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n }\n if (isCaretContainerInline(beforeNode) && isContentEditableFalse$a(beforeNode.nextSibling)) {\n const rng = dom.createRng();\n rng.setStart(beforeNode, 0);\n rng.setEnd(beforeNode, 0);\n return rng;\n }\n }\n const afterNode = caretPosition.getNode(forward);\n if (isNonNullable(afterNode)) {\n if (isFakeCaretTarget(afterNode)) {\n return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n }\n if (isCaretContainerInline(afterNode) && isContentEditableFalse$a(afterNode.previousSibling)) {\n const rng = dom.createRng();\n rng.setStart(afterNode, 1);\n rng.setEnd(afterNode, 1);\n return rng;\n }\n }\n }\n return null;\n }\n let startContainer = range.startContainer;\n let startOffset = range.startOffset;\n const endOffset = range.endOffset;\n if (isText$a(startContainer) && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (!isElement$6(startContainer)) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n const node = startContainer.childNodes[startOffset];\n if (isFakeSelectionTargetElement(node)) {\n return selectElement(node);\n }\n }\n return null;\n };\n const removeElementSelection = () => {\n if (selectedElement) {\n selectedElement.removeAttribute(elementSelectionAttr);\n }\n descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$6);\n selectedElement = null;\n };\n const destroy = () => {\n fakeCaret.destroy();\n selectedElement = null;\n };\n const hideFakeCaret = () => {\n fakeCaret.hide();\n };\n if (!isRtc(editor)) {\n registerEvents();\n }\n return {\n showCaret,\n showBlockCaretContainer,\n hideFakeCaret,\n destroy\n };\n };\n\n const getNormalizedTextOffset = (container, offset) => {\n let normalizedOffset = offset;\n for (let node = container.previousSibling; isText$a(node); node = node.previousSibling) {\n normalizedOffset += node.data.length;\n }\n return normalizedOffset;\n };\n const generatePath = (dom, root, node, offset, normalized) => {\n if (isText$a(node) && (offset < 0 || offset > node.data.length)) {\n return [];\n }\n const p = normalized && isText$a(node) ? [getNormalizedTextOffset(node, offset)] : [offset];\n let current = node;\n while (current !== root && current.parentNode) {\n p.push(dom.nodeIndex(current, normalized));\n current = current.parentNode;\n }\n return current === root ? p.reverse() : [];\n };\n const generatePathRange = (dom, root, startNode, startOffset, endNode, endOffset, normalized = false) => {\n const start = generatePath(dom, root, startNode, startOffset, normalized);\n const end = generatePath(dom, root, endNode, endOffset, normalized);\n return {\n start,\n end\n };\n };\n const resolvePath = (root, path) => {\n const nodePath = path.slice();\n const offset = nodePath.pop();\n if (!isNumber(offset)) {\n return Optional.none();\n } else {\n const resolvedNode = foldl(nodePath, (optNode, index) => optNode.bind(node => Optional.from(node.childNodes[index])), Optional.some(root));\n return resolvedNode.bind(node => {\n if (isText$a(node) && (offset < 0 || offset > node.data.length)) {\n return Optional.none();\n } else {\n return Optional.some({\n node,\n offset\n });\n }\n });\n }\n };\n const resolvePathRange = (root, range) => resolvePath(root, range.start).bind(({\n node: startNode,\n offset: startOffset\n }) => resolvePath(root, range.end).map(({\n node: endNode,\n offset: endOffset\n }) => {\n const rng = document.createRange();\n rng.setStart(startNode, startOffset);\n rng.setEnd(endNode, endOffset);\n return rng;\n }));\n const generatePathRangeFromRange = (dom, root, range, normalized = false) => generatePathRange(dom, root, range.startContainer, range.startOffset, range.endContainer, range.endOffset, normalized);\n\n const cleanEmptyNodes = (dom, node, isRoot) => {\n if (node && dom.isEmpty(node) && !isRoot(node)) {\n const parent = node.parentNode;\n dom.remove(node);\n cleanEmptyNodes(dom, parent, isRoot);\n }\n };\n const deleteRng = (dom, rng, isRoot, clean = true) => {\n const startParent = rng.startContainer.parentNode;\n const endParent = rng.endContainer.parentNode;\n rng.deleteContents();\n if (clean && !isRoot(rng.startContainer)) {\n if (isText$a(rng.startContainer) && rng.startContainer.data.length === 0) {\n dom.remove(rng.startContainer);\n }\n if (isText$a(rng.endContainer) && rng.endContainer.data.length === 0) {\n dom.remove(rng.endContainer);\n }\n cleanEmptyNodes(dom, startParent, isRoot);\n if (startParent !== endParent) {\n cleanEmptyNodes(dom, endParent, isRoot);\n }\n }\n };\n const getParentBlock = (editor, rng) => Optional.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));\n const resolveFromDynamicPatterns = (patternSet, block, beforeText) => {\n const dynamicPatterns = patternSet.dynamicPatternsLookup({\n text: beforeText,\n block\n });\n return {\n ...patternSet,\n blockPatterns: getBlockPatterns(dynamicPatterns).concat(patternSet.blockPatterns),\n inlinePatterns: getInlinePatterns(dynamicPatterns).concat(patternSet.inlinePatterns)\n };\n };\n const getBeforeText = (dom, block, node, offset) => {\n const rng = dom.createRng();\n rng.setStart(block, 0);\n rng.setEnd(node, offset);\n return rng.toString();\n };\n\n const stripPattern = (dom, block, pattern) => {\n const firstTextNode = textAfter(block, 0, block);\n firstTextNode.each(spot => {\n const node = spot.container;\n scanRight(node, pattern.start.length, block).each(end => {\n const rng = dom.createRng();\n rng.setStart(node, 0);\n rng.setEnd(end.container, end.offset);\n deleteRng(dom, rng, e => e === block);\n });\n });\n };\n const applyPattern$1 = (editor, match) => {\n const dom = editor.dom;\n const pattern = match.pattern;\n const rng = resolvePathRange(dom.getRoot(), match.range).getOrDie('Unable to resolve path range');\n const isBlockFormatName = (name, formatter) => {\n const formatSet = formatter.get(name);\n return isArray$1(formatSet) && head(formatSet).exists(format => has$2(format, 'block'));\n };\n getParentBlock(editor, rng).each(block => {\n if (pattern.type === 'block-format') {\n if (isBlockFormatName(pattern.format, editor.formatter)) {\n editor.undoManager.transact(() => {\n stripPattern(editor.dom, block, pattern);\n editor.formatter.apply(pattern.format);\n });\n }\n } else if (pattern.type === 'block-command') {\n editor.undoManager.transact(() => {\n stripPattern(editor.dom, block, pattern);\n editor.execCommand(pattern.cmd, false, pattern.value);\n });\n }\n });\n return true;\n };\n const sortPatterns$1 = patterns => sort(patterns, (a, b) => b.start.length - a.start.length);\n const findPattern$1 = (patterns, text) => {\n const sortedPatterns = sortPatterns$1(patterns);\n const nuText = text.replace(nbsp, ' ');\n return find$2(sortedPatterns, pattern => text.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0);\n };\n const findPatterns$1 = (editor, block, patternSet, normalizedMatches) => {\n var _a;\n const dom = editor.dom;\n const forcedRootBlock = getForcedRootBlock(editor);\n if (!dom.is(block, forcedRootBlock)) {\n return [];\n }\n const blockText = (_a = block.textContent) !== null && _a !== void 0 ? _a : '';\n return findPattern$1(patternSet.blockPatterns, blockText).map(pattern => {\n if (Tools.trim(blockText).length === pattern.start.length) {\n return [];\n }\n return [{\n pattern,\n range: generatePathRange(dom, dom.getRoot(), block, 0, block, 0, normalizedMatches)\n }];\n }).getOr([]);\n };\n const applyMatches$1 = (editor, matches) => {\n if (matches.length === 0) {\n return;\n }\n const bookmark = editor.selection.getBookmark();\n each$e(matches, match => applyPattern$1(editor, match));\n editor.selection.moveToBookmark(bookmark);\n };\n\n const newMarker = (dom, id) => dom.create('span', {\n 'data-mce-type': 'bookmark',\n id\n });\n const rangeFromMarker = (dom, marker) => {\n const rng = dom.createRng();\n rng.setStartAfter(marker.start);\n rng.setEndBefore(marker.end);\n return rng;\n };\n const createMarker = (dom, markerPrefix, pathRange) => {\n const rng = resolvePathRange(dom.getRoot(), pathRange).getOrDie('Unable to resolve path range');\n const startNode = rng.startContainer;\n const endNode = rng.endContainer;\n const textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);\n const textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);\n const startParentNode = textStart.parentNode;\n const endParentNode = textEnd.parentNode;\n return {\n prefix: markerPrefix,\n end: endParentNode.insertBefore(newMarker(dom, markerPrefix + '-end'), textEnd),\n start: startParentNode.insertBefore(newMarker(dom, markerPrefix + '-start'), textStart)\n };\n };\n const removeMarker = (dom, marker, isRoot) => {\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-end'), isRoot);\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-start'), isRoot);\n };\n\n const isReplacementPattern = pattern => pattern.start.length === 0;\n const matchesPattern = patternContent => (element, offset) => {\n const text = element.data;\n const searchText = text.substring(0, offset);\n const startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));\n const startIndex = searchText.lastIndexOf(patternContent);\n if (startIndex !== -1) {\n return startIndex + patternContent.length;\n } else if (startEndIndex !== -1) {\n return startEndIndex + 1;\n } else {\n return -1;\n }\n };\n const findPatternStartFromSpot = (dom, pattern, block, spot) => {\n const startPattern = pattern.start;\n const startSpot = repeatLeft(dom, spot.container, spot.offset, matchesPattern(startPattern), block);\n return startSpot.bind(spot => {\n var _a, _b;\n const startPatternIndex = (_b = (_a = block.textContent) === null || _a === void 0 ? void 0 : _a.indexOf(startPattern)) !== null && _b !== void 0 ? _b : -1;\n const isCompleteMatch = startPatternIndex !== -1 && spot.offset >= startPatternIndex + startPattern.length;\n if (isCompleteMatch) {\n const rng = dom.createRng();\n rng.setStart(spot.container, spot.offset - startPattern.length);\n rng.setEnd(spot.container, spot.offset);\n return Optional.some(rng);\n } else {\n const offset = spot.offset - startPattern.length;\n return scanLeft(spot.container, offset, block).map(nextSpot => {\n const rng = dom.createRng();\n rng.setStart(nextSpot.container, nextSpot.offset);\n rng.setEnd(spot.container, spot.offset);\n return rng;\n }).filter(rng => rng.toString() === startPattern).orThunk(() => findPatternStartFromSpot(dom, pattern, block, point(spot.container, 0)));\n }\n });\n };\n const findPatternStart = (dom, pattern, node, offset, block, requireGap = false) => {\n if (pattern.start.length === 0 && !requireGap) {\n const rng = dom.createRng();\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n return Optional.some(rng);\n }\n return textBefore(node, offset, block).bind(spot => {\n const start = findPatternStartFromSpot(dom, pattern, block, spot);\n return start.bind(startRange => {\n var _a;\n if (requireGap) {\n if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {\n return Optional.none();\n } else if (spot.offset === 0 && ((_a = startRange.endContainer.textContent) === null || _a === void 0 ? void 0 : _a.length) === startRange.endOffset) {\n return Optional.none();\n }\n }\n return Optional.some(startRange);\n });\n });\n };\n const findPattern = (editor, block, details, normalizedMatches) => {\n const dom = editor.dom;\n const root = dom.getRoot();\n const pattern = details.pattern;\n const endNode = details.position.container;\n const endOffset = details.position.offset;\n return scanLeft(endNode, endOffset - details.pattern.end.length, block).bind(spot => {\n const endPathRng = generatePathRange(dom, root, spot.container, spot.offset, endNode, endOffset, normalizedMatches);\n if (isReplacementPattern(pattern)) {\n return Optional.some({\n matches: [{\n pattern,\n startRng: endPathRng,\n endRng: endPathRng\n }],\n position: spot\n });\n } else {\n const resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block, normalizedMatches);\n const results = resultsOpt.getOr({\n matches: [],\n position: spot\n });\n const pos = results.position;\n const start = findPatternStart(dom, pattern, pos.container, pos.offset, block, resultsOpt.isNone());\n return start.map(startRng => {\n const startPathRng = generatePathRangeFromRange(dom, root, startRng, normalizedMatches);\n return {\n matches: results.matches.concat([{\n pattern,\n startRng: startPathRng,\n endRng: endPathRng\n }]),\n position: point(startRng.startContainer, startRng.startOffset)\n };\n });\n }\n });\n };\n const findPatternsRec = (editor, patterns, node, offset, block, normalizedMatches) => {\n const dom = editor.dom;\n return textBefore(node, offset, dom.getRoot()).bind(endSpot => {\n const text = getBeforeText(dom, block, node, offset);\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n if (!endsWith(text, pattern.end)) {\n continue;\n }\n const patternsWithoutCurrent = patterns.slice();\n patternsWithoutCurrent.splice(i, 1);\n const result = findPattern(editor, block, {\n pattern,\n remainingPatterns: patternsWithoutCurrent,\n position: endSpot\n }, normalizedMatches);\n if (result.isNone() && offset > 0) {\n return findPatternsRec(editor, patterns, node, offset - 1, block, normalizedMatches);\n }\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n });\n };\n const applyPattern = (editor, pattern, patternRange) => {\n editor.selection.setRng(patternRange);\n if (pattern.type === 'inline-format') {\n each$e(pattern.format, format => {\n editor.formatter.apply(format);\n });\n } else {\n editor.execCommand(pattern.cmd, false, pattern.value);\n }\n };\n const applyReplacementPattern = (editor, pattern, marker, isRoot) => {\n const markerRange = rangeFromMarker(editor.dom, marker);\n deleteRng(editor.dom, markerRange, isRoot);\n applyPattern(editor, pattern, markerRange);\n };\n const applyPatternWithContent = (editor, pattern, startMarker, endMarker, isRoot) => {\n const dom = editor.dom;\n const markerEndRange = rangeFromMarker(dom, endMarker);\n const markerStartRange = rangeFromMarker(dom, startMarker);\n deleteRng(dom, markerStartRange, isRoot);\n deleteRng(dom, markerEndRange, isRoot);\n const patternMarker = {\n prefix: startMarker.prefix,\n start: startMarker.end,\n end: endMarker.start\n };\n const patternRange = rangeFromMarker(dom, patternMarker);\n applyPattern(editor, pattern, patternRange);\n };\n const addMarkers = (dom, matches) => {\n const markerPrefix = generate$1('mce_textpattern');\n const matchesWithEnds = foldr(matches, (acc, match) => {\n const endMarker = createMarker(dom, markerPrefix + `_end${ acc.length }`, match.endRng);\n return acc.concat([{\n ...match,\n endMarker\n }]);\n }, []);\n return foldr(matchesWithEnds, (acc, match) => {\n const idx = matchesWithEnds.length - acc.length - 1;\n const startMarker = isReplacementPattern(match.pattern) ? match.endMarker : createMarker(dom, markerPrefix + `_start${ idx }`, match.startRng);\n return acc.concat([{\n ...match,\n startMarker\n }]);\n }, []);\n };\n const sortPatterns = patterns => sort(patterns, (a, b) => b.end.length - a.end.length);\n const getBestMatches = (matches, matchesWithSortedPatterns) => {\n const hasSameMatches = forall(matches, match => exists(matchesWithSortedPatterns, sortedMatch => match.pattern.start === sortedMatch.pattern.start && match.pattern.end === sortedMatch.pattern.end));\n if (matches.length === matchesWithSortedPatterns.length) {\n if (hasSameMatches) {\n return matches;\n } else {\n return matchesWithSortedPatterns;\n }\n }\n return matches.length > matchesWithSortedPatterns.length ? matches : matchesWithSortedPatterns;\n };\n const findPatterns = (editor, block, node, offset, patternSet, normalizedMatches) => {\n const matches = findPatternsRec(editor, patternSet.inlinePatterns, node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n const matchesWithSortedPatterns = findPatternsRec(editor, sortPatterns(patternSet.inlinePatterns), node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n return getBestMatches(matches, matchesWithSortedPatterns);\n };\n const applyMatches = (editor, matches) => {\n if (matches.length === 0) {\n return;\n }\n const dom = editor.dom;\n const bookmark = editor.selection.getBookmark();\n const matchesWithMarkers = addMarkers(dom, matches);\n each$e(matchesWithMarkers, match => {\n const block = dom.getParent(match.startMarker.start, dom.isBlock);\n const isRoot = node => node === block;\n if (isReplacementPattern(match.pattern)) {\n applyReplacementPattern(editor, match.pattern, match.endMarker, isRoot);\n } else {\n applyPatternWithContent(editor, match.pattern, match.startMarker, match.endMarker, isRoot);\n }\n removeMarker(dom, match.endMarker, isRoot);\n removeMarker(dom, match.startMarker, isRoot);\n });\n editor.selection.moveToBookmark(bookmark);\n };\n\n const handleEnter = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n return getParentBlock(editor, rng).map(block => {\n var _a;\n const offset = Math.max(0, rng.startOffset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, (_a = block.textContent) !== null && _a !== void 0 ? _a : '');\n const inlineMatches = findPatterns(editor, block, rng.startContainer, offset, dynamicPatternSet, true);\n const blockMatches = findPatterns$1(editor, block, dynamicPatternSet, true);\n if (blockMatches.length > 0 || inlineMatches.length > 0) {\n editor.undoManager.add();\n editor.undoManager.extra(() => {\n editor.execCommand('mceInsertNewLine');\n }, () => {\n editor.insertContent(zeroWidth);\n applyMatches(editor, inlineMatches);\n applyMatches$1(editor, blockMatches);\n const range = editor.selection.getRng();\n const spot = textBefore(range.startContainer, range.startOffset, editor.dom.getRoot());\n editor.execCommand('mceInsertNewLine');\n spot.each(s => {\n const node = s.container;\n if (node.data.charAt(s.offset - 1) === zeroWidth) {\n node.deleteData(s.offset - 1, 1);\n cleanEmptyNodes(editor.dom, node.parentNode, e => e === editor.dom.getRoot());\n }\n });\n });\n return true;\n }\n return false;\n }).getOr(false);\n };\n const handleInlineKey = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n getParentBlock(editor, rng).map(block => {\n const offset = Math.max(0, rng.startOffset - 1);\n const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n const inlineMatches = findPatterns(editor, block, rng.startContainer, offset, dynamicPatternSet, false);\n if (inlineMatches.length > 0) {\n editor.undoManager.transact(() => {\n applyMatches(editor, inlineMatches);\n });\n }\n });\n };\n const checkKeyEvent = (codes, event, predicate) => {\n for (let i = 0; i < codes.length; i++) {\n if (predicate(codes[i], event)) {\n return true;\n }\n }\n return false;\n };\n const checkKeyCode = (codes, event) => checkKeyEvent(codes, event, (code, event) => {\n return code === event.keyCode && !VK.modifierPressed(event);\n });\n const checkCharCode = (chars, event) => checkKeyEvent(chars, event, (chr, event) => {\n return chr.charCodeAt(0) === event.charCode;\n });\n\n const setup$2 = editor => {\n const charCodes = [\n ',',\n '.',\n ';',\n ':',\n '!',\n '?'\n ];\n const keyCodes = [32];\n const getPatternSet = () => createPatternSet(getTextPatterns(editor), getTextPatternsLookup(editor));\n const hasDynamicPatterns = () => hasTextPatternsLookup(editor);\n editor.on('keydown', e => {\n if (e.keyCode === 13 && !VK.modifierPressed(e) && editor.selection.isCollapsed()) {\n const patternSet = getPatternSet();\n const hasPatterns = patternSet.inlinePatterns.length > 0 || patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns && handleEnter(editor, patternSet)) {\n e.preventDefault();\n }\n }\n }, true);\n const handleInlineTrigger = () => {\n if (editor.selection.isCollapsed()) {\n const patternSet = getPatternSet();\n const hasPatterns = patternSet.inlinePatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns) {\n handleInlineKey(editor, patternSet);\n }\n }\n };\n editor.on('keyup', e => {\n if (checkKeyCode(keyCodes, e)) {\n handleInlineTrigger();\n }\n });\n editor.on('keypress', e => {\n if (checkCharCode(charCodes, e)) {\n Delay.setEditorTimeout(editor, handleInlineTrigger);\n }\n });\n };\n\n const setup$1 = editor => {\n setup$2(editor);\n };\n\n const Quirks = editor => {\n const each = Tools.each;\n const BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n const browser = Env.browser;\n const isGecko = browser.isFirefox();\n const isWebKit = browser.isChromium() || browser.isSafari();\n const isiOS = Env.deviceType.isiPhone() || Env.deviceType.isiPad();\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n const setEditorCommandState = (cmd, state) => {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (ex) {\n }\n };\n const isDefaultPrevented = e => {\n return e.isDefaultPrevented();\n };\n const emptyEditorWhenDeleting = () => {\n const serializeRng = rng => {\n const body = dom.create('body');\n const contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n const allContentsSelected = rng => {\n const selection = serializeRng(rng);\n const allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n const allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', e => {\n const keyCode = e.keyCode;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n const isCollapsed = editor.selection.isCollapsed();\n const 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 const selectAll = () => {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n const documentElementEditingFocus = () => {\n if (!editor.inline) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', e => {\n let 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 const removeHrOnBackspace = () => {\n editor.on('keydown', 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 const node = selection.getNode();\n const 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 const focusBody = () => {\n if (!Range.prototype.getClientRects) {\n editor.on('mousedown', e => {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n const body = editor.getBody();\n body.blur();\n Delay.setEditorTimeout(editor, () => {\n body.focus();\n });\n }\n });\n }\n };\n const selectControlElements = () => {\n const visualAidsAnchorClass = getVisualAidsAnchorClass(editor);\n editor.on('click', e => {\n const 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, visualAidsAnchorClass) && target.childNodes.length === 0) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n const removeStylesWhenDeletingAcrossBlockElements = () => {\n const getAttributeApplyFunction = () => {\n const template = dom.getAttribs(selection.getStart().cloneNode(false));\n return () => {\n const target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, attr => {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n const isSelectionAcrossElements = () => {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', e => {\n let applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false);\n applyAttributes();\n e.preventDefault();\n return false;\n } else {\n return true;\n }\n });\n dom.bind(editor.getDoc(), 'cut', e => {\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n const applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, () => {\n applyAttributes();\n });\n }\n });\n };\n const disableBackspaceIntoATable = () => {\n editor.on('keydown', e => {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n const previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n return true;\n });\n };\n const removeBlockQuoteOnBackSpace = () => {\n editor.on('keydown', e => {\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n let rng = selection.getRng();\n const container = rng.startContainer;\n const offset = rng.startOffset;\n const root = dom.getRoot();\n let parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.nodeName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', undefined, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n const setGeckoEditingOptions = () => {\n const setOpts = () => {\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 const addBrAfterLastLinks = () => {\n const fixLinks = () => {\n each(dom.select('a:not([data-mce-block])'), node => {\n var _a;\n let parentNode = node.parentNode;\n const root = dom.getRoot();\n if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.lastChild) === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (((_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.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', e => {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n const setDefaultBlockType = () => {\n editor.on('init', () => {\n setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n });\n };\n const isAllContentSelected = editor => {\n const body = editor.getBody();\n const rng = editor.selection.getRng();\n return rng.startContainer === rng.endContainer && rng.startContainer === body && rng.startOffset === 0 && rng.endOffset === body.childNodes.length;\n };\n const normalizeSelection = () => {\n editor.on('keyup focusin mouseup', e => {\n if (!VK.modifierPressed(e) && !isAllContentSelected(editor)) {\n selection.normalize();\n }\n }, true);\n };\n const showBrokenImageIcon = () => {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n const restoreFocusOnKeyDown = () => {\n if (!editor.inline) {\n editor.on('keydown', () => {\n if (document.activeElement === document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n const bodyHeight = () => {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', e => {\n let rng;\n if (e.target.nodeName === 'HTML') {\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 const blockCmdArrowNavigation = () => {\n if (isMac) {\n editor.on('keydown', e => {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n const selection = editor.selection.getSel();\n selection.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n const tapLinksAndImages = () => {\n editor.on('click', e => {\n let 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 const blockFormSubmitInsideEditor = () => {\n editor.on('init', () => {\n editor.dom.bind(editor.getBody(), 'submit', e => {\n e.preventDefault();\n });\n });\n };\n const removeAppleInterchangeBrs = () => {\n parser.addNodeFilter('br', nodes => {\n let i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n const refreshContentEditable = noop;\n const isHidden = () => {\n if (!isGecko || editor.removed) {\n return false;\n }\n const sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n const setupRtc = () => {\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n blockFormSubmitInsideEditor();\n selectAll();\n if (isiOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n }\n }\n if (isGecko) {\n focusBody();\n setGeckoEditingOptions();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n }\n };\n const setup = () => {\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 (isiOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\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,\n isHidden\n };\n };\n\n const DOM$6 = DOMUtils.DOM;\n const appendStyle = (editor, text) => {\n const body = SugarElement.fromDom(editor.getBody());\n const container = getStyleContainer(getRootNode(body));\n const style = SugarElement.fromTag('style');\n set$2(style, 'type', 'text/css');\n append$1(style, SugarElement.fromText(text));\n append$1(container, style);\n editor.on('remove', () => {\n remove$6(style);\n });\n };\n const getRootName = editor => editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n const removeUndefined = obj => filter$4(obj, v => isUndefined(v) === false);\n const mkParserSettings = editor => {\n const getOption = editor.options.get;\n const blobCache = editor.editorUpload.blobCache;\n return removeUndefined({\n allow_conditional_comments: getOption('allow_conditional_comments'),\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls'),\n allow_html_in_named_anchor: getOption('allow_html_in_named_anchor'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_unsafe_link_target: getOption('allow_unsafe_link_target'),\n convert_fonts_to_spans: getOption('convert_fonts_to_spans'),\n fix_list_elements: getOption('fix_list_elements'),\n font_size_legacy_values: getOption('font_size_legacy_values'),\n forced_root_block: getOption('forced_root_block'),\n forced_root_block_attrs: getOption('forced_root_block_attrs'),\n preserve_cdata: getOption('preserve_cdata'),\n remove_trailing_brs: getOption('remove_trailing_brs'),\n inline_styles: getOption('inline_styles'),\n root_name: getRootName(editor),\n validate: true,\n blob_cache: blobCache,\n document: editor.getDoc()\n });\n };\n const mkSchemaSettings = editor => {\n const getOption = editor.options.get;\n return removeUndefined({\n custom_elements: getOption('custom_elements'),\n extended_valid_elements: getOption('extended_valid_elements'),\n invalid_elements: getOption('invalid_elements'),\n invalid_styles: getOption('invalid_styles'),\n schema: getOption('schema'),\n valid_children: getOption('valid_children'),\n valid_classes: getOption('valid_classes'),\n valid_elements: getOption('valid_elements'),\n valid_styles: getOption('valid_styles'),\n verify_html: getOption('verify_html'),\n padd_empty_block_inline_children: getOption('format_empty_lines')\n });\n };\n const mkSerializerSettings = editor => {\n const getOption = editor.options.get;\n return {\n ...mkParserSettings(editor),\n ...mkSchemaSettings(editor),\n ...removeUndefined({\n url_converter: getOption('url_converter'),\n url_converter_scope: getOption('url_converter_scope'),\n element_format: getOption('element_format'),\n entities: getOption('entities'),\n entity_encoding: getOption('entity_encoding'),\n indent: getOption('indent'),\n indent_after: getOption('indent_after'),\n indent_before: getOption('indent_before')\n })\n };\n };\n const createParser = editor => {\n const parser = DomParser(mkParserSettings(editor), editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', (nodes, name) => {\n const dom = editor.dom;\n const internalName = 'data-mce-' + name;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let 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', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n if (shouldPreserveCData(editor)) {\n parser.addNodeFilter('#cdata', nodes => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + editor.dom.encode((_a = node.value) !== null && _a !== void 0 ? _a : '') + ']]';\n }\n });\n }\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', nodes => {\n let i = nodes.length;\n const nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n const node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new AstNode('br', 1));\n }\n }\n });\n return parser;\n };\n const autoFocus = editor => {\n const autoFocus = getAutoFocus(editor);\n if (autoFocus) {\n Delay.setEditorTimeout(editor, () => {\n let focusEditor;\n if (autoFocus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(autoFocus);\n }\n if (focusEditor && !focusEditor.destroyed) {\n focusEditor.focus();\n focusEditor.selection.scrollIntoView();\n }\n }, 100);\n }\n };\n const moveSelectionToFirstCaretPosition = editor => {\n const root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n firstPositionIn(root).each(pos => {\n const node = pos.getNode();\n const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n const initEditor = editor => {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n fireInit(editor);\n editor.focus(true);\n moveSelectionToFirstCaretPosition(editor);\n editor.nodeChanged({ initial: true });\n const initInstanceCallback = getInitInstanceCallback(editor);\n if (isFunction(initInstanceCallback)) {\n initInstanceCallback.call(editor, editor);\n }\n autoFocus(editor);\n };\n const getStyleSheetLoader$1 = editor => editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n const makeStylesheetLoadingPromises = (editor, css, framedFonts) => {\n const promises = [getStyleSheetLoader$1(editor).loadAll(css)];\n if (editor.inline) {\n return promises;\n } else {\n return promises.concat([editor.ui.styleSheetLoader.loadAll(framedFonts)]);\n }\n };\n const loadContentCss = editor => {\n const styleSheetLoader = getStyleSheetLoader$1(editor);\n const fontCss = getFontCss(editor);\n const css = editor.contentCSS;\n const removeCss = () => {\n styleSheetLoader.unloadAll(css);\n if (!editor.inline) {\n editor.ui.styleSheetLoader.unloadAll(fontCss);\n }\n };\n const loaded = () => {\n if (editor.removed) {\n removeCss();\n } else {\n editor.on('remove', removeCss);\n }\n };\n if (editor.contentStyles.length > 0) {\n let contentCssText = '';\n Tools.each(editor.contentStyles, style => {\n contentCssText += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText);\n }\n const allStylesheets = Promise.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n const contentStyle = getContentStyle(editor);\n if (contentStyle) {\n appendStyle(editor, contentStyle);\n }\n return allStylesheets;\n };\n const preInit = editor => {\n const doc = editor.getDoc(), body = editor.getBody();\n firePreInit(editor);\n if (!shouldBrowserSpellcheck(editor)) {\n doc.body.spellcheck = false;\n DOM$6.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n const directionality = getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\n }\n const protect = getProtect(editor);\n if (protect) {\n editor.on('BeforeSetContent', e => {\n Tools.each(protect, pattern => {\n e.content = e.content.replace(pattern, str => {\n return '<!--mce:protected ' + escape(str) + '-->';\n });\n });\n });\n }\n editor.on('SetContent', () => {\n editor.addVisual(editor.getBody());\n });\n editor.on('compositionstart compositionend', e => {\n editor.composing = e.type === 'compositionstart';\n });\n };\n const loadInitialContent = 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 const initEditorWithInitialContent = editor => {\n if (editor.removed !== true) {\n loadInitialContent(editor);\n initEditor(editor);\n }\n };\n const contentBodyLoaded = editor => {\n const targetElm = editor.getElement();\n let doc = editor.getDoc();\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 const body = editor.getBody();\n body.disabled = true;\n editor.readonly = isReadOnly$1(editor);\n if (!editor.readonly) {\n if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = 'true';\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(mkSchemaSettings(editor));\n editor.dom = DOMUtils(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: editor.inline,\n schema: editor.schema,\n contentCssCors: shouldUseContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor),\n onSetAttrib: e => {\n editor.dispatch('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$o(editor);\n setup$6(editor);\n setup$m(editor);\n if (!isRtc(editor)) {\n setup$5(editor);\n setup$1(editor);\n }\n const caret = setup$b(editor);\n setup$p(editor, caret);\n setup$n(editor);\n setup$q(editor);\n setup$7(editor);\n const setupRtcThunk = setup$s(editor);\n preInit(editor);\n setupRtcThunk.fold(() => {\n loadContentCss(editor).then(() => initEditorWithInitialContent(editor));\n }, setupRtc => {\n editor.setProgressState(true);\n loadContentCss(editor).then(() => {\n setupRtc().then(_rtcMode => {\n editor.setProgressState(false);\n initEditorWithInitialContent(editor);\n bindEvents(editor);\n }, err => {\n editor.notificationManager.open({\n type: 'error',\n text: String(err)\n });\n initEditorWithInitialContent(editor);\n bindEvents(editor);\n });\n });\n });\n };\n const initContentBody = (editor, skipWrite) => {\n if (!editor.inline) {\n editor.getElement().style.visibility = editor.orgVisibility;\n }\n if (!skipWrite && !editor.inline) {\n const iframe = editor.iframeElement;\n const binder = bind$1(SugarElement.fromDom(iframe), 'load', () => {\n binder.unbind();\n editor.contentDocument = iframe.contentDocument;\n contentBodyLoaded(editor);\n });\n if (Env.browser.isFirefox()) {\n const doc = editor.getDoc();\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n } else {\n iframe.srcdoc = editor.iframeHTML;\n }\n } else {\n contentBodyLoaded(editor);\n }\n };\n\n const DOM$5 = DOMUtils.DOM;\n const createIframeElement = (id, title, customAttrs, tabindex) => {\n const iframe = SugarElement.fromTag('iframe');\n tabindex.each(t => set$2(iframe, 'tabindex', t));\n setAll$1(iframe, customAttrs);\n setAll$1(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title\n });\n add$2(iframe, 'tox-edit-area__iframe');\n return iframe;\n };\n const getIframeHtml = editor => {\n let iframeHTML = getDocType(editor) + '<html><head>';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '<base href=\"' + editor.documentBaseURI.getURI() + '\" />';\n }\n iframeHTML += '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';\n const bodyId = getBodyId(editor);\n const bodyClass = getBodyClass(editor);\n const translatedAriaText = editor.translate(getIframeAriaText(editor));\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '<meta http-equiv=\"Content-Security-Policy\" content=\"' + getContentSecurityPolicy(editor) + '\" />';\n }\n iframeHTML += '</head>' + `<body id=\"${ bodyId }\" class=\"mce-content-body ${ bodyClass }\" data-id=\"${ editor.id }\" aria-label=\"${ translatedAriaText }\">` + '<br>' + '</body></html>';\n return iframeHTML;\n };\n const createIframe = (editor, boxInfo) => {\n const iframeTitle = editor.translate('Rich Text Area');\n const tabindex = getOpt(SugarElement.fromDom(editor.getElement()), 'tabindex').bind(toInt);\n const ifr = createIframeElement(editor.id, iframeTitle, getIframeAttrs(editor), tabindex).dom;\n ifr.onload = () => {\n ifr.onload = null;\n editor.dispatch('load');\n };\n editor.contentAreaContainer = boxInfo.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$5.add(boxInfo.iframeContainer, ifr);\n };\n const init$1 = (editor, boxInfo) => {\n createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n 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 initContentBody(editor);\n };\n\n const DOM$4 = DOMUtils.DOM;\n const initPlugin = (editor, initializedPlugins, plugin) => {\n const Plugin = PluginManager.get(plugin);\n const pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n const pluginInstance = Plugin(editor, pluginUrl) || {};\n editor.plugins[plugin] = pluginInstance;\n if (isFunction(pluginInstance.init)) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n pluginInitError(editor, plugin, e);\n }\n }\n };\n const trimLegacyPrefix = name => {\n return name.replace(/^\\-/, '');\n };\n const initPlugins = editor => {\n const initializedPlugins = [];\n each$e(getPlugins(editor), name => {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n const initIcons = editor => {\n const iconPackName = Tools.trim(getIconPackName(editor));\n const currentIcons = editor.ui.registry.getAll().icons;\n const loadIcons = {\n ...IconManager.get('default').icons,\n ...IconManager.get(iconPackName).icons\n };\n each$d(loadIcons, (svgData, icon) => {\n if (!has$2(currentIcons, icon)) {\n editor.ui.registry.addIcon(icon, svgData);\n }\n });\n };\n const initTheme = editor => {\n const theme = getTheme(editor);\n if (isString(theme)) {\n const Theme = ThemeManager.get(theme);\n editor.theme = Theme(editor, ThemeManager.urls[theme]) || {};\n if (isFunction(editor.theme.init)) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''));\n }\n } else {\n editor.theme = {};\n }\n };\n const initModel = editor => {\n const model = getModel(editor);\n const Model = ModelManager.get(model);\n editor.model = Model(editor, ModelManager.urls[model]);\n };\n const renderFromLoadedTheme = editor => {\n const render = editor.theme.renderUI;\n return render ? render() : renderThemeFalse(editor);\n };\n const renderFromThemeFunc = editor => {\n const elm = editor.getElement();\n const theme = getTheme(editor);\n const 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 const createThemeFalseResult = (element, iframe) => {\n return {\n editorContainer: element,\n iframeContainer: iframe,\n api: {}\n };\n };\n const renderThemeFalseIframe = targetElement => {\n const iframeContainer = DOM$4.create('div');\n DOM$4.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer, iframeContainer);\n };\n const renderThemeFalse = editor => {\n const targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n const renderThemeUi = editor => {\n const elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(getTheme(editor))) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(getTheme(editor))) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n const augmentEditorUiApi = (editor, api) => {\n const uiApiFacade = {\n show: Optional.from(api.show).getOr(noop),\n hide: Optional.from(api.hide).getOr(noop),\n isEnabled: Optional.from(api.isEnabled).getOr(always),\n setEnabled: state => {\n if (!editor.mode.isReadOnly()) {\n Optional.from(api.setEnabled).each(f => f(state));\n }\n }\n };\n editor.ui = {\n ...editor.ui,\n ...uiApiFacade\n };\n };\n const init = editor => {\n editor.dispatch('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initModel(editor);\n initPlugins(editor);\n const renderInfo = renderThemeUi(editor);\n augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n editor.editorContainer = renderInfo.editorContainer;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n initContentBody(editor);\n } else {\n init$1(editor, {\n editorContainer: renderInfo.editorContainer,\n iframeContainer: renderInfo.iframeContainer\n });\n }\n };\n\n const DOM$3 = DOMUtils.DOM;\n const hasSkipLoadPrefix = name => name.charAt(0) === '-';\n const loadLanguage = (scriptLoader, editor) => {\n const languageCode = getLanguageCode(editor);\n const languageUrl = getLanguageUrl(editor);\n if (!I18n.hasCode(languageCode) && languageCode !== 'en') {\n const url = isNotEmpty(languageUrl) ? languageUrl : `${ editor.editorManager.baseURL }/langs/${ languageCode }.js`;\n scriptLoader.add(url).catch(() => {\n languageLoadError(editor, url, languageCode);\n });\n }\n };\n const loadTheme = (editor, suffix) => {\n const theme = getTheme(editor);\n if (isString(theme) && !hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n const themeUrl = getThemeUrl(editor);\n const url = themeUrl ? editor.documentBaseURI.toAbsolute(themeUrl) : `themes/${ theme }/theme${ suffix }.js`;\n ThemeManager.load(theme, url).catch(() => {\n themeLoadError(editor, url, theme);\n });\n }\n };\n const loadModel = (editor, suffix) => {\n const model = getModel(editor);\n if (model !== 'plugin' && !has$2(ModelManager.urls, model)) {\n const modelUrl = getModelUrl(editor);\n const url = isString(modelUrl) ? editor.documentBaseURI.toAbsolute(modelUrl) : `models/${ model }/model${ suffix }.js`;\n ModelManager.load(model, url).catch(() => {\n modelLoadError(editor, url, model);\n });\n }\n };\n const getIconsUrlMetaFromUrl = editor => Optional.from(getIconsUrl(editor)).filter(isNotEmpty).map(url => ({\n url,\n name: Optional.none()\n }));\n const getIconsUrlMetaFromName = (editor, name, suffix) => Optional.from(name).filter(name => isNotEmpty(name) && !IconManager.has(name)).map(name => ({\n url: `${ editor.editorManager.baseURL }/icons/${ name }/icons${ suffix }.js`,\n name: Optional.some(name)\n }));\n const loadIcons = (scriptLoader, editor, suffix) => {\n const defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n const customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(() => getIconsUrlMetaFromName(editor, getIconPackName(editor), ''));\n each$e(cat([\n defaultIconsUrl,\n customIconsUrl\n ]), urlMeta => {\n scriptLoader.add(urlMeta.url).catch(() => {\n iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n const loadPlugins = (editor, suffix) => {\n const loadPlugin = (name, url) => {\n PluginManager.load(name, url).catch(() => {\n pluginLoadError(editor, url, name);\n });\n };\n each$d(getExternalPlugins$1(editor), (url, name) => {\n loadPlugin(name, url);\n editor.options.set('plugins', getPlugins(editor).concat(name));\n });\n each$e(getPlugins(editor), plugin => {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager.urls[plugin] && !hasSkipLoadPrefix(plugin)) {\n loadPlugin(plugin, `plugins/${ plugin }/plugin${ suffix }.js`);\n }\n });\n };\n const isThemeLoaded = editor => {\n const theme = getTheme(editor);\n return !isString(theme) || isNonNullable(ThemeManager.get(theme));\n };\n const isModelLoaded = editor => {\n const model = getModel(editor);\n return isNonNullable(ModelManager.get(model));\n };\n const loadScripts = (editor, suffix) => {\n const scriptLoader = ScriptLoader.ScriptLoader;\n const initEditor = () => {\n if (!editor.removed && isThemeLoaded(editor) && isModelLoaded(editor)) {\n init(editor);\n }\n };\n loadTheme(editor, suffix);\n loadModel(editor, suffix);\n loadLanguage(scriptLoader, editor);\n loadIcons(scriptLoader, editor, suffix);\n loadPlugins(editor, suffix);\n scriptLoader.loadQueue().then(initEditor, initEditor);\n };\n const getStyleSheetLoader = (element, editor) => instance.forElement(element, {\n contentCssCors: hasContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor)\n });\n const render = editor => {\n const id = editor.id;\n I18n.setCode(getLanguageCode(editor));\n const readyHandler = () => {\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 const element = SugarElement.fromDom(editor.getElement());\n const snapshot = clone$4(element);\n editor.on('remove', () => {\n eachr(element.dom.attributes, attr => remove$b(element, attr.name));\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 const 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 = e => {\n editor.dispatch(e.type, e);\n };\n DOM$3.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', () => {\n editor.resetContent();\n });\n if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = () => {\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', e => {\n if (e.save) {\n e.content = DOM$3.encode(e.content);\n }\n });\n }\n if (shouldAddFormSubmitTrigger(editor)) {\n editor.on('submit', () => {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (shouldAddUnloadTrigger(editor)) {\n editor._beforeUnload = () => {\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 const sectionResult = (sections, settings) => ({\n sections: constant(sections),\n options: constant(settings)\n });\n const deviceDetection = detect$2().deviceType;\n const isPhone = deviceDetection.isPhone();\n const isTablet = deviceDetection.isTablet();\n const normalizePlugins = plugins => {\n if (isNullable(plugins)) {\n return [];\n } else {\n const pluginNames = isArray$1(plugins) ? plugins : plugins.split(/[ ,]/);\n const trimmedPlugins = map$3(pluginNames, trim$3);\n return filter$5(trimmedPlugins, isNotEmpty);\n }\n };\n const extractSections = (keys, options) => {\n const result = bifilter(options, (value, key) => {\n return contains$2(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n const getSection = (sectionResult, name, defaults = {}) => {\n const sections = sectionResult.sections();\n const sectionOptions = get$a(sections, name).getOr({});\n return Tools.extend({}, defaults, sectionOptions);\n };\n const hasSection = (sectionResult, name) => {\n return has$2(sectionResult.sections(), name);\n };\n const getSectionConfig = (sectionResult, name) => {\n return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n };\n const getMobileOverrideOptions = (mobileOptions, isPhone) => {\n const defaultMobileOptions = {\n table_grid: false,\n object_resizing: false,\n resize: false,\n toolbar_mode: get$a(mobileOptions, 'toolbar_mode').getOr('scrolling'),\n toolbar_sticky: false\n };\n const defaultPhoneOptions = { menubar: false };\n return {\n ...defaultMobileOptions,\n ...isPhone ? defaultPhoneOptions : {}\n };\n };\n const getExternalPlugins = (overrideOptions, options) => {\n var _a;\n const userDefinedExternalPlugins = (_a = options.external_plugins) !== null && _a !== void 0 ? _a : {};\n if (overrideOptions && overrideOptions.external_plugins) {\n return Tools.extend({}, overrideOptions.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n const combinePlugins = (forcedPlugins, plugins) => [\n ...normalizePlugins(forcedPlugins),\n ...normalizePlugins(plugins)\n ];\n const getPlatformPlugins = (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) => {\n if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n return mobilePlugins;\n } else {\n return desktopPlugins;\n }\n };\n const processPlugins = (isMobileDevice, sectionResult, defaultOverrideOptions, options) => {\n const forcedPlugins = normalizePlugins(defaultOverrideOptions.forced_plugins);\n const desktopPlugins = normalizePlugins(options.plugins);\n const mobileConfig = getSectionConfig(sectionResult, 'mobile');\n const mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n const platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n const combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n return Tools.extend(options, {\n forced_plugins: forcedPlugins,\n plugins: combinedPlugins\n });\n };\n const isOnMobile = (isMobileDevice, sectionResult) => {\n return isMobileDevice && hasSection(sectionResult, 'mobile');\n };\n const combineOptions = (isMobileDevice, isPhone, defaultOptions, defaultOverrideOptions, options) => {\n var _a;\n const deviceOverrideOptions = isMobileDevice ? { mobile: getMobileOverrideOptions((_a = options.mobile) !== null && _a !== void 0 ? _a : {}, isPhone) } : {};\n const sectionResult = extractSections(['mobile'], deepMerge(deviceOverrideOptions, options));\n const extendedOptions = Tools.extend(defaultOptions, defaultOverrideOptions, sectionResult.options(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, { external_plugins: getExternalPlugins(defaultOverrideOptions, sectionResult.options()) });\n return processPlugins(isMobileDevice, sectionResult, defaultOverrideOptions, extendedOptions);\n };\n const normalizeOptions = (defaultOverrideOptions, options) => combineOptions(isPhone || isTablet, isPhone, options, defaultOverrideOptions, options);\n\n const addVisual = (editor, elm) => addVisual$1(editor, elm);\n\n const registerExecCommands$3 = editor => {\n const toggleFormat = (name, value) => {\n editor.formatter.toggle(name, value);\n editor.nodeChanged();\n };\n const toggleAlign = align => () => {\n each$e('left,center,right,justify'.split(','), name => {\n if (align !== name) {\n editor.formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n toggleFormat('align' + align);\n }\n };\n editor.editorCommands.addCommands({\n JustifyLeft: toggleAlign('left'),\n JustifyCenter: toggleAlign('center'),\n JustifyRight: toggleAlign('right'),\n JustifyFull: toggleAlign('justify'),\n JustifyNone: toggleAlign('none')\n });\n };\n const registerQueryStateCommands$1 = editor => {\n const alignStates = name => () => {\n const selection = editor.selection;\n const nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n return exists(nodes, node => isNonNullable(editor.formatter.matchNode(node, name)));\n };\n editor.editorCommands.addCommands({\n JustifyLeft: alignStates('alignleft'),\n JustifyCenter: alignStates('aligncenter'),\n JustifyRight: alignStates('alignright'),\n JustifyFull: alignStates('alignjustify')\n }, 'state');\n };\n const registerCommands$a = editor => {\n registerExecCommands$3(editor);\n registerQueryStateCommands$1(editor);\n };\n\n const registerCommands$9 = editor => {\n editor.editorCommands.addCommands({\n 'Cut,Copy,Paste': command => {\n const doc = editor.getDoc();\n let failed;\n try {\n doc.execCommand(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 let 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.os.isMacOS() || Env.os.isiOS()) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n }\n });\n };\n\n const trimOrPadLeftRight = (dom, rng, html) => {\n const 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(/( | )(<br( \\/)>)?$/, ' ');\n } else {\n html = html.replace(/ (<br( \\/)?>)?$/, ' ');\n }\n return html;\n };\n\n const processValue$1 = value => {\n if (typeof value !== 'string') {\n const details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n const trimOrPad = (editor, value) => {\n const selection = editor.selection;\n const dom = editor.dom;\n if (/^ | $/.test(value)) {\n return trimOrPadLeftRight(dom, selection.getRng(), value);\n } else {\n return value;\n }\n };\n const insertAtCaret = (editor, value) => {\n const {content, details} = processValue$1(value);\n preProcessSetContent(editor, {\n ...details,\n content: trimOrPad(editor, content),\n format: 'html',\n set: false,\n selection: true\n }).each(args => {\n const insertedContent = insertContent$1(editor, args.content, details);\n postProcessSetContent(editor, insertedContent, args);\n editor.addVisual();\n });\n };\n\n const registerCommands$8 = editor => {\n editor.editorCommands.addCommands({\n mceCleanup: () => {\n const bm = editor.selection.getBookmark();\n editor.setContent(editor.getContent());\n editor.selection.moveToBookmark(bm);\n },\n insertImage: (_command, _ui, value) => {\n insertAtCaret(editor, editor.dom.createHTML('img', { src: value }));\n },\n insertHorizontalRule: () => {\n editor.execCommand('mceInsertContent', false, '<hr>');\n },\n insertText: (_command, _ui, value) => {\n insertAtCaret(editor, editor.dom.encode(value));\n },\n insertHTML: (_command, _ui, value) => {\n insertAtCaret(editor, value);\n },\n mceInsertContent: (_command, _ui, value) => {\n insertAtCaret(editor, value);\n },\n mceSetContent: (_command, _ui, value) => {\n editor.setContent(value);\n },\n mceReplaceContent: (_command, _ui, value) => {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n },\n mceNewDocument: () => {\n editor.setContent('');\n }\n });\n };\n\n const legacyPropNames = {\n 'font-size': 'size',\n 'font-family': 'face'\n };\n const isFont = isTag('font');\n const getSpecifiedFontProp = (propName, rootElm, elm) => {\n const getProperty = elm => getRaw$1(elm, propName).orThunk(() => {\n if (isFont(elm)) {\n return get$a(legacyPropNames, propName).bind(legacyPropName => getOpt(elm, legacyPropName));\n } else {\n return Optional.none();\n }\n });\n const isRoot = elm => eq(SugarElement.fromDom(rootElm), elm);\n return closest$2(SugarElement.fromDom(elm), elm => getProperty(elm), isRoot);\n };\n const normalizeFontFamily = fontFamily => fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n const getComputedFontProp = (propName, elm) => Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n const getFontProp = propName => (rootElm, elm) => Optional.from(elm).map(SugarElement.fromDom).filter(isElement$7).bind(element => getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom))).getOr('');\n const getFontSize = getFontProp('font-size');\n const getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n const findFirstCaretElement = editor => firstPositionIn(editor.getBody()).bind(caret => {\n const container = caret.container();\n return Optional.from(isText$a(container) ? container.parentNode : container);\n });\n const getCaretElement = editor => Optional.from(editor.selection.getRng()).bind(rng => {\n const root = editor.getBody();\n const atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n });\n const bindRange = (editor, binder) => getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$7).bind(binder);\n const mapRange = (editor, mapper) => bindRange(editor, compose1(Optional.some, mapper));\n\n const fromFontSizeNumber = (editor, value) => {\n if (/^[0-9.]+$/.test(value)) {\n const fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n const fontSizes = getFontStyleValues(editor);\n const fontClasses = getFontSizeClasses(editor);\n if (fontClasses.length > 0) {\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 const normalizeFontNames = font => {\n const fonts = font.split(/\\s*,\\s*/);\n return map$3(fonts, font => {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, `'`))) {\n return `'${ font }'`;\n } else {\n return font;\n }\n }).join(',');\n };\n const fontNameAction = (editor, value) => {\n const font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n editor.nodeChanged();\n };\n const fontNameQuery = editor => mapRange(editor, elm => getFontFamily(editor.getBody(), elm.dom)).getOr('');\n const fontSizeAction = (editor, value) => {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n const fontSizeQuery = editor => mapRange(editor, elm => getFontSize(editor.getBody(), elm.dom)).getOr('');\n\n const lineHeightQuery = editor => mapRange(editor, elm => {\n const root = SugarElement.fromDom(editor.getBody());\n const specifiedStyle = closest$2(elm, elm => getRaw$1(elm, 'line-height'), curry(eq, root));\n const computedStyle = () => {\n const lineHeight = parseFloat(get$7(elm, 'line-height'));\n const fontSize = parseFloat(get$7(elm, 'font-size'));\n return String(lineHeight / fontSize);\n };\n return specifiedStyle.getOrThunk(computedStyle);\n }).getOr('');\n const lineHeightAction = (editor, lineHeight) => {\n editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n editor.nodeChanged();\n };\n\n const registerExecCommands$2 = editor => {\n const toggleFormat = (name, value) => {\n editor.formatter.toggle(name, value);\n editor.nodeChanged();\n };\n editor.editorCommands.addCommands({\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => {\n toggleFormat(command);\n },\n 'ForeColor,HiliteColor': (command, _ui, value) => {\n toggleFormat(command, { value });\n },\n 'BackColor': (_command, _ui, value) => {\n toggleFormat('hilitecolor', { value });\n },\n 'FontName': (_command, _ui, value) => {\n fontNameAction(editor, value);\n },\n 'FontSize': (_command, _ui, value) => {\n fontSizeAction(editor, value);\n },\n 'LineHeight': (_command, _ui, value) => {\n lineHeightAction(editor, value);\n },\n 'Lang': (command, _ui, lang) => {\n var _a;\n toggleFormat(command, {\n value: lang.code,\n customValue: (_a = lang.customCode) !== null && _a !== void 0 ? _a : null\n });\n },\n 'RemoveFormat': command => {\n editor.formatter.remove(command);\n },\n 'mceBlockQuote': () => {\n toggleFormat('blockquote');\n },\n 'FormatBlock': (_command, _ui, value) => {\n toggleFormat(isString(value) ? value : 'p');\n },\n 'mceToggleFormat': (_command, _ui, value) => {\n toggleFormat(value);\n }\n });\n };\n const registerQueryValueCommands = editor => {\n const isFormatMatch = name => editor.formatter.match(name);\n editor.editorCommands.addCommands({\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => isFormatMatch(command),\n 'mceBlockQuote': () => isFormatMatch('blockquote')\n }, 'state');\n editor.editorCommands.addQueryValueHandler('FontName', () => fontNameQuery(editor));\n editor.editorCommands.addQueryValueHandler('FontSize', () => fontSizeQuery(editor));\n editor.editorCommands.addQueryValueHandler('LineHeight', () => lineHeightQuery(editor));\n };\n const registerCommands$7 = editor => {\n registerExecCommands$2(editor);\n registerQueryValueCommands(editor);\n };\n\n const registerCommands$6 = editor => {\n editor.editorCommands.addCommands({\n mceAddUndoLevel: () => {\n editor.undoManager.add();\n },\n mceEndUndoLevel: () => {\n editor.undoManager.add();\n },\n Undo: () => {\n editor.undoManager.undo();\n },\n Redo: () => {\n editor.undoManager.redo();\n }\n });\n };\n\n const registerCommands$5 = editor => {\n editor.editorCommands.addCommands({\n Indent: () => {\n indent(editor);\n },\n Outdent: () => {\n outdent(editor);\n }\n });\n editor.editorCommands.addCommands({ Outdent: () => canOutdent(editor) }, 'state');\n };\n\n const registerCommands$4 = editor => {\n const applyLinkToSelection = (_command, _ui, value) => {\n const linkDetails = isString(value) ? { href: value } : value;\n const anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n if (isObject(linkDetails) && isString(linkDetails.href)) {\n linkDetails.href = linkDetails.href.replace(/ /g, '%20');\n if (!anchor || !linkDetails.href) {\n editor.formatter.remove('link');\n }\n if (linkDetails.href) {\n editor.formatter.apply('link', linkDetails, anchor);\n }\n }\n };\n editor.editorCommands.addCommands({\n unlink: () => {\n if (editor.selection.isCollapsed()) {\n const 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 mceInsertLink: applyLinkToSelection,\n createLink: applyLinkToSelection\n });\n };\n\n const registerExecCommands$1 = editor => {\n editor.editorCommands.addCommands({\n 'InsertUnorderedList,InsertOrderedList': command => {\n editor.getDoc().execCommand(command);\n const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n if (listElm) {\n const listParent = listElm.parentNode;\n if (listParent && /^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n const bm = editor.selection.getBookmark();\n editor.dom.split(listParent, listElm);\n editor.selection.moveToBookmark(bm);\n }\n }\n }\n });\n };\n const registerQueryStateCommands = editor => {\n editor.editorCommands.addCommands({\n 'InsertUnorderedList,InsertOrderedList': command => {\n const 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 };\n const registerCommands$3 = editor => {\n registerExecCommands$1(editor);\n registerQueryStateCommands(editor);\n };\n\n const registerCommands$2 = editor => {\n editor.editorCommands.addCommands({\n insertParagraph: () => {\n insertBreak(blockbreak, editor);\n },\n mceInsertNewLine: (_command, _ui, value) => {\n insert(editor, value);\n },\n InsertLineBreak: (_command, _ui, _value) => {\n insertBreak(linebreak, editor);\n }\n });\n };\n\n const registerCommands$1 = editor => {\n editor.editorCommands.addCommands({\n mceSelectNodeDepth: (_command, _ui, value) => {\n let counter = 0;\n editor.dom.getParent(editor.selection.getNode(), node => {\n if (isElement$6(node) && counter++ === value) {\n editor.selection.select(node);\n return false;\n } else {\n return true;\n }\n }, editor.getBody());\n },\n mceSelectNode: (_command, _ui, value) => {\n editor.selection.select(value);\n },\n selectAll: () => {\n const editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$3);\n if (editingHost) {\n const rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n }\n });\n };\n\n const registerExecCommands = editor => {\n editor.editorCommands.addCommands({\n mceRemoveNode: (_command, _ui, value) => {\n const node = value !== null && value !== void 0 ? value : editor.selection.getNode();\n if (node !== editor.getBody()) {\n const bm = editor.selection.getBookmark();\n editor.dom.remove(node, true);\n editor.selection.moveToBookmark(bm);\n }\n },\n mcePrint: () => {\n editor.getWin().print();\n },\n mceFocus: (_command, _ui, value) => {\n focus(editor, value === true);\n },\n mceToggleVisualAid: () => {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n }\n });\n };\n const registerCommands = editor => {\n registerCommands$a(editor);\n registerCommands$9(editor);\n registerCommands$6(editor);\n registerCommands$1(editor);\n registerCommands$8(editor);\n registerCommands$4(editor);\n registerCommands$5(editor);\n registerCommands$2(editor);\n registerCommands$3(editor);\n registerCommands$7(editor);\n registerExecCommands(editor);\n };\n\n const selectionSafeCommands = ['toggleview'];\n const isSelectionSafeCommand = command => contains$2(selectionSafeCommands, command.toLowerCase());\n class EditorCommands {\n constructor(editor) {\n this.commands = {\n state: {},\n exec: {},\n value: {}\n };\n this.editor = editor;\n }\n execCommand(command, ui = false, value, args) {\n const editor = this.editor;\n const lowerCaseCommand = command.toLowerCase();\n const skipFocus = args === null || args === void 0 ? void 0 : args.skip_focus;\n if (editor.removed) {\n return false;\n }\n if (lowerCaseCommand !== 'mcefocus') {\n if (!/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(lowerCaseCommand) && !skipFocus) {\n editor.focus();\n } else {\n restore(editor);\n }\n }\n const eventArgs = editor.dispatch('BeforeExecCommand', {\n command,\n ui,\n value\n });\n if (eventArgs.isDefaultPrevented()) {\n return false;\n }\n const func = this.commands.exec[lowerCaseCommand];\n if (isFunction(func)) {\n func(lowerCaseCommand, ui, value);\n editor.dispatch('ExecCommand', {\n command,\n ui,\n value\n });\n return true;\n }\n return false;\n }\n queryCommandState(command) {\n if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n return false;\n }\n const lowerCaseCommand = command.toLowerCase();\n const func = this.commands.state[lowerCaseCommand];\n if (isFunction(func)) {\n return func(lowerCaseCommand);\n }\n return false;\n }\n queryCommandValue(command) {\n if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n return '';\n }\n const lowerCaseCommand = command.toLowerCase();\n const func = this.commands.value[lowerCaseCommand];\n if (isFunction(func)) {\n return func(lowerCaseCommand);\n }\n return '';\n }\n addCommands(commandList, type = 'exec') {\n const commands = this.commands;\n each$d(commandList, (callback, command) => {\n each$e(command.toLowerCase().split(','), command => {\n commands[type][command] = callback;\n });\n });\n }\n addCommand(command, callback, scope) {\n const lowerCaseCommand = command.toLowerCase();\n this.commands.exec[lowerCaseCommand] = (_command, ui, value) => callback.call(scope !== null && scope !== void 0 ? scope : this.editor, ui, value);\n }\n queryCommandSupported(command) {\n const lowerCaseCommand = command.toLowerCase();\n if (this.commands.exec[lowerCaseCommand]) {\n return true;\n } else {\n return false;\n }\n }\n addQueryStateHandler(command, callback, scope) {\n this.commands.state[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n }\n addQueryValueHandler(command, callback, scope) {\n this.commands.value[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n }\n }\n\n const internalContentEditableAttr = 'data-mce-contenteditable';\n const toggleClass = (elm, cls, state) => {\n if (has(elm, cls) && !state) {\n remove$8(elm, cls);\n } else if (state) {\n add$2(elm, cls);\n }\n };\n const setEditorCommandState = (editor, cmd, state) => {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (ex) {\n }\n };\n const setContentEditable = (elm, state) => {\n elm.dom.contentEditable = state ? 'true' : 'false';\n };\n const switchOffContentEditableTrue = elm => {\n each$e(descendants(elm, '*[contenteditable=\"true\"]'), elm => {\n set$2(elm, internalContentEditableAttr, 'true');\n setContentEditable(elm, false);\n });\n };\n const switchOnContentEditableTrue = elm => {\n each$e(descendants(elm, `*[${ internalContentEditableAttr }=\"true\"]`), elm => {\n remove$b(elm, internalContentEditableAttr);\n setContentEditable(elm, true);\n });\n };\n const removeFakeSelection = editor => {\n Optional.from(editor.selection.getNode()).each(elm => {\n elm.removeAttribute('data-mce-selected');\n });\n };\n const restoreFakeSelection = editor => {\n editor.selection.setRng(editor.selection.getRng());\n };\n const toggleReadOnly = (editor, state) => {\n const 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 const isReadOnly = editor => editor.readonly;\n const registerFilters = editor => {\n editor.parser.addAttributeFilter('contenteditable', nodes => {\n if (isReadOnly(editor)) {\n each$e(nodes, node => {\n node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n node.attr('contenteditable', 'false');\n });\n }\n });\n editor.serializer.addAttributeFilter(internalContentEditableAttr, nodes => {\n if (isReadOnly(editor)) {\n each$e(nodes, node => {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n const registerReadOnlyContentFilters = editor => {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', () => {\n registerFilters(editor);\n });\n }\n };\n const isClickEvent = e => e.type === 'click';\n const allowedEvents = ['copy'];\n const isReadOnlyAllowedEvent = e => contains$2(allowedEvents, e.type);\n const getAnchorHrefOpt = (editor, elm) => {\n const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n return closest$3(elm, 'a', isRoot).bind(a => getOpt(a, 'href'));\n };\n const processReadonlyEvents = (editor, e) => {\n if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n const elm = SugarElement.fromDom(e.target);\n getAnchorHrefOpt(editor, elm).each(href => {\n e.preventDefault();\n if (/^#/.test(href)) {\n const 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 } else if (isReadOnlyAllowedEvent(e)) {\n editor.dispatch(e.type, e);\n }\n };\n const registerReadOnlySelectionBlockers = editor => {\n editor.on('ShowCaret', e => {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('ObjectSelected', e => {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n };\n\n const 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 class EventDispatcher {\n constructor(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n static isNative(name) {\n return !!nativeEvents[name.toLowerCase()];\n }\n fire(name, args) {\n return this.dispatch(name, args);\n }\n dispatch(name, args) {\n const lcName = name.toLowerCase();\n const event = normalize$3(lcName, args !== null && args !== void 0 ? args : {}, this.scope);\n if (this.settings.beforeFire) {\n this.settings.beforeFire(event);\n }\n const handlers = this.bindings[lcName];\n if (handlers) {\n for (let i = 0, l = handlers.length; i < l; i++) {\n const 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 on(name, callback, prepend, extra) {\n if (callback === false) {\n callback = never;\n }\n if (callback) {\n const wrappedCallback = {\n func: callback,\n removed: false\n };\n if (extra) {\n Tools.extend(wrappedCallback, extra);\n }\n const names = name.toLowerCase().split(' ');\n let i = names.length;\n while (i--) {\n const currentName = names[i];\n let handlers = this.bindings[currentName];\n if (!handlers) {\n handlers = [];\n this.toggleEvent(currentName, true);\n }\n if (prepend) {\n handlers = [\n wrappedCallback,\n ...handlers\n ];\n } else {\n handlers = [\n ...handlers,\n wrappedCallback\n ];\n }\n this.bindings[currentName] = handlers;\n }\n }\n return this;\n }\n off(name, callback) {\n if (name) {\n const names = name.toLowerCase().split(' ');\n let i = names.length;\n while (i--) {\n const currentName = names[i];\n let handlers = this.bindings[currentName];\n if (!currentName) {\n each$d(this.bindings, (_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 const filteredHandlers = partition$2(handlers, handler => handler.func === callback);\n handlers = filteredHandlers.fail;\n this.bindings[currentName] = handlers;\n each$e(filteredHandlers.pass, 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$d(this.bindings, (_value, name) => {\n this.toggleEvent(name, false);\n });\n this.bindings = {};\n }\n return this;\n }\n once(name, callback, prepend) {\n return this.on(name, callback, prepend, { once: true });\n }\n has(name) {\n name = name.toLowerCase();\n const binding = this.bindings[name];\n return !(!binding || binding.length === 0);\n }\n }\n\n const getEventDispatcher = obj => {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new EventDispatcher({\n scope: obj,\n toggleEvent: (name, state) => {\n if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n const Observable = {\n fire(name, args, bubble) {\n return this.dispatch(name, args, bubble);\n },\n dispatch(name, args, bubble) {\n const self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return normalize$3(name.toLowerCase(), args !== null && args !== void 0 ? args : {}, self);\n }\n const dispatcherArgs = getEventDispatcher(self).dispatch(name, args);\n if (bubble !== false && self.parent) {\n let parent = self.parent();\n while (parent && !dispatcherArgs.isPropagationStopped()) {\n parent.dispatch(name, dispatcherArgs, false);\n parent = parent.parent ? parent.parent() : undefined;\n }\n }\n return dispatcherArgs;\n },\n on(name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off(name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once(name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners(name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n const DOM$2 = DOMUtils.DOM;\n let customEventRootDelegates;\n const getEventTarget = (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 const 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 const isListening = editor => !editor.hidden && !isReadOnly(editor);\n const fireEvent = (editor, eventName, e) => {\n if (isListening(editor)) {\n editor.dispatch(eventName, e);\n } else if (isReadOnly(editor)) {\n processReadonlyEvents(editor, e);\n }\n };\n const bindEventDelegate = (editor, eventName) => {\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n const eventRootElm = getEventTarget(editor, eventName);\n if (getEventRoot(editor)) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', () => {\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n each$d(customEventRootDelegates, (_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 const delegate = e => {\n const target = e.target;\n const editors = editor.editorManager.get();\n let i = editors.length;\n while (i--) {\n const 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 const delegate = e => {\n fireEvent(editor, eventName, e);\n };\n DOM$2.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n const EditorObservable = {\n ...Observable,\n bindPendingEventDelegates() {\n const self = this;\n Tools.each(self._pendingNativeEvents, name => {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent(name, state) {\n const 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 && self.delegates) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents() {\n const self = this;\n const body = self.getBody();\n const dom = self.dom;\n if (self.delegates) {\n each$d(self.delegates, (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 const stringListProcessor = value => {\n if (isString(value)) {\n return {\n value: value.split(/[ ,]/),\n valid: true\n };\n } else if (isArrayOf(value, isString)) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: `The value must be a string[] or a comma/space separated string.`\n };\n }\n };\n const getBuiltInProcessor = type => {\n const validator = (() => {\n switch (type) {\n case 'array':\n return isArray$1;\n case 'boolean':\n return isBoolean;\n case 'function':\n return isFunction;\n case 'number':\n return isNumber;\n case 'object':\n return isObject;\n case 'string':\n return isString;\n case 'string[]':\n return stringListProcessor;\n case 'object[]':\n return val => isArrayOf(val, isObject);\n case 'regexp':\n return val => is$4(val, RegExp);\n default:\n return always;\n }\n })();\n return value => processValue(value, validator, `The value must be a ${ type }.`);\n };\n const isBuiltInSpec = spec => isString(spec.processor);\n const getErrorMessage = (message, result) => {\n const additionalText = isEmpty$3(result.message) ? '' : `. ${ result.message }`;\n return message + additionalText;\n };\n const isValidResult = result => result.valid;\n const processValue = (value, processor, message = '') => {\n const result = processor(value);\n if (isBoolean(result)) {\n return result ? {\n value: value,\n valid: true\n } : {\n valid: false,\n message\n };\n } else {\n return result;\n }\n };\n const processDefaultValue = (name, defaultValue, processor) => {\n if (!isUndefined(defaultValue)) {\n const result = processValue(defaultValue, processor);\n if (isValidResult(result)) {\n return result.value;\n } else {\n console.error(getErrorMessage(`Invalid default value passed for the \"${ name }\" option`, result));\n }\n }\n return undefined;\n };\n const create$5 = (editor, initialOptions) => {\n const registry = {};\n const values = {};\n const setValue = (name, value, processor) => {\n const result = processValue(value, processor);\n if (isValidResult(result)) {\n values[name] = result.value;\n return true;\n } else {\n console.warn(getErrorMessage(`Invalid value passed for the ${ name } option`, result));\n return false;\n }\n };\n const register = (name, spec) => {\n const processor = isBuiltInSpec(spec) ? getBuiltInProcessor(spec.processor) : spec.processor;\n const defaultValue = processDefaultValue(name, spec.default, processor);\n registry[name] = {\n ...spec,\n default: defaultValue,\n processor\n };\n const initValue = get$a(values, name).orThunk(() => get$a(initialOptions, name));\n initValue.each(value => setValue(name, value, processor));\n };\n const isRegistered = name => has$2(registry, name);\n const get = name => get$a(values, name).orThunk(() => get$a(registry, name).map(spec => spec.default)).getOrUndefined();\n const set = (name, value) => {\n if (!isRegistered(name)) {\n console.warn(`\"${ name }\" is not a registered option. Ensure the option has been registered before setting a value.`);\n return false;\n } else {\n const spec = registry[name];\n if (spec.immutable) {\n console.error(`\"${ name }\" is an immutable option and cannot be updated`);\n return false;\n } else {\n return setValue(name, value, spec.processor);\n }\n }\n };\n const unset = name => {\n const registered = isRegistered(name);\n if (registered) {\n delete values[name];\n }\n return registered;\n };\n const isSet = name => has$2(values, name);\n return {\n register,\n isRegistered,\n get,\n set,\n unset,\n isSet\n };\n };\n\n const defaultModes = [\n 'design',\n 'readonly'\n ];\n const switchToMode = (editor, activeMode, availableModes, mode) => {\n const oldMode = availableModes[activeMode.get()];\n const 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 const setMode = (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', () => switchToMode(editor, activeMode, availableModes, mode));\n }\n };\n const registerMode = (availableModes, mode, api) => {\n if (contains$2(defaultModes, mode)) {\n throw new Error(`Cannot override default mode ${ mode }`);\n }\n return {\n ...availableModes,\n [mode]: {\n ...api,\n deactivate: () => {\n try {\n api.deactivate();\n } catch (e) {\n console.error(`problem while deactivating editor mode ${ mode }:`, e);\n }\n }\n }\n };\n };\n\n const create$4 = editor => {\n const activeMode = Cell('design');\n const 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: () => isReadOnly(editor),\n set: mode => setMode(editor, availableModes.get(), activeMode, mode),\n get: () => activeMode.get(),\n register: (mode, api) => {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n const each$2 = Tools.each, explode = Tools.explode;\n const 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 const modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n const isModifier = key => key in modifierNames;\n const parseShortcut = pattern => {\n const shortcut = {};\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n each$2(explode(pattern.toLowerCase(), '+'), value => {\n if (isModifier(value)) {\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 const id = [shortcut.keyCode];\n let key;\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 (isMac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (isMac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n class Shortcuts {\n constructor(editor) {\n this.shortcuts = {};\n this.pendingPatterns = [];\n this.editor = editor;\n const self = this;\n editor.on('keyup keypress keydown', e => {\n if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$2(self.shortcuts, 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 }\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 add(pattern, desc, cmdFunc, scope) {\n const self = this;\n const func = self.normalizeCommandFunc(cmdFunc);\n each$2(explode(Tools.trim(pattern)), pattern => {\n const shortcut = self.createShortcut(pattern, desc, func, scope);\n self.shortcuts[shortcut.id] = shortcut;\n });\n return true;\n }\n remove(pattern) {\n const 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 normalizeCommandFunc(cmdFunc) {\n const self = this;\n const cmd = cmdFunc;\n if (typeof cmd === 'string') {\n return () => {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n return () => {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n } else {\n return cmd;\n }\n }\n createShortcut(pattern, desc, cmdFunc, scope) {\n const shortcuts = Tools.map(explode(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 hasModifier(e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n }\n isFunctionKey(e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n }\n matchShortcut(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 executeShortcutAction(shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n }\n }\n\n const create$3 = () => {\n const buttons = {};\n const menuItems = {};\n const popups = {};\n const icons = {};\n const contextMenus = {};\n const contextToolbars = {};\n const sidebars = {};\n const views = {};\n const add = (collection, type) => (name, spec) => {\n collection[name.toLowerCase()] = {\n ...spec,\n type\n };\n };\n const addIcon = (name, svgData) => icons[name.toLowerCase()] = svgData;\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 addView: add(views, 'views'),\n addIcon,\n getAll: () => ({\n buttons,\n menuItems,\n icons,\n popups,\n contextMenus,\n contextToolbars,\n sidebars,\n views\n })\n };\n };\n\n const registry = () => {\n const 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 addView: bridge.addView,\n getAll: bridge.getAll\n };\n };\n\n const DOM$1 = DOMUtils.DOM;\n const extend = Tools.extend, each$1 = Tools.each;\n class Editor {\n constructor(id, options, editorManager) {\n this.plugins = {};\n this.contentCSS = [];\n this.contentStyles = [];\n this.loadedCSS = {};\n this.isNotDirty = false;\n this.composing = false;\n this.destroyed = false;\n this.hasHiddenInput = false;\n this.iframeElement = null;\n this.initialized = false;\n this.readonly = false;\n this.removed = false;\n this.startContent = '';\n this._pendingNativeEvents = [];\n this._skinLoaded = false;\n this.editorManager = editorManager;\n this.documentBaseUrl = editorManager.documentBaseURL;\n extend(this, EditorObservable);\n const self = this;\n this.id = id;\n this.hidden = false;\n const normalizedOptions = normalizeOptions(editorManager.defaultOptions, options);\n this.options = create$5(self, normalizedOptions);\n register$7(self);\n const getOption = this.options.get;\n if (getOption('deprecation_warnings')) {\n logWarnings(options, normalizedOptions);\n }\n const suffix = getOption('suffix');\n if (suffix) {\n editorManager.suffix = suffix;\n }\n this.suffix = editorManager.suffix;\n const baseUrl = getOption('base_url');\n if (baseUrl) {\n editorManager._setBaseUrl(baseUrl);\n }\n this.baseUri = editorManager.baseURI;\n const referrerPolicy = getReferrerPolicy(self);\n if (referrerPolicy) {\n ScriptLoader.ScriptLoader._setReferrerPolicy(referrerPolicy);\n DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(referrerPolicy);\n }\n const contentCssCors = hasContentCssCors(self);\n if (isNonNullable(contentCssCors)) {\n DOMUtils.DOM.styleSheetLoader._setContentCssCors(contentCssCors);\n }\n AddOnManager.languageLoad = getOption('language_load');\n AddOnManager.baseURL = editorManager.baseURL;\n this.setDirty(false);\n this.documentBaseURI = new URI(getDocumentBaseUrl(self), { base_uri: this.baseUri });\n this.baseURI = this.baseUri;\n this.inline = isInline(self);\n this.hasVisual = isVisualAidsEnabled(self);\n this.shortcuts = new Shortcuts(this);\n this.editorCommands = new EditorCommands(this);\n registerCommands(this);\n const cacheSuffix = getOption('cache_suffix');\n if (cacheSuffix) {\n Env.cacheSuffix = cacheSuffix.replace(/^[\\?\\&]+/, '');\n }\n this.ui = {\n registry: registry(),\n styleSheetLoader: undefined,\n show: noop,\n hide: noop,\n setEnabled: noop,\n isEnabled: always\n };\n this.mode = create$4(self);\n editorManager.dispatch('SetupEditor', { editor: this });\n const setupCallback = getSetupCallback(self);\n if (isFunction(setupCallback)) {\n setupCallback.call(self, self);\n }\n }\n render() {\n render(this);\n }\n focus(skipFocus) {\n this.execCommand('mceFocus', false, skipFocus);\n }\n hasFocus() {\n return hasFocus(this);\n }\n translate(text) {\n return I18n.translate(text);\n }\n getParam(name, defaultVal, type) {\n const options = this.options;\n if (!options.isRegistered(name)) {\n if (isNonNullable(type)) {\n options.register(name, {\n processor: type,\n default: defaultVal\n });\n } else {\n options.register(name, {\n processor: always,\n default: defaultVal\n });\n }\n }\n return !options.isSet(name) && !isUndefined(defaultVal) ? defaultVal : options.get(name);\n }\n hasPlugin(name, loaded) {\n const hasPlugin = contains$2(getPlugins(this), name);\n if (hasPlugin) {\n return loaded ? PluginManager.get(name) !== undefined : true;\n } else {\n return false;\n }\n }\n nodeChanged(args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n }\n addCommand(name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n }\n addQueryStateHandler(name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n }\n addQueryValueHandler(name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n }\n addShortcut(pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n }\n execCommand(cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n }\n queryCommandState(cmd) {\n return this.editorCommands.queryCommandState(cmd);\n }\n queryCommandValue(cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n }\n queryCommandSupported(cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n }\n show() {\n const 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.dispatch('show');\n }\n }\n hide() {\n const self = this;\n if (!self.hidden) {\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.dispatch('hide');\n }\n }\n isHidden() {\n return this.hidden;\n }\n setProgressState(state, time) {\n this.dispatch('ProgressState', {\n state,\n time\n });\n }\n load(args = {}) {\n const self = this;\n const elm = self.getElement();\n if (self.removed) {\n return '';\n }\n if (elm) {\n const loadArgs = {\n ...args,\n load: true\n };\n const value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n const html = self.setContent(value, loadArgs);\n if (!loadArgs.no_events) {\n self.dispatch('LoadContent', {\n ...loadArgs,\n element: elm\n });\n }\n return html;\n } else {\n return '';\n }\n }\n save(args = {}) {\n const self = this;\n let elm = self.getElement();\n if (!elm || !self.initialized || self.removed) {\n return '';\n }\n const getArgs = {\n ...args,\n save: true,\n element: elm\n };\n let html = self.getContent(getArgs);\n const saveArgs = {\n ...getArgs,\n content: html\n };\n if (!saveArgs.no_events) {\n self.dispatch('SaveContent', saveArgs);\n }\n if (saveArgs.format === 'raw') {\n self.dispatch('RawSaveContent', saveArgs);\n }\n html = saveArgs.content;\n if (!isTextareaOrInput(elm)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n const form = DOM$1.getParent(self.id, 'form');\n if (form) {\n each$1(form.elements, elm => {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n } else {\n return true;\n }\n });\n }\n } else {\n elm.value = html;\n }\n saveArgs.element = getArgs.element = elm = null;\n if (saveArgs.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n }\n setContent(content, args) {\n return setContent(this, content, args);\n }\n getContent(args) {\n return getContent(this, args);\n }\n insertContent(content, args) {\n if (args) {\n content = extend({ content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n }\n resetContent(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 isDirty() {\n return !this.isNotDirty;\n }\n setDirty(state) {\n const oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.dispatch('dirty');\n }\n }\n getContainer() {\n const self = this;\n if (!self.container) {\n self.container = self.editorContainer || DOM$1.get(self.id + '_parent');\n }\n return self.container;\n }\n getContentAreaContainer() {\n return this.contentAreaContainer;\n }\n getElement() {\n if (!this.targetElm) {\n this.targetElm = DOM$1.get(this.id);\n }\n return this.targetElm;\n }\n getWin() {\n const self = this;\n if (!self.contentWindow) {\n const elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n }\n getDoc() {\n const self = this;\n if (!self.contentDocument) {\n const win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n }\n getBody() {\n var _a, _b;\n const doc = this.getDoc();\n return (_b = (_a = this.bodyElement) !== null && _a !== void 0 ? _a : doc === null || doc === void 0 ? void 0 : doc.body) !== null && _b !== void 0 ? _b : null;\n }\n convertURL(url, name, elm) {\n const self = this, getOption = self.options.get;\n const urlConverterCallback = getUrlConverterCallback(self);\n if (isFunction(urlConverterCallback)) {\n return urlConverterCallback.call(self, url, elm, true, name);\n }\n if (!getOption('convert_urls') || elm === 'link' || isObject(elm) && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n if (getOption('relative_urls')) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, getOption('remove_script_host'));\n return url;\n }\n addVisual(elm) {\n addVisual(this, elm);\n }\n remove() {\n remove$1(this);\n }\n destroy(automatic) {\n destroy(this, automatic);\n }\n uploadImages() {\n return this.editorUpload.uploadImages();\n }\n _scanForImages() {\n return this.editorUpload.scanForImages();\n }\n }\n\n const DOM = DOMUtils.DOM;\n const each = Tools.each;\n let boundGlobalEvents = false;\n let beforeUnloadDelegate;\n let editors = [];\n const globalEventDelegate = e => {\n const type = e.type;\n each(EditorManager.get(), editor => {\n switch (type) {\n case 'scroll':\n editor.dispatch('ScrollWindow', e);\n break;\n case 'resize':\n editor.dispatch('ResizeWindow', e);\n break;\n }\n });\n };\n const toggleGlobalEvents = state => {\n if (state !== boundGlobalEvents) {\n const DOM = DOMUtils.DOM;\n if (state) {\n DOM.bind(window, 'resize', globalEventDelegate);\n DOM.bind(window, 'scroll', globalEventDelegate);\n } else {\n DOM.unbind(window, 'resize', globalEventDelegate);\n DOM.unbind(window, 'scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n const removeEditorFromList = targetEditor => {\n const oldEditors = editors;\n editors = filter$5(editors, 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 const purgeDestroyedEditor = 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 }\n };\n const isQuirksMode = document.compatMode !== 'CSS1Compat';\n const EditorManager = {\n ...Observable,\n baseURI: null,\n baseURL: null,\n defaultOptions: {},\n documentBaseURL: null,\n suffix: null,\n majorVersion: '6',\n minorVersion: '3.1',\n releaseDate: '2022-12-06',\n i18n: I18n,\n activeEditor: null,\n focusedEditor: null,\n setup() {\n const self = this;\n let baseURL = '';\n let suffix = '';\n let documentBaseURL = URI.getDocumentBaseUrl(document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n const preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n const scripts = document.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n const 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 const 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$v(self);\n },\n overrideDefaults(defaultOptions) {\n const baseUrl = defaultOptions.base_url;\n if (baseUrl) {\n this._setBaseUrl(baseUrl);\n }\n const suffix = defaultOptions.suffix;\n if (suffix) {\n this.suffix = suffix;\n }\n this.defaultOptions = defaultOptions;\n const pluginBaseUrls = defaultOptions.plugin_base_urls;\n if (pluginBaseUrls !== undefined) {\n each$d(pluginBaseUrls, (pluginBaseUrl, pluginName) => {\n AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n });\n }\n },\n init(options) {\n const self = this;\n let result;\n const 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 const isInvalidInlineTarget = (options, elm) => options.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n const createId = elm => {\n let id = elm.id;\n if (!id) {\n id = get$a(elm, 'name').filter(name => !DOM.get(name)).getOrThunk(DOM.uniqueId);\n elm.setAttribute('id', id);\n }\n return id;\n };\n const execCallback = name => {\n const callback = options[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, []);\n };\n const findTargets = options => {\n if (Env.browser.isIE() || Env.browser.isEdge()) {\n initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tiny.cloud/docs/tinymce/6/support/#supportedwebbrowsers');\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 } else if (isString(options.selector)) {\n return DOM.select(options.selector);\n } else if (isNonNullable(options.target)) {\n return [options.target];\n } else {\n return [];\n }\n };\n let provideResults = editors => {\n result = editors;\n };\n const initEditors = () => {\n let initCount = 0;\n const editors = [];\n let targets;\n const createEditor = (id, options, targetElm) => {\n const editor = new Editor(id, options, self);\n editors.push(editor);\n editor.on('init', () => {\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 = unique$1(findTargets(options));\n Tools.each(targets, elm => {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, elm => {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each(targets, elm => {\n if (isInvalidInlineTarget(options, elm)) {\n initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), options, elm);\n }\n });\n }\n };\n DOM.bind(window, 'ready', initEditors);\n return new Promise(resolve => {\n if (result) {\n resolve(result);\n } else {\n provideResults = editors => {\n resolve(editors);\n };\n }\n });\n },\n get(id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find$2(editors, 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(editor) {\n const self = this;\n const existingEditor = self.get(editor.id);\n if (existingEditor === editor) {\n return editor;\n }\n if (existingEditor === null) {\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.dispatch('AddEditor', { editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = e => {\n const event = self.dispatch('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(id, options) {\n return this.add(new Editor(id, options, this));\n },\n remove(selector) {\n const self = this;\n let editor;\n if (!selector) {\n for (let i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each(DOM.select(selector), 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.dispatch('RemoveEditor', { 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(cmd, ui, value) {\n var _a;\n const self = this;\n const editorId = isObject(value) ? (_a = value.id) !== null && _a !== void 0 ? _a : value.index : value;\n switch (cmd) {\n case 'mceAddEditor': {\n if (!self.get(editorId)) {\n const editorOptions = value.options;\n new Editor(editorId, editorOptions, self).render();\n }\n return true;\n }\n case 'mceRemoveEditor': {\n const editor = self.get(editorId);\n if (editor) {\n editor.remove();\n }\n return true;\n }\n case 'mceToggleEditor': {\n const editor = self.get(editorId);\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 }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: () => {\n each(editors, editor => {\n editor.save();\n });\n },\n addI18n: (code, items) => {\n I18n.add(code, items);\n },\n translate: text => {\n return I18n.translate(text);\n },\n setActive(editor) {\n const activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.dispatch('deactivate', { relatedTarget: editor });\n }\n editor.dispatch('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n },\n _setBaseUrl(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 const setup = () => {\n const dataValue = value$2();\n const FakeClipboardItem = items => ({\n items,\n types: keys(items),\n getType: type => get$a(items, type).getOrUndefined()\n });\n const write = data => {\n dataValue.set(data);\n };\n const read = () => dataValue.get().getOrUndefined();\n const clear = dataValue.clear;\n return {\n FakeClipboardItem,\n write,\n read,\n clear\n };\n };\n const FakeClipboard = setup();\n\n const min = Math.min, max = Math.max, round = Math.round;\n const relativePosition = (rect, targetRect, rel) => {\n let x = targetRect.x;\n let y = targetRect.y;\n const w = rect.w;\n const h = rect.h;\n const targetW = targetRect.w;\n const targetH = targetRect.h;\n const 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(targetH / 2);\n }\n if (relChars[1] === 'c') {\n x += round(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(h / 2);\n }\n if (relChars[4] === 'c') {\n x -= round(w / 2);\n }\n return create$2(x, y, w, h);\n };\n const findBestRelativePosition = (rect, targetRect, constrainRect, rels) => {\n for (let i = 0; i < rels.length; i++) {\n const 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 const inflate = (rect, w, h) => {\n return create$2(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n const intersect = (rect, cropRect) => {\n const x1 = max(rect.x, cropRect.x);\n const y1 = max(rect.y, cropRect.y);\n const x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n const y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$2(x1, y1, x2 - x1, y2 - y1);\n };\n const clamp = (rect, clampRect, fixedSize) => {\n let x1 = rect.x;\n let y1 = rect.y;\n let x2 = rect.x + rect.w;\n let y2 = rect.y + rect.h;\n const cx2 = clampRect.x + clampRect.w;\n const cy2 = clampRect.y + clampRect.h;\n const underflowX1 = max(0, clampRect.x - x1);\n const underflowY1 = max(0, clampRect.y - y1);\n const overflowX2 = max(0, x2 - cx2);\n const overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$2(x1, y1, x2 - x1, y2 - y1);\n };\n const create$2 = (x, y, w, h) => {\n return {\n x,\n y,\n w,\n h\n };\n };\n const fromClientRect = clientRect => {\n return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n const Rect = {\n inflate,\n relativePosition,\n findBestRelativePosition,\n intersect,\n clamp,\n create: create$2,\n fromClientRect\n };\n\n const awaiter = (resolveCb, rejectCb, timeout = 1000) => {\n let done = false;\n let timer = null;\n const complete = completer => (...args) => {\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 const resolve = complete(resolveCb);\n const reject = complete(rejectCb);\n const start = (...args) => {\n if (!done && timer === null) {\n timer = setTimeout(() => reject.apply(null, args), timeout);\n }\n };\n return {\n start,\n resolve,\n reject\n };\n };\n const create$1 = () => {\n const tasks = {};\n const resultFns = {};\n const load = (id, url) => {\n const loadErrMsg = `Script at URL \"${ url }\" failed to load`;\n const 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 const task = new Promise((resolve, reject) => {\n const waiter = awaiter(resolve, reject);\n resultFns[id] = waiter.resolve;\n ScriptLoader.ScriptLoader.loadScript(url).then(() => waiter.start(runErrMsg), () => waiter.reject(loadErrMsg));\n });\n tasks[id] = task;\n return task;\n }\n };\n const add = (id, data) => {\n if (resultFns[id] !== undefined) {\n resultFns[id](data);\n delete resultFns[id];\n }\n tasks[id] = Promise.resolve(data);\n };\n const unload = id => {\n delete tasks[id];\n };\n return {\n load,\n add,\n unload\n };\n };\n const Resource = create$1();\n\n const create = () => (() => {\n let data = {};\n let keys = [];\n const storage = {\n getItem: key => {\n const item = data[key];\n return item ? item : null;\n },\n setItem: (key, value) => {\n keys.push(key);\n data[key] = String(value);\n },\n key: index => {\n return keys[index];\n },\n removeItem: key => {\n keys = keys.filter(k => k === key);\n delete data[key];\n },\n clear: () => {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: () => keys.length,\n configurable: false,\n enumerable: false\n });\n return storage;\n })();\n\n let localStorage;\n try {\n const 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 const publicApi = {\n geom: { Rect },\n util: {\n Delay,\n Tools,\n VK,\n URI,\n EventDispatcher,\n Observable,\n I18n,\n LocalStorage,\n ImageUploader\n },\n dom: {\n EventUtils,\n TreeWalker: DomTreeWalker,\n TextSeeker,\n DOMUtils,\n ScriptLoader,\n RangeUtils,\n Serializer: DomSerializer,\n StyleSheetLoader,\n ControlSelection,\n BookmarkManager,\n Selection: EditorSelection,\n Event: EventUtils.Event\n },\n html: {\n Styles,\n Entities,\n Node: AstNode,\n Schema,\n DomParser,\n Writer,\n Serializer: HtmlSerializer\n },\n Env,\n AddOnManager,\n Annotator,\n Formatter,\n UndoManager,\n EditorCommands,\n WindowManager,\n NotificationManager,\n EditorObservable,\n Shortcuts,\n Editor,\n FocusManager,\n EditorManager,\n DOM: DOMUtils.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager,\n ThemeManager,\n ModelManager,\n IconManager,\n Resource,\n FakeClipboard,\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 walk: Tools.walk,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix\n };\n const tinymce = Tools.extend(EditorManager, publicApi);\n\n const exportToModuleLoaders = tinymce => {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n const exportToWindowGlobal = tinymce => {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce);\n exportToModuleLoaders(tinymce);\n\n})();\n"],"sourceRoot":""}