{"version":3,"file":"tinymce_editor-CkWiXcpV.js","sources":["../../../node_modules/tinymce/tinymce.js","../../../node_modules/tinymce/icons/default/icons.js","../../../node_modules/tinymce/icons/default/index.js","../../../node_modules/tinymce/themes/silver/theme.js","../../../node_modules/tinymce/themes/silver/index.js","../../../node_modules/tinymce/models/dom/model.js","../../../node_modules/tinymce/models/dom/index.js","../../../node_modules/tinymce/plugins/advlist/plugin.js","../../../node_modules/tinymce/plugins/advlist/index.js","../../../node_modules/tinymce/plugins/autolink/plugin.js","../../../node_modules/tinymce/plugins/autolink/index.js","../../../node_modules/tinymce/plugins/lists/plugin.js","../../../node_modules/tinymce/plugins/lists/index.js","../../../node_modules/tinymce/plugins/link/plugin.js","../../../node_modules/tinymce/plugins/link/index.js","../../../node_modules/tinymce/plugins/charmap/plugin.js","../../../node_modules/tinymce/plugins/charmap/index.js","../../../node_modules/tinymce/plugins/preview/plugin.js","../../../node_modules/tinymce/plugins/preview/index.js","../../../node_modules/tinymce/plugins/anchor/plugin.js","../../../node_modules/tinymce/plugins/anchor/index.js","../../../node_modules/tinymce/plugins/searchreplace/plugin.js","../../../node_modules/tinymce/plugins/searchreplace/index.js","../../../node_modules/tinymce/plugins/visualblocks/plugin.js","../../../node_modules/tinymce/plugins/visualblocks/index.js","../../../node_modules/tinymce/plugins/code/plugin.js","../../../node_modules/tinymce/plugins/code/index.js","../../../node_modules/tinymce/plugins/fullscreen/plugin.js","../../../node_modules/tinymce/plugins/fullscreen/index.js","../../../node_modules/tinymce/plugins/media/plugin.js","../../../node_modules/tinymce/plugins/media/index.js","../../../node_modules/tinymce/plugins/autoresize/plugin.js","../../../node_modules/tinymce/plugins/autoresize/index.js","../../../app/frontend/entrypoints/tinymce_editor.js"],"sourcesContent":["/**\n * TinyMCE version 7.7.2 (2025-03-19)\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$2 = 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$2(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$2 = 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$1 = 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$1.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$1 = 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$4 = (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$4,\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$3 = (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$3(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$3(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$4 = 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$2 = (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$2 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform$4 = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$1 = () => platform$4();\n\n const userAgent = window.navigator.userAgent;\n const platform$3 = detect$1();\n const browser$3 = platform$3.browser;\n const os$1 = platform$3.os;\n const deviceType = platform$3.deviceType;\n const windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n const Env = {\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n documentMode: browser$3.isIE() ? document.documentMode || 7 : 10,\n cacheSuffix: null,\n container: null,\n canHaveCSP: !browser$3.isIE(),\n windowsPhone,\n browser: {\n current: browser$3.current,\n version: browser$3.version,\n isChromium: browser$3.isChromium,\n isEdge: browser$3.isEdge,\n isFirefox: browser$3.isFirefox,\n isIE: browser$3.isIE,\n isOpera: browser$3.isOpera,\n isSafari: browser$3.isSafari\n },\n os: {\n current: os$1.current,\n version: os$1.version,\n isAndroid: os$1.isAndroid,\n isChromeOS: os$1.isChromeOS,\n isFreeBSD: os$1.isFreeBSD,\n isiOS: os$1.isiOS,\n isLinux: os$1.isLinux,\n isMacOS: os$1.isMacOS,\n isSolaris: os$1.isSolaris,\n isWindows: os$1.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$3 = 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 = 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$3 = (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$3);\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$3,\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,\n extend: extend$3,\n walk: walk$4,\n resolve: resolve$3,\n explode: explode$3,\n _addCacheSuffix\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\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 const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n };\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 isHTMLElement$1 = element => isElement$7(element) && isPrototypeOf(element.dom);\n const isElement$7 = isType(ELEMENT);\n const isText$c = 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$4 = (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$9 = (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$4(element, attr, nu.join(' '));\n return true;\n };\n const remove$8 = (element, attr, id) => {\n const nu = filter$5(read$4(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$4(element, attr, nu.join(' '));\n } else {\n remove$9(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$7 = (element, clazz) => remove$8(element, 'class', clazz);\n const toggle$2 = (element, clazz) => {\n if (contains$2(get$8(element), clazz)) {\n return remove$7(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$9(element, 'class');\n }\n };\n const remove$6 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$7(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 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 getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\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 (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$c(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 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$4 = (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$4, 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$2 = (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$3 = (scope, selector, isRoot) => ancestor$4(scope, e => is$1(e, selector), isRoot);\n const descendant$1 = (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$3, scope, selector, isRoot);\n };\n\n const closest$2 = target => closest$3(target, '[contenteditable]');\n const isEditable$2 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest$2(element).fold(constant(assumeEditable), editable => getRaw$1(editable) === 'true');\n }\n };\n const getRaw$1 = element => element.dom.contentEditable;\n const set$3 = (element, editable) => {\n element.dom.contentEditable = editable ? 'true' : 'false';\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$2 = (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(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (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(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$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$2(getOpt(element, 'style').map(trim$4), '')) {\n remove$9(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$4(rogue);\n });\n };\n const remove$4 = 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$4(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$1 = (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$1().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$1().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 const descendants = (scope, selector) => all(selector, scope);\n\n const ancestor$2 = (scope, predicate, isRoot) => ancestor$4(scope, predicate, isRoot).isSome();\n const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n const descendant = (scope, predicate) => descendant$2(scope, predicate).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 zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n const isZwsp$2 = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n const isWhitespaceText = text => whiteSpaceRegExp.test(text);\n const isZwsp$1 = text => {\n for (const c of text) {\n if (!isZwsp$2(c)) {\n return false;\n }\n }\n return true;\n };\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 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 isHTMLElement = node => isElement$6(node) && isHTMLElement$1(SugarElement.fromDom(node));\n const isSVGElement = node => isElement$6(node) && node.namespaceURI === 'http://www.w3.org/2000/svg';\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 isBogus$1 = node => isElement$6(node) && node.hasAttribute('data-mce-bogus');\n const isBogusAll = 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 (isHTMLElement(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$b = 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$b = hasContentEditableState('false');\n const isEditingHost = node => isHTMLElement(node) && node.isContentEditable && isNonNullable(node.parentElement) && !node.parentElement.isContentEditable;\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 const isDetails = matchNodeName('details');\n const isSummary$1 = matchNodeName('summary');\n\n const defaultOptionValues = {\n skipBogus: true,\n includeZwsp: false,\n checkRootAsContent: false\n };\n const hasWhitespacePreserveParent = (node, rootNode, schema) => {\n const rootElement = SugarElement.fromDom(rootNode);\n const startNode = SugarElement.fromDom(node);\n const whitespaceElements = schema.getWhitespaceElements();\n const predicate = node => has$2(whitespaceElements, name(node));\n return ancestor$2(startNode, predicate, curry(eq, rootElement));\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 isNonEmptyElement$1 = (node, schema) => {\n return isElement$6(node) && has$2(schema.getNonEmptyElements(), node.nodeName);\n };\n const isBookmark = hasAttribute('data-mce-bookmark');\n const hasNonEditableParent = node => parentElement(SugarElement.fromDom(node)).exists(parent => !isEditable$2(parent));\n const isWhitespace$1 = (node, rootNode, schema) => isWhitespaceText(node.data) && !hasWhitespacePreserveParent(node, rootNode, schema);\n const isText$a = (node, rootNode, schema, options) => isText$b(node) && !isWhitespace$1(node, rootNode, schema) && (!options.includeZwsp || !isZwsp$1(node.data));\n const isContentNode = (schema, node, rootNode, options) => {\n return isFunction(options.isContent) && options.isContent(node) || isNonEmptyElement$1(node, schema) || isBookmark(node) || isNamedAnchor(node) || isText$a(node, rootNode, schema, options) || isContentEditableFalse$b(node) || isContentEditableTrue$3(node) && hasNonEditableParent(node);\n };\n const isEmptyNode = (schema, targetNode, opts) => {\n const options = {\n ...defaultOptionValues,\n ...opts\n };\n if (options.checkRootAsContent) {\n if (isContentNode(schema, targetNode, targetNode, options)) {\n return false;\n }\n }\n let node = targetNode.firstChild;\n let brCount = 0;\n if (!node) {\n return true;\n }\n const walker = new DomTreeWalker(node, targetNode);\n do {\n if (options.skipBogus && isElement$6(node)) {\n const bogusValue = node.getAttribute('data-mce-bogus');\n if (bogusValue) {\n node = walker.next(bogusValue === 'all');\n continue;\n }\n }\n if (isComment(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBr$6(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContentNode(schema, node, targetNode, options)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n };\n const isEmpty$2 = (schema, elm, options) => {\n return isEmptyNode(schema, elm.dom, {\n checkRootAsContent: true,\n ...options\n });\n };\n const isContent$1 = (schema, node, options) => {\n return isContentNode(schema, node, node, {\n includeZwsp: defaultOptionValues.includeZwsp,\n ...options\n });\n };\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 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 nodeNameToNamespaceType = name => {\n const lowerCaseName = name.toLowerCase();\n if (lowerCaseName === 'svg') {\n return 'svg';\n } else if (lowerCaseName === 'math') {\n return 'math';\n } else {\n return 'html';\n }\n };\n const isNonHtmlElementRootName = name => nodeNameToNamespaceType(name) !== 'html';\n const isNonHtmlElementRoot = node => isNonHtmlElementRootName(node.nodeName);\n const toScopeType = node => nodeNameToNamespaceType(node.nodeName);\n const namespaceElements = [\n 'svg',\n 'math'\n ];\n const createNamespaceTracker = () => {\n const currentScope = value$2();\n const current = () => currentScope.get().map(toScopeType).getOr('html');\n const track = node => {\n if (isNonHtmlElementRoot(node)) {\n currentScope.set(node);\n } else if (currentScope.get().exists(scopeNode => !scopeNode.contains(node))) {\n currentScope.clear();\n }\n return current();\n };\n const reset = () => {\n currentScope.clear();\n };\n return {\n track,\n current,\n reset\n };\n };\n\n const transparentBlockAttr = 'data-mce-block';\n const elementNames = map => filter$5(keys(map), key => !/[A-Z]/.test(key));\n const makeSelectorFromSchemaMap = map => map$3(elementNames(map), name => {\n const escapedName = CSS.escape(name);\n return `${ escapedName }:` + map$3(namespaceElements, ns => `not(${ ns } ${ escapedName })`).join(':');\n }).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 = (schema, el, leftSide) => {\n var _a;\n const childPropertyName = leftSide ? 'lastChild' : 'firstChild';\n for (let child = el[childPropertyName]; child; child = child[childPropertyName]) {\n if (isEmptyNode(schema, child, { checkRootAsContent: true })) {\n (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);\n return;\n }\n }\n };\n const split$2 = (schema, 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(schema, beforeFragment, true);\n range.setStartAfter(splitElm);\n range.setEndAfter(parentElm);\n const afterFragment = range.extractContents();\n trimEdge(schema, afterFragment, false);\n if (!isEmptyNode(schema, beforeFragment, { checkRootAsContent: true })) {\n parentNode.insertBefore(beforeFragment, parentElm);\n }\n if (!isEmptyNode(schema, splitElm, { checkRootAsContent: true })) {\n parentNode.insertBefore(splitElm, parentElm);\n }\n if (!isEmptyNode(schema, afterFragment, { checkRootAsContent: true })) {\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$4(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$4(child, isBlock, isRoot).each(parentBlock => {\n split$2(schema, parentBlock.dom, child.dom);\n });\n });\n stateScope.each(scope => updateBlockStateOnChildren(schema, scope.dom));\n }\n });\n });\n };\n const unwrapInvalidChildren = (schema, scope, transparentBlocks) => {\n each$e([\n ...transparentBlocks,\n ...isTransparentBlock(schema, scope) ? [scope] : []\n ], block => each$e(descendants(SugarElement.fromDom(block), block.nodeName.toLowerCase()), elm => {\n if (isTransparentInline(schema, elm.dom)) {\n unwrap(elm);\n }\n }));\n };\n const updateChildren = (schema, scope) => {\n const transparentBlocks = updateBlockStateOnChildren(schema, scope);\n splitInvalidChildren(schema, scope, transparentBlocks);\n unwrapInvalidChildren(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 isTransparentInline = (schema, node) => isTransparentElement(schema, node) && !hasBlockAttr(node);\n const isTransparentAstBlock = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isString(node.attr(transparentBlockAttr));\n\n const browser$2 = detect$1().browser;\n const firstElement = nodes => find$2(nodes, isElement$7);\n const getTableCaptionDeltaY = elm => {\n if (browser$2.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 _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$1(styleContainer, '#' + id).each(remove$4);\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 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 if (settings.contentCssCors) {\n set$4(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set$4(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = passed;\n link.onerror = failed;\n addStyle(linkElem);\n set$4(linkElem, 'href', urlWithSuffix);\n });\n const loadRawCss = (key, css) => {\n const state = getOrCreateState(key);\n loadedStates[key] = state;\n state.count++;\n const styleElem = SugarElement.fromTag('style', doc.dom);\n setAll$1(styleElem, {\n 'rel': 'stylesheet',\n 'type': 'text/css',\n 'id': state.id,\n 'data-mce-key': key\n });\n styleElem.dom.innerHTML = css;\n addStyle(styleElem);\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 unloadRawCss = key => {\n get$a(loadedStates, key).each(state => {\n const count = --state.count;\n if (count === 0) {\n delete loadedStates[key];\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 loadRawCss,\n loadAll,\n unload,\n unloadRawCss,\n unloadAll,\n _setReferrerPolicy,\n _setContentCssCors\n };\n };\n\n const create$c = () => {\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$c();\n\n const isSpan = node => node.nodeName.toLowerCase() === 'span';\n const isInlineContent = (node, schema) => isNonNullable(node) && (isContent$1(schema, node) || schema.isInline(node.nodeName.toLowerCase()));\n const surroundedByInlineContent = (node, root, schema) => {\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, schema);\n const nextIsInline = isUndefined(next) || isInlineContent(next, schema);\n return prevIsInline && nextIsInline;\n };\n const isBookmarkNode$2 = node => isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n const isKeepTextNode = (node, root, schema) => isText$b(node) && node.data.length > 0 && surroundedByInlineContent(node, root, schema);\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, schema, 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], schema, 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(schema, node) && !isKeepElement(node) && !isKeepTextNode(node, rootNode, schema)) {\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 split$1 = (items, delim) => {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n const patternToRegExp = str => new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n const isRegExp$1 = obj => isObject(obj) && obj.source && Object.prototype.toString.call(obj) === '[object RegExp]';\n const deepCloneElementRule = obj => {\n const helper = value => {\n if (isArray$1(value)) {\n return map$3(value, helper);\n } else if (isRegExp$1(value)) {\n return new RegExp(value.source, value.flags);\n } else if (isObject(value)) {\n return map$2(value, helper);\n } else {\n return value;\n }\n };\n return helper(obj);\n };\n\n const parseCustomElementsRules = value => {\n const customElementRegExp = /^(~)?(.+)$/;\n return bind$3(split$1(value, ','), 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 return [{\n cloneName,\n name\n }];\n } else {\n return [];\n }\n });\n };\n\n const getGlobalAttributeSet = type => {\n return Object.freeze([\n 'id',\n 'accesskey',\n 'class',\n 'dir',\n 'lang',\n 'style',\n 'tabindex',\n 'title',\n 'role',\n ...type !== 'html4' ? [\n 'contenteditable',\n 'contextmenu',\n 'draggable',\n 'dropzone',\n 'hidden',\n 'spellcheck',\n 'translate',\n 'itemprop',\n 'itemscope',\n 'itemtype'\n ] : [],\n ...type !== 'html5-strict' ? ['xml:lang'] : []\n ]);\n };\n\n const getElementSetsAsStrings = type => {\n let blockContent;\n let phrasingContent;\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 blockContent += ' article aside details dialog figure main header footer hgroup section nav ' + transparentContent;\n phrasingContent += ' audio canvas command data datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen svg';\n }\n if (type !== 'html5-strict') {\n const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n const html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n }\n const flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n return {\n blockContent,\n phrasingContent,\n flowContent\n };\n };\n const getElementSets = type => {\n const {blockContent, phrasingContent, flowContent} = getElementSetsAsStrings(type);\n const toArr = value => {\n return Object.freeze(value.split(' '));\n };\n return Object.freeze({\n blockContent: toArr(blockContent),\n phrasingContent: toArr(phrasingContent),\n flowContent: toArr(flowContent)\n });\n };\n\n const cachedSets = {\n 'html4': cached(() => getElementSets('html4')),\n 'html5': cached(() => getElementSets('html5')),\n 'html5-strict': cached(() => getElementSets('html5-strict'))\n };\n const getElementsPreset = (type, name) => {\n const {blockContent, phrasingContent, flowContent} = cachedSets[type]();\n if (name === 'blocks') {\n return Optional.some(blockContent);\n } else if (name === 'phrasing') {\n return Optional.some(phrasingContent);\n } else if (name === 'flow') {\n return Optional.some(flowContent);\n } else {\n return Optional.none();\n }\n };\n\n const makeSchema = type => {\n const globalAttributes = getGlobalAttributeSet(type);\n const {phrasingContent, flowContent} = getElementSetsAsStrings(type);\n const schema = {};\n const addElement = (name, attributes, children) => {\n schema[name] = {\n attributes: mapToObject(attributes, constant({})),\n attributesOrder: attributes,\n children: mapToObject(children, constant({}))\n };\n };\n const add = (name, attributes = '', children = '') => {\n const childNames = split$1(children);\n const names = split$1(name);\n let ni = names.length;\n const allAttributes = [\n ...globalAttributes,\n ...split$1(attributes)\n ];\n while (ni--) {\n addElement(names[ni], allAttributes.slice(), childNames);\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 (type !== 'html5-strict') {\n const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n each$e(split$1(html4PhrasingContent), name => {\n add(name, '', phrasingContent);\n });\n const html4BlockContent = 'center dir isindex noframes';\n each$e(split$1(html4BlockContent), name => {\n add(name, '', flowContent);\n });\n }\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('dd div', '', flowContent);\n add('address dt caption', '', type === 'html4' ? phrasingContent : 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', type === 'html4' ? phrasingContent : 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 bdi', '', phrasingContent);\n add('summary', '', [\n phrasingContent,\n 'h1 h2 h3 h4 h5 h6'\n ].join(' '));\n add('canvas', 'width height', flowContent);\n add('data', 'value', phrasingContent);\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 addElement('svg', 'id tabindex lang xml:space class style x y width height viewBox preserveAspectRatio zoomAndPan transform'.split(' '), []);\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 referrerpolicy');\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$e(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 return schema;\n };\n\n const prefixToOperation = prefix => prefix === '-' ? 'remove' : 'add';\n const parseValidChild = name => {\n const validChildRegExp = /^(@?)([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 return Optional.from(validChildRegExp.exec(name)).map(matches => ({\n preset: matches[1] === '@',\n name: matches[2]\n }));\n };\n const parseValidChildrenRules = value => {\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 return bind$3(split$1(value, ','), rule => {\n const matches = childRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n const operation = prefix ? prefixToOperation(prefix) : 'replace';\n const name = matches[2];\n const validChildren = bind$3(split$1(matches[3], '|'), validChild => parseValidChild(validChild).toArray());\n return [{\n operation,\n name,\n validChildren\n }];\n } else {\n return [];\n }\n });\n };\n\n const parseValidElementsAttrDataIntoElement = (attrData, targetElement) => {\n const attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/;\n const hasPatternsRegExp = /[*?+]/;\n const {attributes, attributesOrder} = targetElement;\n return each$e(split$1(attrData, '|'), rule => {\n const matches = attrRuleRegExp.exec(rule);\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 targetElement.attributesRequired = targetElement.attributesRequired || [];\n targetElement.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(Tools.inArray(attributesOrder, attrName), 1);\n return;\n }\n if (attrPrefix) {\n if (attrPrefix === '=') {\n targetElement.attributesDefault = targetElement.attributesDefault || [];\n targetElement.attributesDefault.push({\n name: attrName,\n value\n });\n attr.defaultValue = value;\n } else if (attrPrefix === '~') {\n targetElement.attributesForced = targetElement.attributesForced || [];\n targetElement.attributesForced.push({\n name: attrName,\n value\n });\n attr.forcedValue = value;\n } else if (attrPrefix === '<') {\n attr.validValues = Tools.makeMap(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n const attrPattern = attr;\n targetElement.attributePatterns = targetElement.attributePatterns || [];\n attrPattern.pattern = patternToRegExp(attrName);\n targetElement.attributePatterns.push(attrPattern);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n });\n };\n const cloneAttributesInto = (from, to) => {\n each$d(from.attributes, (value, key) => {\n to.attributes[key] = value;\n });\n to.attributesOrder.push(...from.attributesOrder);\n };\n const parseValidElementsRules = (globalElement, validElements) => {\n const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/;\n return bind$3(split$1(validElements, ','), rule => {\n const matches = elementRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n const elementName = matches[2];\n const outputName = matches[3];\n const attrsPrefix = matches[4];\n const attrData = matches[5];\n const element = {\n attributes: {},\n attributesOrder: []\n };\n globalElement.each(el => cloneAttributesInto(el, element));\n if (prefix === '#') {\n element.paddEmpty = true;\n } else if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (attrsPrefix === '!') {\n element.removeEmptyAttrs = true;\n }\n if (attrData) {\n parseValidElementsAttrDataIntoElement(attrData, element);\n }\n if (outputName) {\n element.outputName = elementName;\n }\n if (elementName === '@') {\n if (globalElement.isNone()) {\n globalElement = Optional.some(element);\n } else {\n return [];\n }\n }\n return [outputName ? {\n name: elementName,\n element,\n aliasName: outputName\n } : {\n name: elementName,\n element\n }];\n } else {\n return [];\n }\n });\n };\n\n const mapCache = {};\n const makeMap$2 = Tools.makeMap, each$b = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode;\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 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 = makeSchema(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 svg textarea summary', voidElementsMap);\n const moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', voidElementsMap);\n const headings = 'h1 h2 h3 h4 h5 h6';\n const textBlockElementsMap = createLookupTable('text_block_elements', headings + ' 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 html body multicol listing', 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 const wrapBlockElementsMap = createLookupTable('wrap_block_elements', 'pre ' + headings);\n each$b('script noscript iframe noframes noembed title style textarea xmp plaintext'.split(' '), name => {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n const addValidElements = validElements => {\n const globalElement = Optional.from(elements['@']);\n const hasPatternsRegExp = /[*?+]/;\n each$e(parseValidElementsRules(globalElement, validElements !== null && validElements !== void 0 ? validElements : ''), ({name, element, aliasName}) => {\n if (aliasName) {\n elements[aliasName] = element;\n }\n if (hasPatternsRegExp.test(name)) {\n const patternElement = element;\n patternElement.pattern = patternToRegExp(name);\n patternElements.push(patternElement);\n } else {\n elements[name] = element;\n }\n });\n };\n const setValidElements = validElements => {\n patternElements = [];\n each$e(keys(elements), name => {\n delete elements[name];\n });\n addValidElements(validElements);\n };\n const addCustomElement = (name, spec) => {\n var _a, _b;\n delete mapCache.text_block_elements;\n delete mapCache.block_elements;\n const inline = spec.extends ? !isBlock(spec.extends) : false;\n const cloneName = spec.extends;\n children[name] = cloneName ? children[cloneName] : {};\n customElementsMap[name] = cloneName !== null && cloneName !== void 0 ? cloneName : name;\n nonEmptyElementsMap[name.toUpperCase()] = {};\n nonEmptyElementsMap[name] = {};\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (cloneName && !elements[name] && elements[cloneName]) {\n const customRule = deepCloneElementRule(elements[cloneName]);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n } else {\n elements[name] = {\n attributesOrder: [],\n attributes: {}\n };\n }\n if (isArray$1(spec.attributes)) {\n const processAttrName = name => {\n customRule.attributesOrder.push(name);\n customRule.attributes[name] = {};\n };\n const customRule = (_a = elements[name]) !== null && _a !== void 0 ? _a : {};\n delete customRule.attributesDefault;\n delete customRule.attributesForced;\n delete customRule.attributePatterns;\n delete customRule.attributesRequired;\n customRule.attributesOrder = [];\n customRule.attributes = {};\n each$e(spec.attributes, attrName => {\n const globalAttrs = getGlobalAttributeSet(schemaType);\n parseValidChild(attrName).each(({preset, name}) => {\n if (preset) {\n if (name === 'global') {\n each$e(globalAttrs, processAttrName);\n }\n } else {\n processAttrName(name);\n }\n });\n });\n elements[name] = customRule;\n }\n if (isBoolean(spec.padEmpty)) {\n const customRule = (_b = elements[name]) !== null && _b !== void 0 ? _b : {};\n customRule.paddEmpty = spec.padEmpty;\n elements[name] = customRule;\n }\n if (isArray$1(spec.children)) {\n const customElementChildren = {};\n const processNodeName = name => {\n customElementChildren[name] = {};\n };\n const processPreset = name => {\n getElementsPreset(schemaType, name).each(names => {\n each$e(names, processNodeName);\n });\n };\n each$e(spec.children, child => {\n parseValidChild(child).each(({preset, name}) => {\n if (preset) {\n processPreset(name);\n } else {\n processNodeName(name);\n }\n });\n });\n children[name] = customElementChildren;\n }\n if (cloneName) {\n each$d(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 const addCustomElementsFromString = customElements => {\n each$e(parseCustomElementsRules(customElements !== null && customElements !== void 0 ? customElements : ''), ({name, cloneName}) => {\n addCustomElement(name, { extends: cloneName });\n });\n };\n const addCustomElements = customElements => {\n if (isObject(customElements)) {\n each$d(customElements, (spec, name) => addCustomElement(name, spec));\n } else if (isString(customElements)) {\n addCustomElementsFromString(customElements);\n }\n };\n const addValidChildren = validChildren => {\n each$e(parseValidChildrenRules(validChildren !== null && validChildren !== void 0 ? validChildren : ''), ({operation, name, validChildren}) => {\n const parent = operation === 'replace' ? { '#comment': {} } : children[name];\n const processNodeName = name => {\n if (operation === 'remove') {\n delete parent[name];\n } else {\n parent[name] = {};\n }\n };\n const processPreset = name => {\n getElementsPreset(schemaType, name).each(names => {\n each$e(names, processNodeName);\n });\n };\n each$e(validChildren, ({preset, name}) => {\n if (preset) {\n processPreset(name);\n } else {\n processNodeName(name);\n }\n });\n children[name] = parent;\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 const setup = () => {\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 summary'), name => {\n if (elements[name]) {\n elements[name].paddEmpty = true;\n }\n });\n each$b(split$1('span'), name => {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n each$b(schemaItems, (element, name) => {\n children[name] = element.children;\n });\n }\n delete elements.svg;\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 };\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 getWrapBlockElements = constant(wrapBlockElementsMap);\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 isBlock = name => has$2(getBlockElements(), name);\n const isInline = name => !startsWith(name, '#') && isValid(name) && !isBlock(name);\n const isWrapper = name => has$2(getWrapBlockElements(), name) || isInline(name);\n const getCustomElements = constant(customElementsMap);\n setup();\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 isBlock,\n isInline,\n isWrapper,\n getCustomElements,\n addValidElements,\n setValidElements,\n addCustomElements,\n addValidChildren\n };\n };\n\n const hexColour = value => ({ value: normalizeHex(value) });\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\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]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*((?:\\d?\\.\\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 getColorFormat = colorString => {\n if (rgbRegex.test(colorString)) {\n return 'rgb';\n } else if (rgbaRegex.test(colorString)) {\n return 'rgba';\n }\n return 'other';\n };\n const fromString = rgbaString => {\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 const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n\n const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\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.indexOf(',') > -1 ? [value] : 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 if (getColorFormat(value) === 'rgb') {\n fromString(value).each(rgba => {\n value = rgbaToHexString(toString(rgba)).toLowerCase();\n });\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 if (isNonNullable(originalEvent.getModifierState)) {\n event.getModifierState = keyArg => originalEvent.getModifierState(keyArg);\n }\n if (isNonNullable(originalEvent.getTargetRanges)) {\n event.getTargetRanges = () => originalEvent.getTargetRanges();\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$b(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$b(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 (_a) {\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$b(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$b(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$9(elm, name);\n } else {\n set$4(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$b(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$5($elm, normalizedName);\n } else {\n set$2($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$9(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) || !isHTMLElement($elm) && !isSVGElement($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$1($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 + '';\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$c(child) && child.dom.length === 0) {\n remove$4(child);\n } else {\n before$3($node, child);\n }\n });\n }\n remove$4($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$6;\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$5(SugarElement.fromDom(e), 'display'));\n };\n const hide = elm => {\n run(elm, e => set$2(SugarElement.fromDom(e), 'display', 'none'));\n };\n const isHidden = elm => {\n const $elm = _get(elm);\n return isNonNullable($elm) && is$2(getRaw($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 isEmpty = (node, elements, options) => {\n if (isPlainObject(elements)) {\n const isContent = node => {\n const name = node.nodeName.toLowerCase();\n return Boolean(elements[name]);\n };\n return isEmptyNode(schema, node, {\n ...options,\n isContent\n });\n } else {\n return isEmptyNode(schema, node, options);\n }\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, schema), parentElm);\n if (replacementElm) {\n parentNode.insertBefore(replacementElm, parentElm);\n } else {\n parentNode.insertBefore(splitElm, parentElm);\n }\n parentNode.insertBefore(trimNode(self, afterFragment, schema), 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 && isHTMLElement(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 isEditable = node => {\n if (isNonNullable(node)) {\n const scope = isElement$6(node) ? node : node.parentElement;\n return isNonNullable(scope) && isHTMLElement(scope) && isEditable$2(SugarElement.fromDom(scope));\n } else {\n return false;\n }\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 isEditable,\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(() => {\n processQueue(uniqueScripts).then(resolve, reject);\n });\n });\n } else {\n return processQueue(uniqueScripts);\n }\n }\n }\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n const isDuplicated = (items, item) => {\n const firstIndex = items.indexOf(item);\n return firstIndex !== -1 && items.indexOf(item, firstIndex + 1) > firstIndex;\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 const lcNames = map$3(keys(items), name => name.toLowerCase());\n each$d(items, (translation, name) => {\n const lcName = name.toLowerCase();\n if (lcName !== name && isDuplicated(lcNames, lcName)) {\n if (!has$2(items, lcName)) {\n langData[lcName] = translation;\n }\n langData[name] = translation;\n } else {\n langData[lcName] = translation;\n }\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 has$2(langData, textStr) ? toString(langData[textStr]) : 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 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 = (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 ancestor$1 = (scope, selector, isRoot) => ancestor$3(scope, selector, isRoot).isSome();\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$y = (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$4(elem, dataAnnotationActive(), 'true');\n } else {\n remove$9(elem, dataAnnotationActive());\n }\n });\n };\n const onNodeChange = last(() => {\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$x = (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$b = () => {\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 const clamp$2 = (value, min, max) => Math.min(Math.max(value, min), max);\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate$1 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + 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$3 = (element, classes) => {\n each$e(classes, x => {\n remove$6(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$4(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$b(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$b);\n };\n return {\n current: () => Optional.from(walker.current()).filter(isText$b),\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$b(node);\n const walk = (node, offset, walker, process) => {\n if (isText$b(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 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$c, 'text');\n const get$3 = element => api$1.get(element);\n const getOption = element => api$1.getOption(element);\n const set = (element, value) => api$1.set(element, value);\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 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 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 isTable$1 = node => name(node) === 'table';\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\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$4);\n }\n };\n const createPaddingBr = () => {\n const br = SugarElement.fromTag('br');\n set$4(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, schema) => {\n lastChild(elm).each(lastChild => {\n prevSibling(lastChild).each(lastChildPrevSibling => {\n if (schema.isBlock(name(elm)) && isBr$5(lastChild) && schema.isBlock(name(lastChildPrevSibling))) {\n remove$4(lastChild);\n }\n });\n });\n };\n\n const ZWSP$1 = zeroWidth;\n const isZwsp = isZwsp$2;\n const trim$2 = removeZwsp;\n const insert$5 = editor => editor.insertContent(ZWSP$1, { preserve_zwsp: true });\n\n const isElement$5 = isElement$6;\n const isText$9 = isText$b;\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$b(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$b(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$1(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 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 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 isContentEditableTrue$2 = isContentEditableTrue$3;\n const isContentEditableFalse$a = isContentEditableFalse$b;\n const isBr$4 = isBr$6;\n const isText$8 = isText$b;\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$a(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 isElement$4 = isElement$6;\n const isCaretCandidate$2 = isCaretCandidate$3;\n const isBlock$2 = 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$b;\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$b(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$b(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$2(beforeNode) || isBlock$2(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$2(pos1.getClientRects()), isAbove$1).getOr(false);\n CaretPosition.isBelow = (pos1, pos2) => lift2(last$2(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$b(pos.container()) : false;\n CaretPosition.isElementPosition = pos => !CaretPosition.isTextPosition(pos);\n\n const trimEmptyTextNode$1 = (dom, node) => {\n if (isText$b(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$b;\n const isBogus = isBogus$1;\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$a = (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$1));\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$9 = isContentEditableFalse$b;\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$b(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$b(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$9(node)) {\n return node;\n }\n }\n if (isCaretContainer$2(node)) {\n if (isText$b(node) && isCaretContainerBlock$1(node)) {\n node = node.parentNode;\n }\n let sibling = node.previousSibling;\n if (isContentEditableFalse$9(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$9(sibling)) {\n return sibling;\n }\n }\n 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$9(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$a(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$a(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$3 = (selection, type, normalized = false) => {\n if (type === 2) {\n return getOffsetBookmark(trim$2, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n 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 hasBlockTrigger = (pattern, trigger) => (pattern.type === 'block-command' || pattern.type === 'block-format') && pattern.trigger === trigger;\n const normalizePattern = pattern => {\n var _a;\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 const trigger = (_a = pattern.trigger) !== null && _a !== void 0 ? _a : 'space';\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 trigger\n }), (command, commandValue) => ({\n type: 'block-command',\n start: pattern.start,\n cmd: command,\n value: commandValue,\n trigger\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 filterByTrigger = (patterns, trigger) => {\n return {\n ...patterns,\n blockPatterns: filter$5(patterns.blockPatterns, pattern => hasBlockTrigger(pattern, trigger))\n };\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 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 fireAutocompleterUpdateActiveRange = (editor, args) => {\n editor.dispatch('AutocompleterUpdateActiveRange', 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 const fireEditableRootStateChange = (editor, state) => editor.dispatch('EditableRootStateChange', { state });\n const fireDisabledStateChange = (editor, state) => editor.dispatch('DisabledStateChange', { state });\n\n const deviceDetection$1 = detect$1().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$4(key)] = trim$4(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: ''\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,details,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,details,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$4),\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$1(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$4);\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: 'string' });\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('disabled', {\n processor: value => {\n if (isBoolean(value)) {\n if (editor.initialized && isDisabled$1(editor) !== value) {\n Promise.resolve().then(() => {\n fireDisabledStateChange(editor, value);\n });\n }\n return {\n valid: true,\n value\n };\n }\n return {\n valid: false,\n message: 'The value must be a boolean.'\n };\n },\n default: false\n });\n registerOption('readonly', {\n processor: 'boolean',\n default: false\n });\n registerOption('editable_root', {\n processor: 'boolean',\n default: true\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'.concat(editor.hasPlugin('help') ? '. 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('allow_mathml_annotation_encodings', {\n processor: value => {\n const valid = isArrayOf(value, isString);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be an array of strings.'\n };\n },\n default: []\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', {\n processor: 'boolean',\n default: true\n });\n registerOption('pad_empty_with_br', {\n processor: 'boolean',\n default: false\n });\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: stringOrObjectProcessor });\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('license_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 trigger: 'space'\n },\n {\n start: '##',\n format: 'h2',\n trigger: 'space'\n },\n {\n start: '###',\n format: 'h3',\n trigger: 'space'\n },\n {\n start: '####',\n format: 'h4',\n trigger: 'space'\n },\n {\n start: '#####',\n format: 'h5',\n trigger: 'space'\n },\n {\n start: '######',\n format: 'h6',\n trigger: 'space'\n },\n {\n start: '1.',\n cmd: 'InsertOrderedList',\n trigger: 'space'\n },\n {\n start: '*',\n cmd: 'InsertUnorderedList',\n trigger: 'space'\n },\n {\n start: '-',\n cmd: 'InsertUnorderedList',\n trigger: 'space'\n },\n {\n start: '>',\n cmd: 'mceBlockQuote',\n trigger: 'space'\n },\n {\n start: '---',\n cmd: 'InsertHorizontalRule',\n trigger: 'space'\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 registerOption('highlight_on_focus', {\n processor: 'boolean',\n default: true\n });\n registerOption('xss_sanitization', {\n processor: 'boolean',\n default: true\n });\n registerOption('details_initial_state', {\n processor: value => {\n const valid = contains$2([\n 'inherited',\n 'collapsed',\n 'expanded'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: inherited, collapsed, or expanded.'\n };\n },\n default: 'inherited'\n });\n registerOption('details_serialized_state', {\n processor: value => {\n const valid = contains$2([\n 'inherited',\n 'collapsed',\n 'expanded'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: inherited, collapsed, or expanded.'\n };\n },\n default: 'inherited'\n });\n registerOption('init_content_sync', {\n processor: 'boolean',\n default: false\n });\n registerOption('newdocument_content', {\n processor: 'string',\n default: ''\n });\n registerOption('sandbox_iframes', {\n processor: 'boolean',\n default: true\n });\n registerOption('sandbox_iframes_exclusions', {\n processor: 'string[]',\n default: [\n 'youtube.com',\n 'youtu.be',\n 'vimeo.com',\n 'player.vimeo.com',\n 'dailymotion.com',\n 'embed.music.apple.com',\n 'open.spotify.com',\n 'giphy.com',\n 'dai.ly',\n 'codepen.io'\n ]\n });\n registerOption('convert_unsafe_embeds', {\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$1 = 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 hasEditableRoot$1 = option('editable_root');\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 getNewDocumentContent = option('newdocument_content');\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 shouldHighlightOnFocus = option('highlight_on_focus');\n const shouldSanitizeXss = option('xss_sanitization');\n const shouldUseDocumentWrite = option('init_content_sync');\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 const getDetailsInitialState = option('details_initial_state');\n const getDetailsSerializedState = option('details_serialized_state');\n const shouldSandboxIframes = option('sandbox_iframes');\n const getSandboxIframesExclusions = editor => editor.options.get('sandbox_iframes_exclusions');\n const shouldConvertUnsafeEmbeds = option('convert_unsafe_embeds');\n const getLicenseKey = option('license_key');\n const getApiKey = option('api_key');\n const isDisabled$1 = option('disabled');\n\n const isElement$3 = isElement$6;\n const isText$5 = isText$b;\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$2(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$2(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$2(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$2 = 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$8 = isContentEditableFalse$b;\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 dom.setStyle(caretContainer, 'caret-color', 'transparent');\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$2(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$8(node) || isMedia$1(node);\n const isFakeCaretTarget = node => {\n const isTarget = isInlineFakeCaretTarget(node) || isTable$2(node) && isFakeCaretTableBrowser();\n return isTarget && parentElement(SugarElement.fromDom(node)).exists(isEditable$2);\n };\n\n const isContentEditableTrue$1 = isContentEditableTrue$3;\n const isContentEditableFalse$7 = isContentEditableFalse$b;\n const isMedia = isMedia$2;\n const isBlockLike = matchStyleValues('display', 'block table table-cell table-row 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$b;\n const isCaretCandidate$1 = isCaretCandidate$3;\n const isForwards = direction => direction === 1;\n const isBackwards = direction => direction === -1;\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$7(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$4(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$7(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$b(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$7);\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 const isContentEditableFalse$6 = isContentEditableFalse$b;\n const isText$3 = isText$b;\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(1, 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$1(filter$5(getParents$3(container, root), isContentEditableFalse$6));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n const CaretWalker = root => ({\n next: caretPosition => {\n return findCaretPosition$1(1, caretPosition, root);\n },\n prev: caretPosition => {\n return findCaretPosition$1(-1, 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$b(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 = '
';\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$b(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$b(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$b(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$b(next) && isText$b(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$2 = (selection, type, normalized) => {\n return getBookmark$3(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$2(chr);\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$3(cell, 'table', isRoot);\n\n const getStartNode = rng => {\n const sc = rng.startContainer, so = rng.startOffset;\n if (isText$b(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$b(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$b(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$1(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 preserveSelection = (editor, action, shouldMoveStart) => {\n const {selection, dom} = editor;\n const selectedNodeBeforeAction = selection.getNode();\n const isSelectedBeforeNodeNoneditable = isContentEditableFalse$b(selectedNodeBeforeAction);\n preserve(selection, true, () => {\n action();\n });\n const isBeforeNodeStillNoneditable = isSelectedBeforeNodeNoneditable && isContentEditableFalse$b(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$b(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$b(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$b(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 const getEmptyCaretContainers = node => {\n const nodes = [];\n let tempNode = node;\n while (tempNode) {\n if (isText$b(tempNode) && tempNode.data !== ZWSP$1 || 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 isEmptyCaretFormatElement = element => {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\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 closestRoot = dom.getParent(container, node => isEditingHost(node) || dom.isBlock(node));\n const rootNode = isNonNullable(closestRoot) ? closestRoot : 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$b(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,SUMMARY')) !== null && _a !== void 0 ? _a : root;\n node = dom.getParent(isText$b(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, expandToBlock) => {\n let parent = container;\n const siblingName = start ? 'previousSibling' : 'nextSibling';\n const root = dom.getRoot();\n if (isText$b(container) && !isWhiteSpaceNode(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (parent) {\n if (isEditingHost(parent)) {\n return container;\n }\n if (!formatList[0].block_expand && dom.isBlock(parent)) {\n return expandToBlock ? parent : container;\n }\n for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n const allowSpaces = isText$b(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, expandOptions = {}) => {\n const {includeTrailingSpace = false, expandToBlock = true} = expandOptions;\n const editableHost = dom.getParent(rng.commonAncestorContainer, node => isEditingHost(node));\n const root = isNonNullable(editableHost) ? editableHost : dom.getRoot();\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$b(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$b(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$b(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$b(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n const startPoint = findWordEndPoint(dom, root, startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(({container, offset}) => {\n startContainer = container;\n startOffset = offset;\n });\n const endPoint = findWordEndPoint(dom, root, 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$b(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true, expandToBlock);\n }\n if (!isInlineFormat(format) || (!isText$b(endContainer) || endOffset === endContainer.data.length)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false, expandToBlock);\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, expandToBlock);\n if (isText$b(startContainer)) {\n startOffset = 0;\n }\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false, expandToBlock);\n if (isText$b(endContainer)) {\n endOffset = endContainer.data.length;\n }\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$b(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$b(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$c(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$4(elem, `${ dataAnnotationId() }`, uid);\n set$4(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$4(elem, `${ dataAnnotationClasses() }`, classes.join(','));\n }\n const attributeNames = keys(attributes);\n if (attributeNames.length > 0) {\n set$4(elem, `${ dataAnnotationAttributes() }`, attributeNames.join(','));\n }\n }\n };\n const removeDirectAnnotation = elem => {\n remove$6(elem, annotation());\n remove$9(elem, `${ dataAnnotationId() }`);\n remove$9(elem, `${ dataAnnotation() }`);\n remove$9(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$9(elem, name));\n remove$3(elem, customClasses);\n remove$9(elem, `${ dataAnnotationClasses() }`);\n remove$9(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$1(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$b();\n setup$x(editor, registry);\n const changes = setup$y(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 identify(editor, Optional.some(name)).each(({elements}) => {\n const bookmark = editor.selection.getBookmark();\n removeAnnotations(elements);\n editor.selection.moveToBookmark(bookmark);\n });\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$2, 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 getDocument = () => SugarElement.fromDom(document);\n\n const focus$1 = (element, preventScroll = false) => element.dom.focus({ preventScroll });\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 create$9 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$9 };\n\n const adt$3 = 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$3.before;\n const on = adt$3.on;\n const after$1 = adt$3.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$2 = 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$2.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$2.domRange;\n const relative = adt$2.relative;\n const exact = adt$2.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 clamp$1 = (offset, element) => {\n const max = isText$c(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$1 = 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 (_a) {\n return Optional.none();\n }\n };\n const store = editor => {\n const newBookmark = shouldStore(editor) ? getBookmark$1(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 (_a) {\n return document.body;\n }\n };\n const registerEvents$1 = (editorManager, e) => {\n const editor = e.editor;\n register$6(editor);\n const toggleContentAreaOnFocus = (editor, fn) => {\n if (shouldHighlightOnFocus(editor) && editor.inline !== true) {\n const contentArea = SugarElement.fromDom(editor.getContainer());\n fn(contentArea, 'tox-edit-focus');\n }\n };\n editor.on('focusin', () => {\n const focusedEditor = editorManager.focusedEditor;\n if (isEditorContentAreaElement(getActiveElement(editor))) {\n toggleContentAreaOnFocus(editor, add$2);\n }\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 (!isEditorContentAreaElement(getActiveElement(editor)) || focusedEditor !== editor) {\n toggleContentAreaOnFocus(editor, remove$6);\n }\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$w = 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 hasContentEditableFalseParent$1 = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'false') !== null;\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 (_a) {\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 const restoreBookmark = editor => {\n getRng(editor).each(bookmarkRng => {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n };\n if (!hasFocus(editor) && editor.hasEditableRoot()) {\n restoreBookmark(editor);\n }\n const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {\n if (!hasContentEditableFalseParent$1(editor, contentEditableHost)) {\n focusBody(body);\n }\n focusBody(contentEditableHost);\n if (!editor.hasEditableRoot()) {\n restoreBookmark(editor);\n }\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 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,details';\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, 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 || editor.mode.isReadOnly()) {\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 = (dom, elm) => {\n if (isMedia(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else if (isTable$2(elm)) {\n const isNorth = startsWith(selectedHandle.name, 'n');\n const rowSelect = isNorth ? head : last$2;\n const tableElm = elm.cloneNode(true);\n rowSelect(dom.select('tr', tableElm)).each(tr => {\n const cells = dom.select('td,th', tr);\n dom.setStyle(tr, 'height', null);\n each$e(cells, cell => dom.setStyle(cell, 'height', null));\n });\n return tableElm;\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 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(dom, 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).filter(e => dom.isEditable(e.parentElement) || e.nodeName === 'IMG' && dom.isEditable(e)).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) && hasEditorOrUiFocus(editor)) {\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 (_a) {\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$1 = 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$1.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$1.ltr, rng));\n } else {\n return fromRange(win, adt$1.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n adt$1.ltr;\n adt$1.rtl;\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretPositionFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.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;\n return Optional.from((_a = doc.caretRangeFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y));\n };\n const availableSearch = (doc, x, y) => {\n if (doc.caretPositionFromPoint) {\n return caretPositionFromPoint(doc, x, y);\n } else if (doc.caretRangeFromPoint) {\n return caretRangeFromPoint(doc, x, y);\n } else {\n return Optional.none();\n }\n };\n const fromPoint$1 = (win, x, y) => {\n const doc = 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 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$b(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$b(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$b(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 (isDetails(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$b(node) || isCaretContainer$2(node)) {\n normalized = false;\n break;\n }\n if (isText$b(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$b(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$b(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$b(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$b(startContainer) && startOffset > 0 && startOffset < startContainer.data.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$b(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 includeTrailingSpace: false,\n expandToBlock: false\n });\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(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 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$c(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('' + ZWSP$1 + '');\n before$3(startPoint.element, span);\n return markerInfo(span, () => remove$4(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(editor, 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 = (editor, 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(-editor.getBody().getBoundingClientRect().left, y, doc);\n }\n };\n const intoWindowIfNeeded = (editor, 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(editor, marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n const align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n scrollToMarker(editor, marker, viewHeight, align, doc);\n } else if (markerBottom > viewportBottom && !largerThanViewport) {\n scrollToMarker(editor, marker, viewHeight, alignToTop === true, doc);\n }\n };\n const intoWindow = (editor, doc, scrollTop, marker, alignToTop) => {\n const viewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(editor, doc, scrollTop, viewHeight, marker, alignToTop);\n };\n const intoFrame = (editor, doc, scrollTop, marker, alignToTop) => {\n const frameViewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(editor, 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 isEditableRange = (dom, rng) => {\n if (rng.collapsed) {\n return dom.isEditable(rng.startContainer);\n } else {\n return dom.isEditable(rng.startContainer) && dom.isEditable(rng.endContainer);\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 = (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$b(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$b(startContainer) && isText$b(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$b(node) ? node.parentNode : node;\n return isHTMLElement(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(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;\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 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 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 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 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 unescapedTextParents = Tools.makeMap('NOSCRIPT STYLE SCRIPT XMP IFRAME NOEMBED NOFRAMES PLAINTEXT', ' ');\n const containsZwsp = node => isString(node.nodeValue) && node.nodeValue.includes(ZWSP$1);\n const getTemporaryNodeSelector = tempAttrs => `${ tempAttrs.length === 0 ? '' : `${ map$3(tempAttrs, attr => `[${ attr }]`).join(',') },` }[data-mce-bogus=\"all\"]`;\n const getTemporaryNodes = (tempAttrs, body) => body.querySelectorAll(getTemporaryNodeSelector(tempAttrs));\n const createZwspCommentWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_COMMENT, node => containsZwsp(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);\n const createUnescapedZwspTextWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_TEXT, node => {\n if (containsZwsp(node)) {\n const parent = node.parentNode;\n return parent && has$2(unescapedTextParents, parent.nodeName) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n } else {\n return NodeFilter.FILTER_SKIP;\n }\n });\n const hasZwspComment = body => createZwspCommentWalker(body).nextNode() !== null;\n const hasUnescapedZwspText = body => createUnescapedZwspTextWalker(body).nextNode() !== null;\n const hasTemporaryNode = (tempAttrs, body) => body.querySelector(getTemporaryNodeSelector(tempAttrs)) !== null;\n const trimTemporaryNodes = (tempAttrs, body) => {\n each$e(getTemporaryNodes(tempAttrs, body), elm => {\n const element = SugarElement.fromDom(elm);\n if (get$9(element, 'data-mce-bogus') === 'all') {\n remove$4(element);\n } else {\n each$e(tempAttrs, attr => {\n if (has$1(element, attr)) {\n remove$9(element, attr);\n }\n });\n }\n });\n };\n const emptyAllNodeValuesInWalker = walker => {\n let curr = walker.nextNode();\n while (curr !== null) {\n curr.nodeValue = null;\n curr = walker.nextNode();\n }\n };\n const emptyZwspComments = compose(emptyAllNodeValuesInWalker, createZwspCommentWalker);\n const emptyUnescapedZwspTexts = compose(emptyAllNodeValuesInWalker, createUnescapedZwspTextWalker);\n const trim$1 = (body, tempAttrs) => {\n const conditionalTrims = [\n {\n condition: curry(hasTemporaryNode, tempAttrs),\n action: curry(trimTemporaryNodes, tempAttrs)\n },\n {\n condition: hasZwspComment,\n action: emptyZwspComments\n },\n {\n condition: hasUnescapedZwspText,\n action: emptyUnescapedZwspTexts\n }\n ];\n let trimmed = body;\n let cloned = false;\n each$e(conditionalTrims, ({condition, action}) => {\n if (condition(trimmed)) {\n if (!cloned) {\n trimmed = body.cloneNode(true);\n cloned = true;\n }\n action(trimmed);\n }\n });\n return trimmed;\n };\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$4(elem);\n } else if (isBr$5(elem)) {\n before$3(elem, SugarElement.fromText(zeroWidth));\n remove$4(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$9(input, 'name');\n });\n };\n\n const trimEmptyContents = (editor, html) => {\n const blockName = getForcedRootBlock(editor);\n const emptyRegExp = new RegExp(`^(<${ blockName }[^>]*>( | |\\\\s|\\u00a0|
|)<\\\\/${ blockName }>[\\r\\n]*|
[\\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$4(offscreenDiv, 'data-mce-bogus', 'all');\n setAll(offscreenDiv, {\n position: 'fixed',\n left: '-9999999px',\n top: '0'\n });\n set$1(offscreenDiv, body.innerHTML);\n cleanupBogusElements(offscreenDiv);\n cleanupInputNames(offscreenDiv);\n const root = getContentContainer(dos);\n append$1(root, offscreenDiv);\n const content = trim$2(offscreenDiv.dom.innerText);\n remove$4(offscreenDiv);\n return content;\n };\n const getContentFromBody = (editor, args, body) => {\n let content;\n if (args.format === 'raw') {\n content = Tools.trim(trim$2(trim$1(body, editor.serializer.getTempAttrs()).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('');\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('');\n },\n comment: text => {\n html.push('');\n },\n pi: (name, text) => {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: text => {\n html.push('', 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 (isNonHtmlElementRootName(name)) {\n if (isString(node.value)) {\n writer.text(node.value, true);\n }\n writer.end(name);\n } else {\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 }\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-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 conditionalNonInheritableStyles = new Set();\n (() => {\n const conditionalNonInheritableStylesArr = ['background-color'];\n each$e(conditionalNonInheritableStylesArr, style => {\n conditionalNonInheritableStyles.add(style);\n });\n })();\n const shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n const getStyles$1 = (dom, node) => dom.parseStyle(dom.getAttrib(node, 'style'));\n const getStyleProps = (dom, node) => keys(getStyles$1(dom, node));\n const isNonInheritableStyle = style => nonInheritableStyles.has(style);\n const isConditionalNonInheritableStyle = style => conditionalNonInheritableStyles.has(style);\n const hasNonInheritableStyles = (dom, node) => exists(getStyleProps(dom, node), style => isNonInheritableStyle(style));\n const hasConditionalNonInheritableStyles = (dom, node) => hasNonInheritableStyles(dom, node) && exists(getStyleProps(dom, node), style => isConditionalNonInheritableStyle(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$b).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$b(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$b(node) && !isBogusAll(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 isBlock$1 = schema => el => schema.isBlock(name(el));\n const getClosestBlock$1 = (root, pos, schema) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$1(schema));\n const isAtBeforeAfterBlockBoundary = (forward, root, pos, schema) => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => getClosestBlock$1(root, pos, schema).fold(() => !isInSameBlock(newPos, pos, root.dom), fromBlock => !isInSameBlock(newPos, pos, root.dom) && contains(fromBlock, SugarElement.fromDom(newPos.container()))));\n const isAtBlockBoundary = (forward, root, pos, schema) => getClosestBlock$1(root, pos, schema).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, schema) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n const scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr$1);\n };\n const isBeforeBr$1 = (root, pos, schema) => getElementFromPosition(pos).exists(isBr$5) || findBr(true, root, pos, schema).isSome();\n const isAfterBr = (root, pos, schema) => getElementFromPrevPosition(pos).exists(isBr$5) || findBr(false, root, pos, schema).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, schema) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n return head(parentBlocks).getOr(root);\n };\n const hasSpaceBefore = (root, pos, schema) => {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos, schema).dom, pos).exists(isAfterSpace);\n }\n };\n const hasSpaceAfter = (root, pos, schema) => {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos, schema).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, schema) => isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos, schema) || isAtEndOfBlock(root, pos, schema) || isAfterBr(root, pos, schema) || isBeforeBr$1(root, pos, schema);\n const isCefBlock = node => isNonNullable(node) && isContentEditableFalse$b(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, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos, schema) || hasSpaceBefore(root, pos, schema) || hasSpaceAfter(root, pos, schema);\n }\n };\n const needsToBeNbspLeft = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos, schema) || isBeforeBlock(root, pos, schema) || isAfterBr(root, pos, schema) || hasSpaceBefore(root, pos, schema) || isAfterCefBlock(root, pos);\n }\n };\n const leanRight = pos => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$b(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n const needsToBeNbspRight = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, pos, schema) || isAfterBlock(root, pos, schema) || isBeforeBr$1(root, pos, schema) || hasSpaceAfter(root, pos, schema) || isBeforeCefBlock(root, pos);\n }\n };\n const needsToBeNbsp = (root, pos, schema) => needsToBeNbspLeft(root, pos, schema) || needsToBeNbspRight(root, leanRight(pos), schema);\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$b(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, schema) => {\n const text = node.data;\n const firstPos = CaretPosition(node, 0);\n if (!makeNbsp && isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos, schema)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, 0) && needsToBeNbspLeft(root, firstPos, schema)) {\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, schema) => {\n const text = node.data;\n const lastPos = CaretPosition(node, text.length - 1);\n if (!makeNbsp && isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos, schema)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, text.length - 1) && needsToBeNbspRight(root, lastPos, schema)) {\n node.data = text.slice(0, -1) + nbsp;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbsps$1 = (root, pos, schema) => {\n const container = pos.container();\n if (!isText$b(container)) {\n return Optional.none();\n }\n if (hasNbsp(pos)) {\n const normalized = normalizeNbspAtStart(root, container, false, schema) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container, false, schema);\n return someIf(normalized, pos);\n } else if (needsToBeNbsp(root, pos, schema)) {\n const normalized = normalizeNbspAtStart(root, container, true, schema) || normalizeNbspAtEnd(root, container, true, schema);\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$1(root, CaretPosition.fromRangeStart(editor.selection.getRng()), editor.schema).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n const normalize$1 = (node, offset, count, schema) => {\n if (count === 0) {\n return;\n }\n const elm = SugarElement.fromDom(node);\n const root = ancestor$4(elm, el => schema.isBlock(name(el))).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), schema);\n const isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0), schema);\n node.replaceData(offset, count, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n };\n const normalizeWhitespaceAfter = (node, offset, schema) => {\n const content = node.data.slice(offset);\n const whitespaceCount = content.length - lTrim(content).length;\n normalize$1(node, offset, whitespaceCount, schema);\n };\n const normalizeWhitespaceBefore = (node, offset, schema) => {\n const content = node.data.slice(0, offset);\n const whitespaceCount = content.length - rTrim(content).length;\n normalize$1(node, offset - whitespaceCount, whitespaceCount, schema);\n };\n const mergeTextNodes = (prevNode, nextNode, schema, 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$4(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset, schema);\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$b(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n const afterOrEndOf = node => isText$b(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 = (schema, elm, preserveEmptyCaret) => {\n if (isEmpty$2(schema, elm)) {\n const br = SugarElement.fromHtml('
');\n if (preserveEmptyCaret) {\n each$e(children$1(elm), node => {\n if (!isEmptyCaretFormatElement(node)) {\n remove$4(node);\n }\n });\n } else {\n empty(elm);\n }\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, schema, normalizeWhitespace) => {\n const prevTextOpt = prevSibling(elm).filter(isText$c);\n const nextTextOpt = nextSibling(elm).filter(isText$c);\n remove$4(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, schema, 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, schema));\n nextTextOpt.each(elm => normalizeWhitespaceAfter(elm.dom, 0, schema));\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, preserveEmptyCaret = false) => {\n const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n const parentBlock = ancestor$4(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, editor.schema, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(elm => paddEmptyBlock(editor.schema, elm, preserveEmptyCaret)).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) && editor.dom.isEditable(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$b(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$b(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(editor.schema, lastBlock, { checkRootAsContent: false })) {\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(editor.schema, node)) {\n remove$4(node);\n }\n });\n }\n };\n\n const isRootFromElement = root => cur => eq(root, cur);\n const getTableCells = table => descendants(table, 'td,th');\n const getTable$1 = (node, isRoot) => getClosestTable(SugarElement.fromDom(node), isRoot);\n const selectionInTableWithNestedTable = details => {\n return lift2(details.startTable, details.endTable, (startTable, endTable) => {\n const isStartTableParentOfEndTable = descendant(startTable, t => eq(t, endTable));\n const isEndTableParentOfStartTable = descendant(endTable, t => eq(t, startTable));\n return !isStartTableParentOfEndTable && !isEndTableParentOfStartTable ? details : {\n ...details,\n startTable: isStartTableParentOfEndTable ? Optional.none() : details.startTable,\n endTable: isEndTableParentOfStartTable ? Optional.none() : details.endTable,\n isSameTable: false,\n isMultiTable: false\n };\n }).getOr(details);\n };\n const adjustQuirksInDetails = details => {\n return selectionInTableWithNestedTable(details);\n };\n const getTableDetailsFromRange = (rng, isRoot) => {\n const startTable = getTable$1(rng.startContainer, isRoot);\n const endTable = getTable$1(rng.endContainer, isRoot);\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 adjustQuirksInDetails({\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$2(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$9(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$4(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(editor.schema, 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$4(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(curry(isEmpty$2, editor.schema)));\n const endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n if (!isEmpty$2(editor.schema, 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(editor.schema, startCell) ? startTableCells : startTableCells.slice(1);\n const endTableCellsToClean = isEmpty$2(editor.schema, 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$3 = (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(editor.schema, fromCell, { checkRootAsContent: false }) ? 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(editor.schema, 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$b = (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$3(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$b(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 isHeading = node => [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ].includes(node.name);\n const isSummary = node => node.name === 'summary';\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 = (settings, args, isBlock, node) => {\n const brPreferred = settings.pad_empty_with_br || args.insert;\n if (brPreferred && isBlock(node)) {\n const astNode = new AstNode('br', 1);\n if (args.insert) {\n astNode.attr('data-mce-bogus', '1');\n }\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 const findClosestEditingHost = scope => {\n let editableNode;\n for (let node = scope; node; node = node.parent) {\n const contentEditable = node.attr('contenteditable');\n if (contentEditable === 'false') {\n break;\n } else if (contentEditable === 'true') {\n editableNode = node;\n }\n }\n return Optional.from(editableNode);\n };\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, rootNode, 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,summary');\n const fixed = new Set();\n const isSplittableElement = node => node !== rootNode && !nonSplittableElements[node.name];\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) && isSplittableElement(parent); parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n if (!isInvalid(schema, node, parent)) {\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) && i > 0) {\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) {\n return false;\n }\n if (schema.children[node.name] && !schema.isValidChild(parent.name, node.name)) {\n return true;\n }\n if (node.name === 'a' && hasClosest(parent, 'a')) {\n return true;\n }\n if (isSummary(parent) && isHeading(node)) {\n return !((parent === null || parent === void 0 ? void 0 : parent.firstChild) === node && (parent === null || parent === void 0 ? void 0 : parent.lastChild) === node);\n }\n return false;\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$2 = (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$2 = (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$2(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$2(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 isEditableEmptyBlock = (dom, node) => {\n if (dom.isBlock(node) && dom.isEditable(node)) {\n const childNodes = node.childNodes;\n return childNodes.length === 1 && isBr$6(childNodes[0]) || childNodes.length === 0;\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 if (isEditableEmptyBlock(editor.dom, parentNode)) {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value, { no_events: true });\n }\n }\n };\n const trimBrsFromTableCell = (dom, elm, schema) => {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(el => trimBlockTrailingBr(el, schema));\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 const fragmentSelector = '*[data-mce-fragment]';\n const fragments = dom.select(fragmentSelector);\n Tools.each(fragments, node => {\n const isInline = currentNode => isNonNullable(textInlineElements[currentNode.nodeName.toLowerCase()]);\n const hasOneChild = currentNode => currentNode.childNodes.length === 1;\n const hasNoNonInheritableStyles = currentNode => !(hasNonInheritableStyles(dom, currentNode) || hasConditionalNonInheritableStyles(dom, currentNode));\n if (hasNoNonInheritableStyles(node) && isInline(node) && hasOneChild(node)) {\n const styles = getStyleProps(dom, node);\n const isOverridden = (oldStyles, newStyles) => forall(oldStyles, style => contains$2(newStyles, style));\n const overriddenByAllChildren = childNode => hasOneChild(node) && dom.is(childNode, fragmentSelector) && isInline(childNode) && (childNode.nodeName === node.nodeName && isOverridden(styles, getStyleProps(dom, childNode)) || overriddenByAllChildren(childNode.children[0]));\n const identicalToParent = parentNode => isNonNullable(parentNode) && parentNode !== root && (elementUtils.compare(node, parentNode) || identicalToParent(parentNode.parentElement));\n const conflictWithInsertedParent = parentNode => isNonNullable(parentNode) && parentNode !== root && dom.is(parentNode, fragmentSelector) && (hasStyleConflict(dom, node, parentNode) || conflictWithInsertedParent(parentNode.parentElement));\n if (overriddenByAllChildren(node.children[0]) || identicalToParent(node.parentElement) && !conflictWithInsertedParent(node.parentElement)) {\n dom.remove(node, true);\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$b(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$b(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 const isCell = isTableCell(parentBlock);\n empty(SugarElement.fromDom(parentBlock));\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isCell && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', isCell ? {} : { '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$b(rng.startContainer.childNodes[rng.startOffset])) {\n rng.deleteContents();\n } else {\n editor.getDoc().execCommand('Delete', false);\n }\n };\n const findMarkerNode = scope => {\n for (let markerNode = scope; markerNode; markerNode = markerNode.walk()) {\n if (markerNode.attr('id') === 'mce_marker') {\n return Optional.some(markerNode);\n }\n }\n return Optional.none();\n };\n const notHeadingsInSummary = (dom, node, fragment) => {\n var _a;\n return exists(fragment.children(), isHeading) && ((_a = dom.getParent(node, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName) === 'SUMMARY';\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 = '';\n if (!details.preserve_zwsp) {\n value = trim$2(value);\n }\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.name === 'table') {\n break;\n }\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 && !notHeadingsInSummary(dom, parentNode, fragment)) {\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 const markerNode = findMarkerNode(root);\n const editingHost = markerNode.bind(findClosestEditingHost).getOr(root);\n markerNode.each(marker => marker.replace(fragment));\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, editingHost);\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(), editor.schema);\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 content = trim$2(content);\n if (content.length === 0 || /^\\s+$/.test(content)) {\n const padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\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 = trim$2(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 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$1 = (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 = (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$1(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 && editor.selection.isEditable()) {\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 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$b(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) => {\n const dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret, true);\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) => {\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, moveCaret);\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 normalizeNbsps = node => set(node, get$3(node).replace(new RegExp(`${ nbsp }$`), ' '));\n const normalizeNbspsBetween = (editor, caretContainer) => {\n const handler = () => {\n if (caretContainer !== null && !editor.dom.isEmpty(caretContainer)) {\n prevSibling(SugarElement.fromDom(caretContainer)).each(node => {\n if (isText$c(node)) {\n normalizeNbsps(node);\n } else {\n descendant$2(node, e => isText$c(e)).each(textNode => {\n if (isText$c(textNode)) {\n normalizeNbsps(textNode);\n }\n });\n }\n });\n }\n };\n editor.once('input', e => {\n if (e.data && !isWhiteSpace(e.data)) {\n if (!e.isComposing) {\n handler();\n } else {\n editor.once('compositionend', () => {\n handler();\n });\n }\n }\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 normalizeNbspsBetween(editor, caretContainer);\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$b(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, { includeTrailingSpace: 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 parentsAfter = isNonNullable(caretContainer) ? dom.getParents(formatNode.parentNode, always, caretContainer) : [];\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([\n ...parents,\n ...cleanedFormatNode.toArray(),\n ...parentsAfter\n ], newCaretContainer);\n if (caretContainer) {\n removeCaretContainerNode(editor, caretContainer, isNonNullable(caretContainer));\n }\n selection.setCursorLocation(caretTextNode, 1);\n normalizeNbspsBetween(editor, newCaretContainer);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n const disableCaretContainer = (editor, keyCode, moveCaret) => {\n const selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, moveCaret);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n }\n };\n const endsWithNbsp = element => isText$b(element) && endsWith(element.data, nbsp);\n const setup$v = editor => {\n editor.on('mouseup keydown', e => {\n disableCaretContainer(editor, e.keyCode, endsWithNbsp(editor.selection.getRng().endContainer));\n });\n };\n const createCaretFormat = formatNodes => {\n const caretContainer = createCaretContainer(false);\n const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n return {\n caretContainer,\n caretPosition: CaretPosition(innerMost, 0)\n };\n };\n const replaceWithCaretFormat = (targetNode, formatNodes) => {\n const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n before$3(SugarElement.fromDom(targetNode), caretContainer);\n remove$4(SugarElement.fromDom(targetNode));\n return caretPosition;\n };\n const createCaretFormatAtStart$1 = (rng, formatNodes) => {\n const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n rng.insertNode(caretContainer.dom);\n return caretPosition;\n };\n const isFormatElement = (editor, element) => {\n if (isCaretNode(element.dom)) {\n return false;\n }\n const inlineElements = editor.schema.getTextInlineElements();\n return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$1(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$4(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.isEditable(elm);\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$2(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$1(node);\n const findElementSibling = (node, siblingName) => {\n for (let sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$b(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 = isHTMLElement(prev) && editor.dom.isEditable(prev);\n const isNextEditable = isHTMLElement(next) && editor.dom.isEditable(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) && dom.isEditable(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$b(container) && start && offset >= container.data.length) {\n container = new DomTreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$b(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 removeNodeFormatInternal = (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 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 removeNodeFormatFromClone = (editor, format, vars, clone) => removeNodeFormatInternal(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 = removeNodeFormatFromClone(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 removeFormatInternal = (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 removeFormatOnNode = node => exists(formatList, fmt => removeNodeFormat(ed, fmt, vars, node, node));\n const process = node => {\n const children = from(node.childNodes);\n const removed = removeFormatOnNode(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 removeFormatOnNode(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 removeNodeFormat(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$b(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, { includeTrailingSpace: 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 const removeFormat$1 = (ed, name, vars, node, similar) => {\n if (node || ed.selection.isEditable()) {\n removeFormatInternal(ed, name, vars, node, similar);\n }\n };\n const removeNodeFormat = (editor, format, vars, node, compareNode) => {\n return removeNodeFormatInternal(editor, format, vars, node, compareNode).fold(never, newName => {\n editor.dom.rename(node, newName);\n return true;\n }, always);\n };\n\n const each$6 = Tools.each;\n const mergeTextDecorationsAndColor = (dom, format, vars, node) => {\n const processTextDecorationsAndColor = n => {\n if (isHTMLElement(n) && isElement$6(n.parentNode) && dom.isEditable(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) && dom.isEditable(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) && dom.isEditable(elm), applyStyle(dom, 'fontSize', ''));\n const inverseTagDescendants = filter$5(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), dom.isEditable);\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 removeNodeFormat(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 (removeNodeFormat(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 removeNodeFormat(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) && isEmptyNode(editor.schema, node.parentNode, {\n skipBogus: false,\n includeZwsp: true\n }) && !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 applyFormatAction = (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$b(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 const applyFormat$1 = (editor, name, vars, node) => {\n if (node || editor.selection.isEditable()) {\n applyFormatAction(editor, name, vars, node);\n }\n };\n\n const hasVars = value => has$2(value, 'vars');\n const setup$u = (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$1(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 removeFormat$1(editor, name, vars, node);\n } else {\n applyFormat$1(editor, name, vars, node);\n }\n }\n };\n\n const explode$1 = Tools.explode;\n const create$8 = () => {\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({\n message: `Cannot convert ${ url } to Blob. Resource might not exist or is inaccessible.`,\n uriType: 'blob'\n }));\n const extractBase64Data = data => {\n const matches = /([a-z0-9+\\/=\\s]+)/i.exec(data);\n return matches ? matches[1] : '';\n };\n const decodeData = data => {\n try {\n return decodeURIComponent(data);\n } catch (_a) {\n return data;\n }\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 decodedData = decodeData(data);\n const extractedData = base64Encoded ? extractBase64Data(decodedData) : decodedData;\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 (_a) {\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 hostCaptureRegex = /^(?:(?:(?:[A-Za-z][A-Za-z\\d.+-]{0,14}:\\/\\/(?:[-.~*+=!&;:'%@?^${}(),\\w]+@)?|www\\.|[-;:&=+$,.\\w]+@)([A-Za-z\\d-]+(?:\\.[A-Za-z\\d-]+)*))(?::\\d+)?(?:\\/(?:[-.~*+=!;:'%@$(),\\/\\w]*[-~*+=%@$()\\/\\w])?)?(?:\\?(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+)?)?(?:#(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+)?)?)$/;\n const extractHost = url => Optional.from(url.match(hostCaptureRegex)).bind(ms => get$b(ms, 1)).map(h => startsWith(h, 'www.') ? h.substring(4) : h);\n\n const sandboxIframe = (iframeNode, exclusions) => {\n if (Optional.from(iframeNode.attr('src')).bind(extractHost).forall(host => !contains$2(exclusions, host))) {\n iframeNode.attr('sandbox', '');\n }\n };\n const isMimeType = (mime, type) => startsWith(mime, `${ type }/`);\n const getEmbedType = type => {\n if (isUndefined(type)) {\n return 'iframe';\n } else if (isMimeType(type, 'image')) {\n return 'img';\n } else if (isMimeType(type, 'video')) {\n return 'video';\n } else if (isMimeType(type, 'audio')) {\n return 'audio';\n } else {\n return 'iframe';\n }\n };\n const createSafeEmbed = ({type, src, width, height} = {}, sandboxIframes, sandboxIframesExclusions) => {\n const name = getEmbedType(type);\n const embed = new AstNode(name, 1);\n embed.attr(name === 'audio' ? { src } : {\n src,\n width,\n height\n });\n if (name === 'audio' || name === 'video') {\n embed.attr('controls', '');\n }\n if (name === 'iframe' && sandboxIframes) {\n sandboxIframe(embed, sandboxIframesExclusions);\n }\n return embed;\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 var _a, _b;\n const schema = parser.schema;\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 const shouldSandboxIframes = (_a = settings.sandbox_iframes) !== null && _a !== void 0 ? _a : false;\n const sandboxIframesExclusions = unique$1((_b = settings.sandbox_iframes_exclusions) !== null && _b !== void 0 ? _b : []);\n if (settings.convert_unsafe_embeds) {\n parser.addNodeFilter('object,embed', nodes => each$e(nodes, node => {\n node.replace(createSafeEmbed({\n type: node.attr('type'),\n src: node.name === 'object' ? node.attr('data') : node.attr('src'),\n width: node.attr('width'),\n height: node.attr('height')\n }, shouldSandboxIframes, sandboxIframesExclusions));\n }));\n }\n if (shouldSandboxIframes) {\n parser.addNodeFilter('iframe', nodes => each$e(nodes, node => sandboxIframe(node, sandboxIframesExclusions)));\n }\n };\n\n /*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE */\n\n const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n } = Object;\n let {\n freeze,\n seal,\n create: create$7\n } = Object; // eslint-disable-line import/no-mutable-exports\n let {\n apply,\n construct\n } = typeof Reflect !== 'undefined' && Reflect;\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 (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const arraySplice = unapply(Array.prototype.splice);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\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 /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\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 /**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\n function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n /**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\n function cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n /**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\n function clone(object) {\n const newObject = create$7(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\n function lookupGetter(object, prop) {\n while (object !== null) {\n const 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() {\n return null;\n }\n return fallbackValue;\n }\n\n const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n const text = freeze(['#text']);\n\n const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\n const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n });\n\n /* eslint-disable @typescript-eslint/indent */\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n const _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n };\n function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.2.4';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create$7(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 /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\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 if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, 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 /* Merge configuration parameters */\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, transformCaseFunc);\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, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\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, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\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 // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\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 /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(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)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n 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))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n const initValue = value;\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Remove attribute */\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const 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 /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\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 = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\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 /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const 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 arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\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 (_a) {\n return unescape(encodedUri);\n }\n };\n const isInvalidUri = (settings, uri, tagName) => {\n const decodedUri = decodeUri(uri).replace(/\\s/g, '');\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 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 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 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 filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n const internalElementAttr = 'data-mce-type';\n let uid = 0;\n const processNode = (node, settings, schema, scope, evt) => {\n var _a, _b, _c, _d;\n const validate = settings.validate;\n const specialElements = schema.getSpecialElements();\n if (node.nodeType === COMMENT && !settings.allow_conditional_comments && /^\\[if/i.test((_a = node.nodeValue) !== null && _a !== void 0 ? _a : '')) {\n node.nodeValue = ' ' + node.nodeValue;\n }\n const lcTagName = (_b = evt === null || evt === void 0 ? void 0 : evt.tagName) !== null && _b !== void 0 ? _b : node.nodeName.toLowerCase();\n if (scope !== 'html' && schema.isValid(scope)) {\n if (isNonNullable(evt)) {\n evt.allowedTags[lcTagName] = true;\n }\n return;\n }\n if (node.nodeType !== ELEMENT || lcTagName === 'body') {\n return;\n }\n const element = SugarElement.fromDom(node);\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$4(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$4(element);\n } else {\n unwrap(element);\n }\n return;\n } else {\n if (isNonNullable(evt)) {\n evt.allowedTags[lcTagName] = true;\n }\n }\n if (validate && rule && !isInternalElement) {\n each$e((_c = rule.attributesForced) !== null && _c !== void 0 ? _c : [], attr => {\n set$4(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n });\n each$e((_d = rule.attributesDefault) !== null && _d !== void 0 ? _d : [], attr => {\n if (!has$1(element, attr.name)) {\n set$4(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 const processAttr = (ele, settings, schema, scope, evt) => {\n const tagName = ele.tagName.toLowerCase();\n const {attrName, attrValue} = evt;\n evt.keepAttr = shouldKeepAttribute(settings, schema, scope, tagName, attrName, attrValue);\n if (evt.keepAttr) {\n evt.allowedAttributes[attrName] = true;\n if (isBooleanAttribute(attrName, schema)) {\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 (isRequiredAttributeOfInternalElement(ele, attrName)) {\n evt.forceKeepAttr = true;\n }\n };\n const shouldKeepAttribute = (settings, schema, scope, tagName, attrName, attrValue) => {\n if (scope !== 'html' && !isNonHtmlElementRootName(tagName)) {\n return true;\n }\n return !(attrName in filteredUrlAttrs && isInvalidUri(settings, attrValue, tagName)) && (!settings.validate || schema.isValid(tagName, attrName) || startsWith(attrName, 'data-') || startsWith(attrName, 'aria-'));\n };\n const isRequiredAttributeOfInternalElement = (ele, attrName) => ele.hasAttribute(internalElementAttr) && (attrName === 'id' || attrName === 'class' || attrName === 'style');\n const isBooleanAttribute = (attrName, schema) => attrName in schema.getBoolAttrs();\n const filterAttributes = (ele, settings, schema, scope) => {\n const {attributes} = ele;\n for (let i = attributes.length - 1; i >= 0; i--) {\n const attr = attributes[i];\n const attrName = attr.name;\n const attrValue = attr.value;\n if (!shouldKeepAttribute(settings, schema, scope, ele.tagName.toLowerCase(), attrName, attrValue) && !isRequiredAttributeOfInternalElement(ele, attrName)) {\n ele.removeAttribute(attrName);\n } else if (isBooleanAttribute(attrName, schema)) {\n ele.setAttribute(attrName, attrName);\n }\n }\n };\n const setupPurify = (settings, schema, namespaceTracker) => {\n const purify$1 = purify();\n purify$1.addHook('uponSanitizeElement', (ele, evt) => {\n processNode(ele, settings, schema, namespaceTracker.track(ele), evt);\n });\n purify$1.addHook('uponSanitizeAttribute', (ele, evt) => {\n processAttr(ele, settings, schema, namespaceTracker.current(), evt);\n });\n return purify$1;\n };\n const getPurifyConfig = (settings, mimeType) => {\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 SAFE_FOR_XML: false\n };\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 sanitizeSvgElement = ele => {\n const xlinkAttrs = [\n 'type',\n 'href',\n 'role',\n 'arcrole',\n 'title',\n 'show',\n 'actuate',\n 'label',\n 'from',\n 'to'\n ].map(name => `xlink:${ name }`);\n const config = {\n IN_PLACE: true,\n USE_PROFILES: {\n html: true,\n svg: true,\n svgFilters: true\n },\n ALLOWED_ATTR: xlinkAttrs\n };\n purify().sanitize(ele, config);\n };\n const sanitizeMathmlElement = (node, settings) => {\n const config = {\n IN_PLACE: true,\n USE_PROFILES: { mathMl: true }\n };\n const purify$1 = purify();\n const allowedEncodings = settings.allow_mathml_annotation_encodings;\n const hasAllowedEncodings = isArray$1(allowedEncodings) && allowedEncodings.length > 0;\n const hasValidEncoding = el => {\n const encoding = el.getAttribute('encoding');\n return hasAllowedEncodings && isString(encoding) && contains$2(allowedEncodings, encoding);\n };\n purify$1.addHook('uponSanitizeElement', (node, evt) => {\n var _a;\n const lcTagName = (_a = evt.tagName) !== null && _a !== void 0 ? _a : node.nodeName.toLowerCase();\n if (hasAllowedEncodings && lcTagName === 'semantics') {\n evt.allowedTags[lcTagName] = true;\n }\n if (lcTagName === 'annotation') {\n const elm = node;\n const keepElement = hasValidEncoding(elm);\n evt.allowedTags[lcTagName] = keepElement;\n if (!keepElement) {\n elm.remove();\n }\n }\n });\n purify$1.sanitize(node, config);\n };\n const mkSanitizeNamespaceElement = settings => ele => {\n const namespaceType = toScopeType(ele);\n if (namespaceType === 'svg') {\n sanitizeSvgElement(ele);\n } else if (namespaceType === 'math') {\n sanitizeMathmlElement(ele, settings);\n } else {\n throw new Error('Not a namespace element');\n }\n };\n const getSanitizer = (settings, schema) => {\n const namespaceTracker = createNamespaceTracker();\n if (settings.sanitize) {\n const purify = setupPurify(settings, schema, namespaceTracker);\n const sanitizeHtmlElement = (body, mimeType) => {\n purify.sanitize(body, getPurifyConfig(settings, mimeType));\n purify.removed = [];\n namespaceTracker.reset();\n };\n return {\n sanitizeHtmlElement,\n sanitizeNamespaceElement: mkSanitizeNamespaceElement(settings)\n };\n } else {\n const sanitizeHtmlElement = (body, _mimeType) => {\n const nodeIterator = document.createNodeIterator(body, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT);\n let node;\n while (node = nodeIterator.nextNode()) {\n const currentScope = namespaceTracker.track(node);\n processNode(node, settings, schema, currentScope);\n if (isElement$6(node)) {\n filterAttributes(node, settings, schema, currentScope);\n }\n }\n namespaceTracker.reset();\n };\n const sanitizeNamespaceElement = noop;\n return {\n sanitizeHtmlElement,\n sanitizeNamespaceElement\n };\n }\n };\n\n const makeMap = Tools.makeMap, extend$1 = Tools.extend;\n const transferChildren = (parent, nativeParent, specialElements, nsSanitizer) => {\n const parentName = parent.name;\n const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea' && parentName !== 'noscript';\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 if (isNonHtmlElementRootName(child.name)) {\n nsSanitizer(nativeChild);\n child.value = nativeChild.innerHTML;\n }\n } else if (isText$b(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 if (!isNonHtmlElementRootName(child.name)) {\n transferChildren(child, nativeChild, specialElements, nsSanitizer);\n }\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 || isTransparentAstBlock(schema, node) || isNonHtmlElementRootName(node.name) && node.parent === root;\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 if (text === ' ' && node.prev && node.prev.type === COMMENT && node.next && node.next.type === COMMENT) {\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(settings, 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(settings, 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$8();\n const attributeFilterRegistry = create$8();\n const defaultedSettings = {\n validate: true,\n root_name: 'body',\n sanitize: true,\n ...settings\n };\n const parser = new DOMParser();\n const sanitizer = getSanitizer(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 }` : html;\n const makeWrap = () => {\n if (format === 'xhtml') {\n return `${ content }`;\n } else if (/^[\\s]*${ content }`;\n } else {\n return `${ content }`;\n }\n };\n const body = parser.parseFromString(makeWrap(), mimeType).body;\n sanitizer.sanitizeHtmlElement(body, mimeType);\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)) && !isNonHtmlElementRootName(node.name);\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(), sanitizer.sanitizeNamespaceElement);\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, rootNode, matchFinder);\n args.invalid = topLevelChildren.length > 0;\n } else {\n cleanInvalidNodes(invalidChildren, schema, rootNode, 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, parserSettings) => {\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 ...parserSettings\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 makeParserSettings = editor => ({\n sanitize: shouldSanitizeXss(editor),\n sandbox_iframes: shouldSandboxIframes(editor),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor)\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, content => fireGetContent(editor, {\n ...args,\n content\n }), makeParserSettings(editor));\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 }), makeParserSettings(editor));\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$9(td, 'colspan');\n remove$9(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, schema) => {\n const commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n const parents = parentsAndSelf(commonAnchorContainer, rootNode);\n const wrapElements = filter$5(parents, el => schema.isWrapper(name(el)));\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, schema) => wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng, schema));\n const getParentTable = (rootElm, cell) => ancestor$3(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, schema) => ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0], schema);\n const read$3 = (rootNode, ranges, schema) => {\n const selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges, schema);\n };\n\n const isCollapsibleWhitespace = (text, index) => index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n const getInnerText = bin => {\n return trim$2(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$2((_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, editor.schema).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$b(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (isComment(elm)) {\n return '';\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, trimZwsp) => filter$5(map$3(from(elm.childNodes), trimZwsp ? compose(trim$2, getOuterHtml) : getOuterHtml), item => {\n return item.length > 0;\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 = body => body.querySelector('iframe') !== null;\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 tempAttrs = editor.serializer.getTempAttrs();\n const body = trim$1(editor.getBody(), tempAttrs);\n return hasIframes(body) ? createFragmentedLevel(read$2(body, true)) : createCompleteLevel(trim$2(body.innerHTML));\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$1(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(editor, names),\n apply: (name, vars, node) => applyFormat$1(editor, name, vars, node),\n remove: (name, vars, node, similar) => removeFormat$1(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: noop,\n removeDecoration: noop\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$t = 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\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$4(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, schema) => {\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, schema, false, !start);\n rng.setStart(innerElm, oldLength);\n } else {\n mergeTextNodes(innerElm, outerElm, schema, false, !start);\n rng.setEnd(innerElm, oldLength);\n }\n };\n const normalizeTextIfRequired = (inner, start, schema) => {\n parent(inner).each(root => {\n const text = inner.dom;\n if (start && needsToBeNbspLeft(root, CaretPosition(text, 0), schema)) {\n normalizeWhitespaceAfter(text, 0, schema);\n } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length), schema)) {\n normalizeWhitespaceBefore(text, text.length, schema);\n }\n });\n };\n const mergeAndNormalizeText = (outerNode, innerNode, rng, start, schema) => {\n outerNode.bind(outer => {\n const normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n normalizer(outer.dom, start ? outer.dom.length : 0, schema);\n return innerNode.filter(isText$c).map(inner => merge$1(outer, inner, rng, start, schema));\n }).orThunk(() => {\n const innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$c);\n return innerTextNode.map(inner => normalizeTextIfRequired(inner, start, schema));\n });\n };\n const rngSetContent = (rng, fragment, schema) => {\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$c).bind(removeEmpty);\n const nextText = lastChild.bind(nextSibling).filter(isText$c).bind(removeEmpty);\n mergeAndNormalizeText(prevText, firstChild, rng, true, schema);\n mergeAndNormalizeText(nextText, lastChild, rng, false, schema);\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), editor.schema);\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$1 = real => getEnd(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 isEditable = () => {\n if (editor.mode.isReadOnly()) {\n return false;\n }\n const rng = getRng$1();\n const fakeSelectedElements = editor.getBody().querySelectorAll('[data-mce-selected=\"1\"]');\n if (fakeSelectedElements.length > 0) {\n return forall(fakeSelectedElements, el => dom.isEditable(el.parentElement));\n } else {\n return isEditableRange(dom, rng);\n }\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 (_a) {\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 (_a) {\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 (_a) {\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 (_a) {\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 isEditable,\n isForward,\n setNode,\n getNode: getNode$1,\n getSel,\n setRng,\n getRng: getRng$1,\n getStart: getStart$1,\n getEnd: getEnd$1,\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 addNodeFilter = (settings, htmlParser, schema) => {\n htmlParser.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 || isTransparentAstBlock(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 && isBlock(parent) && 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(settings, 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\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('script,style', (nodes, name) => {\n var _a;\n const trim = value => {\n return value.replace(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*(()?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n 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 = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n firstChild.value = '';\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 if (settings.remove_trailing_brs) {\n addNodeFilter(settings, htmlParser, htmlParser.schema);\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$2(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 defaultedSettings = {\n entity_encoding: 'named',\n remove_trailing_brs: true,\n pad_empty_with_br: false,\n ...settings\n };\n const dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n const schema = editor && editor.schema ? editor.schema : Schema(defaultedSettings);\n const htmlParser = DomParser(defaultedSettings, schema);\n register$3(htmlParser, defaultedSettings, 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, defaultedSettings, 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,' + 'template_cdate_classes,template_mdate_classes,template_selected_content_classes,template_preview_replace_values,template_replace_values,templates,template_cdate_format,template_mdate_format').split(',');\n const deprecatedOptions = [];\n const removedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,template,textcolor,rtc'.split(',');\n const deprecatedPlugins = [];\n const getMatchingOptions = (options, searchingFor) => {\n const settingNames = filter$5(searchingFor, setting => has$2(options, setting));\n return sort(settingNames);\n };\n const getRemovedOptions = options => {\n const settingNames = getMatchingOptions(options, removedOptions);\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 getDeprecatedOptions = options => getMatchingOptions(options, deprecatedOptions);\n const getMatchingPlugins = (options, searchingFor) => {\n const plugins = Tools.makeMap(options.plugins, ' ');\n const hasPlugin = plugin => has$2(plugins, plugin);\n const pluginNames = filter$5(searchingFor, hasPlugin);\n return sort(pluginNames);\n };\n const getRemovedPlugins = options => getMatchingPlugins(options, removedPlugins);\n const getDeprecatedPlugins = options => getMatchingPlugins(options, deprecatedPlugins.map(entry => entry.name));\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 7.0. These features will no longer work and should be removed from the TinyMCE configuration. ' + 'See https://www.tiny.cloud/docs/tinymce/7/migration-from-6x/ for more information.' + themesMessage + pluginsMessage + optionsMessage);\n }\n };\n const getPluginDescription = name => find$2(deprecatedPlugins, entry => entry.name === name).fold(() => name, entry => {\n if (entry.replacedWith) {\n return `${ name }, replaced by ${ entry.replacedWith }`;\n } else {\n return name;\n }\n });\n const logDeprecatedWarnings = (rawOptions, normalizedOptions) => {\n const deprecatedOptions = getDeprecatedOptions(rawOptions);\n const deprecatedPlugins = getDeprecatedPlugins(normalizedOptions);\n const hasDeprecatedPlugins = deprecatedPlugins.length > 0;\n const hasDeprecatedOptions = deprecatedOptions.length > 0;\n if (hasDeprecatedPlugins || hasDeprecatedOptions) {\n const listJoiner = '\\n- ';\n const pluginsMessage = hasDeprecatedPlugins ? `\\n\\nPlugins:${ listJoiner }${ deprecatedPlugins.map(getPluginDescription).join(listJoiner) }` : '';\n const optionsMessage = hasDeprecatedOptions ? `\\n\\nOptions:${ listJoiner }${ deprecatedOptions.join(listJoiner) }` : '';\n console.warn('The following deprecated features are currently enabled but will be removed soon.' + pluginsMessage + optionsMessage);\n }\n };\n const logWarnings = (rawOptions, normalizedOptions) => {\n logRemovedWarnings(rawOptions, normalizedOptions);\n logDeprecatedWarnings(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 getTopNotification().each(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 }, () => hasEditorOrUiFocus(editor));\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 ToggleView FullscreenStateChanged', () => {\n requestAnimationFrame(reposition);\n });\n editor.on('remove', () => {\n each$e(notifications.slice(), notification => {\n getImplementation().close(notification);\n });\n });\n editor.on('keydown', e => {\n var _a;\n const isF12 = ((_a = e.key) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'f12' || e.keyCode === 123;\n if (e.altKey && isF12) {\n e.preventDefault();\n getTopNotification().map(notificationApi => SugarElement.fromDom(notificationApi.getEl())).each(elm => focus$1(elm));\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 removeFakeSelection = editor => {\n Optional.from(editor.selection.getNode()).each(elm => {\n elm.removeAttribute('data-mce-selected');\n });\n };\n const setEditorCommandState = (editor, cmd, state) => {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (_a) {\n }\n };\n const setCommonEditorCommands = (editor, state) => {\n setEditorCommandState(editor, 'StyleWithCSS', state);\n setEditorCommandState(editor, 'enableInlineTableEditing', state);\n setEditorCommandState(editor, 'enableObjectResizing', state);\n };\n const restoreFakeSelection = editor => {\n editor.selection.setRng(editor.selection.getRng());\n };\n const toggleClass = (elm, cls, state) => {\n if (has(elm, cls) && !state) {\n remove$6(elm, cls);\n } else if (state) {\n add$2(elm, cls);\n }\n };\n const disableEditor = editor => {\n const body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', true);\n editor.selection.controlSelection.hideResizeRect();\n editor._selectionOverrides.hideFakeCaret();\n removeFakeSelection(editor);\n };\n const enableEditor = editor => {\n const body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', false);\n if (editor.hasEditableRoot()) {\n set$3(body, true);\n }\n setCommonEditorCommands(editor, false);\n if (hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n };\n\n const isDisabled = editor => isDisabled$1(editor);\n const internalContentEditableAttr = 'data-mce-contenteditable';\n const switchOffContentEditableTrue = elm => {\n each$e(descendants(elm, '*[contenteditable=\"true\"]'), elm => {\n set$4(elm, internalContentEditableAttr, 'true');\n set$3(elm, false);\n });\n };\n const switchOnContentEditableTrue = elm => {\n each$e(descendants(elm, `*[${ internalContentEditableAttr }=\"true\"]`), elm => {\n remove$9(elm, internalContentEditableAttr);\n set$3(elm, true);\n });\n };\n const toggleDisabled = (editor, state) => {\n const body = SugarElement.fromDom(editor.getBody());\n if (state) {\n disableEditor(editor);\n set$3(body, false);\n switchOffContentEditableTrue(body);\n } else {\n switchOnContentEditableTrue(body);\n enableEditor(editor);\n }\n };\n const registerDisabledContentFilters = editor => {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', () => {\n registerFilters(editor);\n });\n }\n };\n const registerFilters = editor => {\n editor.parser.addAttributeFilter('contenteditable', nodes => {\n if (isDisabled(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 (isDisabled(editor)) {\n each$e(nodes, node => {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n const isClickEvent = e => e.type === 'click';\n const allowedEvents = ['copy'];\n const isAllowedEventInDisabledMode = 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 processDisabledEvents = (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 (isAllowedEventInDisabledMode(e)) {\n editor.dispatch(e.type, e);\n }\n };\n const registerDisabledModeEventHandlers = editor => {\n editor.on('ShowCaret ObjectSelected', e => {\n if (isDisabled(editor)) {\n e.preventDefault();\n }\n });\n editor.on('DisabledStateChange', e => {\n if (!e.isDefaultPrevented()) {\n toggleDisabled(editor, e.state);\n }\n });\n };\n const registerEventsAndFilters$1 = editor => {\n registerDisabledContentFilters(editor);\n registerDisabledModeEventHandlers(editor);\n };\n\n const isContentCssSkinName = url => /^[a-z0-9\\-]+$/i.test(url);\n const toContentSkinResourceName = url => 'content/' + url + '/content.css';\n const isBundledCssSkinName = url => tinymce.Resource.has(toContentSkinResourceName(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 (isBundledCssSkinName(url)) {\n return url;\n } else 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 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(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 isEmptyForPadding = (editor, element) => editor.dom.isEmpty(element.dom) && isNonNullable(editor.schema.getTextBlockElements()[name(element)]);\n const addPaddingToEmpty = editor => element => {\n if (isEmptyForPadding(editor, element)) {\n append$1(element, SugarElement.fromHtml('
    '));\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(fromDom$1(imagesToRemove), sugarElement => {\n const parentOpt = parent(sugarElement);\n remove$4(sugarElement);\n parentOpt.each(addPaddingToEmpty(editor));\n blobCache.removeByUri(sugarElement.dom.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 if (resultItem.uriType === 'blob') {\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: '.mce-placeholder',\n styles: { float: 'left' },\n ceFalseOverride: true\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: '.mce-placeholder',\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n ceFalseOverride: true\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: '.mce-placeholder',\n styles: { float: 'right' },\n ceFalseOverride: true\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 samp: { inline: 'samp' },\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'.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$s = 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$s(editor);\n setup$v(editor);\n if (!isRtc(editor)) {\n setup$u(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 const isMeta = Env.os.isMacOS() && e.key === 'Meta';\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey || isMeta) {\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 return;\n }\n const hasOnlyMetaOrCtrlModifier = Env.os.isMacOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n if (hasOnlyMetaOrCtrlModifier) {\n undoManager.beforeChange();\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 (dom.isEmpty(rootElm, undefined, {\n skipBogus: false,\n includeZwsp: true\n })) {\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$r = 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 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 isNotAncestorial = blockBoundary => !(contains(blockBoundary.to.block, blockBoundary.from.block) || contains(blockBoundary.from.block, blockBoundary.to.block));\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$1 = blockBoundary => isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;\n const hasValidBlocks = blockBoundary => {\n const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom) || isListItem$1(block);\n return isValidBlock(blockBoundary.from.block) && isValidBlock(blockBoundary.to.block);\n };\n const skipLastBr = (schema, rootNode, forward, blockPosition) => {\n if (isBr$6(blockPosition.position.getNode()) && !isEmpty$2(schema, 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 = (schema, 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(schema, rootNode, forward, blockPos))));\n return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(blockBoundary => isDifferentBlocks(blockBoundary) && hasSameHost(rootNode, blockBoundary) && isEditable$1(blockBoundary) && hasValidBlocks(blockBoundary) && isNotAncestorial(blockBoundary));\n };\n const read$1 = (schema, rootNode, forward, rng) => rng.collapsed ? readFromRange(schema, rootNode, forward, rng) : Optional.none();\n\n const getChildrenUntilBlockBoundary = (block, schema) => {\n const children = children$1(block);\n return findIndex$2(children, el => schema.isBlock(name(el))).fold(constant(children), index => children.slice(0, index));\n };\n const extractChildren = (block, schema) => {\n const children = getChildrenUntilBlockBoundary(block, schema);\n each$e(children, remove$4);\n return children;\n };\n const removeEmptyRoot = (schema, rootNode, block) => {\n const parents = parentsAndSelf(block, rootNode);\n return find$2(parents.reverse(), element => isEmpty$2(schema, element)).each(remove$4);\n };\n const isEmptyBefore = (schema, el) => filter$5(prevSiblings(el), el => !isEmpty$2(schema, el)).length === 0;\n const nestedBlockMerge = (rootNode, fromBlock, toBlock, schema, insertionPoint) => {\n if (isEmpty$2(schema, toBlock)) {\n fillWithPaddingBr(toBlock);\n return firstPositionIn(toBlock.dom);\n }\n if (isEmptyBefore(schema, insertionPoint) && isEmpty$2(schema, fromBlock)) {\n before$3(insertionPoint, SugarElement.fromTag('br'));\n }\n const position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n each$e(extractChildren(fromBlock, schema), child => {\n before$3(insertionPoint, child);\n });\n removeEmptyRoot(schema, rootNode, fromBlock);\n return position;\n };\n const isInline = (schema, node) => schema.isInline(name(node));\n const sidelongBlockMerge = (rootNode, fromBlock, toBlock, schema) => {\n if (isEmpty$2(schema, toBlock)) {\n if (isEmpty$2(schema, fromBlock)) {\n const getInlineToBlockDescendants = el => {\n const helper = (node, elements) => firstChild(node).fold(() => elements, child => isInline(schema, child) ? helper(child, elements.concat(shallow$1(child))) : elements);\n return helper(el, []);\n };\n const newFromBlockDescendants = foldr(getInlineToBlockDescendants(toBlock), (element, descendant) => {\n wrap$2(element, descendant);\n return descendant;\n }, createPaddingBr());\n empty(fromBlock);\n append$1(fromBlock, newFromBlockDescendants);\n }\n remove$4(toBlock);\n return firstPositionIn(fromBlock.dom);\n }\n const position = lastPositionIn(toBlock.dom);\n each$e(extractChildren(fromBlock, schema), child => {\n append$1(toBlock, child);\n });\n removeEmptyRoot(schema, 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$4);\n };\n const mergeBlockInto = (rootNode, fromBlock, toBlock, schema) => {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock, schema), curry(nestedBlockMerge, rootNode, fromBlock, toBlock, schema));\n };\n const mergeBlocks = (rootNode, forward, block1, block2, schema) => forward ? mergeBlockInto(rootNode, block2, block1, schema) : mergeBlockInto(rootNode, block1, block2, schema);\n\n const backspaceDelete$a = (editor, forward) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const position = read$1(editor.schema, rootNode.dom, forward, editor.selection.getRng()).map(blockBoundary => () => {\n mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block, editor.schema).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n });\n return position;\n };\n\n const deleteRangeMergeBlocks = (rootNode, selection, schema) => {\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, schema).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$4(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$2 = 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, editor.schema);\n };\n const backspaceDelete$9 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$2(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$b(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$b(range.commonAncestorContainer)) {\n return Optional.none();\n }\n const direction = forward ? 1 : -1;\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$8 = (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, schema) => {\n const inSameBlock = elm => schema.isInline(elm.nodeName.toLowerCase()) && !isInSameBlock(from, to, root);\n return getRelativeCefElm(!forward, from).fold(() => getRelativeCefElm(forward, to).fold(never, inSameBlock), inSameBlock);\n };\n const deleteEmptyBlockOrMoveToCef = (schema, 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(schema, blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm)).orThunk(() => Optional.some(DeleteAction.moveToElement(toCefElm)));\n };\n const findCefPosition = (root, forward, from, schema) => fromPosition(forward, root, from).bind(to => {\n if (isCompoundElement(to.getNode())) {\n return Optional.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to, schema)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse$b(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(schema, root, forward, from, to);\n } else if (!forward && isContentEditableFalse$b(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(schema, 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$b(elm.nextSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (!forward && isContentEditableFalse$b(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, schema) => {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(!forward)).orThunk(() => findCefPosition(root, forward, from, schema));\n } else {\n return findCefPosition(root, forward, from, schema).bind(deleteAction => skipMoveToActionFromInlineCefToContent(root, from, deleteAction));\n }\n };\n const read = (root, forward, rng, schema) => {\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, schema)) {\n return findPreviousBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from, schema)) {\n return findNextBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n } else {\n return getContentEditableAction(root, forward, from, schema);\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$b).fold(() => read(editor.getBody(), forward, editor.selection.getRng(), editor.schema).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$4);\n };\n const backspaceDeleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n if (isContentEditableFalse$b(selectedNode) && !isTableCell$3(selectedNode)) {\n const hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$b);\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$7 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n\n const isTextEndpoint = endpoint => endpoint.hasOwnProperty('text');\n const isElementEndpoint = endpoint => endpoint.hasOwnProperty('marker');\n const getBookmark = (range, createMarker) => {\n const getEndpoint = (container, offset) => {\n if (isText$b(container)) {\n return {\n text: container,\n offset\n };\n } else {\n const marker = createMarker();\n const children = container.childNodes;\n if (offset < children.length) {\n container.insertBefore(marker, children[offset]);\n return {\n marker,\n before: true\n };\n } else {\n container.appendChild(marker);\n return {\n marker,\n before: false\n };\n }\n }\n };\n const end = getEndpoint(range.endContainer, range.endOffset);\n const start = getEndpoint(range.startContainer, range.startOffset);\n return {\n start,\n end\n };\n };\n const resolveBookmark = bm => {\n var _a, _b;\n const {start, end} = bm;\n const rng = new window.Range();\n if (isTextEndpoint(start)) {\n rng.setStart(start.text, start.offset);\n } else {\n if (isElementEndpoint(start)) {\n if (start.before) {\n rng.setStartBefore(start.marker);\n } else {\n rng.setStartAfter(start.marker);\n }\n (_a = start.marker.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(start.marker);\n }\n }\n if (isTextEndpoint(end)) {\n rng.setEnd(end.text, end.offset);\n } else {\n if (isElementEndpoint(end)) {\n if (end.before) {\n rng.setEndBefore(end.marker);\n } else {\n rng.setEndAfter(end.marker);\n }\n (_b = end.marker.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(end.marker);\n }\n }\n return rng;\n };\n\n const backspaceDelete$6 = (editor, forward) => {\n var _a;\n const dom = editor.dom;\n const startBlock = dom.getParent(editor.selection.getStart(), dom.isBlock);\n const endBlock = dom.getParent(editor.selection.getEnd(), dom.isBlock);\n const body = editor.getBody();\n const startBlockName = (_a = startBlock === null || startBlock === void 0 ? void 0 : startBlock.nodeName) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n if (startBlockName === 'div' && startBlock && endBlock && startBlock === body.firstChild && endBlock === body.lastChild && !dom.isEmpty(body)) {\n const wrapper = startBlock.cloneNode(false);\n const deleteAction = () => {\n if (forward) {\n execNativeForwardDeleteCommand(editor);\n } else {\n execNativeDeleteCommand(editor);\n }\n if (body.firstChild !== startBlock) {\n const bookmark = getBookmark(editor.selection.getRng(), () => document.createElement('span'));\n Array.from(body.childNodes).forEach(node => wrapper.appendChild(node));\n body.appendChild(wrapper);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n return Optional.some(deleteAction);\n }\n return Optional.none();\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$5 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : Optional.none();\n\n const isText$2 = isText$b;\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$1 = 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$1 = 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$1(node) : insertAfter$1(node);\n const insertInlineBefore = curry(insertInline, true);\n const insertInlineAfter = curry(insertInline, false);\n\n const insertInlinePos = (pos, before) => {\n if (isText$b(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$2(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$2(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$2(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$2(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 === -1 ? reverse(positions) : positions;\n const walk$1 = (direction, caretWalker, pos) => direction === 1 ? caretWalker.next(pos) : caretWalker.prev(pos);\n const getBreakType = (scope, direction, currentPos, nextPos) => {\n if (isBr$6(nextPos.getNode(direction === 1))) {\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 === 1) {\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 === -1 ? 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$5 = isContentEditableFalse$b;\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$5(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$b(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 === VDirection.Up) {\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$1(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$1(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$1(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 === VDirection.Down) {\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$1(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 === 1;\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 === -1, false);\n } else if (isCefAtEdgeSelected(editor)) {\n const newRange = range.cloneRange();\n newRange.collapse(direction === -1);\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$1(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$1(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$2(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$3 = (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$4 = (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 hasMultipleChildren = elm => childNodesCount(elm) > 1;\n const getParentsUntil = (editor, pred) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n const startElm = SugarElement.fromDom(editor.selection.getStart());\n const parents = parentsAndSelf(startElm, rootElm);\n return findIndex$2(parents, pred).fold(constant(parents), index => parents.slice(0, index));\n };\n const hasOnlyOneChild = elm => childNodesCount(elm) === 1;\n const getParentInlinesUntilMultichildInline = editor => getParentsUntil(editor, elm => editor.schema.isBlock(name(elm)) || hasMultipleChildren(elm));\n const getParentInlines = editor => getParentsUntil(editor, el => editor.schema.isBlock(name(el)));\n const getFormatNodes = (editor, parentInlines) => {\n const isFormatElement$1 = curry(isFormatElement, editor);\n return bind$3(parentInlines, elm => isFormatElement$1(elm) ? [elm.dom] : []);\n };\n const getFormatNodesAtStart = editor => {\n const parentInlines = getParentInlines(editor);\n return getFormatNodes(editor, parentInlines);\n };\n const deleteLastPosition = (forward, editor, target, parentInlines) => {\n const formatNodes = getFormatNodes(editor, parentInlines);\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 parentInlines = filter$5(getParentInlinesUntilMultichildInline(editor), hasOnlyOneChild);\n return last$2(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 isBrInEmptyElement = (editor, elm) => {\n const parentElm = elm.parentElement;\n return isBr$6(elm) && !isNull(parentElm) && editor.dom.isEmpty(parentElm);\n };\n const isEmptyCaret = elm => isEmptyCaretFormatElement(SugarElement.fromDom(elm));\n const createCaretFormatAtStart = (editor, formatNodes) => {\n const startElm = editor.selection.getStart();\n const pos = isBrInEmptyElement(editor, startElm) || isEmptyCaret(startElm) ? replaceWithCaretFormat(startElm, formatNodes) : createCaretFormatAtStart$1(editor.selection.getRng(), formatNodes);\n editor.selection.setRng(pos.toRange());\n };\n const updateCaretFormat = (editor, updateFormats) => {\n const missingFormats = difference(updateFormats, getFormatNodesAtStart(editor));\n if (missingFormats.length > 0) {\n createCaretFormatAtStart(editor, missingFormats);\n }\n };\n const rangeStartsAtTextContainer = rng => isText$b(rng.startContainer);\n const rangeStartsAtStartOfTextContainer = rng => rng.startOffset === 0 && rangeStartsAtTextContainer(rng);\n const rangeStartParentIsFormatElement = (editor, rng) => {\n const startParent = rng.startContainer.parentElement;\n return !isNull(startParent) && isFormatElement(editor, SugarElement.fromDom(startParent));\n };\n const rangeStartAndEndHaveSameParent = rng => {\n const startParent = rng.startContainer.parentNode;\n const endParent = rng.endContainer.parentNode;\n return !isNull(startParent) && !isNull(endParent) && startParent.isEqualNode(endParent);\n };\n const rangeEndsAtEndOfEndContainer = rng => {\n const endContainer = rng.endContainer;\n return rng.endOffset === (isText$b(endContainer) ? endContainer.length : endContainer.childNodes.length);\n };\n const rangeEndsAtEndOfStartContainer = rng => rangeStartAndEndHaveSameParent(rng) && rangeEndsAtEndOfEndContainer(rng);\n const rangeEndsAfterEndOfStartContainer = rng => !rng.endContainer.isEqualNode(rng.commonAncestorContainer);\n const rangeEndsAtOrAfterEndOfStartContainer = rng => rangeEndsAtEndOfStartContainer(rng) || rangeEndsAfterEndOfStartContainer(rng);\n const requiresDeleteRangeOverride = editor => {\n const rng = editor.selection.getRng();\n return rangeStartsAtStartOfTextContainer(rng) && rangeStartParentIsFormatElement(editor, rng) && rangeEndsAtOrAfterEndOfStartContainer(rng);\n };\n const deleteRange$1 = editor => {\n if (requiresDeleteRangeOverride(editor)) {\n const formatNodes = getFormatNodesAtStart(editor);\n return Optional.some(() => {\n execNativeDeleteCommand(editor);\n updateCaretFormat(editor, formatNodes);\n });\n } else {\n return Optional.none();\n }\n };\n const backspaceDelete$3 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : deleteRange$1(editor);\n const hasAncestorInlineCaret = (elm, schema) => ancestor$2(elm, node => isCaretNode(node.dom), el => schema.isBlock(name(el)));\n const hasAncestorInlineCaretAtStart = editor => hasAncestorInlineCaret(SugarElement.fromDom(editor.selection.getStart()), editor.schema);\n const requiresRefreshCaretOverride = editor => {\n const rng = editor.selection.getRng();\n return rng.collapsed && (rangeStartsAtTextContainer(rng) || editor.dom.isEmpty(rng.startContainer)) && !hasAncestorInlineCaretAtStart(editor);\n };\n const refreshCaret = editor => {\n if (requiresRefreshCaretOverride(editor)) {\n createCaretFormatAtStart(editor, []);\n }\n return true;\n };\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 ? 1 : -1;\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$2 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n\n const isEditable = target => closest$4(target, elm => isContentEditableTrue$3(elm.dom) || isContentEditableFalse$b(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(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(el));\n const handle = (editor, command) => {\n var _a, _b;\n if (editor.mode.isReadOnly()) {\n return;\n }\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$1 = 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, editor.schema)) {\n return Optional.some(() => outdent(editor));\n }\n }\n return Optional.none();\n };\n\n const findAction = (editor, caret, forward) => findMap([\n backspaceDelete$1,\n backspaceDelete$7,\n backspaceDelete$8,\n (editor, forward) => backspaceDelete$4(editor, caret, forward),\n backspaceDelete$a,\n backspaceDelete$b,\n backspaceDelete$5,\n backspaceDelete$2,\n backspaceDelete$9,\n backspaceDelete$3,\n backspaceDelete$6\n ], item => item(editor, forward)).filter(_ => editor.selection.isEditable());\n const deleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, false);\n result.fold(() => {\n if (editor.selection.isEditable()) {\n execNativeDeleteCommand(editor);\n paddEmptyBody(editor);\n }\n }, call);\n };\n const forwardDeleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, true);\n result.fold(() => {\n if (editor.selection.isEditable()) {\n execNativeForwardDeleteCommand(editor);\n }\n }, call);\n };\n const setup$q = (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$p = editor => {\n const startData = value$2();\n const longpressFired = Cell(false);\n const debounceLongpress = last(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$b(node)) {\n return true;\n } else if (isElement$6(node)) {\n return !isBlockElement(schema.getBlockElements(), node) && !isBookmarkNode$1(node) && !isTransparentBlock(schema, node) && !isNonHtmlElementRoot(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$b(node)) {\n if (node.data.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.data)) {\n return !node.nextSibling || isBlockElement(blockElements, node.nextSibling) || isNonHtmlElementRoot(node.nextSibling);\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 bm = null;\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 if (rootNode.firstChild === rootNode.lastChild && isBr$6(rootNode.firstChild)) {\n rootBlockNode = createRootBlock(editor);\n rootBlockNode.appendChild(createPaddingBr().dom);\n rootNode.replaceChild(rootBlockNode, rootNode.firstChild);\n editor.selection.setCursorLocation(rootBlockNode, 0);\n editor.nodeChanged();\n return;\n }\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 if (!bm && editor.hasFocus()) {\n bm = getBookmark(editor.selection.getRng(), () => document.createElement('span'));\n }\n if (!node.parentNode) {\n node = null;\n break;\n }\n rootBlockNode = createRootBlock(editor);\n rootNode.insertBefore(rootBlockNode, node);\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 (bm) {\n editor.selection.setRng(resolveBookmark(bm));\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$o = editor => {\n editor.on('NodeChange', () => 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 '' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '';\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 isValidContent = (nonEditableRegExps, content) => {\n return forall(nonEditableRegExps, re => {\n const matches = content.match(re);\n return matches !== null && matches[0].length === content.length;\n });\n };\n const setup$n = 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 const content = node.attr('data-mce-content');\n if (nonEditableRegExps.length > 0 && content) {\n if (isValidContent(nonEditableRegExps, content)) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = content;\n } else {\n node.remove();\n }\n } else {\n node.attr(contentEditableAttrName, null);\n }\n }\n });\n };\n\n const findBlockCaretContainer = editor => descendant$1(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$m = editor => {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n\n const isContentEditableFalse$4 = isContentEditableFalse$b;\n const moveToCeFalseHorizontally = (direction, editor, range) => moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$4);\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$4);\n };\n const createTextBlock = editor => {\n const textBlock = editor.dom.create(getForcedRootBlock(editor));\n textBlock.innerHTML = '
    ';\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 ? 1 : -1;\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 flipDirection = (selection, forward) => {\n const elm = forward ? selection.getEnd(true) : selection.getStart(true);\n return isRtl(elm) ? !forward : forward;\n };\n const moveH$2 = (editor, forward) => getHorizontalRange(editor, flipDirection(editor.selection, forward)).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n const moveV$4 = (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, schema) => {\n const isRoot = curry(eq, root);\n return closest$4(SugarElement.fromDom(pos.container()), el => schema.isBlock(name(el)), 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, editor.schema).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$3 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n\n const moveUp = (editor, details, summary) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (root.firstChild === details && isAtFirstLine(summary, pos)) {\n editor.execCommand('InsertNewBlockBefore');\n return true;\n } else {\n return false;\n }\n };\n const moveDown = (editor, details) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (root.lastChild === details && isAtLastLine(details, pos)) {\n editor.execCommand('InsertNewBlockAfter');\n return true;\n } else {\n return false;\n }\n };\n const move$2 = (editor, forward) => {\n if (forward) {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'details')).map(details => moveDown(editor, details)).getOr(false);\n } else {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'summary')).bind(summary => Optional.from(editor.dom.getParent(summary, 'details')).map(details => moveUp(editor, details, summary))).getOr(false);\n }\n };\n const moveV$2 = (editor, forward) => move$2(editor, forward);\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 ? 1 : -1;\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$3(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 isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse$3 = elem => isHTMLElement$1(elem) && get$9(elem, 'contenteditable') === 'false';\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)) || isContentEditableFalse$3(elem);\n };\n\n const first = element => descendant$2(element, isCursorPosition);\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$2(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 if (editor.mode.isReadOnly() || !isCellInEditableTable(current)) {\n return Optional.none();\n }\n editor.execCommand('mceTableInsertRowAfter');\n return tabForward(editor, isRoot, current);\n });\n };\n const isCellInEditableTable = cell => closest$4(cell, isTag('table')).exists(isEditable$2);\n const tabForward = (editor, isRoot, cell) => tabGo(editor, isRoot, next(cell, isCellEditable));\n const tabBackward = (editor, isRoot, cell) => tabGo(editor, isRoot, prev(cell, isCellEditable));\n const isCellEditable = cell => isEditable$2(cell) || descendant(cell, isEditableHTMLElement);\n const isEditableHTMLElement = node => isHTMLElement$1(node) && isEditable$2(node);\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$4, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$4, 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.UP,\n action: action(moveV, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$2, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$2, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(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$3, editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(move$3, 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$3, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$3, editor, true)\n }\n ], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$l = (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$b(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$b(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$b(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$b(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$b(rng.startContainer);\n const getText = rng => trim$2(rng.toString().replace(/\\u00A0/g, ' '));\n const isWhitespace = chr => chr !== '' && ' \\xA0\\uFEFF\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n\n const stripTrigger = (text, trigger) => text.substring(trigger.length);\n const findTrigger = (text, index, trigger, includeWhitespace = false) => {\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 (!includeWhitespace && 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 getContext = (dom, initRange, trigger, includeWhitespace = false) => {\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, includeWhitespace).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) {\n return Optional.none();\n } else {\n return Optional.some({\n text: stripTrigger(text, trigger),\n range,\n trigger\n });\n }\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$1 = (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: bind$1,\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 const oneOf = (props, rawF) => {\n const f = rawF !== undefined ? rawF : identity;\n const extract = (path, val) => {\n const errors = [];\n for (const prop of props) {\n const res = prop.extract(path, val);\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n const toString = () => 'oneOf(' + map$3(props, prop => prop.toString()).join(', ') + ')';\n return {\n extract,\n toString\n };\n };\n const arrOfObj = compose(arrOf, objOf);\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 requiredStringEnum = (key, values) => field(key, key, required(), validateEnum(values));\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, spec);\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup,\n defaultedString('context', 'mode:design')\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 defaultedString('align', 'end'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n defaultedString('align', 'end'),\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 const baseContextFormFields = [\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n })),\n defaultedFunction('onInput', noop),\n defaultedFunction('onSetup', noop)\n ];\n const contextFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextform']),\n defaultedFunction('initValue', constant('')),\n optionString('placeholder')\n ];\n const contextSliderFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsliderform']),\n defaultedFunction('initValue', constant(0)),\n defaultedFunction('min', constant(0)),\n defaultedFunction('max', constant(100))\n ];\n const contextSizeInputFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsizeinputform']),\n defaultedFunction('initValue', constant({\n width: '',\n height: ''\n }))\n ];\n choose('type', {\n contextform: contextFormFields,\n contextsliderform: contextSliderFormFields,\n contextsizeinputform: contextSizeInputFormFields\n });\n\n objOf([\n defaultedType('contexttoolbar'),\n requiredOf('items', oneOf([\n string,\n arrOfObj([\n optionString('name'),\n optionString('label'),\n requiredArrayOf('items', string)\n ])\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(api.load, 50);\n editor.on('input', e => {\n if (e.inputType === 'insertCompositionText' && !editor.composing) {\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 update.cancel();\n api.cancelIfNecessary();\n } else if (keyCode === 38 || keyCode === 40) {\n update.cancel();\n }\n }, true);\n editor.on('remove', update.cancel);\n };\n const setup$k = editor => {\n const activeAutocompleter = value$2();\n const uiActive = Cell(false);\n const isActive = activeAutocompleter.isSet;\n const cancelIfNecessary = () => {\n if (isActive()) {\n fireAutocompleterEnd(editor);\n uiActive.set(false);\n activeAutocompleter.clear();\n }\n };\n const commenceIfNecessary = context => {\n if (!isActive()) {\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, true).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 return;\n }\n activeAutocompleter.set({\n ...ac,\n matchLength: context.text.length\n });\n if (uiActive.get()) {\n fireAutocompleterUpdateActiveRange(editor, { range: context.range });\n fireAutocompleterUpdate(editor, { lookupData });\n } else {\n uiActive.set(true);\n fireAutocompleterUpdateActiveRange(editor, { range: context.range });\n fireAutocompleterStart(editor, { lookupData });\n }\n });\n });\n });\n };\n const isRangeInsideOrEqual = (innerRange, outerRange) => {\n const startComparison = innerRange.compareBoundaryPoints(window.Range.START_TO_START, outerRange);\n const endComparison = innerRange.compareBoundaryPoints(window.Range.END_TO_END, outerRange);\n return startComparison >= 0 && endComparison <= 0;\n };\n const readActiveRange = () => {\n return activeAutocompleter.get().bind(({trigger}) => {\n const selRange = editor.selection.getRng();\n return getContext(editor.dom, selRange, trigger, uiActive.get()).filter(({range}) => isRangeInsideOrEqual(selRange, range)).map(({range}) => range);\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 editor.addCommand('mceAutocompleterRefreshActiveRange', () => {\n readActiveRange().each(range => {\n fireAutocompleterUpdateActiveRange(editor, { range });\n });\n });\n editor.editorCommands.addQueryStateHandler('mceAutoCompleterInRange', () => readActiveRange().isSome());\n setupEditorInput(editor, {\n cancelIfNecessary,\n load\n });\n };\n\n const browser$1 = detect$1().browser;\n const isSafari = browser$1.isSafari();\n const emptyNodeContents = node => fillWithPaddingBr(SugarElement.fromDom(node));\n const isEntireNodeSelected = (rng, node) => {\n var _a;\n return rng.startOffset === 0 && rng.endOffset === ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length);\n };\n const getParentDetailsElementAtPos = (dom, pos) => Optional.from(dom.getParent(pos.container(), 'details'));\n const isInDetailsElement = (dom, pos) => getParentDetailsElementAtPos(dom, pos).isSome();\n const getDetailsElements = (dom, rng) => {\n const startDetails = Optional.from(dom.getParent(rng.startContainer, 'details'));\n const endDetails = Optional.from(dom.getParent(rng.endContainer, 'details'));\n if (startDetails.isSome() || endDetails.isSome()) {\n const startSummary = startDetails.bind(details => Optional.from(dom.select('summary', details)[0]));\n return Optional.some({\n startSummary,\n startDetails,\n endDetails\n });\n } else {\n return Optional.none();\n }\n };\n const isCaretInTheBeginningOf = (caretPos, element) => firstPositionIn(element).exists(pos => pos.isEqual(caretPos));\n const isCaretInTheEndOf = (caretPos, element) => {\n return lastPositionIn(element).exists(pos => {\n if (isBr$6(pos.getNode())) {\n return prevPosition(element, pos).exists(pos2 => pos2.isEqual(caretPos)) || pos.isEqual(caretPos);\n } else {\n return pos.isEqual(caretPos);\n }\n });\n };\n const isCaretAtStartOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheBeginningOf(caretPos, summary));\n const isCaretAtEndOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheEndOf(caretPos, summary));\n const isCaretInFirstPositionInBody = (caretPos, detailsElements) => detailsElements.startDetails.exists(details => prevPosition(details, caretPos).forall(pos => detailsElements.startSummary.exists(summary => !summary.contains(caretPos.container()) && summary.contains(pos.container()))));\n const isCaretInLastPositionInBody = (root, caretPos, detailsElements) => detailsElements.startDetails.exists(details => nextPosition(root, caretPos).forall(pos => !details.contains(pos.container())));\n const setCaretToPosition = (editor, position) => {\n const node = position.getNode();\n if (!isUndefined(node)) {\n editor.selection.setCursorLocation(node, position.offset());\n }\n };\n const moveCaretToDetailsPos = (editor, pos, forward) => {\n const details = editor.dom.getParent(pos.container(), 'details');\n if (details && !details.open) {\n const summary = editor.dom.select('summary', details)[0];\n if (summary) {\n const newPos = forward ? firstPositionIn(summary) : lastPositionIn(summary);\n newPos.each(pos => setCaretToPosition(editor, pos));\n }\n } else {\n setCaretToPosition(editor, pos);\n }\n };\n const isPartialDelete = (rng, detailsElements) => {\n const containsStart = element => element.contains(rng.startContainer);\n const containsEnd = element => element.contains(rng.endContainer);\n const startInSummary = detailsElements.startSummary.exists(containsStart);\n const endInSummary = detailsElements.startSummary.exists(containsEnd);\n const isPartiallySelectedDetailsElements = detailsElements.startDetails.forall(startDetails => detailsElements.endDetails.forall(endDetails => startDetails !== endDetails));\n const isInPartiallySelectedSummary = (startInSummary || endInSummary) && !(startInSummary && endInSummary);\n return isInPartiallySelectedSummary || isPartiallySelectedDetailsElements;\n };\n const shouldPreventDeleteIntoDetails = (editor, forward, granularity) => {\n const {dom, selection} = editor;\n const root = editor.getBody();\n if (granularity === 'character') {\n const caretPos = CaretPosition.fromRangeStart(selection.getRng());\n const parentBlock = dom.getParent(caretPos.container(), dom.isBlock);\n const parentDetailsAtCaret = getParentDetailsElementAtPos(dom, caretPos);\n const inEmptyParentBlock = parentBlock && dom.isEmpty(parentBlock);\n const isFirstBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.previousSibling);\n const isLastBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.nextSibling);\n if (inEmptyParentBlock) {\n const firstOrLast = forward ? isLastBlock : isFirstBlock;\n if (firstOrLast) {\n const isBeforeAfterDetails = navigate(!forward, root, caretPos).exists(pos => {\n return isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, getParentDetailsElementAtPos(dom, pos));\n });\n if (isBeforeAfterDetails) {\n return true;\n }\n }\n }\n return navigate(forward, root, caretPos).fold(never, pos => {\n const parentDetailsAtNewPos = getParentDetailsElementAtPos(dom, pos);\n if (isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, parentDetailsAtNewPos)) {\n if (!forward) {\n moveCaretToDetailsPos(editor, pos, false);\n }\n if (parentBlock && inEmptyParentBlock) {\n if (forward && isFirstBlock) {\n return true;\n } else if (!forward && isLastBlock) {\n return true;\n }\n moveCaretToDetailsPos(editor, pos, forward);\n editor.dom.remove(parentBlock);\n }\n return true;\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n };\n const shouldPreventDeleteSummaryAction = (editor, detailElements, forward, granularity) => {\n const selection = editor.selection;\n const rng = selection.getRng();\n const caretPos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (granularity === 'selection') {\n return isPartialDelete(rng, detailElements);\n } else if (forward) {\n return isCaretAtEndOfSummary(caretPos, detailElements) || isCaretInLastPositionInBody(root, caretPos, detailElements);\n } else {\n return isCaretAtStartOfSummary(caretPos, detailElements) || isCaretInFirstPositionInBody(caretPos, detailElements);\n }\n };\n const shouldPreventDeleteAction = (editor, forward, granularity) => getDetailsElements(editor.dom, editor.selection.getRng()).fold(() => shouldPreventDeleteIntoDetails(editor, forward, granularity), detailsElements => shouldPreventDeleteSummaryAction(editor, detailsElements, forward, granularity) || shouldPreventDeleteIntoDetails(editor, forward, granularity));\n const handleDeleteActionSafari = (editor, forward, granularity) => {\n const selection = editor.selection;\n const node = selection.getNode();\n const rng = selection.getRng();\n const caretPos = CaretPosition.fromRangeStart(rng);\n if (isSummary$1(node)) {\n if (granularity === 'selection' && isEntireNodeSelected(rng, node) || willDeleteLastPositionInElement(forward, caretPos, node)) {\n emptyNodeContents(node);\n } else {\n editor.undoManager.transact(() => {\n const sel = selection.getSel();\n let {anchorNode, anchorOffset, focusNode, focusOffset} = sel !== null && sel !== void 0 ? sel : {};\n const applySelection = () => {\n if (isNonNullable(anchorNode) && isNonNullable(anchorOffset) && isNonNullable(focusNode) && isNonNullable(focusOffset)) {\n sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);\n }\n };\n const updateSelection = () => {\n anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n anchorOffset = sel === null || sel === void 0 ? void 0 : sel.anchorOffset;\n focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n focusOffset = sel === null || sel === void 0 ? void 0 : sel.focusOffset;\n };\n const appendAllChildNodes = (from, to) => {\n each$e(from.childNodes, child => {\n if (isNode(child)) {\n to.appendChild(child);\n }\n });\n };\n const container = editor.dom.create('span', { 'data-mce-bogus': '1' });\n appendAllChildNodes(node, container);\n node.appendChild(container);\n applySelection();\n if (granularity === 'word' || granularity === 'line') {\n sel === null || sel === void 0 ? void 0 : sel.modify('extend', forward ? 'right' : 'left', granularity);\n }\n if (!selection.isCollapsed() && isEntireNodeSelected(selection.getRng(), container)) {\n emptyNodeContents(node);\n } else {\n editor.execCommand(forward ? 'ForwardDelete' : 'Delete');\n updateSelection();\n appendAllChildNodes(container, node);\n applySelection();\n }\n editor.dom.remove(container);\n });\n }\n return true;\n } else {\n return false;\n }\n };\n const backspaceDelete = (editor, forward, granularity) => shouldPreventDeleteAction(editor, forward, granularity) || isSafari && handleDeleteActionSafari(editor, forward, granularity) ? Optional.some(noop) : Optional.none();\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 fireInputEvent = createAndFireInputEvent('input');\n const fireBeforeInputEvent = createAndFireInputEvent('beforeinput');\n\n const platform$2 = detect$1();\n const os = platform$2.os;\n const isMacOSOriOS = os.isMacOS() || os.isiOS();\n const browser = platform$2.browser;\n const isFirefox = browser.isFirefox();\n const executeKeydownOverride$3 = (editor, caret, evt) => {\n const inputType = evt.keyCode === VK.BACKSPACE ? 'deleteContentBackward' : 'deleteContentForward';\n const isCollapsed = editor.selection.isCollapsed();\n const unmodifiedGranularity = isCollapsed ? 'character' : 'selection';\n const getModifiedGranularity = isWord => {\n if (isCollapsed) {\n return isWord ? 'word' : 'line';\n } else {\n return 'selection';\n }\n };\n executeWithDelayedAction([\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$1, editor)\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$4, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$4, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$b, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$b, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete, editor, false, unmodifiedGranularity)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete, editor, true, unmodifiedGranularity)\n },\n ...isMacOSOriOS ? [\n {\n keyCode: VK.BACKSPACE,\n altKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n },\n {\n keyCode: VK.DELETE,\n altKey: true,\n action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n },\n {\n keyCode: VK.BACKSPACE,\n metaKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(false))\n }\n ] : [\n {\n keyCode: VK.BACKSPACE,\n ctrlKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n },\n {\n keyCode: VK.DELETE,\n ctrlKey: true,\n action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n }\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$2, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$2, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$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$a, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$a, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$3, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$3, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$6, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$6, editor, true)\n }\n ], evt).filter(_ => editor.selection.isEditable()).each(applyAction => {\n evt.preventDefault();\n const beforeInput = fireBeforeInputEvent(editor, inputType);\n if (!beforeInput.isDefaultPrevented()) {\n applyAction();\n fireInputEvent(editor, inputType);\n }\n });\n };\n const executeKeyupOverride = (editor, evt, isBackspaceKeydown) => execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: action(paddEmptyElement, editor)\n },\n ...isMacOSOriOS ? [\n {\n keyCode: VK.BACKSPACE,\n altKey: true,\n action: action(refreshCaret, editor)\n },\n {\n keyCode: VK.DELETE,\n altKey: true,\n action: action(refreshCaret, editor)\n },\n ...isBackspaceKeydown ? [{\n keyCode: isFirefox ? 224 : 91,\n action: action(refreshCaret, editor)\n }] : []\n ] : [\n {\n keyCode: VK.BACKSPACE,\n ctrlKey: true,\n action: action(refreshCaret, editor)\n },\n {\n keyCode: VK.DELETE,\n ctrlKey: true,\n action: action(refreshCaret, editor)\n }\n ]\n ], evt);\n const setup$j = (editor, caret) => {\n let isBackspaceKeydown = false;\n editor.on('keydown', evt => {\n isBackspaceKeydown = evt.keyCode === VK.BACKSPACE;\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, isBackspaceKeydown);\n }\n isBackspaceKeydown = false;\n });\n };\n\n const firstNonWhiteSpaceNodeSibling = node => {\n while (node) {\n if (isElement$6(node) || isText$b(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$b(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 break;\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 const emptyBlock = elm => {\n elm.innerHTML = '
    ';\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 createNewBlock = (editor, container, parentBlock, editableRoot, keepStyles = true, name, styles) => {\n const dom = editor.dom;\n const schema = editor.schema;\n const newBlockName = getForcedRootBlock(editor);\n const parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\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, styles || {});\n } else {\n block = parentBlock.cloneNode(false);\n }\n let caretNode = block;\n if (!keepStyles) {\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\n const getDetailsRoot = (editor, element) => editor.dom.getParent(element, isDetails);\n const isAtDetailsEdge = (root, element, isTextBlock) => {\n let node = element;\n while (node && node !== root && isNull(node.nextSibling)) {\n const parent = node.parentElement;\n if (!parent || !isTextBlock(parent)) {\n return isDetails(parent);\n }\n node = parent;\n }\n return false;\n };\n const isLastEmptyBlockInDetails = (editor, shiftKey, element) => !shiftKey && element.nodeName.toLowerCase() === getForcedRootBlock(editor) && editor.dom.isEmpty(element) && isAtDetailsEdge(editor.getBody(), element, el => has$2(editor.schema.getTextBlockElements(), el.nodeName.toLowerCase()));\n const insertNewLine = (editor, createNewBlock, parentBlock) => {\n var _a, _b, _c;\n const newBlock = createNewBlock(getForcedRootBlock(editor));\n const root = getDetailsRoot(editor, parentBlock);\n if (!root) {\n return;\n }\n editor.dom.insertAfter(newBlock, root);\n moveToCaretPosition(editor, newBlock);\n if (((_c = (_b = (_a = parentBlock.parentElement) === null || _a === void 0 ? void 0 : _a.childNodes) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 1) {\n editor.dom.remove(parentBlock);\n }\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 getStyles = elm => foldl(mapToArray(getAllRaw(SugarElement.fromDom(elm)), (style, styleName) => `${ styleName }: ${ style };`), (acc, s) => acc + s, '');\n const insert$4 = (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 const parentBlockStyles = isListItem(parentBlock) ? getStyles(parentBlock) : undefined;\n let newBlock = isListItem(parentBlock) && parentBlockStyles ? createNewBlock(newBlockName, { style: getStyles(parentBlock) }) : 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 const previousChildren = filter$5(map$3(newBlock.children, SugarElement.fromDom), not(isTag('br')));\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n each$e(previousChildren, child => prepend(SugarElement.fromDom(newBlock), child));\n if (parentBlockStyles) {\n newBlock.setAttribute('style', parentBlockStyles);\n }\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$c), text => {\n const rawNode = text.dom;\n rawNode.nodeValue = trim$2(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 containerAndPreviousSiblingName = (container, nodeName) => {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n const containerAndNextSiblingName = (container, nodeName) => {\n return container.nodeName === nodeName || container.nextSibling && container.nextSibling.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.isEditable(node.parentNode) && dom.getContentEditable(node) !== 'false';\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$b(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$b(currentNode)) {\n currentNode.data = currentNode.data.replace(/^[\\r\\n]+/, '');\n }\n currentNode = currentNode.firstChild;\n } while (currentNode);\n };\n const wrapSelfAndSiblingsInDefaultBlock = (editor, newBlockName, rng, container, offset) => {\n var _a, _b;\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 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 const startNodeName = (_b = startNode === null || startNode === void 0 ? void 0 : startNode.parentElement) === null || _b === void 0 ? void 0 : _b.nodeName;\n if (startNode && startNodeName && editor.schema.isValidChild(startNodeName, 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$3 = (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 start = SugarElement.fromDom(rng.startContainer);\n const child = child$1(start, rng.startOffset);\n const isCef = child.exists(element => isHTMLElement$1(element) && !isEditable$2(element));\n const collapsedAndCef = rng.collapsed && isCef;\n const createNewBlock$1 = (name, styles) => {\n return createNewBlock(editor, container, parentBlock, editableRoot, shouldKeepStyles(editor), name, styles);\n };\n const isCaretAtStartOrEndOfBlock = start => {\n const normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (isText$b(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.data.length)) {\n return false;\n }\n if ((container.parentNode === parentBlock || container === parentBlock) && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && isElement$6(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndPreviousSiblingName(container, 'TABLE') || containerAndPreviousSiblingName(container, 'HR')) {\n if (containerAndNextSiblingName(container, 'BR')) {\n return !start;\n }\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n const walker = new DomTreeWalker(container, parentBlock);\n if (isText$b(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$b(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$1(newBlockName);\n } else {\n block = createNewBlock$1();\n }\n if (shouldEndContainer(editor, containerBlock) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock, undefined, { includeZwsp: true })) {\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() && !collapsedAndCef) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$b(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 (isElement$6(containerBlock) && isLastEmptyBlockInDetails(editor, shiftKey, parentBlock)) {\n return insertNewLine(editor, createNewBlock$1, parentBlock);\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName) && isElement$6(containerBlock)) {\n if (dom.isEmpty(parentBlock)) {\n insert$4(editor, createNewBlock$1, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (!collapsedAndCef && (parentBlock === editor.getBody() || !canSplitBlock(dom, parentBlock))) {\n return;\n }\n const parentBlockParent = parentBlock.parentNode;\n let newBlock;\n if (collapsedAndCef) {\n newBlock = createNewBlock$1(newBlockName);\n child.fold(() => {\n append$1(start, SugarElement.fromDom(newBlock));\n }, child => {\n before$3(child, SugarElement.fromDom(newBlock));\n });\n editor.selection.setCursorLocation(newBlock, 0);\n } else 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 const caretPos = CaretPosition.fromRangeStart(rng);\n const afterTable = isAfterTable(caretPos);\n const parentBlockSugar = SugarElement.fromDom(parentBlock);\n const afterBr = isAfterBr(parentBlockSugar, caretPos, editor.schema);\n const prevBrOpt = afterBr ? findPreviousBr(parentBlockSugar, caretPos, editor.schema).bind(pos => Optional.from(pos.getNode())) : Optional.none();\n newBlock = parentBlockParent.insertBefore(createNewBlock$1(), parentBlock);\n const root = containerAndPreviousSiblingName(parentBlock, 'HR') || afterTable ? newBlock : prevBrOpt.getOr(parentBlock);\n moveToCaretPosition(editor, root);\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$3,\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$b(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$b(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$b(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$2 = (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$2,\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 isInRootWithEmptyOrCEF = editor => {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const child = child$1(start, rng.startOffset);\n const isCefOpt = child.map(element => isHTMLElement$1(element) && !isEditable$2(element));\n return rng.collapsed && isCefOpt.getOr(true);\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 match([isInRootWithEmptyOrCEF], newLineAction.block())\n ], [\n editor,\n !!(evt && evt.shiftKey)\n ]).getOr(newLineAction.none());\n };\n\n const insertBreak = (breakType, editor, evt) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n if (!editor.selection.isCollapsed()) {\n execEditorDeleteCommand(editor);\n }\n if (isNonNullable(evt)) {\n const event = fireBeforeInputEvent(editor, breakType.fakeEventName);\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n breakType.insert(editor, evt);\n if (isNonNullable(evt)) {\n fireInputEvent(editor, breakType.fakeEventName);\n }\n };\n const insert$1 = (editor, evt) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\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 platform$1 = detect$1();\n const isIOSSafari = platform$1.os.isiOS() && platform$1.browser.isSafari();\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$1(editor, event);\n });\n };\n const isCaretAfterKoreanCharacter = rng => {\n if (!rng.collapsed) {\n return false;\n }\n const startContainer = rng.startContainer;\n if (isText$b(startContainer)) {\n const koreanCharRegex = /^[\\uAC00-\\uD7AF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uD7B0-\\uD7FF]$/;\n const char = startContainer.data.charAt(rng.startOffset - 1);\n return koreanCharRegex.test(char);\n } else {\n return false;\n }\n };\n const setup$i = editor => {\n let iOSSafariKeydownBookmark = Optional.none();\n const iOSSafariKeydownOverride = editor => {\n iOSSafariKeydownBookmark = Optional.some(editor.selection.getBookmark());\n editor.undoManager.add();\n };\n const iOSSafariKeyupOverride = (editor, event) => {\n editor.undoManager.undo();\n iOSSafariKeydownBookmark.fold(noop, b => editor.selection.moveToBookmark(b));\n handleEnterKeyEvent(editor, event);\n iOSSafariKeydownBookmark = Optional.none();\n };\n editor.on('keydown', event => {\n if (event.keyCode === VK.ENTER) {\n if (isIOSSafari && isCaretAfterKoreanCharacter(editor.selection.getRng())) {\n iOSSafariKeydownOverride(editor);\n } else {\n handleEnterKeyEvent(editor, event);\n }\n }\n });\n editor.on('keyup', event => {\n if (event.keyCode === VK.ENTER) {\n iOSSafariKeydownBookmark.each(() => iOSSafariKeyupOverride(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$h = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$2(editor, caret, evt);\n }\n });\n };\n\n const setup$g = editor => {\n editor.on('input', e => {\n if (!e.isComposing) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n const platform = detect$1();\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$f = (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 isValidContainer = (root, container) => root === container || root.contains(container);\n const isInEditableRange = (editor, range) => {\n if (!isValidContainer(editor.getBody(), range.startContainer) || !isValidContainer(editor.getBody(), range.endContainer)) {\n return true;\n }\n return isEditableRange(editor.dom, range);\n };\n const setup$e = editor => {\n editor.on('beforeinput', e => {\n if (!editor.selection.isEditable() || exists(e.getTargetRanges(), rng => !isInEditableRange(editor, rng))) {\n e.preventDefault();\n }\n });\n };\n\n const insertTextAtPosition = (text, pos) => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$b(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 insertSpaceOrNbspAtPosition = (root, pos, schema) => needsToHaveNbsp(root, pos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\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, schema) => checkPos => needsToHaveNbsp(root, checkPos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n const setSelection = editor => pos => {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n };\n const isInsideSummary = (domUtils, node) => domUtils.isEditable(domUtils.getParent(node, 'summary'));\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, editor.schema)(checkPos).each(setSelection(editor)));\n } else {\n return Optional.none();\n }\n };\n const insertSpaceInSummaryAtSelectionOnFirefox = editor => {\n const insertSpaceThunk = () => {\n const root = SugarElement.fromDom(editor.getBody());\n if (!editor.selection.isCollapsed()) {\n editor.getDoc().execCommand('Delete');\n }\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n insertSpaceOrNbspAtPosition(root, pos, editor.schema).each(setSelection(editor));\n };\n return someIf(Env.browser.isFirefox() && editor.selection.isEditable() && isInsideSummary(editor.dom, editor.selection.getRng().startContainer), insertSpaceThunk);\n };\n\n const executeKeydownOverride$1 = (editor, evt) => {\n executeWithDelayedAction([\n {\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceOrNbspAtSelection, editor)\n },\n {\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceInSummaryAtSelectionOnFirefox, editor)\n }\n ], evt).each(applyAction => {\n evt.preventDefault();\n const event = fireBeforeInputEvent(editor, 'insertText', { data: ' ' });\n if (!event.isDefaultPrevented()) {\n applyAction();\n fireInputEvent(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$k(editor);\n if (isRtc(editor)) {\n return Cell(null);\n } else {\n const caret = setupSelectedState(editor);\n setup$e(editor);\n setup$m(editor);\n setup$l(editor, caret);\n setup$j(editor, caret);\n setup$i(editor);\n setup$d(editor);\n setup$g(editor);\n setup$c(editor);\n setup$h(editor, caret);\n setup$f(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 store(editor);\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 editor = this.editor;\n const selection = editor.selection;\n let node;\n if (editor.initialized && selection && !shouldDisableNodeChange(editor) && !isDisabled$1(editor)) {\n const root = editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\n node = root;\n }\n const parents = [];\n editor.dom.getParent(node, node => {\n if (node === root) {\n return true;\n } else {\n parents.push(node);\n return false;\n }\n });\n 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 imageId = generate$1('image');\n const getDragImage = transfer => {\n const dt = transfer;\n return Optional.from(dt[imageId]);\n };\n const setDragImage = (transfer, imageData) => {\n const dt = transfer;\n dt[imageId] = imageData;\n };\n\n const eventId = generate$1('event');\n const getEvent = transfer => {\n const dt = transfer;\n return Optional.from(dt[eventId]);\n };\n const mkSetEventFn = type => transfer => {\n const dt = transfer;\n dt[eventId] = type;\n };\n const setEvent = (transfer, type) => mkSetEventFn(type)(transfer);\n const setDragstartEvent = mkSetEventFn(0);\n const setDropEvent = mkSetEventFn(2);\n const setDragendEvent = mkSetEventFn(1);\n const checkEvent = expectedType => transfer => {\n const dt = transfer;\n return Optional.from(dt[eventId]).exists(type => type === expectedType);\n };\n const isInDragStartEvent = checkEvent(0);\n\n const createEmptyFileList = () => Object.freeze({\n length: 0,\n item: _ => null\n });\n\n const modeId = generate$1('mode');\n const getMode = transfer => {\n const dt = transfer;\n return Optional.from(dt[modeId]);\n };\n const mkSetModeFn = mode => transfer => {\n const dt = transfer;\n dt[modeId] = mode;\n };\n const setMode$1 = (transfer, mode) => mkSetModeFn(mode)(transfer);\n const setReadWriteMode = mkSetModeFn(0);\n const setReadOnlyMode = mkSetModeFn(2);\n const setProtectedMode = mkSetModeFn(1);\n const checkMode = expectedMode => transfer => {\n const dt = transfer;\n return Optional.from(dt[modeId]).exists(mode => mode === expectedMode);\n };\n const isInReadWriteMode = checkMode(0);\n const isInProtectedMode = checkMode(1);\n\n const normalizeItems = (dataTransfer, itemsImpl) => ({\n ...itemsImpl,\n get length() {\n return itemsImpl.length;\n },\n add: (data, type) => {\n if (isInReadWriteMode(dataTransfer)) {\n if (isString(data)) {\n if (!isUndefined(type)) {\n return itemsImpl.add(data, type);\n }\n } else {\n return itemsImpl.add(data);\n }\n }\n return null;\n },\n remove: idx => {\n if (isInReadWriteMode(dataTransfer)) {\n itemsImpl.remove(idx);\n }\n },\n clear: () => {\n if (isInReadWriteMode(dataTransfer)) {\n itemsImpl.clear();\n }\n }\n });\n\n const validDropEffects = [\n 'none',\n 'copy',\n 'link',\n 'move'\n ];\n const validEffectAlloweds = [\n 'none',\n 'copy',\n 'copyLink',\n 'copyMove',\n 'link',\n 'linkMove',\n 'move',\n 'all',\n 'uninitialized'\n ];\n const createDataTransfer = () => {\n const dataTransferImpl = new window.DataTransfer();\n let dropEffect = 'move';\n let effectAllowed = 'all';\n const dataTransfer = {\n get dropEffect() {\n return dropEffect;\n },\n set dropEffect(effect) {\n if (contains$2(validDropEffects, effect)) {\n dropEffect = effect;\n }\n },\n get effectAllowed() {\n return effectAllowed;\n },\n set effectAllowed(allowed) {\n if (isInDragStartEvent(dataTransfer) && contains$2(validEffectAlloweds, allowed)) {\n effectAllowed = allowed;\n }\n },\n get items() {\n return normalizeItems(dataTransfer, dataTransferImpl.items);\n },\n get files() {\n if (isInProtectedMode(dataTransfer)) {\n return createEmptyFileList();\n } else {\n return dataTransferImpl.files;\n }\n },\n get types() {\n return dataTransferImpl.types;\n },\n setDragImage: (image, x, y) => {\n if (isInReadWriteMode(dataTransfer)) {\n setDragImage(dataTransfer, {\n image,\n x,\n y\n });\n dataTransferImpl.setDragImage(image, x, y);\n }\n },\n getData: format => {\n if (isInProtectedMode(dataTransfer)) {\n return '';\n } else {\n return dataTransferImpl.getData(format);\n }\n },\n setData: (format, data) => {\n if (isInReadWriteMode(dataTransfer)) {\n dataTransferImpl.setData(format, data);\n }\n },\n clearData: format => {\n if (isInReadWriteMode(dataTransfer)) {\n dataTransferImpl.clearData(format);\n }\n }\n };\n setReadWriteMode(dataTransfer);\n return dataTransfer;\n };\n const cloneDataTransfer = original => {\n const clone = createDataTransfer();\n const originalMode = getMode(original);\n setReadOnlyMode(original);\n setDragstartEvent(clone);\n clone.dropEffect = original.dropEffect;\n clone.effectAllowed = original.effectAllowed;\n getDragImage(original).each(imageData => clone.setDragImage(imageData.image, imageData.x, imageData.y));\n each$e(original.types, type => {\n if (type !== 'Files') {\n clone.setData(type, original.getData(type));\n }\n });\n each$e(original.files, file => clone.items.add(file));\n getEvent(original).each(type => {\n setEvent(clone, type);\n });\n originalMode.each(mode => {\n setMode$1(original, mode);\n setMode$1(clone, mode);\n });\n return clone;\n };\n\n const getHtmlData = dataTransfer => {\n const html = dataTransfer.getData('text/html');\n return html === '' ? Optional.none() : Optional.some(html);\n };\n const setHtmlData = (dataTransfer, html) => dataTransfer.setData('text/html', html);\n\n const internalMimeType = 'x-tinymce/html';\n const internalHtmlMime = constant(internalMimeType);\n const internalMark = '';\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 = '';\n const paragraphs = map$3(blocks, p => {\n return p.split(/\\n/).join('
    ');\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$1 = (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$1(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$1(html, [\n /^[\\s\\S]*]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /|/g,\n [\n /( ?)\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /
    /g,\n /
    $/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({\n sanitize: shouldSanitizeXss(editor),\n sandbox_iframes: shouldSandboxIframes(editor),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor),\n convert_unsafe_embeds: shouldConvertUnsafeEmbeds(editor)\n }, 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('');\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 createPasteDataTransfer = html => {\n const dataTransfer = createDataTransfer();\n setHtmlData(dataTransfer, html);\n setReadOnlyMode(dataTransfer);\n return dataTransfer;\n };\n const doPaste = (editor, content, internal, pasteAsText, shouldSimulateInputEvent) => {\n const res = process(editor, content, internal);\n if (!res.cancelled) {\n const content = res.content;\n const doPasteAction = () => insertContent(editor, content, pasteAsText);\n if (shouldSimulateInputEvent) {\n const args = fireBeforeInputEvent(editor, 'insertFromPaste', { dataTransfer: createPasteDataTransfer(content) });\n if (!args.isDefaultPrevented()) {\n doPasteAction();\n fireInputEvent(editor, 'insertFromPaste');\n }\n } else {\n doPasteAction();\n }\n }\n };\n const pasteHtml = (editor, html, internalFlag, shouldSimulateInputEvent) => {\n const internal = internalFlag ? internalFlag : isMarked(html);\n doPaste(editor, unmark(html), internal, false, shouldSimulateInputEvent);\n };\n const pasteText = (editor, text, shouldSimulateInputEvent) => {\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, shouldSimulateInputEvent);\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 (_a) {\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, ``, false, true);\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, shouldSimulateInputEvent) => {\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, shouldSimulateInputEvent);\n } else {\n pasteHtml(editor, content, isInternal, shouldSimulateInputEvent);\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, true);\n } else if (hasContentType(clipboardContent, 'text/plain') && hasContentType(clipboardContent, 'text/uri-list')) {\n e.preventDefault();\n insertClipboardContent(editor, clipboardContent, clipboardContent['text/plain'], plainTextMode, true);\n } else {\n pasteBin.create();\n Delay.setEditorTimeout(editor, () => {\n const html = pasteBin.getHtml();\n pasteBin.remove();\n insertClipboardContent(editor, clipboardContent, html, plainTextMode, false);\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, false);\n }\n if (value.text) {\n pasteText(editor, value.text, false);\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 (_a) {\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) && editor.selection.isEditable()) {\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 needsCustomInternalDrop = (dom, schema, target, dropContent) => {\n const parentTransparent = dom.getParent(target, node => isTransparentBlock(schema, node));\n const inSummary = !isNull(dom.getParent(target, 'summary'));\n if (inSummary) {\n return true;\n } else if (parentTransparent && has$2(dropContent, 'text/html')) {\n const fragment = new DOMParser().parseFromString(dropContent['text/html'], 'text/html').body;\n return !isNull(fragment.querySelector(parentTransparent.nodeName.toLowerCase()));\n } else {\n return false;\n }\n };\n const setupSummaryDeleteByDragFix = editor => {\n editor.on('input', e => {\n const hasNoSummary = el => isNull(el.querySelector('summary'));\n if (e.inputType === 'deleteByDrag') {\n const brokenDetailElements = filter$5(editor.dom.select('details'), hasNoSummary);\n each$e(brokenDetailElements, details => {\n if (isBr$6(details.firstChild)) {\n details.firstChild.remove();\n }\n const summary = editor.dom.create('summary');\n summary.appendChild(createPaddingBr().dom);\n details.prepend(summary);\n });\n }\n });\n };\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()) {\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 const needsInternalDrop = needsCustomInternalDrop(editor.dom, editor.schema, rng.startContainer, dropContent);\n const isInternalDrop = draggingInternallyState.get();\n if (isInternalDrop && !needsInternalDrop) {\n return;\n }\n if (content) {\n e.preventDefault();\n Delay.setEditorTimeout(editor, () => {\n editor.undoManager.transact(() => {\n if (internalContent || isInternalDrop && needsInternalDrop) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n const trimmedContent = trimHtml(content);\n if (dropContent['text/html']) {\n pasteHtml(editor, trimmedContent, internal, true);\n } else {\n pasteText(editor, trimmedContent, true);\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 setupSummaryDeleteByDragFix(editor);\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.addQueryStateHandler('mceTogglePlainTextPaste', () => pasteFormat.get() === 'text');\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 const initialStateOption = getDetailsInitialState(editor);\n each$e(elms, details => {\n if (initialStateOption === 'expanded') {\n details.attr('open', 'open');\n } else if (initialStateOption === 'collapsed') {\n details.attr('open', null);\n }\n });\n });\n editor.serializer.addNodeFilter('details', elms => {\n const serializedStateOption = getDetailsSerializedState(editor);\n each$e(elms, details => {\n if (serializedStateOption === 'expanded') {\n details.attr('open', 'open');\n } else if (serializedStateOption === 'collapsed') {\n details.attr('open', null);\n }\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$b;\n const isContentEditableFalse$2 = elm => isContentEditableFalse$b(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, schema) => closest$4(SugarElement.fromDom(node), elm => isContentEditableTrue(elm) || schema.isBlock(name(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, schema) => {\n const startPos = CaretPosition.fromRangeStart(startRng);\n const clickNode = startPos.getNode();\n const scope = getClosestScope(clickNode, rootNode, schema);\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(), editor.schema);\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, findCloserTextNode) => {\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, false);\n } else {\n return Optional.none();\n }\n };\n const tryFindSecondBestTextNode = (closest, sndClosest, distance) => {\n return caretCandidateRect(sndClosest).filter(rect => {\n const deltaDistance = Math.abs(distance(closest, clientX, clientY) - distance(rect, clientX, clientY));\n return deltaDistance < 2 && isText$b(rect.node);\n });\n };\n const findClosestCaretCandidateNodeRect = (rects, distance) => {\n const sortedRects = sort(rects, (r1, r2) => distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n return findMap(sortedRects, caretCandidateRect).map(closest => {\n if (findCloserTextNode && !isText$b(closest.node) && sortedRects.length > 1) {\n return tryFindSecondBestTextNode(closest, sortedRects[1], distance).getOr(closest);\n } else {\n return closest;\n }\n });\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, true), prevScope => {\n const uncheckedChildren = filter$5(childNodesWithoutGhost, node => node !== prevScope.dom);\n return closestChildCaretCandidateNodeRect(uncheckedChildren, clientX, clientY, true);\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 getTargetProps = target => ({\n target,\n srcElement: target\n });\n const makeDndEventFromMouseEvent = (type, mouseEvent, target, dataTransfer) => ({\n ...mouseEvent,\n dataTransfer,\n type,\n ...getTargetProps(target)\n });\n const makeDndEvent = (type, target, dataTransfer) => {\n const fail = die('Function not supported on simulated event.');\n const event = {\n bubbles: true,\n cancelBubble: false,\n cancelable: true,\n composed: false,\n currentTarget: null,\n defaultPrevented: false,\n eventPhase: 0,\n isTrusted: true,\n returnValue: false,\n timeStamp: 0,\n type,\n composedPath: fail,\n initEvent: fail,\n preventDefault: noop,\n stopImmediatePropagation: noop,\n stopPropagation: noop,\n AT_TARGET: window.Event.AT_TARGET,\n BUBBLING_PHASE: window.Event.BUBBLING_PHASE,\n CAPTURING_PHASE: window.Event.CAPTURING_PHASE,\n NONE: window.Event.NONE,\n altKey: false,\n button: 0,\n buttons: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n layerX: 0,\n layerY: 0,\n metaKey: false,\n movementX: 0,\n movementY: 0,\n offsetX: 0,\n offsetY: 0,\n pageX: 0,\n pageY: 0,\n relatedTarget: null,\n screenX: 0,\n screenY: 0,\n shiftKey: false,\n x: 0,\n y: 0,\n detail: 0,\n view: null,\n which: 0,\n initUIEvent: fail,\n initMouseEvent: fail,\n getModifierState: fail,\n dataTransfer,\n ...getTargetProps(target)\n };\n return event;\n };\n const makeDataTransferCopyForDragEvent = (dataTransfer, eventType) => {\n const copy = cloneDataTransfer(dataTransfer);\n if (eventType === 'dragstart') {\n setDragstartEvent(copy);\n setReadWriteMode(copy);\n } else if (eventType === 'drop') {\n setDropEvent(copy);\n setReadOnlyMode(copy);\n } else {\n setDragendEvent(copy);\n setProtectedMode(copy);\n }\n return copy;\n };\n const makeDragEvent = (type, target, dataTransfer, mouseEvent) => {\n const dataTransferForDispatch = makeDataTransferCopyForDragEvent(dataTransfer, type);\n return isUndefined(mouseEvent) ? makeDndEvent(type, target, dataTransferForDispatch) : makeDndEventFromMouseEvent(type, mouseEvent, target, dataTransferForDispatch);\n };\n\n const scrollPixelsPerInterval = 32;\n const scrollIntervalValue = 100;\n const mouseRangeToTriggerScrollInsideEditor = 8;\n const mouseRangeToTriggerScrollOutsideEditor = 16;\n const isContentEditableFalse$1 = isContentEditableFalse$b;\n const isContentEditable = or(isContentEditableFalse$1, isContentEditableTrue$3);\n const isDraggable = (dom, rootElm, elm) => isContentEditableFalse$1(elm) && elm !== rootElm && dom.isEditable(elm.parentElement);\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 editor.dom.isEditable(targetElement);\n }\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 removeElementWithPadding = (dom, elm) => {\n const parentBlock = dom.getParent(elm.parentNode, dom.isBlock);\n removeElement(elm);\n if (parentBlock && parentBlock !== dom.getRoot() && dom.isEmpty(parentBlock)) {\n fillWithPaddingBr(SugarElement.fromDom(parentBlock));\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.dom, 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 dataTransfer: createDataTransfer(),\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 placeCaretAt = (editor, 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 };\n const dispatchDragEvent = (editor, type, target, dataTransfer, mouseEvent) => {\n if (type === 'dragstart') {\n setHtmlData(dataTransfer, editor.dom.getOuterHTML(target));\n }\n const event = makeDragEvent(type, target, dataTransfer, mouseEvent);\n const args = editor.dispatch(type, event);\n return args;\n };\n const move = (state, editor) => {\n const throttledPlaceCaretAt = first$1((clientX, clientY) => placeCaretAt(editor, clientX, clientY), 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 = dispatchDragEvent(editor, 'dragstart', state.element, state.dataTransfer, e);\n if (isNonNullable(args.dataTransfer)) {\n state.dataTransfer = args.dataTransfer;\n }\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$b(startContainer) ? startContainer.parentNode : startContainer;\n } else {\n return null;\n }\n };\n const drop = (state, editor) => e => {\n state.on(state => {\n var _a;\n state.intervalId.clear();\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n const dropTarget = (_a = editor.getDoc().elementFromPoint(e.clientX, e.clientY)) !== null && _a !== void 0 ? _a : editor.getBody();\n const args = dispatchDragEvent(editor, 'drop', dropTarget, state.dataTransfer, e);\n if (!args.isDefaultPrevented()) {\n editor.undoManager.transact(() => {\n removeElementWithPadding(editor.dom, state.element);\n getHtmlData(state.dataTransfer).each(content => editor.insertContent(content));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n dispatchDragEvent(editor, 'dragend', editor.getBody(), state.dataTransfer, e);\n }\n });\n removeDragState(state);\n };\n const stopDragging = (state, editor, e) => {\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging) {\n e.fold(() => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer), mouseEvent => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer, mouseEvent));\n }\n });\n removeDragState(state);\n };\n const stop = (state, editor) => e => stopDragging(state, editor, Optional.some(e));\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 stopDragging(state, editor, Optional.none());\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$b(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$b;\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) && dom.isEditable(node.parentNode);\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 if (!dom.isEditable(e.target)) {\n e.preventDefault();\n editor.focus();\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 (isHTMLElement(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$1(body, '#' + realSelectionId).getOrThunk(() => {\n const newContainer = SugarElement.fromHtml('
    ', doc);\n set$4(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$9(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$b(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$b(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$b(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$1(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$4);\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$b(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$b(node) && (offset < 0 || offset > node.data.length)) {\n return [];\n }\n const p = normalized && isText$b(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$b(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, isText$b(node.firstChild) && isWhitespaceText(node.firstChild.data));\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$b(rng.startContainer) && rng.startContainer.data.length === 0) {\n dom.remove(rng.startContainer);\n }\n if (isText$b(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 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$3 = (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$3(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$2 = (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$2(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$2(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$1 = 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$2 = (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$1(patternSet.inlinePatterns), node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n return getBestMatches(matches, matchesWithSortedPatterns);\n };\n const applyMatches$2 = (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 stripPattern$1 = (dom, block, pattern) => {\n return textAfter(block, 0, block).map(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 return node;\n });\n };\n const createApplyPattern = stripPattern => (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 = patterns => sort(patterns, (a, b) => b.start.length - a.start.length);\n const findPattern$2 = predicate => (patterns, text) => {\n const sortedPatterns = sortPatterns(patterns);\n const nuText = text.replace(nbsp, ' ');\n return find$2(sortedPatterns, pattern => predicate(pattern, text, nuText));\n };\n const createFindPatterns = (findPattern, skipFullMatch) => (editor, block, patternSet, normalizedMatches, text) => {\n var _a;\n if (text === void 0) {\n text = (_a = block.textContent) !== null && _a !== void 0 ? _a : '';\n }\n const dom = editor.dom;\n const forcedRootBlock = getForcedRootBlock(editor);\n if (!dom.is(block, forcedRootBlock)) {\n return [];\n }\n return findPattern(patternSet.blockPatterns, text).map(pattern => {\n if (skipFullMatch && Tools.trim(text).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\n const startsWithSingleSpace = s => /^\\s[^\\s]/.test(s);\n const stripPattern = (dom, block, pattern) => {\n stripPattern$1(dom, block, pattern).each(node => {\n const text = SugarElement.fromDom(node);\n const textContent = get$3(text);\n if (startsWithSingleSpace(textContent)) {\n set(text, textContent.slice(1));\n }\n });\n };\n const applyPattern$1 = createApplyPattern(stripPattern);\n const findPattern$1 = findPattern$2((pattern, text, nuText) => text.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0);\n const findPatterns$1 = createFindPatterns(findPattern$1, true);\n const getMatches$1 = (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$2(editor, block, rng.startContainer, offset, dynamicPatternSet, true);\n const blockMatches = findPatterns$1(editor, block, dynamicPatternSet, true);\n return {\n inlineMatches,\n blockMatches\n };\n }).filter(({inlineMatches, blockMatches}) => blockMatches.length > 0 || inlineMatches.length > 0);\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 applyPattern = createApplyPattern(stripPattern$1);\n const findPattern = findPattern$2((pattern, text, nuText) => text === pattern.start || nuText === pattern.start);\n const findPatterns = createFindPatterns(findPattern, false);\n const getMatches = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n return getParentBlock(editor, rng).map(block => {\n const offset = Math.max(0, rng.startOffset);\n const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n return findPatterns(editor, block, dynamicPatternSet, false, beforeText);\n }).filter(matches => matches.length > 0);\n };\n const applyMatches = (editor, matches) => {\n each$e(matches, match => applyPattern(editor, match));\n };\n\n const handleEnter = (editor, patternSet) => getMatches$1(editor, patternSet).fold(never, ({inlineMatches, blockMatches}) => {\n editor.undoManager.add();\n editor.undoManager.extra(() => {\n editor.execCommand('mceInsertNewLine');\n }, () => {\n insert$5(editor);\n applyMatches$2(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 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$2(editor, block, rng.startContainer, offset, dynamicPatternSet, false);\n if (inlineMatches.length > 0) {\n editor.undoManager.transact(() => {\n applyMatches$2(editor, inlineMatches);\n });\n }\n });\n };\n const handleBlockPatternOnSpace = (editor, patternSet) => getMatches(editor, patternSet).fold(never, matches => {\n editor.undoManager.transact(() => {\n applyMatches(editor, matches);\n });\n return true;\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).filter(pattern => {\n if (pattern.type === 'inline-command' || pattern.type === 'block-command') {\n return editor.queryCommandSupported(pattern.cmd);\n }\n return true;\n }), getTextPatternsLookup(editor));\n const hasDynamicPatterns = () => hasTextPatternsLookup(editor);\n editor.on('keydown', e => {\n if (e.keyCode === 13 && !VK.modifierPressed(e) && editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'enter');\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 editor.on('keydown', e => {\n if (e.keyCode === 32 && editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'space');\n const hasPatterns = patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns && handleBlockPatternOnSpace(editor, patternSet)) {\n e.preventDefault();\n }\n }\n }, true);\n const handleInlineTrigger = () => {\n if (editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'space');\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 (_a) {\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) && editor.selection.isEditable()) {\n const isCollapsed = editor.selection.isCollapsed();\n const body = editor.getBody();\n if (isCollapsed && !isEmptyNode(editor.schema, 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.isEditable(target)) {\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 && dom.isEditable(target.parentNode)) {\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 isGplKey = key => key.toLowerCase() === 'gpl';\n const isValidGeneratedKey = key => key.length >= 64 && key.length <= 255;\n const validateLicenseKey = key => isGplKey(key) || isValidGeneratedKey(key) ? 'VALID' : 'INVALID';\n const validateEditorLicenseKey = editor => {\n const licenseKey = getLicenseKey(editor);\n const hasApiKey = isString(getApiKey(editor));\n if (!hasApiKey && (isUndefined(licenseKey) || validateLicenseKey(licenseKey) === 'INVALID')) {\n console.warn(`TinyMCE is running in evaluation mode. Provide a valid license key or add license_key: 'gpl' to the init config to agree to the open source license terms. Read more at https://www.tiny.cloud/license-key/`);\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$4(style, 'type', 'text/css');\n append$1(style, SugarElement.fromText(text));\n append$1(container, style);\n editor.on('remove', () => {\n remove$4(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_mathml_annotation_encodings: getOption('allow_mathml_annotation_encodings'),\n allow_unsafe_link_target: getOption('allow_unsafe_link_target'),\n convert_unsafe_embeds: getOption('convert_unsafe_embeds'),\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 inline_styles: getOption('inline_styles'),\n root_name: getRootName(editor),\n sandbox_iframes: getOption('sandbox_iframes'),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor),\n sanitize: getOption('xss_sanitization'),\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 remove_trailing_brs: getOption('remove_trailing_brs'),\n pad_empty_with_br: getOption('pad_empty_with_br'),\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 if (isDisabled(editor)) {\n toggleDisabled(editor, true);\n }\n };\n const getStyleSheetLoader$1 = editor => editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n const makeStylesheetLoadingPromises = (editor, css, framedFonts) => {\n const {\n pass: bundledCss,\n fail: normalCss\n } = partition$2(css, name => tinymce.Resource.has(toContentSkinResourceName(name)));\n const bundledPromises = bundledCss.map(url => {\n const css = tinymce.Resource.get(toContentSkinResourceName(url));\n if (isString(css)) {\n return Promise.resolve(getStyleSheetLoader$1(editor).loadRawCss(url, css));\n }\n return Promise.resolve();\n });\n const promises = [\n ...bundledPromises,\n getStyleSheetLoader$1(editor).loadAll(normalCss)\n ];\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 '';\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 startProgress = editor => {\n let canceled = false;\n const progressTimeout = setTimeout(() => {\n if (!canceled) {\n editor.setProgressState(true);\n }\n }, 500);\n return () => {\n clearTimeout(progressTimeout);\n canceled = true;\n editor.setProgressState(false);\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 editor._editableRoot = hasEditableRoot$1(editor);\n if (!isDisabled$1(editor) && editor.hasEditableRoot()) {\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$p(editor);\n setup$6(editor);\n setup$n(editor);\n if (!isRtc(editor)) {\n setup$5(editor);\n setup$1(editor);\n }\n const caret = setup$b(editor);\n setup$q(editor, caret);\n setup$o(editor);\n setup$r(editor);\n setup$7(editor);\n const setupRtcThunk = setup$t(editor);\n preInit(editor);\n validateEditorLicenseKey(editor);\n setupRtcThunk.fold(() => {\n const cancelProgress = startProgress(editor);\n loadContentCss(editor).then(() => {\n initEditorWithInitialContent(editor);\n cancelProgress();\n });\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\n const filter = always;\n const bind = (element, event, handler) => bind$2(element, event, filter, handler);\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$4(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) + '';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n const bodyId = getBodyId(editor);\n const bodyClass = getBodyClass(editor);\n const translatedAriaText = editor.translate(getIframeAriaText(editor));\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '' + `` + '
    ' + '';\n return iframeHTML;\n };\n const createIframe = (editor, boxInfo) => {\n const iframeTitle = Env.browser.isFirefox() ? getIframeAriaText(editor) : 'Rich Text Area';\n const translatedTitle = editor.translate(iframeTitle);\n const tabindex = getOpt(SugarElement.fromDom(editor.getElement()), 'tabindex').bind(toInt);\n const ifr = createIframeElement(editor.id, translatedTitle, 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 setupIframeBody = editor => {\n const iframe = editor.iframeElement;\n const ready = () => {\n editor.contentDocument = iframe.contentDocument;\n contentBodyLoaded(editor);\n };\n if (shouldUseDocumentWrite(editor) || Env.browser.isFirefox()) {\n const doc = editor.getDoc();\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n ready();\n } else {\n const binder = bind(SugarElement.fromDom(iframe), 'load', () => {\n binder.unbind();\n ready();\n });\n iframe.srcdoc = editor.iframeHTML;\n }\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 editor.getElement().style.visibility = editor.orgVisibility;\n setupIframeBody(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 const shouldSkip = state && (editor.mode.get() === 'readonly' || isDisabled(editor));\n if (!shouldSkip) {\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 = async editor => {\n editor.dispatch('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initModel(editor);\n initPlugins(editor);\n const renderInfo = await renderThemeUi(editor);\n augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n editor.editorContainer = renderInfo.editorContainer;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n contentBodyLoaded(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$9(element, attr.name));\n setAll$1(element, snapshot);\n });\n editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n if (!isInline$1(editor)) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n 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 setEditableRoot = (editor, state) => {\n if (editor._editableRoot !== state) {\n editor._editableRoot = state;\n if (!isDisabled(editor)) {\n editor.getBody().contentEditable = String(editor.hasEditableRoot());\n editor.nodeChanged();\n }\n fireEditableRootStateChange(editor, state);\n }\n };\n const hasEditableRoot = editor => editor._editableRoot;\n\n const sectionResult = (sections, settings) => ({\n sections: constant(sections),\n options: constant(settings)\n });\n const deviceDetection = detect$1().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$4);\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) => {\n const copiedOptions = merge(options);\n return combineOptions(isPhone || isTablet, isPhone, copiedOptions, defaultOverrideOptions, copiedOptions);\n };\n\n const addVisual = (editor, elm) => addVisual$1(editor, elm);\n\n const registerExecCommands$2 = 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 = 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$2(editor);\n registerQueryStateCommands(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 (_a) {\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, schema) => {\n const root = SugarElement.fromDom(dom.getRoot());\n if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng), schema)) {\n html = html.replace(/^ /, ' ');\n } else {\n html = html.replace(/^ /, ' ');\n }\n if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng), schema)) {\n html = html.replace(/( | )()?$/, ' ');\n } else {\n html = html.replace(/ ()?$/, ' ');\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, editor.schema);\n } else {\n return value;\n }\n };\n const insertAtCaret = (editor, value) => {\n if (editor.selection.isEditable()) {\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\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, '
    ');\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(getNewDocumentContent(editor));\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(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$1(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$b(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$1(elm, elm => getRaw(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$1 = 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$1(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 if (editor.mode.isReadOnly()) {\n return;\n }\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.isEditable()) {\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 },\n mceInsertLink: applyLinkToSelection,\n createLink: applyLinkToSelection\n });\n };\n\n const getTopParentBlock = (editor, node, root, container) => {\n const dom = editor.dom;\n const selector = node => dom.isBlock(node) && node.parentElement === root;\n const topParentBlock = selector(node) ? node : dom.getParent(container, selector, root);\n return Optional.from(topParentBlock).map(SugarElement.fromDom);\n };\n const insert = (editor, before) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const node = before ? editor.selection.getStart() : editor.selection.getEnd();\n const container = before ? rng.startContainer : rng.endContainer;\n const root = getEditableRoot(dom, container);\n if (!root || !root.isContentEditable) {\n return;\n }\n const insertFn = before ? before$3 : after$4;\n const newBlockName = getForcedRootBlock(editor);\n getTopParentBlock(editor, node, root, container).each(parentBlock => {\n const newBlock = createNewBlock(editor, container, parentBlock.dom, root, false, newBlockName);\n insertFn(parentBlock, SugarElement.fromDom(newBlock));\n editor.selection.setCursorLocation(newBlock, 0);\n editor.dispatch('NewBlock', { newBlock });\n fireInputEvent(editor, 'insertParagraph');\n });\n };\n const insertBefore = editor => insert(editor, true);\n const insertAfter = editor => insert(editor, false);\n\n const registerCommands$3 = editor => {\n editor.editorCommands.addCommands({\n InsertNewBlockBefore: () => {\n insertBefore(editor);\n },\n InsertNewBlockAfter: () => {\n insertAfter(editor);\n }\n });\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$1(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$3(editor);\n registerCommands$2(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 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 static isNative(name) {\n return !!nativeEvents[name.toLowerCase()];\n }\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 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 && !isDisabled(editor);\n const fireEvent = (editor, eventName, e) => {\n if (isListening(editor)) {\n editor.dispatch(eventName, e);\n } else if (isDisabled(editor)) {\n processDisabledEvents(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, rawInitialOptions = 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 const debug = () => {\n try {\n console.log(JSON.parse(JSON.stringify(rawInitialOptions, (_key, value) => {\n if (isBoolean(value) || isNumber(value) || isString(value) || isNull(value) || isArray$1(value) || isPlainObject(value)) {\n return value;\n }\n return Object.prototype.toString.call(value);\n })));\n } catch (error) {\n console.error(error);\n }\n };\n return {\n register,\n isRegistered,\n get,\n set,\n unset,\n isSet,\n debug\n };\n };\n\n const setContentEditable = (elm, state) => {\n elm.dom.contentEditable = state ? 'true' : 'false';\n };\n const toggleReadOnly = (editor, state) => {\n const body = SugarElement.fromDom(editor.getBody());\n if (state) {\n editor.readonly = true;\n if (editor.hasEditableRoot()) {\n setContentEditable(body, true);\n }\n disableEditor(editor);\n } else {\n editor.readonly = false;\n enableEditor(editor);\n }\n };\n const isReadOnly = editor => editor.readonly;\n const registerReadOnlyInputBlockers = editor => {\n editor.on('beforeinput paste cut dragend dragover draggesture dragdrop drop drag', e => {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('BeforeExecCommand', e => {\n if ((e.command === 'Undo' || e.command === 'Redo') && isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('input', e => {\n if (!e.isComposing && isReadOnly(editor)) {\n const undoLevel = editor.undoManager.add();\n if (isNonNullable(undoLevel)) {\n editor.undoManager.undo();\n }\n }\n });\n editor.on('compositionend', () => {\n if (isReadOnly(editor)) {\n const undoLevel = editor.undoManager.add();\n if (isNonNullable(undoLevel)) {\n editor.undoManager.undo();\n }\n }\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() || editor.initialized && isDisabled(editor)) {\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 registerReadOnlyInputBlockers(editor);\n registerEventsAndFilters$1(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 contexts = {};\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 addDefaulted = (collection, type) => (name, spec) => {\n collection[name.toLowerCase()] = {\n type,\n ...spec\n };\n };\n const addIcon = (name, svgData) => icons[name.toLowerCase()] = svgData;\n const addContext = (name, pred) => contexts[name.toLowerCase()] = pred;\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: addDefaulted(contextToolbars, 'contextform'),\n addSidebar: add(sidebars, 'sidebar'),\n addView: add(views, 'views'),\n addIcon,\n addContext,\n getAll: () => ({\n buttons,\n menuItems,\n icons,\n popups,\n contextMenus,\n contextToolbars,\n sidebars,\n views,\n contexts\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 addContext: bridge.addContext,\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._editableRoot = true;\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, options);\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$1(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 const urlObject = new URI(url);\n if (urlObject.protocol !== 'http' && urlObject.protocol !== 'https' && urlObject.protocol !== '') {\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 setEditableRoot(state) {\n setEditableRoot(this, state);\n }\n hasEditableRoot() {\n return hasEditableRoot(this);\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: '7',\n minorVersion: '7.2',\n releaseDate: '2025-03-19',\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$w(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/7/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 resources = {};\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 resources[id] = data;\n };\n const has = id => {\n return id in resources;\n };\n const unload = id => {\n delete tasks[id];\n delete resources[id];\n };\n const get = id => resources[id];\n return {\n load,\n add,\n has,\n get,\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 (_a) {\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$1 = Tools.extend(EditorManager, publicApi);\n\n const exportToModuleLoaders = tinymce => {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_a) {\n }\n }\n };\n const exportToWindowGlobal = tinymce => {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce$1);\n exportToModuleLoaders(tinymce$1);\n\n})();\n","tinymce.IconManager.add('default', {\n icons: {\n 'accessibility-check': '',\n 'accordion-toggle': '',\n 'accordion': '',\n 'action-next': '',\n 'action-prev': '',\n 'addtag': '',\n 'ai-prompt': '',\n 'ai': '',\n 'align-center': '',\n 'align-justify': '',\n 'align-left': '',\n 'align-none': '',\n 'align-right': '',\n 'arrow-left': '',\n 'arrow-right': '',\n 'bold': '',\n 'bookmark': '',\n 'border-style': '',\n 'border-width': '',\n 'brightness': '',\n 'browse': '',\n 'cancel': '',\n 'cell-background-color': '',\n 'cell-border-color': '',\n 'change-case': '',\n 'character-count': '',\n 'checklist-rtl': '',\n 'checklist': '',\n 'checkmark': '',\n 'chevron-down': '',\n 'chevron-left': '',\n 'chevron-right': '',\n 'chevron-up': '',\n 'close': '',\n 'code-sample': '',\n 'color-levels': '',\n 'color-picker': '',\n 'color-swatch-remove-color': '',\n 'color-swatch': '',\n 'comment-add': '',\n 'comment': '',\n 'contrast': '',\n 'copy': '',\n 'crop': '',\n 'cut-column': '',\n 'cut-row': '',\n 'cut': '',\n 'document-properties': '',\n 'drag': '',\n 'duplicate-column': '',\n 'duplicate-row': '',\n 'duplicate': '',\n 'edit-block': '',\n 'edit-image': '',\n 'embed-page': '',\n 'embed': '',\n 'emoji': '',\n 'export': '',\n 'fill': '',\n 'flip-horizontally': '',\n 'flip-vertically': '',\n 'footnote': '',\n 'format-code': '',\n 'format-painter': '',\n 'format': '',\n 'fullscreen': '',\n 'gallery': '',\n 'gamma': '',\n 'help': '',\n 'highlight-bg-color': '',\n 'home': '',\n 'horizontal-rule': '',\n 'image-options': '',\n 'image': '',\n 'indent': '',\n 'info': '',\n 'insert-character': '',\n 'insert-time': '',\n 'invert': '',\n 'italic': '',\n 'language': '',\n 'line-height': '',\n 'line': '',\n 'link': '',\n 'list-bull-circle': '',\n 'list-bull-default': '',\n 'list-bull-square': '',\n 'list-num-default-rtl': '',\n 'list-num-default': '',\n 'list-num-lower-alpha-rtl': '',\n 'list-num-lower-alpha': '',\n 'list-num-lower-greek-rtl': '',\n 'list-num-lower-greek': '',\n 'list-num-lower-roman-rtl': '',\n 'list-num-lower-roman': '',\n 'list-num-upper-alpha-rtl': '',\n 'list-num-upper-alpha': '',\n 'list-num-upper-roman-rtl': '',\n 'list-num-upper-roman': '',\n 'lock': '',\n 'ltr': '',\n 'math-equation': '',\n 'mentions': '',\n 'minus': '',\n 'more-drawer': '',\n 'new-document': '',\n 'new-tab': '',\n 'non-breaking': '',\n 'notice': '',\n 'ordered-list-rtl': '',\n 'ordered-list': '',\n 'orientation': '',\n 'outdent': '',\n 'export-pdf': '',\n 'export-word': '',\n 'import-word': '',\n 'page-break': '',\n 'paragraph': '',\n 'paste-column-after': '',\n 'paste-column-before': '',\n 'paste-row-after': '',\n 'paste-row-before': '',\n 'paste-text': '',\n 'paste': '',\n 'permanent-pen': '',\n 'plus': '',\n 'preferences': '',\n 'preview': '',\n 'print': '',\n 'quote': '',\n 'redo': '',\n 'reload': '',\n 'remove-formatting': '',\n 'remove': '',\n 'resize-handle': '',\n 'resize': '',\n 'restore-draft': '',\n 'revision-history': '',\n 'rotate-left': '',\n 'rotate-right': '',\n 'rtl': '',\n 'save': '',\n 'search': '',\n 'select-all': '',\n 'selected': '',\n 'send': '',\n 'settings': '',\n 'sharpen': '',\n 'sourcecode': '',\n 'spell-check': '',\n 'strike-through': '',\n 'subscript': '',\n 'superscript': '',\n 'table-caption': '',\n 'table-cell-classes': '',\n 'table-cell-properties': '',\n 'table-cell-select-all': '',\n 'table-cell-select-inner': '',\n 'table-classes': '',\n 'table-delete-column': '',\n 'table-delete-row': '',\n 'table-delete-table': '',\n 'table-insert-column-after': '',\n 'table-insert-column-before': '',\n 'table-insert-row-above': '',\n 'table-insert-row-after': '',\n 'table-left-header': '',\n 'table-merge-cells': '',\n 'table-row-numbering-rtl': '',\n 'table-row-numbering': '',\n 'table-row-properties': '',\n 'table-split-cells': '',\n 'table-top-header': '',\n 'table': '',\n 'template-add': '',\n 'template': '',\n 'temporary-placeholder': '',\n 'text-color': '',\n 'text-size-decrease': '',\n 'text-size-increase': '',\n 'toc': '',\n 'translate': '',\n 'typography': '',\n 'underline': '',\n 'undo': '',\n 'unlink': '',\n 'unlock': '',\n 'unordered-list': '',\n 'unselected': '',\n 'upload': '',\n 'add-file': '',\n 'adjustments': '',\n 'alt-text': '',\n 'blur': '',\n 'box': '',\n 'camera': '',\n 'caption': '',\n 'dropbox': '',\n 'evernote': '',\n 'exposure': '',\n 'fb': '',\n 'flickr': '',\n 'folder': '',\n 'google-drive': '',\n 'google-photos': '',\n 'grayscale': '',\n 'huddle': '',\n 'image-decorative': '',\n 'image-enhancements': '',\n 'instagram': '',\n 'onedrive': '',\n 'revert-changes': '',\n 'saturation': '',\n 'transform-image': '',\n 'vibrance': '',\n 'vk': '',\n 'warmth': '',\n 'user': '',\n 'vertical-align': '',\n 'visualblocks': '',\n 'visualchars': '',\n 'warning': '',\n 'zoom-in': '',\n 'zoom-out': '',\n }\n});","// Exports the \"default\" icons for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/icons/default')\n// ES2015:\n// import 'tinymce/icons/default'\nrequire('./icons.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n const getPrototypeOf$2 = 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$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$2(value, Object);\n const isArray = 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(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 noarg = f => () => f();\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$1 = 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 never = constant$1(false);\n const always = constant$1(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 = (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 range$2 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const chunk$1 = (array, size) => {\n const r = [];\n for (let i = 0; i < array.length; i += size) {\n const s = nativeSlice.call(array, i, i + size);\n r.push(s);\n }\n return r;\n };\n const map$2 = (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$1 = (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$3 = (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$2 = (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$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (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$5 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex$1 = (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(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$2(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$2(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 pure$2 = x => [x];\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$i = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$i(xs, 0);\n const last$1 = xs => get$i(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\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (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$1 = (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(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(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$1 = (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(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const find$4 = (obj, pred) => {\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 if (pred(x, i, obj)) {\n return Optional.some(x);\n }\n }\n return Optional.none();\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$h = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\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 sequence = arr => {\n const r = [];\n for (let i = 0; i < arr.length; i++) {\n const x = arr[i];\n if (x.isSome()) {\n r.push(x.getOrDie());\n } else {\n return Optional.none();\n }\n }\n return Optional.some(r);\n };\n 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 mapFrom = (a, f) => a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const addToEnd = (str, suffix) => {\n return str + suffix;\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 ensureTrailing = (str, suffix) => {\n return endsWith(str, suffix) ? str : addToEnd(str, suffix);\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$1 = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty = s => !isNotEmpty(s);\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml$2 = (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(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = 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 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml: fromHtml$2,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path$1 = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path$1(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie$1 = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie$1('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n };\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name$3 = 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 isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n const isElement$1 = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$1(e) && name$3(e) === tag;\n\n const is = (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$3 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$2(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$4 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner$4(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 parentNode = element => parent(element);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (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 offsetParent = element => Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map$2(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n const spot = (element, offset) => ({\n element,\n offset\n });\n const leaf = (element, offset) => {\n const cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const isInShadowRoot = e => getShadowRoot(e).isSome();\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 (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$1(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(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 const body = () => getBody(SugarElement.fromDom(document));\n const getBody = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n 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$9 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$g = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$g(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$8 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\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(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$8 = (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(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const setOptions = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n v.fold(() => {\n internalRemove(dom, k);\n }, value => {\n internalSet(dom, k, value);\n });\n });\n };\n const get$f = (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(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (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(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 isValidValue$1 = (tag, property, value) => {\n const element = SugarElement.fromTag(tag);\n set$8(element, property, value);\n const style = getRaw(element, property);\n return style.isSome();\n };\n const remove$7 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$1(getOpt(element, 'style').map(trim$1), '')) {\n remove$8(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\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(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$f(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$f(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$2 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$e = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const setMax$1 = (element, value) => {\n const inclusions = [\n 'margin-top',\n 'border-top-width',\n 'padding-top',\n 'padding-bottom',\n 'border-bottom-width',\n 'margin-bottom'\n ];\n const absMax = api$2.max(element, value, inclusions);\n set$8(element, 'max-height', absMax + 'px');\n };\n\n const r$1 = (left, top) => {\n const translate = (x, y) => r$1(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r$1;\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$3 = 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$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport$1 = 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 api$1 = Dimension('width', element => element.dom.offsetWidth);\n const set$7 = (element, h) => api$1.set(element, h);\n const get$d = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const setMax = (element, value) => {\n const inclusions = [\n 'margin-left',\n 'border-left-width',\n 'padding-left',\n 'padding-right',\n 'border-right-width',\n 'margin-right'\n ];\n const absMax = api$1.max(element, value, inclusions);\n set$8(element, 'max-width', absMax + 'px');\n };\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$1(isiPad),\n isiPhone: constant$1(isiPhone),\n isTablet: constant$1(isTablet),\n isPhone: constant$1(isPhone),\n isTouch: constant$1(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant$1(iOSwebview),\n isDesktop: constant$1(isDesktop)\n };\n };\n\n 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$3 = (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$d(group(1), group(2));\n };\n const detect$4 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$3();\n }\n return find$3(versionRegexes, cleanedAgent);\n };\n const unknown$3 = () => {\n return nu$d(0, 0);\n };\n const nu$d = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$d,\n detect: detect$4,\n unknown: unknown$3\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$5(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$3 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$5(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$3(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$3(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 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$1(browsers),\n oses: constant$1(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$2 = () => {\n return nu$c({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$c = 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$2,\n nu: nu$c,\n edge: constant$1(edge),\n chromium: constant$1(chromium),\n ie: constant$1(ie),\n opera: constant$1(opera),\n firefox: constant$1(firefox),\n safari: constant$1(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$1 = () => {\n return nu$b({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$b = 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: unknown$1,\n nu: nu$b,\n windows: constant$1(windows),\n ios: constant$1(ios),\n android: constant$1(android),\n linux: constant$1(linux),\n macos: constant$1(macos),\n solaris: constant$1(solaris),\n freebsd: constant$1(freebsd),\n chromeos: constant$1(chromeos)\n };\n\n const detect$2 = (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$2 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$1 = () => platform();\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$1 = 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 = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(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 capture$1 = (element, event, filter, handler) => binder(element, event, filter, handler, true);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const before$1 = (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$2 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$2(v, element);\n });\n }, v => {\n before$1(v, element);\n });\n };\n const prepend$1 = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$2(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$2 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$2(parent, element);\n }, v => {\n before$1(v, element);\n });\n };\n\n const append$1 = (parent, elements) => {\n each$1(elements, x => {\n append$2(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(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\n const get$c = _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\n const get$b = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$1().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds$1 = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds$3 = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$c(SugarElement.fromDom(doc));\n return get$b(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds$1(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant$1([]), 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 const paths = walkUp(navigation, d);\n return Optional.some(paths);\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$3 = element => owner$4(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$3\n });\n\n const find$2 = element => {\n const doc = getDocument();\n const scroll = get$c(doc);\n const path = pathTo(element, Navigation);\n return path.fold(curry(absolute$3, element), frames => {\n const offset = viewport$1(element);\n const r = foldr(frames, (b, a) => {\n const loc = viewport$1(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n });\n };\n\n const pointed = (point, width, height) => ({\n point,\n width,\n height\n });\n const rect = (x, y, width, height) => ({\n x,\n y,\n width,\n height\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 box$1 = element => {\n const xy = absolute$3(element);\n const w = getOuter$1(element);\n const h = getOuter$2(element);\n return bounds(xy.left, xy.top, w, h);\n };\n const absolute$2 = element => {\n const position = find$2(element);\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const constrain = (original, constraint) => {\n const left = Math.max(original.x, constraint.x);\n const top = Math.max(original.y, constraint.y);\n const right = Math.min(original.right, constraint.right);\n const bottom = Math.min(original.bottom, constraint.bottom);\n const width = right - left;\n const height = bottom - top;\n return bounds(left, top, width, height);\n };\n const constrainByMany = (original, constraints) => {\n return foldl(constraints, (acc, c) => constrain(acc, c), original);\n };\n const win = () => getBounds$3(window);\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 singleton$1 = 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 destroyable = () => singleton$1(s => s.destroy());\n const unbindable = () => singleton$1(s => s.unbind());\n const value$4 = () => {\n const subject = singleton$1(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n const value$3 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant$1(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$1 = 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$1(err), value$3);\n const Result = {\n value: value$3,\n error: error$1,\n fromOption\n };\n\n var SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n const partition$2 = results => {\n const values = [];\n const errors = [];\n each$1(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$1 = (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$1 = res => fold$1(res, Result.error, Result.value);\n const fromResult$1 = res => res.fold(serror, svalue);\n const SimpleResult = {\n fromResult: fromResult$1,\n toResult: toResult$1,\n svalue,\n partition: partition$2,\n serror,\n bind: bind$1,\n bindError,\n map,\n mapError,\n fold: fold$1\n };\n\n const field$2 = (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 shallow$1 = (old, nu) => {\n return nu;\n };\n const deep$1 = (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$1);\n const merge$1 = baseMerge(shallow$1);\n\n const required$2 = () => ({\n tag: 'required',\n process: {}\n });\n const defaultedThunk = fallbackThunk => ({\n tag: 'defaultedThunk',\n process: fallbackThunk\n });\n const defaulted$1 = fallback => defaultedThunk(constant$1(fallback));\n const asOption = () => ({\n tag: 'option',\n process: {}\n });\n const mergeWithThunk = baseThunk => ({\n tag: 'mergeWithThunk',\n process: baseThunk\n });\n const mergeWith = base => mergeWithThunk(constant$1(base));\n\n const mergeValues$1 = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge$1.apply(undefined, values))) : SimpleResult.svalue(base);\n const mergeErrors$1 = errors => compose(SimpleResult.serror, flatten)(errors);\n const consolidateObj = (objects, base) => {\n const partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n };\n const consolidateArr = objects => {\n const partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n const ResultCombine = {\n consolidateObj,\n consolidateArr\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$1('... (only showing first ten failures)')\n }]) : errors;\n return map$2(es, e => {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n const nu$a = (path, getErrorInfo) => {\n return SimpleResult.serror([{\n path,\n getErrorInfo\n }]);\n };\n const missingRequired = (path, key, obj) => nu$a(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n const missingKey = (path, key) => nu$a(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n const missingBranch = (path, branches, branch) => nu$a(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n const unsupportedFields = (path, unsupported) => nu$a(path, () => 'There are unsupported fields: [' + unsupported.join(', ') + '] specified');\n const custom = (path, err) => nu$a(path, constant$1(err));\n\n const value$2 = validator => {\n const extract = (path, val) => {\n return SimpleResult.bindError(validator(val), err => custom(path, err));\n };\n const toString = constant$1('val');\n return {\n extract,\n toString\n };\n };\n const anyValue$1 = value$2(SimpleResult.svalue);\n\n const requiredAccess = (path, obj, key, bundle) => get$h(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n const fallbackAccess = (obj, key, fallback, bundle) => {\n const v = get$h(obj, key).getOrThunk(() => fallback(obj));\n return bundle(v);\n };\n const optionAccess = (obj, key, bundle) => bundle(get$h(obj, key));\n const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n const opt = get$h(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$1({}), 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 valueThunk = getDelegate => {\n const extract = (path, val) => getDelegate().extract(path, val);\n const toString = () => getDelegate().toString();\n return {\n extract,\n toString\n };\n };\n const getSetKeys = obj => keys(filter$1(obj, isNonNullable));\n const objOfOnly = fields => {\n const delegate = objOf(fields);\n const fieldNames = foldr(fields, (acc, value) => {\n return fold(value, key => deepMerge(acc, { [key]: true }), constant$1(acc));\n }, {});\n const extract = (path, o) => {\n const keys = isBoolean(o) ? [] : getSetKeys(o);\n const extra = filter$2(keys, k => !hasNonNullableKey(fieldNames, k));\n return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra);\n };\n return {\n extract,\n toString: delegate.toString\n };\n };\n const objOf = values => {\n const extract = (path, o) => extractFields(path, o, values);\n const toString = () => {\n const fieldStrings = map$2(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$2(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 const oneOf = (props, rawF) => {\n const f = rawF !== undefined ? rawF : identity;\n const extract = (path, val) => {\n const errors = [];\n for (const prop of props) {\n const res = prop.extract(path, val);\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n const toString = () => 'oneOf(' + map$2(props, prop => prop.toString()).join(', ') + ')';\n return {\n extract,\n toString\n };\n };\n const setOf$1 = (validator, prop) => {\n const validateKeys = (path, keys) => arrOf(value$2(validator)).extract(path, keys);\n const extract = (path, o) => {\n const keys$1 = keys(o);\n const validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, validKeys => {\n const schema = map$2(validKeys, vk => {\n return field$2(vk, vk, required$2(), prop);\n });\n return objOf(schema).extract(path, o);\n });\n };\n const toString = () => 'setOf(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const thunk = (_desc, processor) => {\n const getP = cached(processor);\n const extract = (path, val) => getP().extract(path, val);\n const toString = () => getP().toString();\n return {\n extract,\n toString\n };\n };\n const arrOfObj = compose(arrOf, objOf);\n\n const anyValue = constant$1(anyValue$1);\n const typedValue = (validator, expectedType) => value$2(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 const isPostMessageable = val => {\n if (Object(val) !== val) {\n return true;\n }\n switch ({}.toString.call(val).slice(8, -1)) {\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'RegExp':\n case 'Blob':\n case 'FileList':\n case 'ImageData':\n case 'ImageBitmap':\n case 'ArrayBuffer':\n return true;\n case 'Array':\n case 'Object':\n return Object.keys(val).every(prop => isPostMessageable(val[prop]));\n default:\n return false;\n }\n };\n const postMessageable = value$2(a => {\n if (isPostMessageable(a)) {\n return SimpleResult.svalue(a);\n } else {\n return SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n }\n });\n\n const chooseFrom = (path, input, branches, ch) => {\n const fields = get$h(branches, ch);\n return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n };\n const choose$2 = (key, branches) => {\n const extract = (path, input) => {\n const choice = get$h(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 arrOfVal = () => arrOf(anyValue$1);\n const valueOf = validator => value$2(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n const setOf = (validator, prop) => setOf$1(v => SimpleResult.fromResult(validator(v)), prop);\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 getOrDie = extraction => {\n return extraction.fold(errInfo => {\n throw new Error(formatError(errInfo));\n }, identity);\n };\n const asRawOrDie$1 = (label, prop, obj) => getOrDie(asRaw(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$1 = (key, branches) => choose$2(key, map$1(branches, objOf));\n const thunkOf = (desc, schema) => thunk(desc, schema);\n\n const field$1 = field$2;\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 required$1 = key => field$1(key, key, required$2(), anyValue());\n const requiredOf = (key, schema) => field$1(key, key, required$2(), schema);\n const requiredNumber = key => requiredOf(key, number);\n const requiredString = key => requiredOf(key, string);\n const requiredStringEnum = (key, values) => field$1(key, key, required$2(), validateEnum(values));\n const requiredFunction = key => requiredOf(key, functionProcessor);\n const forbid = (key, message) => field$1(key, key, asOption(), value$2(_v => SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message)));\n const requiredObjOf = (key, objSchema) => field$1(key, key, required$2(), objOf(objSchema));\n const requiredArrayOfObj = (key, objFields) => field$1(key, key, required$2(), arrOfObj(objFields));\n const requiredArrayOf = (key, schema) => field$1(key, key, required$2(), arrOf(schema));\n const option$3 = key => field$1(key, key, asOption(), anyValue());\n const optionOf = (key, schema) => field$1(key, key, asOption(), schema);\n const optionNumber = key => optionOf(key, number);\n const optionString = key => optionOf(key, string);\n const optionStringEnum = (key, values) => optionOf(key, validateEnum(values));\n const optionFunction = key => optionOf(key, functionProcessor);\n const optionArrayOf = (key, schema) => optionOf(key, arrOf(schema));\n const optionObjOf = (key, objSchema) => optionOf(key, objOf(objSchema));\n const optionObjOfOnly = (key, objSchema) => optionOf(key, objOfOnly(objSchema));\n const defaulted = (key, fallback) => field$1(key, key, defaulted$1(fallback), anyValue());\n const defaultedOf = (key, fallback, schema) => field$1(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 defaultedPostMsg = (key, fallback) => defaultedOf(key, fallback, postMessageable);\n const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n const defaultedObjOf = (key, fallback, objSchema) => defaultedOf(key, fallback, objOf(objSchema));\n\n const generate$7 = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$1(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(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: generate$7 };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n const partition$1 = results => {\n const errors = [];\n const values = [];\n each$1(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 exclude$1 = (obj, fields) => {\n const r = {};\n each(obj, (v, k) => {\n if (!contains$2(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n const wrap$2 = (key, value) => ({ [key]: value });\n const wrapAll$1 = keyvalues => {\n const r = {};\n each$1(keyvalues, kv => {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n const exclude = (obj, fields) => exclude$1(obj, fields);\n const wrap$1 = (key, value) => wrap$2(key, value);\n const wrapAll = keyvalues => wrapAll$1(keyvalues);\n const mergeValues = (values, base) => {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.apply(undefined, values)));\n };\n const mergeErrors = errors => Result.error(flatten(errors));\n const consolidate = (objs, base) => {\n const partitions = partition$1(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor$2 = (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$4 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor$2(scope, transform, stop));\n };\n\n const isSource = (component, simulatedEvent) => eq(component.element, simulatedEvent.event.target);\n\n const defaultEventHandler = {\n can: always,\n abort: never,\n run: noop\n };\n const nu$9 = parts => {\n if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) {\n throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!');\n }\n return {\n ...defaultEventHandler,\n ...parts\n };\n };\n const all$2 = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc && f(handler).apply(undefined, args), true);\n const any = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc || f(handler).apply(undefined, args), false);\n const read$2 = handler => isFunction(handler) ? {\n can: always,\n abort: never,\n run: handler\n } : handler;\n const fuse$1 = handlers => {\n const can = all$2(handlers, handler => handler.can);\n const abort = any(handlers, handler => handler.abort);\n const run = (...args) => {\n each$1(handlers, handler => {\n handler.run.apply(undefined, args);\n });\n };\n return {\n can,\n abort,\n run\n };\n };\n\n const constant = constant$1;\n const touchstart = constant('touchstart');\n const touchmove = constant('touchmove');\n const touchend = constant('touchend');\n const touchcancel = constant('touchcancel');\n const mousedown = constant('mousedown');\n const mousemove = constant('mousemove');\n const mouseout = constant('mouseout');\n const mouseup = constant('mouseup');\n const mouseover = constant('mouseover');\n const focusin = constant('focusin');\n const focusout = constant('focusout');\n const keydown = constant('keydown');\n const keyup = constant('keyup');\n const input = constant('input');\n const change = constant('change');\n const click = constant('click');\n const transitioncancel = constant('transitioncancel');\n const transitionend = constant('transitionend');\n const transitionstart = constant('transitionstart');\n const selectstart = constant('selectstart');\n\n const prefixName = name => constant$1('alloy.' + name);\n const alloy = { tap: prefixName('tap') };\n const focus$4 = prefixName('focus');\n const postBlur = prefixName('blur.post');\n const postPaste = prefixName('paste.post');\n const receive = prefixName('receive');\n const execute$5 = prefixName('execute');\n const focusItem = prefixName('focus.item');\n const tap = alloy.tap;\n const longpress = prefixName('longpress');\n const sandboxClose = prefixName('sandbox.close');\n const typeaheadCancel = prefixName('typeahead.cancel');\n const systemInit = prefixName('system.init');\n const documentTouchmove = prefixName('system.touchmove');\n const documentTouchend = prefixName('system.touchend');\n const windowScroll = prefixName('system.scroll');\n const windowResize = prefixName('system.resize');\n const attachedToDom = prefixName('system.attached');\n const detachedFromDom = prefixName('system.detached');\n const dismissRequested = prefixName('system.dismissRequested');\n const repositionRequested = prefixName('system.repositionRequested');\n const focusShifted = prefixName('focusmanager.shifted');\n const slotVisibility = prefixName('slotcontainer.visibility');\n const externalElementScroll = prefixName('system.external.element.scroll');\n const changeTab = prefixName('change.tab');\n const dismissTab = prefixName('dismiss.tab');\n const highlight$1 = prefixName('highlight');\n const dehighlight$1 = prefixName('dehighlight');\n\n const emit = (component, event) => {\n dispatchWith(component, component.element, event, {});\n };\n const emitWith = (component, event, properties) => {\n dispatchWith(component, component.element, event, properties);\n };\n const emitExecute = component => {\n emit(component, execute$5());\n };\n const dispatch = (component, target, event) => {\n dispatchWith(component, target, event, {});\n };\n const dispatchWith = (component, target, event, properties) => {\n const data = {\n target,\n ...properties\n };\n component.getSystem().triggerEvent(event, target, data);\n };\n const retargetAndDispatchWith = (component, target, eventName, properties) => {\n const data = {\n ...properties,\n target\n };\n component.getSystem().triggerEvent(eventName, target, data);\n };\n const dispatchEvent = (component, target, event, simulatedEvent) => {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n };\n\n const derive$2 = configs => wrapAll(configs);\n const abort = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ abort: predicate })\n };\n };\n const can = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ can: predicate })\n };\n };\n const preventDefault = name => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n simulatedEvent.event.prevent();\n }\n })\n };\n };\n const run$1 = (name, handler) => {\n return {\n key: name,\n value: nu$9({ run: handler })\n };\n };\n const runActionExtra = (name, action, extra) => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n action.apply(undefined, [\n component,\n simulatedEvent\n ].concat(extra));\n }\n })\n };\n };\n const runOnName = name => {\n return handler => run$1(name, handler);\n };\n const runOnSourceName = name => {\n return handler => ({\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n if (isSource(component, simulatedEvent)) {\n handler(component, simulatedEvent);\n }\n }\n })\n });\n };\n const redirectToUid = (name, uid) => {\n return run$1(name, (component, simulatedEvent) => {\n component.getSystem().getByUid(uid).each(redirectee => {\n dispatchEvent(redirectee, redirectee.element, name, simulatedEvent);\n });\n });\n };\n const redirectToPart = (name, detail, partName) => {\n const uid = detail.partUids[partName];\n return redirectToUid(name, uid);\n };\n const runWithTarget = (name, f) => {\n return run$1(name, (component, simulatedEvent) => {\n const ev = simulatedEvent.event;\n const target = component.getSystem().getByDom(ev.target).getOrThunk(() => {\n const closest = closest$4(ev.target, el => component.getSystem().getByDom(el).toOptional(), never);\n return closest.getOr(component);\n });\n f(component, target, simulatedEvent);\n });\n };\n const cutter = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.cut();\n });\n };\n const stopper = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.stop();\n });\n };\n const runOnSource = (name, f) => {\n return runOnSourceName(name)(f);\n };\n const runOnAttached = runOnSourceName(attachedToDom());\n const runOnDetached = runOnSourceName(detachedFromDom());\n const runOnInit = runOnSourceName(systemInit());\n const runOnExecute$1 = runOnName(execute$5());\n\n const markAsBehaviourApi = (f, apiName, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: apiName,\n parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n });\n return f;\n };\n const cleanParameters = parameters => map$2(parameters, p => endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p);\n const markAsExtraApi = (f, extraName) => {\n const delegate = f.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: extraName,\n parameters: cleanParameters(parameters)\n });\n return f;\n };\n const markAsSketchApi = (f, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: 'OVERRIDE',\n parameters: cleanParameters(parameters.slice(1))\n });\n return f;\n };\n\n const nu$8 = s => ({\n classes: isUndefined(s.classes) ? [] : s.classes,\n attributes: isUndefined(s.attributes) ? {} : s.attributes,\n styles: isUndefined(s.styles) ? {} : s.styles\n });\n const merge = (defnA, mod) => ({\n ...defnA,\n attributes: {\n ...defnA.attributes,\n ...mod.attributes\n },\n styles: {\n ...defnA.styles,\n ...mod.styles\n },\n classes: defnA.classes.concat(mod.classes)\n });\n\n const executeEvent = (bConfig, bState, executor) => runOnExecute$1(component => {\n executor(component, bConfig, bState);\n });\n const loadEvent = (bConfig, bState, f) => runOnInit((component, _simulatedEvent) => {\n f(component, bConfig, bState);\n });\n const create$5 = (schema, name, active, apis, extra, state) => {\n const configSchema = objOfOnly(schema);\n const schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const createModes$1 = (modes, name, active, apis, extra, state) => {\n const configSchema = modes;\n const schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const wrapApi = (bName, apiFunction, apiName) => {\n const f = (component, ...rest) => {\n const args = [component].concat(rest);\n return component.config({ name: constant$1(bName) }).fold(() => {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, info => {\n const rest = Array.prototype.slice.call(args, 1);\n return apiFunction.apply(undefined, [\n component,\n info.config,\n info.state\n ].concat(rest));\n });\n };\n return markAsBehaviourApi(f, apiName, apiFunction);\n };\n const revokeBehaviour = name => ({\n key: name,\n value: undefined\n });\n const doCreate = (configSchema, schemaSchema, name, active, apis, extra, state) => {\n const getConfig = info => hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n const wrappedApis = map$1(apis, (apiF, apiName) => wrapApi(name, apiF, apiName));\n const wrappedExtra = map$1(extra, (extraF, extraName) => markAsExtraApi(extraF, extraName));\n const me = {\n ...wrappedExtra,\n ...wrappedApis,\n revoke: curry(revokeBehaviour, name),\n config: spec => {\n const prepared = asRawOrDie$1(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me,\n configAsRaw: cached(() => asRawOrDie$1(name + '-config', configSchema, spec)),\n initialConfig: spec,\n state\n }\n };\n },\n schema: constant$1(schemaSchema),\n exhibit: (info, base) => {\n return lift2(getConfig(info), get$h(active, 'exhibit'), (behaviourInfo, exhibitor) => {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n }).getOrThunk(() => nu$8({}));\n },\n name: constant$1(name),\n handlers: info => {\n return getConfig(info).map(behaviourInfo => {\n const getEvents = get$h(active, 'events').getOr(() => ({}));\n return getEvents(behaviourInfo.config, behaviourInfo.state);\n }).getOr({});\n }\n };\n return me;\n };\n\n const NoState = { init: () => nu$7({ readState: constant$1('No State required') }) };\n const nu$7 = spec => spec;\n\n const derive$1 = capabilities => wrapAll(capabilities);\n const simpleSchema = objOfOnly([\n required$1('fields'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const create$4 = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data);\n return create$5(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n const modeSchema = objOfOnly([\n required$1('branchKey'),\n required$1('branches'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const createModes = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, modeSchema, data);\n return createModes$1(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n };\n const revoke = constant$1(undefined);\n\n const read$1 = (element, attr) => {\n const value = get$g(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read$1(element, attr);\n const nu = old.concat([id]);\n set$9(element, attr, nu.join(' '));\n return true;\n };\n const remove$5 = (element, attr, id) => {\n const nu = filter$2(read$1(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$9(element, attr, nu.join(' '));\n } else {\n remove$8(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$a = element => read$1(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$4 = (element, clazz) => remove$5(element, 'class', clazz);\n const toggle$5 = (element, clazz) => {\n if (contains$2(get$a(element), clazz)) {\n return remove$4(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$a(element);\n if (classList.length === 0) {\n remove$8(element, 'class');\n }\n };\n const remove$3 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n const toggle$4 = (element, clazz) => {\n const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$5(element, clazz);\n cleanClass(element);\n return result;\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const add$1 = (element, classes) => {\n each$1(classes, x => {\n add$2(element, x);\n });\n };\n const remove$2 = (element, classes) => {\n each$1(classes, x => {\n remove$3(element, x);\n });\n };\n const toggle$3 = (element, classes) => {\n each$1(classes, x => {\n toggle$4(element, x);\n });\n };\n const hasAll = (element, classes) => forall(classes, clazz => has(element, clazz));\n const getNative = element => {\n const classList = element.dom.classList;\n const r = new Array(classList.length);\n for (let i = 0; i < classList.length; i++) {\n const item = classList.item(i);\n if (item !== null) {\n r[i] = item;\n }\n }\n return r;\n };\n const get$9 = element => supports(element) ? getNative(element) : get$a(element);\n\n const NuPositionCss = (position, left, top, right, bottom) => {\n const toPx = num => num + 'px';\n return {\n position,\n left: left.map(toPx),\n top: top.map(toPx),\n right: right.map(toPx),\n bottom: bottom.map(toPx)\n };\n };\n const toOptions = position => ({\n ...position,\n position: Optional.some(position.position)\n });\n const applyPositionCss = (element, position) => {\n setOptions(element, toOptions(position));\n };\n\n const getOffsetParent = element => {\n const isFixed = is$1(getRaw(element, 'position'), 'fixed');\n const offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n return offsetParent$1.orThunk(() => {\n const marker = SugarElement.fromTag('span');\n return parent(element).bind(parent => {\n append$2(parent, marker);\n const offsetParent$1 = offsetParent(marker);\n remove$6(marker);\n return offsetParent$1;\n });\n });\n };\n const getOrigin = element => getOffsetParent(element).map(absolute$3).getOrThunk(() => SugarPosition(0, 0));\n\n const appear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$3(elem, contextualInfo.fadeOutClass);\n add$2(elem, contextualInfo.fadeInClass);\n contextualInfo.onShow(component);\n };\n const disappear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$3(elem, contextualInfo.fadeInClass);\n add$2(elem, contextualInfo.fadeOutClass);\n contextualInfo.onHide(component);\n };\n const isPartiallyVisible = (box, bounds) => box.y < bounds.bottom && box.bottom > bounds.y;\n const isTopCompletelyVisible = (box, bounds) => box.y >= bounds.y;\n const isBottomCompletelyVisible = (box, bounds) => box.bottom <= bounds.bottom;\n const forceTopPosition = (winBox, leftX, viewport) => ({\n location: 'top',\n leftX,\n topY: viewport.bounds.y - winBox.y\n });\n const forceBottomPosition = (winBox, leftX, viewport) => ({\n location: 'bottom',\n leftX,\n bottomY: winBox.bottom - viewport.bounds.bottom\n });\n const getDockedLeftPosition = bounds => {\n return bounds.box.x - bounds.win.x;\n };\n const tryDockingPosition = (modes, bounds, viewport) => {\n const winBox = bounds.win;\n const box = bounds.box;\n const leftX = getDockedLeftPosition(bounds);\n return findMap(modes, mode => {\n switch (mode) {\n case 'bottom':\n return !isBottomCompletelyVisible(box, viewport.bounds) ? Optional.some(forceBottomPosition(winBox, leftX, viewport)) : Optional.none();\n case 'top':\n return !isTopCompletelyVisible(box, viewport.bounds) ? Optional.some(forceTopPosition(winBox, leftX, viewport)) : Optional.none();\n default:\n return Optional.none();\n }\n }).getOr({ location: 'no-dock' });\n };\n const isVisibleForModes = (modes, box, viewport) => forall(modes, mode => {\n switch (mode) {\n case 'bottom':\n return isBottomCompletelyVisible(box, viewport.bounds);\n case 'top':\n return isTopCompletelyVisible(box, viewport.bounds);\n }\n });\n const getXYForRestoring = (pos, viewport) => {\n const priorY = viewport.optScrollEnv.fold(constant$1(pos.bounds.y), scrollEnv => scrollEnv.scrollElmTop + (pos.bounds.y - scrollEnv.currentScrollTop));\n return SugarPosition(pos.bounds.x, priorY);\n };\n const getXYForSaving = (box, viewport) => {\n const priorY = viewport.optScrollEnv.fold(constant$1(box.y), scrollEnv => box.y + scrollEnv.currentScrollTop - scrollEnv.scrollElmTop);\n return SugarPosition(box.x, priorY);\n };\n const getPrior = (elem, viewport, state) => state.getInitialPos().map(pos => {\n const xy = getXYForRestoring(pos, viewport);\n return {\n box: bounds(xy.left, xy.top, get$d(elem), get$e(elem)),\n location: pos.location\n };\n });\n const storePrior = (elem, box, viewport, state, decision) => {\n const xy = getXYForSaving(box, viewport);\n const bounds$1 = bounds(xy.left, xy.top, box.width, box.height);\n state.setInitialPos({\n style: getAllRaw(elem),\n position: get$f(elem, 'position') || 'static',\n bounds: bounds$1,\n location: decision.location\n });\n };\n const storePriorIfNone = (elem, box, viewport, state, decision) => {\n state.getInitialPos().fold(() => storePrior(elem, box, viewport, state, decision), () => noop);\n };\n const revertToOriginal = (elem, box, state) => state.getInitialPos().bind(position => {\n var _a;\n state.clearInitialPos();\n switch (position.position) {\n case 'static':\n return Optional.some({ morph: 'static' });\n case 'absolute':\n const offsetParent = getOffsetParent(elem).getOr(body());\n const offsetBox = box$1(offsetParent);\n const scrollDelta = (_a = offsetParent.dom.scrollTop) !== null && _a !== void 0 ? _a : 0;\n return Optional.some({\n morph: 'absolute',\n positionCss: NuPositionCss('absolute', get$h(position.style, 'left').map(_left => box.x - offsetBox.x), get$h(position.style, 'top').map(_top => box.y - offsetBox.y + scrollDelta), get$h(position.style, 'right').map(_right => offsetBox.right - box.right), get$h(position.style, 'bottom').map(_bottom => offsetBox.bottom - box.bottom))\n });\n default:\n return Optional.none();\n }\n });\n const tryMorphToOriginal = (elem, viewport, state) => getPrior(elem, viewport, state).filter(({box}) => isVisibleForModes(state.getModes(), box, viewport)).bind(({box}) => revertToOriginal(elem, box, state));\n const tryDecisionToFixedMorph = decision => {\n switch (decision.location) {\n case 'top': {\n return Optional.some({\n morph: 'fixed',\n positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.some(decision.topY), Optional.none(), Optional.none())\n });\n }\n case 'bottom': {\n return Optional.some({\n morph: 'fixed',\n positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.none(), Optional.none(), Optional.some(decision.bottomY))\n });\n }\n default:\n return Optional.none();\n }\n };\n const tryMorphToFixed = (elem, viewport, state) => {\n const box = box$1(elem);\n const winBox = win();\n const decision = tryDockingPosition(state.getModes(), {\n win: winBox,\n box\n }, viewport);\n if (decision.location === 'top' || decision.location === 'bottom') {\n storePrior(elem, box, viewport, state, decision);\n return tryDecisionToFixedMorph(decision);\n } else {\n return Optional.none();\n }\n };\n const tryMorphToOriginalOrUpdateFixed = (elem, viewport, state) => {\n return tryMorphToOriginal(elem, viewport, state).orThunk(() => {\n return viewport.optScrollEnv.bind(_ => getPrior(elem, viewport, state)).bind(({box, location}) => {\n const winBox = win();\n const leftX = getDockedLeftPosition({\n win: winBox,\n box\n });\n const decision = location === 'top' ? forceTopPosition(winBox, leftX, viewport) : forceBottomPosition(winBox, leftX, viewport);\n return tryDecisionToFixedMorph(decision);\n });\n });\n };\n const tryMorph = (component, viewport, state) => {\n const elem = component.element;\n const isDocked = is$1(getRaw(elem, 'position'), 'fixed');\n return isDocked ? tryMorphToOriginalOrUpdateFixed(elem, viewport, state) : tryMorphToFixed(elem, viewport, state);\n };\n const calculateMorphToOriginal = (component, viewport, state) => {\n const elem = component.element;\n return getPrior(elem, viewport, state).bind(({box}) => revertToOriginal(elem, box, state));\n };\n const forceDockWith = (elem, viewport, state, getDecision) => {\n const box = box$1(elem);\n const winBox = win();\n const leftX = getDockedLeftPosition({\n win: winBox,\n box\n });\n const decision = getDecision(winBox, leftX, viewport);\n if (decision.location === 'bottom' || decision.location === 'top') {\n storePriorIfNone(elem, box, viewport, state, decision);\n return tryDecisionToFixedMorph(decision);\n } else {\n return Optional.none();\n }\n };\n\n const morphToStatic = (component, config, state) => {\n state.setDocked(false);\n each$1([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], prop => remove$7(component.element, prop));\n config.onUndocked(component);\n };\n const morphToCoord = (component, config, state, position) => {\n const isDocked = position.position === 'fixed';\n state.setDocked(isDocked);\n applyPositionCss(component.element, position);\n const method = isDocked ? config.onDocked : config.onUndocked;\n method(component);\n };\n const updateVisibility = (component, config, state, viewport, morphToDocked = false) => {\n config.contextual.each(contextInfo => {\n contextInfo.lazyContext(component).each(box => {\n const isVisible = isPartiallyVisible(box, viewport.bounds);\n if (isVisible !== state.isVisible()) {\n state.setVisible(isVisible);\n if (morphToDocked && !isVisible) {\n add$1(component.element, [contextInfo.fadeOutClass]);\n contextInfo.onHide(component);\n } else {\n const method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n const applyFixedMorph = (component, config, state, viewport, morph) => {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, state, morph.positionCss);\n };\n const applyMorph = (component, config, state, viewport, morph) => {\n switch (morph.morph) {\n case 'static': {\n return morphToStatic(component, config, state);\n }\n case 'absolute': {\n return morphToCoord(component, config, state, morph.positionCss);\n }\n case 'fixed': {\n return applyFixedMorph(component, config, state, viewport, morph);\n }\n }\n };\n const refreshInternal = (component, config, state) => {\n const viewport = config.lazyViewport(component);\n updateVisibility(component, config, state, viewport);\n tryMorph(component, viewport, state).each(morph => {\n applyMorph(component, config, state, viewport, morph);\n });\n };\n const resetInternal = (component, config, state) => {\n const elem = component.element;\n state.setDocked(false);\n const viewport = config.lazyViewport(component);\n calculateMorphToOriginal(component, viewport, state).each(staticOrAbsoluteMorph => {\n switch (staticOrAbsoluteMorph.morph) {\n case 'static': {\n morphToStatic(component, config, state);\n break;\n }\n case 'absolute': {\n morphToCoord(component, config, state, staticOrAbsoluteMorph.positionCss);\n break;\n }\n }\n });\n state.setVisible(true);\n config.contextual.each(contextInfo => {\n remove$2(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n const refresh$4 = (component, config, state) => {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n const reset$2 = (component, config, state) => {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n const forceDockWithDecision = getDecision => (component, config, state) => {\n const viewport = config.lazyViewport(component);\n const optMorph = forceDockWith(component.element, viewport, state, getDecision);\n optMorph.each(morph => {\n applyFixedMorph(component, config, state, viewport, morph);\n });\n };\n const forceDockToTop = forceDockWithDecision(forceTopPosition);\n const forceDockToBottom = forceDockWithDecision(forceBottomPosition);\n const isDocked$2 = (component, config, state) => state.isDocked();\n const setModes = (component, config, state, modes) => state.setModes(modes);\n const getModes = (component, config, state) => state.getModes();\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset$2,\n isDocked: isDocked$2,\n getModes: getModes,\n setModes: setModes,\n forceDockToTop: forceDockToTop,\n forceDockToBottom: forceDockToBottom\n });\n\n const events$i = (dockInfo, dockState) => derive$2([\n runOnSource(transitionend(), (component, simulatedEvent) => {\n dockInfo.contextual.each(contextInfo => {\n if (has(component.element, contextInfo.transitionClass)) {\n remove$2(component.element, [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n const notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run$1(windowScroll(), (component, _) => {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(externalElementScroll(), (component, _) => {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(windowResize(), (component, _) => {\n reset$2(component, dockInfo, dockState);\n })\n ]);\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$i\n });\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n const get$8 = element => element.dom.innerHTML;\n const set$6 = (element, content) => {\n const owner = owner$4(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append$2(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$2(container, clone);\n return get$8(container);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n\n const getHtml = element => {\n if (isShadowRoot(element)) {\n return '#shadow-root';\n } else {\n const clone = shallow(element);\n return getOuter(clone);\n }\n };\n\n const element = elem => getHtml(elem);\n\n const unknown = 'unknown';\n var EventConfiguration;\n (function (EventConfiguration) {\n EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';\n EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';\n EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';\n }(EventConfiguration || (EventConfiguration = {})));\n const eventConfig = Cell({});\n const makeEventLogger = (eventName, initialTarget) => {\n const sequence = [];\n const startTime = new Date().getTime();\n return {\n logEventCut: (_name, target, purpose) => {\n sequence.push({\n outcome: 'cut',\n target,\n purpose\n });\n },\n logEventStopped: (_name, target, purpose) => {\n sequence.push({\n outcome: 'stopped',\n target,\n purpose\n });\n },\n logNoParent: (_name, target, purpose) => {\n sequence.push({\n outcome: 'no-parent',\n target,\n purpose\n });\n },\n logEventNoHandlers: (_name, target) => {\n sequence.push({\n outcome: 'no-handlers-left',\n target\n });\n },\n logEventResponse: (_name, target, purpose) => {\n sequence.push({\n outcome: 'response',\n purpose,\n target\n });\n },\n write: () => {\n const finishTime = new Date().getTime();\n if (contains$2([\n 'mousemove',\n 'mouseover',\n 'mouseout',\n systemInit()\n ], eventName)) {\n return;\n }\n console.log(eventName, {\n event: eventName,\n time: finishTime - startTime,\n target: initialTarget.dom,\n sequence: map$2(sequence, s => {\n if (!contains$2([\n 'cut',\n 'stopped',\n 'response'\n ], s.outcome)) {\n return s.outcome;\n } else {\n return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';\n }\n })\n });\n }\n };\n };\n const processEvent = (eventName, initialTarget, f) => {\n const status = get$h(eventConfig.get(), eventName).orThunk(() => {\n const patterns = keys(eventConfig.get());\n return findMap(patterns, p => eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none());\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n const logger = makeEventLogger(eventName, initialTarget);\n const output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n const path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n const getTrace = () => {\n const err = new Error();\n if (err.stack !== undefined) {\n const lines = err.stack.split('\\n');\n return find$5(lines, line => line.indexOf('alloy') > 0 && !exists(path, p => line.indexOf(p) > -1)).getOr(unknown);\n } else {\n return unknown;\n }\n };\n const ignoreEvent = {\n logEventCut: noop,\n logEventStopped: noop,\n logNoParent: noop,\n logEventNoHandlers: noop,\n logEventResponse: noop,\n write: noop\n };\n const monitorEvent = (eventName, initialTarget, f) => processEvent(eventName, initialTarget, f);\n const noLogger = constant$1(ignoreEvent);\n\n const menuFields = constant$1([\n required$1('menu'),\n required$1('selectedMenu')\n ]);\n const itemFields = constant$1([\n required$1('item'),\n required$1('selectedItem')\n ]);\n constant$1(objOf(itemFields().concat(menuFields())));\n const itemSchema$3 = constant$1(objOf(itemFields()));\n\n const _initSize = requiredObjOf('initSize', [\n required$1('numColumns'),\n required$1('numRows')\n ]);\n const itemMarkers = () => requiredOf('markers', itemSchema$3());\n const tieredMenuMarkers = () => requiredObjOf('markers', [required$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n const markers$1 = required => requiredObjOf('markers', map$2(required, required$1));\n const onPresenceHandler = (label, fieldName, presence) => {\n getTrace();\n return field$1(fieldName, fieldName, presence, valueOf(f => Result.value((...args) => {\n return f.apply(undefined, args);\n })));\n };\n const onHandler = fieldName => onPresenceHandler('onHandler', fieldName, defaulted$1(noop));\n const onKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none));\n const onStrictHandler = fieldName => onPresenceHandler('onHandler', fieldName, required$2());\n const onStrictKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, required$2());\n const output$1 = (name, value) => customField(name, constant$1(value));\n const snapshot = name => customField(name, identity);\n const initSize = constant$1(_initSize);\n\n var DockingSchema = [\n optionObjOf('contextual', [\n requiredString('fadeInClass'),\n requiredString('fadeOutClass'),\n requiredString('transitionClass'),\n requiredFunction('lazyContext'),\n onHandler('onShow'),\n onHandler('onShown'),\n onHandler('onHide'),\n onHandler('onHidden')\n ]),\n defaultedFunction('lazyViewport', () => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n })),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n const init$g = spec => {\n const docked = Cell(false);\n const visible = Cell(true);\n const initialBounds = value$4();\n const modes = Cell(spec.modes);\n const readState = () => `docked: ${ docked.get() }, visible: ${ visible.get() }, modes: ${ modes.get().join(',') }`;\n return nu$7({\n isDocked: docked.get,\n setDocked: docked.set,\n getInitialPos: initialBounds.get,\n setInitialPos: initialBounds.set,\n clearInitialPos: initialBounds.clear,\n isVisible: visible.get,\n setVisible: visible.set,\n getModes: modes.get,\n setModes: modes.set,\n readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$g\n });\n\n const Docking = create$4({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n const isRecursive = (component, originator, target) => eq(originator, component.element) && !eq(originator, target);\n const events$h = derive$2([can(focus$4(), (component, simulatedEvent) => {\n const event = simulatedEvent.event;\n const originator = event.originator;\n const target = event.target;\n if (isRecursive(component, originator, target)) {\n console.warn(focus$4() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus$4() + ' event handlers');\n return false;\n } else {\n return true;\n }\n })]);\n\n var DefaultEvents = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$h\n });\n\n const cycleBy = (value, delta, min, max) => {\n const r = value + delta;\n if (r > max) {\n return min;\n } else if (r < min) {\n return max;\n } else {\n return r;\n }\n };\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate$6 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + unique + String(time);\n };\n\n const prefix$1 = constant$1('alloy-id-');\n const idAttr$1 = constant$1('data-alloy-id');\n\n const prefix = prefix$1();\n const idAttr = idAttr$1();\n const write = (label, elem) => {\n const id = generate$6(prefix + label);\n writeOnly(elem, id);\n return id;\n };\n const writeOnly = (elem, uid) => {\n Object.defineProperty(elem.dom, idAttr, {\n value: uid,\n writable: true\n });\n };\n const read = elem => {\n const id = isElement$1(elem) ? elem.dom[idAttr] : null;\n return Optional.from(id);\n };\n const generate$5 = prefix => generate$6(prefix);\n\n const make$8 = identity;\n\n const NoContextApi = getComp => {\n const getMessage = event => `The component must be in a context to execute: ${ event }` + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : '');\n const fail = event => () => {\n throw new Error(getMessage(event));\n };\n const warn = event => () => {\n console.warn(getMessage(event));\n };\n return {\n debugInfo: constant$1('fake'),\n triggerEvent: warn('triggerEvent'),\n triggerFocus: warn('triggerFocus'),\n triggerEscape: warn('triggerEscape'),\n broadcast: warn('broadcast'),\n broadcastOn: warn('broadcastOn'),\n broadcastEvent: warn('broadcastEvent'),\n build: fail('build'),\n buildOrPatch: fail('buildOrPatch'),\n addToWorld: fail('addToWorld'),\n removeFromWorld: fail('removeFromWorld'),\n addToGui: fail('addToGui'),\n removeFromGui: fail('removeFromGui'),\n getByUid: fail('getByUid'),\n getByDom: fail('getByDom'),\n isConnected: never\n };\n };\n const singleton = NoContextApi();\n\n const premadeTag = generate$6('alloy-premade');\n const premade$1 = comp => {\n Object.defineProperty(comp.element.dom, premadeTag, {\n value: comp.uid,\n writable: true\n });\n return wrap$1(premadeTag, comp);\n };\n const isPremade = element => has$2(element.dom, premadeTag);\n const getPremade = spec => get$h(spec, premadeTag);\n const makeApi = f => markAsSketchApi((component, ...rest) => f(component.getApis(), component, ...rest), f);\n\n const generateFrom$1 = (spec, all) => {\n const schema = map$2(all, a => optionObjOf(a.name(), [\n required$1('config'),\n defaulted('state', NoState)\n ]));\n const validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(errInfo => {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, identity);\n return {\n list: all,\n data: map$1(validated, optBlobThunk => {\n const output = optBlobThunk.map(blob => ({\n config: blob.config,\n state: blob.state.init(blob.config)\n }));\n return constant$1(output);\n })\n };\n };\n const getBehaviours$3 = bData => bData.list;\n const getData$2 = bData => bData.data;\n\n const byInnerKey = (data, tuple) => {\n const r = {};\n each(data, (detail, key) => {\n each(detail, (value, indexKey) => {\n const chain = get$h(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n const combine$2 = (info, baseMod, behaviours, base) => {\n const modsByBehaviour = { ...baseMod };\n each$1(behaviours, behaviour => {\n modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n });\n const byAspect = byInnerKey(modsByBehaviour, (name, modification) => ({\n name,\n modification\n }));\n const combineObjects = objects => foldr(objects, (b, a) => ({\n ...a.modification,\n ...b\n }), {});\n const combinedClasses = foldr(byAspect.classes, (b, a) => a.modification.concat(b), []);\n const combinedAttributes = combineObjects(byAspect.attributes);\n const combinedStyles = combineObjects(byAspect.styles);\n return nu$8({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n const sortKeys = (label, keyName, array, order) => {\n try {\n const sorted = sort(array, (a, b) => {\n const aKey = a[keyName];\n const bKey = b[keyName];\n const aIndex = order.indexOf(aKey);\n const bIndex = order.indexOf(bKey);\n if (aIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (bIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n return Result.value(sorted);\n } catch (err) {\n return Result.error([err]);\n }\n };\n\n const uncurried = (handler, purpose) => ({\n handler,\n purpose\n });\n const curried = (handler, purpose) => ({\n cHandler: handler,\n purpose\n });\n const curryArgs = (descHandler, extraArgs) => curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n const getCurried = descHandler => descHandler.cHandler;\n\n const behaviourTuple = (name, handler) => ({\n name,\n handler\n });\n const nameToHandlers = (behaviours, info) => {\n const r = {};\n each$1(behaviours, behaviour => {\n r[behaviour.name()] = behaviour.handlers(info);\n });\n return r;\n };\n const groupByEvents = (info, behaviours, base) => {\n const behaviourEvents = {\n ...base,\n ...nameToHandlers(behaviours, info)\n };\n return byInnerKey(behaviourEvents, behaviourTuple);\n };\n const combine$1 = (info, eventOrder, behaviours, base) => {\n const byEventName = groupByEvents(info, behaviours, base);\n return combineGroups(byEventName, eventOrder);\n };\n const assemble = rawHandler => {\n const handler = read$2(rawHandler);\n return (component, simulatedEvent, ...rest) => {\n const args = [\n component,\n simulatedEvent\n ].concat(rest);\n if (handler.abort.apply(undefined, args)) {\n simulatedEvent.stop();\n } else if (handler.can.apply(undefined, args)) {\n handler.run.apply(undefined, args);\n }\n };\n };\n const missingOrderError = (eventName, tuples) => Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that ' + 'can trigger it are: ' + JSON.stringify(map$2(tuples, c => c.name), null, 2)]);\n const fuse = (tuples, eventOrder, eventName) => {\n const order = eventOrder[eventName];\n if (!order) {\n return missingOrderError(eventName, tuples);\n } else {\n return sortKeys('Event: ' + eventName, 'name', tuples, order).map(sortedTuples => {\n const handlers = map$2(sortedTuples, tuple => tuple.handler);\n return fuse$1(handlers);\n });\n }\n };\n const combineGroups = (byEventName, eventOrder) => {\n const r = mapToArray(byEventName, (tuples, eventName) => {\n const combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName);\n return combined.map(handler => {\n const assembled = assemble(handler);\n const purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], o => exists(tuples, t => t.name === o)).join(' > ') : tuples[0].name;\n return wrap$1(eventName, uncurried(assembled, purpose));\n });\n });\n return consolidate(r, {});\n };\n\n const baseBehaviour = 'alloy.base.behaviour';\n const schema$z = objOf([\n field$1('dom', 'dom', required$2(), objOf([\n required$1('tag'),\n defaulted('styles', {}),\n defaulted('classes', []),\n defaulted('attributes', {}),\n option$3('value'),\n option$3('innerHtml')\n ])),\n required$1('components'),\n required$1('uid'),\n defaulted('events', {}),\n defaulted('apis', {}),\n field$1('eventOrder', 'eventOrder', mergeWith({\n [execute$5()]: [\n 'disabling',\n baseBehaviour,\n 'toggling',\n 'typeaheadevents'\n ],\n [focus$4()]: [\n baseBehaviour,\n 'focusing',\n 'keying'\n ],\n [systemInit()]: [\n baseBehaviour,\n 'disabling',\n 'toggling',\n 'representing',\n 'tooltipping'\n ],\n [input()]: [\n baseBehaviour,\n 'representing',\n 'streaming',\n 'invalidating'\n ],\n [detachedFromDom()]: [\n baseBehaviour,\n 'representing',\n 'item-events',\n 'toolbar-button-events',\n 'tooltipping'\n ],\n [mousedown()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [touchstart()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [mouseover()]: [\n 'item-type-events',\n 'tooltipping'\n ],\n [receive()]: [\n 'receiving',\n 'reflecting',\n 'tooltipping'\n ]\n }), anyValue()),\n option$3('domModification')\n ]);\n const toInfo = spec => asRaw('custom.definition', schema$z, spec);\n const toDefinition = detail => ({\n ...detail.dom,\n uid: detail.uid,\n domChildren: map$2(detail.components, comp => comp.element)\n });\n const toModification = detail => detail.domModification.fold(() => nu$8({}), nu$8);\n const toEvents = info => info.events;\n\n const get$7 = element => element.dom.value;\n const set$5 = (element, value) => {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom.value = value;\n };\n\n const determineObsoleted = (parent, index, oldObsoleted) => {\n const newObsoleted = child$2(parent, index);\n return newObsoleted.map(newObs => {\n const elemChanged = oldObsoleted.exists(o => !eq(o, newObs));\n if (elemChanged) {\n const oldTag = oldObsoleted.map(name$3).getOr('span');\n const marker = SugarElement.fromTag(oldTag);\n before$1(newObs, marker);\n return marker;\n } else {\n return newObs;\n }\n });\n };\n const ensureInDom = (parent, child, obsoleted) => {\n obsoleted.fold(() => append$2(parent, child), obs => {\n if (!eq(obs, child)) {\n before$1(obs, child);\n remove$6(obs);\n }\n });\n };\n const patchChildrenWith = (parent, nu, f) => {\n const builtChildren = map$2(nu, f);\n const currentChildren = children(parent);\n each$1(currentChildren.slice(builtChildren.length), remove$6);\n return builtChildren;\n };\n const patchSpecChild = (parent, index, spec, build) => {\n const oldObsoleted = child$2(parent, index);\n const childComp = build(spec, oldObsoleted);\n const obsoleted = determineObsoleted(parent, index, oldObsoleted);\n ensureInDom(parent, childComp.element, obsoleted);\n return childComp;\n };\n const patchSpecChildren = (parent, specs, build) => patchChildrenWith(parent, specs, (spec, index) => patchSpecChild(parent, index, spec, build));\n const patchDomChildren = (parent, nodes) => patchChildrenWith(parent, nodes, (node, index) => {\n const optObsoleted = child$2(parent, index);\n ensureInDom(parent, node, optObsoleted);\n return node;\n });\n\n const diffKeyValueSet = (newObj, oldObj) => {\n const newKeys = keys(newObj);\n const oldKeys = keys(oldObj);\n const toRemove = difference(oldKeys, newKeys);\n const toSet = bifilter(newObj, (v, k) => {\n return !has$2(oldObj, k) || v !== oldObj[k];\n }).t;\n return {\n toRemove,\n toSet\n };\n };\n const reconcileToDom = (definition, obsoleted) => {\n const {\n class: clazz,\n style,\n ...existingAttributes\n } = clone$2(obsoleted);\n const {\n toSet: attrsToSet,\n toRemove: attrsToRemove\n } = diffKeyValueSet(definition.attributes, existingAttributes);\n const updateAttrs = () => {\n each$1(attrsToRemove, a => remove$8(obsoleted, a));\n setAll$1(obsoleted, attrsToSet);\n };\n const existingStyles = getAllRaw(obsoleted);\n const {\n toSet: stylesToSet,\n toRemove: stylesToRemove\n } = diffKeyValueSet(definition.styles, existingStyles);\n const updateStyles = () => {\n each$1(stylesToRemove, s => remove$7(obsoleted, s));\n setAll(obsoleted, stylesToSet);\n };\n const existingClasses = get$9(obsoleted);\n const classesToRemove = difference(existingClasses, definition.classes);\n const classesToAdd = difference(definition.classes, existingClasses);\n const updateClasses = () => {\n add$1(obsoleted, classesToAdd);\n remove$2(obsoleted, classesToRemove);\n };\n const updateHtml = html => {\n set$6(obsoleted, html);\n };\n const updateChildren = () => {\n const children = definition.domChildren;\n patchDomChildren(obsoleted, children);\n };\n const updateValue = () => {\n const valueElement = obsoleted;\n const value = definition.value.getOrUndefined();\n if (value !== get$7(valueElement)) {\n set$5(valueElement, value !== null && value !== void 0 ? value : '');\n }\n };\n updateAttrs();\n updateClasses();\n updateStyles();\n definition.innerHtml.fold(updateChildren, updateHtml);\n updateValue();\n return obsoleted;\n };\n\n const introduceToDom = definition => {\n const subject = SugarElement.fromTag(definition.tag);\n setAll$1(subject, definition.attributes);\n add$1(subject, definition.classes);\n setAll(subject, definition.styles);\n definition.innerHtml.each(html => set$6(subject, html));\n const children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(value => {\n set$5(subject, value);\n });\n return subject;\n };\n const attemptPatch = (definition, obsoleted) => {\n try {\n const e = reconcileToDom(definition, obsoleted);\n return Optional.some(e);\n } catch (_a) {\n return Optional.none();\n }\n };\n const hasMixedChildren = definition => definition.innerHtml.isSome() && definition.domChildren.length > 0;\n const renderToDom = (definition, optObsoleted) => {\n const canBePatched = candidate => name$3(candidate) === definition.tag && !hasMixedChildren(definition) && !isPremade(candidate);\n const elem = optObsoleted.filter(canBePatched).bind(obsoleted => attemptPatch(definition, obsoleted)).getOrThunk(() => introduceToDom(definition));\n writeOnly(elem, definition.uid);\n return elem;\n };\n\n const getBehaviours$2 = spec => {\n const behaviours = get$h(spec, 'behaviours').getOr({});\n return bind$3(keys(behaviours), name => {\n const behaviour = behaviours[name];\n return isNonNullable(behaviour) ? [behaviour.me] : [];\n });\n };\n const generateFrom = (spec, all) => generateFrom$1(spec, all);\n const generate$4 = spec => {\n const all = getBehaviours$2(spec);\n return generateFrom(spec, all);\n };\n\n const getDomDefinition = (info, bList, bData) => {\n const definition = toDefinition(info);\n const infoModification = toModification(info);\n const baseModification = { 'alloy.base.modification': infoModification };\n const modification = bList.length > 0 ? combine$2(bData, baseModification, bList, definition) : infoModification;\n return merge(definition, modification);\n };\n const getEvents = (info, bList, bData) => {\n const baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n };\n const build$2 = (spec, obsoleted) => {\n const getMe = () => me;\n const systemApi = Cell(singleton);\n const info = getOrDie(toInfo(spec));\n const bBlob = generate$4(spec);\n const bList = getBehaviours$3(bBlob);\n const bData = getData$2(bBlob);\n const modDefinition = getDomDefinition(info, bList, bData);\n const item = renderToDom(modDefinition, obsoleted);\n const events = getEvents(info, bList, bData);\n const subcomponents = Cell(info.components);\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(getMe));\n };\n const syncComponents = () => {\n const children$1 = children(item);\n const subs = bind$3(children$1, child => systemApi.get().getByDom(child).fold(() => [], pure$2));\n subcomponents.set(subs);\n };\n const config = behaviour => {\n const b = bData;\n const f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : () => {\n throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n };\n return f();\n };\n const hasConfigured = behaviour => isFunction(bData[behaviour.name()]);\n const getApis = () => info.apis;\n const readState = behaviourName => bData[behaviourName]().map(b => b.state.readState()).getOr('not enabled');\n const me = {\n uid: spec.uid,\n getSystem: systemApi.get,\n config,\n hasConfigured,\n spec,\n readState,\n getApis,\n connect,\n disconnect,\n element: item,\n syncComponents,\n components: subcomponents.get,\n events\n };\n return me;\n };\n\n const buildSubcomponents = (spec, obsoleted) => {\n const components = get$h(spec, 'components').getOr([]);\n return obsoleted.fold(() => map$2(components, build$1), obs => map$2(components, (c, i) => {\n return buildOrPatch(c, child$2(obs, i));\n }));\n };\n const buildFromSpec = (userSpec, obsoleted) => {\n const {\n events: specEvents,\n ...spec\n } = make$8(userSpec);\n const components = buildSubcomponents(spec, obsoleted);\n const completeSpec = {\n ...spec,\n events: {\n ...DefaultEvents,\n ...specEvents\n },\n components\n };\n return Result.value(build$2(completeSpec, obsoleted));\n };\n const text$2 = textContent => {\n const element = SugarElement.fromText(textContent);\n return external$1({ element });\n };\n const external$1 = spec => {\n const extSpec = asRawOrDie$1('external.component', objOfOnly([\n required$1('element'),\n option$3('uid')\n ]), spec);\n const systemApi = Cell(NoContextApi());\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(() => me));\n };\n const uid = extSpec.uid.getOrThunk(() => generate$5('external'));\n writeOnly(extSpec.element, uid);\n const me = {\n uid,\n getSystem: systemApi.get,\n config: Optional.none,\n hasConfigured: never,\n connect,\n disconnect,\n getApis: () => ({}),\n element: extSpec.element,\n spec,\n readState: constant$1('No state'),\n syncComponents: noop,\n components: constant$1([]),\n events: {}\n };\n return premade$1(me);\n };\n const uids = generate$5;\n const isSketchSpec$1 = spec => has$2(spec, 'uid');\n const buildOrPatch = (spec, obsoleted) => getPremade(spec).getOrThunk(() => {\n const userSpecWithUid = isSketchSpec$1(spec) ? spec : {\n uid: uids(''),\n ...spec\n };\n return buildFromSpec(userSpecWithUid, obsoleted).getOrDie();\n });\n const build$1 = spec => buildOrPatch(spec, Optional.none());\n const premade = premade$1;\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$1 = (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$3 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$1, 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$1(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$5(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 closest$2 = (scope, predicate, isRoot) => closest$3(scope, predicate, isRoot).isSome();\n\n const first$1 = selector => one(selector);\n const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is(e, selector), isRoot);\n const sibling = (scope, selector) => sibling$1(scope, e => is(e, selector));\n const child = (scope, selector) => child$1(scope, e => is(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is$1 = (element, selector) => is(element, selector);\n return ClosestOrAncestor(is$1, ancestor, scope, selector, isRoot);\n };\n\n const attribute = 'aria-controls';\n const find$1 = queryElem => {\n const dependent = closest$3(queryElem, elem => {\n if (!isElement$1(elem)) {\n return false;\n }\n const id = get$g(elem, 'id');\n return id !== undefined && id.indexOf(attribute) > -1;\n });\n return dependent.bind(dep => {\n const id = get$g(dep, 'id');\n const dos = getRootNode(dep);\n return descendant(dos, `[${ attribute }=\"${ id }\"]`);\n });\n };\n const manager = () => {\n const ariaId = generate$6(attribute);\n const link = elem => {\n set$9(elem, attribute, ariaId);\n };\n const unlink = elem => {\n remove$8(elem, attribute);\n };\n return {\n id: ariaId,\n link,\n unlink\n };\n };\n\n const isAriaPartOf = (component, queryElem) => find$1(queryElem).exists(owner => isPartOf$1(component, owner));\n const isPartOf$1 = (component, queryElem) => closest$2(queryElem, el => eq(el, component.element), never) || isAriaPartOf(component, queryElem);\n\n const nu$6 = (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit = false) => ({\n x,\n y,\n bubble,\n direction,\n placement,\n restriction: boundsRestriction,\n label: `${ labelPrefix }-${ placement }`,\n alwaysFit\n });\n\n const adt$a = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n const cata$2 = (subject, southeast, southwest, northeast, northwest, south, north, east, west) => subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n const cataVertical = (subject, south, middle, north) => subject.fold(south, south, north, north, south, north, middle, middle);\n const cataHorizontal = (subject, east, middle, west) => subject.fold(east, west, east, west, middle, middle, east, west);\n const southeast$3 = adt$a.southeast;\n const southwest$3 = adt$a.southwest;\n const northeast$3 = adt$a.northeast;\n const northwest$3 = adt$a.northwest;\n const south$3 = adt$a.south;\n const north$3 = adt$a.north;\n const east$3 = adt$a.east;\n const west$3 = adt$a.west;\n\n const getRestriction = (anchor, restriction) => {\n switch (restriction) {\n case 1:\n return anchor.x;\n case 0:\n return anchor.x + anchor.width;\n case 2:\n return anchor.y;\n case 3:\n return anchor.y + anchor.height;\n }\n };\n const boundsRestriction = (anchor, restrictions) => mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], dir => get$h(restrictions, dir).map(restriction => getRestriction(anchor, restriction)));\n const adjustBounds = (bounds$1, restriction, bubbleOffset) => {\n const applyRestriction = (dir, current) => restriction[dir].map(pos => {\n const isVerticalAxis = dir === 'top' || dir === 'bottom';\n const offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n const comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min;\n const newPos = comparator(pos, current) + offset;\n return isVerticalAxis ? clamp(newPos, bounds$1.y, bounds$1.bottom) : clamp(newPos, bounds$1.x, bounds$1.right);\n }).getOr(current);\n const adjustedLeft = applyRestriction('left', bounds$1.x);\n const adjustedTop = applyRestriction('top', bounds$1.y);\n const adjustedRight = applyRestriction('right', bounds$1.right);\n const adjustedBottom = applyRestriction('bottom', bounds$1.bottom);\n return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n const labelPrefix$2 = 'layout';\n const eastX$1 = anchor => anchor.x;\n const middleX$1 = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const westX$1 = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY$2 = (anchor, element) => anchor.y - element.height;\n const southY$2 = anchor => anchor.y + anchor.height;\n const centreY$1 = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const eastEdgeX$1 = anchor => anchor.x + anchor.width;\n const westEdgeX$1 = (anchor, element) => anchor.x - element.width;\n const southeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), southY$2(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n top: 3\n }), labelPrefix$2);\n const southwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), southY$2(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n top: 3\n }), labelPrefix$2);\n const northeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), northY$2(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 2\n }), labelPrefix$2);\n const northwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), northY$2(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 2\n }), labelPrefix$2);\n const north$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), 'north', boundsRestriction(anchor, { bottom: 2 }), labelPrefix$2);\n const south$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), 'south', boundsRestriction(anchor, { top: 3 }), labelPrefix$2);\n const east$2 = (anchor, element, bubbles) => nu$6(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), 'east', boundsRestriction(anchor, { left: 0 }), labelPrefix$2);\n const west$2 = (anchor, element, bubbles) => nu$6(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), 'west', boundsRestriction(anchor, { right: 1 }), labelPrefix$2);\n const all$1 = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const allRtl$1 = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const aboveOrBelow = () => [\n northeast$2,\n northwest$2,\n southeast$2,\n southwest$2,\n north$2,\n south$2\n ];\n const aboveOrBelowRtl = () => [\n northwest$2,\n northeast$2,\n southwest$2,\n southeast$2,\n north$2,\n south$2\n ];\n const belowOrAbove = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2\n ];\n const belowOrAboveRtl = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2\n ];\n\n const chooseChannels = (channels, message) => message.universal ? channels : filter$2(channels, ch => contains$2(message.channels, ch));\n const events$g = receiveConfig => derive$2([run$1(receive(), (component, message) => {\n const channelMap = receiveConfig.channels;\n const channels = keys(channelMap);\n const receivingData = message;\n const targetChannels = chooseChannels(channels, receivingData);\n each$1(targetChannels, ch => {\n const channelInfo = channelMap[ch];\n const channelSchema = channelInfo.schema;\n const data = asRawOrDie$1('channel[' + ch + '] data\\nReceiver: ' + element(component.element), channelSchema, receivingData.data);\n channelInfo.onReceive(component, data);\n });\n })]);\n\n var ActiveReceiving = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$g\n });\n\n var ReceivingSchema = [requiredOf('channels', setOf(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted('schema', anyValue())\n ])))];\n\n const Receiving = create$4({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n const exhibit$6 = (base, posConfig) => nu$8({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6\n });\n\n const focus$3 = (element, preventScroll = false) => element.dom.focus({ preventScroll });\n const blur$1 = element => element.dom.blur();\n const hasFocus = 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 preserve$1 = (f, container) => {\n const dos = getRootNode(container);\n const refocus = active$1(dos).bind(focused => {\n const hasFocus = elem => eq(focused, elem);\n return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus);\n });\n const result = f(container);\n refocus.each(oldFocus => {\n active$1(dos).filter(newFocus => eq(newFocus, oldFocus)).fold(() => {\n focus$3(oldFocus);\n }, noop);\n });\n return result;\n };\n\n const adt$9 = Adt.generate([\n { none: [] },\n {\n relative: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n },\n {\n fixed: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n }\n ]);\n const positionWithDirection = (posName, decision, x, y, width, height) => {\n const decisionRect = decision.rect;\n const decisionX = decisionRect.x - x;\n const decisionY = decisionRect.y - y;\n const decisionWidth = decisionRect.width;\n const decisionHeight = decisionRect.height;\n const decisionRight = width - (decisionX + decisionWidth);\n const decisionBottom = height - (decisionY + decisionHeight);\n const left = Optional.some(decisionX);\n const top = Optional.some(decisionY);\n const right = Optional.some(decisionRight);\n const bottom = Optional.some(decisionBottom);\n const none = Optional.none();\n return cata$2(decision.direction, () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, none, none, right, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none));\n };\n const reposition = (origin, decision) => origin.fold(() => {\n const decisionRect = decision.rect;\n return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n }, (x, y, width, height) => {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, (x, y, width, height) => {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n const toBox = (origin, element) => {\n const rel = curry(find$2, element);\n const position = origin.fold(rel, rel, () => {\n const scroll = get$c();\n return find$2(element).translate(-scroll.left, -scroll.top);\n });\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const viewport = (origin, optBounds) => optBounds.fold(() => origin.fold(win, win, bounds), bounds$1 => origin.fold(constant$1(bounds$1), constant$1(bounds$1), () => {\n const pos = translate$2(origin, bounds$1.x, bounds$1.y);\n return bounds(pos.left, pos.top, bounds$1.width, bounds$1.height);\n }));\n const translate$2 = (origin, x, y) => {\n const pos = SugarPosition(x, y);\n const removeScroll = () => {\n const outerScroll = get$c();\n return pos.translate(-outerScroll.left, -outerScroll.top);\n };\n return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n };\n const cata$1 = (subject, onNone, onRelative, onFixed) => subject.fold(onNone, onRelative, onFixed);\n adt$9.none;\n const relative$1 = adt$9.relative;\n const fixed$1 = adt$9.fixed;\n\n const anchor = (anchorBox, origin) => ({\n anchorBox,\n origin\n });\n const box = (anchorBox, origin) => anchor(anchorBox, origin);\n\n const placementAttribute = 'data-alloy-placement';\n const setPlacement$1 = (element, placement) => {\n set$9(element, placementAttribute, placement);\n };\n const getPlacement = element => getOpt(element, placementAttribute);\n const reset$1 = element => remove$8(element, placementAttribute);\n\n const adt$8 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'visibleW',\n 'visibleH',\n 'isVisible'\n ]\n }\n ]);\n const determinePosition = (box, bounds) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds;\n const {x, y, right, bottom, width, height} = box;\n const xInBounds = x >= boundsX && x <= boundsRight;\n const yInBounds = y >= boundsY && y <= boundsBottom;\n const originInBounds = xInBounds && yInBounds;\n const rightInBounds = right <= boundsRight && right >= boundsX;\n const bottomInBounds = bottom <= boundsBottom && bottom >= boundsY;\n const sizeInBounds = rightInBounds && bottomInBounds;\n const visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX);\n const visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY);\n return {\n originInBounds,\n sizeInBounds,\n visibleW,\n visibleH\n };\n };\n const calcReposition = (box, bounds$1) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds$1;\n const {x, y, width, height} = box;\n const maxX = Math.max(boundsX, boundsRight - width);\n const maxY = Math.max(boundsY, boundsBottom - height);\n const restrictedX = clamp(x, boundsX, maxX);\n const restrictedY = clamp(y, boundsY, maxY);\n const restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX;\n const restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY;\n return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n };\n const calcMaxSizes = (direction, box, bounds) => {\n const upAvailable = constant$1(box.bottom - bounds.y);\n const downAvailable = constant$1(bounds.bottom - box.y);\n const maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n const westAvailable = constant$1(box.right - bounds.x);\n const eastAvailable = constant$1(bounds.right - box.x);\n const maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n return {\n maxWidth,\n maxHeight\n };\n };\n const attempt = (candidate, width, height, bounds$1) => {\n const bubble = candidate.bubble;\n const bubbleOffset = bubble.offset;\n const adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset);\n const newX = candidate.x + bubbleOffset.left;\n const newY = candidate.y + bubbleOffset.top;\n const box = bounds(newX, newY, width, height);\n const {originInBounds, sizeInBounds, visibleW, visibleH} = determinePosition(box, adjustedBounds);\n const fits = originInBounds && sizeInBounds;\n const fittedBox = fits ? box : calcReposition(box, adjustedBounds);\n const isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n const {maxWidth, maxHeight} = calcMaxSizes(candidate.direction, fittedBox, bounds$1);\n const reposition = {\n rect: fittedBox,\n maxHeight,\n maxWidth,\n direction: candidate.direction,\n placement: candidate.placement,\n classes: {\n on: bubble.classesOn,\n off: bubble.classesOff\n },\n layout: candidate.label,\n testY: newY\n };\n return fits || candidate.alwaysFit ? adt$8.fit(reposition) : adt$8.nofit(reposition, visibleW, visibleH, isPartlyVisible);\n };\n const attempts = (element, candidates, anchorBox, elementBox, bubbles, bounds) => {\n const panelWidth = elementBox.width;\n const panelHeight = elementBox.height;\n const attemptBestFit = (layout, reposition, visibleW, visibleH, isVisible) => {\n const next = layout(anchorBox, elementBox, bubbles, element, bounds);\n const attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(constant$1(attemptLayout), (newReposition, newVisibleW, newVisibleH, newIsVisible) => {\n const improved = isVisible === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible && newIsVisible;\n return improved ? attemptLayout : adt$8.nofit(reposition, visibleW, visibleH, isVisible);\n });\n };\n const abc = foldl(candidates, (b, a) => {\n const bestNext = curry(attemptBestFit, a);\n return b.fold(constant$1(b), bestNext);\n }, adt$8.nofit({\n rect: anchorBox,\n maxHeight: elementBox.height,\n maxWidth: elementBox.width,\n direction: southeast$3(),\n placement: 'southeast',\n classes: {\n on: [],\n off: []\n },\n layout: 'none',\n testY: anchorBox.y\n }, -1, -1, false));\n return abc.fold(identity, identity);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n const capture = (element, event, handler) => capture$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const properties = [\n 'top',\n 'bottom',\n 'right',\n 'left'\n ];\n const timerAttr = 'data-alloy-transition-timer';\n const isTransitioning$1 = (element, transition) => hasAll(element, transition.classes);\n const shouldApplyTransitionCss = (transition, decision, lastPlacement) => {\n return lastPlacement.exists(placer => {\n const mode = transition.mode;\n return mode === 'all' ? true : placer[mode] !== decision[mode];\n });\n };\n const hasChanges = (position, intermediate) => {\n const round = value => parseFloat(value).toFixed(3);\n return find$4(intermediate, (value, key) => {\n const newValue = position[key].map(round);\n const val = value.map(round);\n return !equals(newValue, val);\n }).isSome();\n };\n const getTransitionDuration = element => {\n const get = name => {\n const style = get$f(element, name);\n const times = style.split(/\\s*,\\s*/);\n return filter$2(times, isNotEmpty);\n };\n const parse = value => {\n if (isString(value) && /^[\\d.]+/.test(value)) {\n const num = parseFloat(value);\n return endsWith(value, 'ms') ? num : num * 1000;\n } else {\n return 0;\n }\n };\n const delay = get('transition-delay');\n const duration = get('transition-duration');\n return foldl(duration, (acc, dur, i) => {\n const time = parse(delay[i]) + parse(dur);\n return Math.max(acc, time);\n }, 0);\n };\n const setupTransitionListeners = (element, transition) => {\n const transitionEnd = unbindable();\n const transitionCancel = unbindable();\n let timer;\n const isSourceTransition = e => {\n var _a;\n const pseudoElement = (_a = e.raw.pseudoElement) !== null && _a !== void 0 ? _a : '';\n return eq(e.target, element) && isEmpty(pseudoElement) && contains$2(properties, e.raw.propertyName);\n };\n const transitionDone = e => {\n if (isNullable(e) || isSourceTransition(e)) {\n transitionEnd.clear();\n transitionCancel.clear();\n const type = e === null || e === void 0 ? void 0 : e.raw.type;\n if (isNullable(type) || type === transitionend()) {\n clearTimeout(timer);\n remove$8(element, timerAttr);\n remove$2(element, transition.classes);\n }\n }\n };\n const transitionStart = bind(element, transitionstart(), e => {\n if (isSourceTransition(e)) {\n transitionStart.unbind();\n transitionEnd.set(bind(element, transitionend(), transitionDone));\n transitionCancel.set(bind(element, transitioncancel(), transitionDone));\n }\n });\n const duration = getTransitionDuration(element);\n requestAnimationFrame(() => {\n timer = setTimeout(transitionDone, duration + 17);\n set$9(element, timerAttr, timer);\n });\n };\n const startTransitioning = (element, transition) => {\n add$1(element, transition.classes);\n getOpt(element, timerAttr).each(timerId => {\n clearTimeout(parseInt(timerId, 10));\n remove$8(element, timerAttr);\n });\n setupTransitionListeners(element, transition);\n };\n const applyTransitionCss = (element, origin, position, transition, decision, lastPlacement) => {\n const shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n if (shouldTransition || isTransitioning$1(element, transition)) {\n set$8(element, 'position', position.position);\n const rect = toBox(origin, element);\n const intermediatePosition = reposition(origin, {\n ...decision,\n rect\n });\n const intermediateCssOptions = mapToObject(properties, prop => intermediatePosition[prop]);\n if (hasChanges(position, intermediateCssOptions)) {\n setOptions(element, intermediateCssOptions);\n if (shouldTransition) {\n startTransitioning(element, transition);\n }\n reflow(element);\n }\n } else {\n remove$2(element, transition.classes);\n }\n };\n\n const elementSize = p => ({\n width: getOuter$1(p),\n height: getOuter$2(p)\n });\n const layout = (anchorBox, element, bubbles, options) => {\n remove$7(element, 'max-height');\n remove$7(element, 'max-width');\n const elementBox = elementSize(element);\n return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n const setClasses = (element, decision) => {\n const classInfo = decision.classes;\n remove$2(element, classInfo.off);\n add$1(element, classInfo.on);\n };\n const setHeight = (element, decision, options) => {\n const maxHeightFunction = options.maxHeightFunction;\n maxHeightFunction(element, decision.maxHeight);\n };\n const setWidth = (element, decision, options) => {\n const maxWidthFunction = options.maxWidthFunction;\n maxWidthFunction(element, decision.maxWidth);\n };\n const position$2 = (element, decision, options) => {\n const positionCss = reposition(options.origin, decision);\n options.transition.each(transition => {\n applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement);\n });\n applyPositionCss(element, positionCss);\n };\n const setPlacement = (element, decision) => {\n setPlacement$1(element, decision.placement);\n };\n\n const setMaxHeight = (element, maxHeight) => {\n setMax$1(element, Math.floor(maxHeight));\n };\n const anchored = constant$1((element, available) => {\n setMaxHeight(element, available);\n setAll(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n const expandable$1 = constant$1((element, available) => {\n setMaxHeight(element, available);\n });\n\n const defaultOr = (options, key, dephault) => options[key] === undefined ? dephault : options[key];\n const simple = (anchor, element, bubble, layouts, lastPlacement, optBounds, overrideOptions, transition) => {\n const maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n const maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n const anchorBox = anchor.anchorBox;\n const origin = anchor.origin;\n const options = {\n bounds: viewport(origin, optBounds),\n origin,\n preference: layouts,\n maxHeightFunction,\n maxWidthFunction,\n lastPlacement,\n transition\n };\n return go(anchorBox, element, bubble, options);\n };\n const go = (anchorBox, element, bubble, options) => {\n const decision = layout(anchorBox, element, bubble, options);\n position$2(element, decision, options);\n setPlacement(element, decision);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n return {\n layout: decision.layout,\n placement: decision.placement\n };\n };\n\n const allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'inset'\n ];\n const nu$5 = (xOffset, yOffset, classes, insetModifier = 1) => {\n const insetXOffset = xOffset * insetModifier;\n const insetYOffset = yOffset * insetModifier;\n const getClasses = prop => get$h(classes, prop).getOr([]);\n const make = (xDelta, yDelta, alignmentsOn) => {\n const alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: SugarPosition(xDelta, yDelta),\n classesOn: bind$3(alignmentsOn, getClasses),\n classesOff: bind$3(alignmentsOff, getClasses)\n };\n };\n return {\n southeast: () => make(-xOffset, yOffset, [\n 'top',\n 'alignLeft'\n ]),\n southwest: () => make(xOffset, yOffset, [\n 'top',\n 'alignRight'\n ]),\n south: () => make(-xOffset / 2, yOffset, [\n 'top',\n 'alignCentre'\n ]),\n northeast: () => make(-xOffset, -yOffset, [\n 'bottom',\n 'alignLeft'\n ]),\n northwest: () => make(xOffset, -yOffset, [\n 'bottom',\n 'alignRight'\n ]),\n north: () => make(-xOffset / 2, -yOffset, [\n 'bottom',\n 'alignCentre'\n ]),\n east: () => make(xOffset, -yOffset / 2, [\n 'valignCentre',\n 'left'\n ]),\n west: () => make(-xOffset, -yOffset / 2, [\n 'valignCentre',\n 'right'\n ]),\n insetNortheast: () => make(insetXOffset, insetYOffset, [\n 'top',\n 'alignLeft',\n 'inset'\n ]),\n insetNorthwest: () => make(-insetXOffset, insetYOffset, [\n 'top',\n 'alignRight',\n 'inset'\n ]),\n insetNorth: () => make(-insetXOffset / 2, insetYOffset, [\n 'top',\n 'alignCentre',\n 'inset'\n ]),\n insetSoutheast: () => make(insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignLeft',\n 'inset'\n ]),\n insetSouthwest: () => make(-insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignRight',\n 'inset'\n ]),\n insetSouth: () => make(-insetXOffset / 2, -insetYOffset, [\n 'bottom',\n 'alignCentre',\n 'inset'\n ]),\n insetEast: () => make(-insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'right',\n 'inset'\n ]),\n insetWest: () => make(insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'left',\n 'inset'\n ])\n };\n };\n const fallback = () => nu$5(0, 0, {});\n\n const nu$4 = identity;\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$f(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n var AttributeValue;\n (function (AttributeValue) {\n AttributeValue['TopToBottom'] = 'toptobottom';\n AttributeValue['BottomToTop'] = 'bottomtotop';\n }(AttributeValue || (AttributeValue = {})));\n const Attribute = 'data-alloy-vertical-dir';\n const isBottomToTopDir = el => closest$2(el, current => isElement$1(current) && get$g(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop);\n\n const schema$y = () => optionObjOf('layouts', [\n required$1('onLtr'),\n required$1('onRtl'),\n option$3('onBottomLtr'),\n option$3('onBottomRtl')\n ]);\n const get$6 = (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) => {\n const isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n const customLtr = info.layouts.map(ls => ls.onLtr(elem));\n const customRtl = info.layouts.map(ls => ls.onRtl(elem));\n const ltr = isBottomToTop ? info.layouts.bind(ls => ls.onBottomLtr.map(f => f(elem))).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n const rtl = isBottomToTop ? info.layouts.bind(ls => ls.onBottomRtl.map(f => f(elem))).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n const f = onDirection(ltr, rtl);\n return f(elem);\n };\n\n const placement$4 = (component, anchorInfo, origin) => {\n const hotspot = anchorInfo.hotspot;\n const anchorBox = toBox(origin, hotspot.element);\n const layouts = get$6(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts\n }));\n };\n var HotspotAnchor = [\n required$1('hotspot'),\n option$3('bubble'),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$4)\n ];\n\n const placement$3 = (component, anchorInfo, origin) => {\n const pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n const anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n const layouts = get$6(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts\n }));\n };\n var MakeshiftAnchor = [\n required$1('x'),\n required$1('y'),\n defaulted('height', 0),\n defaulted('width', 0),\n defaulted('bubble', fallback()),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$3)\n ];\n\n const adt$7 = Adt.generate([\n { screen: ['point'] },\n {\n absolute: [\n 'point',\n 'scrollLeft',\n 'scrollTop'\n ]\n }\n ]);\n const toFixed = pos => pos.fold(identity, (point, scrollLeft, scrollTop) => point.translate(-scrollLeft, -scrollTop));\n const toAbsolute = pos => pos.fold(identity, identity);\n const sum = points => foldl(points, (b, a) => b.translate(a.left, a.top), SugarPosition(0, 0));\n const sumAsFixed = positions => {\n const points = map$2(positions, toFixed);\n return sum(points);\n };\n const sumAsAbsolute = positions => {\n const points = map$2(positions, toAbsolute);\n return sum(points);\n };\n const screen = adt$7.screen;\n const absolute$1 = adt$7.absolute;\n\n const getOffset = (component, origin, anchorInfo) => {\n const win = defaultView(anchorInfo.root).dom;\n const hasSameOwner = frame => {\n const frameOwner = owner$4(frame);\n const compOwner = owner$4(component.element);\n return eq(frameOwner, compOwner);\n };\n return Optional.from(win.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute$3);\n };\n const getRootPoint = (component, origin, anchorInfo) => {\n const doc = owner$4(component.element);\n const outerScroll = get$c(doc);\n const offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$1(offset, outerScroll.left, outerScroll.top);\n };\n\n const getBox = (left, top, width, height) => {\n const point = screen(SugarPosition(left, top));\n return Optional.some(pointed(point, width, height));\n };\n const calcNewAnchor = (optBox, rootPoint, anchorInfo, origin, elem) => optBox.map(box => {\n const points = [\n rootPoint,\n box.point\n ];\n const topLeft = cata$1(origin, () => sumAsAbsolute(points), () => sumAsAbsolute(points), () => sumAsFixed(points));\n const anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n const layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n const layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n const layouts = get$6(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n return nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts\n });\n });\n\n const placement$2 = (component, anchorInfo, origin) => {\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.filter(inBody).bind(target => {\n const rect = target.dom.getBoundingClientRect();\n const nodeBox = getBox(rect.left, rect.top, rect.width, rect.height);\n const elem = anchorInfo.node.getOr(component.element);\n return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n });\n };\n var NodeAnchor = [\n required$1('node'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$2)\n ];\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const adt$6 = 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$1 = situ => situ.fold(identity, identity, identity);\n const before = adt$6.before;\n const on$1 = adt$6.on;\n const after$1 = adt$6.after;\n const Situ = {\n before,\n on: on$1,\n after: after$1,\n cata,\n getStart: getStart$1\n };\n\n const adt$5 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = 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$5.domRange;\n const relative = adt$5.relative;\n const exact = adt$5.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range$1 = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range: range$1\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 const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n const getBounds$2 = rng => {\n const rect = rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n 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$1(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$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$4.ltr, rng));\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (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 rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$4.ltr;\n adt$4.rtl;\n\n const ancestors = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n\n const descendants = (scope, selector) => all$3(selector, scope);\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner$4(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getBounds$1 = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getBounds$2(rng);\n };\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 = NodeValue(isText, 'text');\n const get$5 = element => api.get(element);\n\n const point = (element, offset) => ({\n element,\n offset\n });\n const descendOnce$1 = (element, offset) => {\n const children$1 = children(element);\n if (children$1.length === 0) {\n return point(element, offset);\n } else if (offset < children$1.length) {\n return point(children$1[offset], 0);\n } else {\n const last = children$1[children$1.length - 1];\n const len = isText(last) ? get$5(last).length : children(last).length;\n return point(last, len);\n }\n };\n\n const descendOnce = (element, offset) => isText(element) ? point(element, offset) : descendOnce$1(element, offset);\n const isSimRange = detail => detail.foffset !== undefined;\n const getAnchorSelection = (win, anchorInfo) => {\n const getSelection = anchorInfo.getSelection.getOrThunk(() => () => getExact(win));\n return getSelection().map(sel => {\n if (isSimRange(sel)) {\n const modStart = descendOnce(sel.start, sel.soffset);\n const modFinish = descendOnce(sel.finish, sel.foffset);\n return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n } else {\n return sel;\n }\n });\n };\n const placement$1 = (component, anchorInfo, origin) => {\n const win = defaultView(anchorInfo.root).dom;\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n const selectionBox = getAnchorSelection(win, anchorInfo).bind(sel => {\n if (isSimRange(sel)) {\n const optRect = getBounds$1(win, SimSelection.exactFromRange(sel)).orThunk(() => {\n const zeroWidth$1 = SugarElement.fromText(zeroWidth);\n before$1(sel.start, zeroWidth$1);\n const rect = getFirstRect(win, SimSelection.exact(zeroWidth$1, 0, zeroWidth$1, 1));\n remove$6(zeroWidth$1);\n return rect;\n });\n return optRect.bind(rawRect => {\n return getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height);\n });\n } else {\n const selectionRect = map$1(sel, cell => cell.dom.getBoundingClientRect());\n const bounds = {\n left: Math.min(selectionRect.firstCell.left, selectionRect.lastCell.left),\n right: Math.max(selectionRect.firstCell.right, selectionRect.lastCell.right),\n top: Math.min(selectionRect.firstCell.top, selectionRect.lastCell.top),\n bottom: Math.max(selectionRect.firstCell.bottom, selectionRect.lastCell.bottom)\n };\n return getBox(bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top);\n }\n });\n const targetElement = getAnchorSelection(win, anchorInfo).bind(sel => {\n if (isSimRange(sel)) {\n return isElement$1(sel.start) ? Optional.some(sel.start) : parentElement(sel.start);\n } else {\n return Optional.some(sel.firstCell);\n }\n });\n const elem = targetElement.getOr(component.element);\n return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option$3('getSelection'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$1)\n ];\n\n const labelPrefix$1 = 'link-layout';\n const eastX = anchor => anchor.x + anchor.width;\n const westX = (anchor, element) => anchor.x - element.width;\n const northY$1 = (anchor, element) => anchor.y - element.height + anchor.height;\n const southY$1 = anchor => anchor.y;\n const southeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), southY$1(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), labelPrefix$1);\n const southwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), southY$1(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 1,\n top: 2\n }), labelPrefix$1);\n const northeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), northY$1(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 0,\n bottom: 3\n }), labelPrefix$1);\n const northwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 1,\n bottom: 3\n }), labelPrefix$1);\n const all = () => [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1\n ];\n const allRtl = () => [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1\n ];\n\n const placement = (component, submenuInfo, origin) => {\n const anchorBox = toBox(origin, submenuInfo.item.element);\n const layouts = get$6(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts\n }));\n };\n var SubmenuAnchor = [\n required$1('item'),\n schema$y(),\n defaulted('overrides', {}),\n output$1('placement', placement)\n ];\n\n var AnchorSchema = choose$1('type', {\n selection: SelectionAnchor,\n node: NodeAnchor,\n hotspot: HotspotAnchor,\n submenu: SubmenuAnchor,\n makeshift: MakeshiftAnchor\n });\n\n const TransitionSchema = [\n requiredArrayOf('classes', string),\n defaultedStringEnum('mode', 'all', [\n 'all',\n 'layout',\n 'placement'\n ])\n ];\n const PositionSchema = [\n defaulted('useFixed', never),\n option$3('getBounds')\n ];\n const PlacementSchema = [\n requiredOf('anchor', AnchorSchema),\n optionObjOf('transition', TransitionSchema)\n ];\n\n const getFixedOrigin = () => {\n const html = document.documentElement;\n return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n };\n const getRelativeOrigin = component => {\n const position = absolute$3(component.element);\n const bounds = component.element.dom.getBoundingClientRect();\n return relative$1(position.left, position.top, bounds.width, bounds.height);\n };\n const place = (origin, anchoring, optBounds, placee, lastPlace, transition) => {\n const anchor = box(anchoring.anchorBox, origin);\n return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, optBounds, anchoring.overrides, transition);\n };\n const position$1 = (component, posConfig, posState, placee, placementSpec) => {\n const optWithinBounds = Optional.none();\n positionWithinBounds(component, posConfig, posState, placee, placementSpec, optWithinBounds);\n };\n const positionWithinBounds = (component, posConfig, posState, placee, placementSpec, optWithinBounds) => {\n const placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec);\n const anchorage = placeeDetail.anchor;\n const element = placee.element;\n const placeeState = posState.get(placee.uid);\n preserve$1(() => {\n set$8(element, 'position', 'fixed');\n const oldVisibility = getRaw(element, 'visibility');\n set$8(element, 'visibility', 'hidden');\n const origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n anchorage.placement(component, anchorage, origin).each(anchoring => {\n const optBounds = optWithinBounds.orThunk(() => posConfig.getBounds.map(apply$1));\n const newState = place(origin, anchoring, optBounds, placee, placeeState, placeeDetail.transition);\n posState.set(placee.uid, newState);\n });\n oldVisibility.fold(() => {\n remove$7(element, 'visibility');\n }, vis => {\n set$8(element, 'visibility', vis);\n });\n if (getRaw(element, 'left').isNone() && getRaw(element, 'top').isNone() && getRaw(element, 'right').isNone() && getRaw(element, 'bottom').isNone() && is$1(getRaw(element, 'position'), 'fixed')) {\n remove$7(element, 'position');\n }\n }, element);\n };\n const getMode = (component, pConfig, _pState) => pConfig.useFixed() ? 'fixed' : 'absolute';\n const reset = (component, pConfig, posState, placee) => {\n const element = placee.element;\n each$1([\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], prop => remove$7(element, prop));\n reset$1(element);\n posState.clear(placee.uid);\n };\n\n var PositionApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n position: position$1,\n positionWithinBounds: positionWithinBounds,\n getMode: getMode,\n reset: reset\n });\n\n const init$f = () => {\n let state = {};\n const set = (id, data) => {\n state[id] = data;\n };\n const get = id => get$h(state, id);\n const clear = id => {\n if (isNonNullable(id)) {\n delete state[id];\n } else {\n state = {};\n }\n };\n return nu$7({\n readState: () => state,\n clear,\n set,\n get\n });\n };\n\n var PositioningState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$f\n });\n\n const Positioning = create$4({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis,\n state: PositioningState\n });\n\n const isConnected = comp => comp.getSystem().isConnected();\n const fireDetaching = component => {\n emit(component, detachedFromDom());\n const children = component.components();\n each$1(children, fireDetaching);\n };\n const fireAttaching = component => {\n const children = component.components();\n each$1(children, fireAttaching);\n emit(component, attachedToDom());\n };\n const virtualAttach = (parent, child) => {\n parent.getSystem().addToWorld(child);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n };\n const virtualDetach = comp => {\n fireDetaching(comp);\n comp.getSystem().removeFromWorld(comp);\n };\n const attach$1 = (parent, child) => {\n append$2(parent.element, child.element);\n };\n const detachChildren$1 = component => {\n each$1(component.components(), childComp => remove$6(childComp.element));\n empty(component.element);\n component.syncComponents();\n };\n const replaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n detachChildren$1(component);\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, comp => {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n component.getSystem().addToWorld(childComp);\n attach$1(component, childComp);\n if (inBody(component.element)) {\n fireAttaching(childComp);\n }\n } else {\n attach$1(component, childComp);\n }\n });\n component.syncComponents();\n };\n const virtualReplaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n const existingComps = bind$3(newSpecs, spec => getPremade(spec).toArray());\n each$1(subs, childComp => {\n if (!contains$2(existingComps, childComp)) {\n virtualDetach(childComp);\n }\n });\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, deletedComp => {\n if (isConnected(deletedComp)) {\n virtualDetach(deletedComp);\n }\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n virtualAttach(component, childComp);\n }\n });\n component.syncComponents();\n };\n\n const attach = (parent, child) => {\n attachWith(parent, child, append$2);\n };\n const attachWith = (parent, child, insertion) => {\n parent.getSystem().addToWorld(child);\n insertion(parent.element, child.element);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n parent.syncComponents();\n };\n const doDetach = component => {\n fireDetaching(component);\n remove$6(component.element);\n component.getSystem().removeFromWorld(component);\n };\n const detach = component => {\n const parent$1 = parent(component.element).bind(p => component.getSystem().getByDom(p).toOptional());\n doDetach(component);\n parent$1.each(p => {\n p.syncComponents();\n });\n };\n const detachChildren = component => {\n const subs = component.components();\n each$1(subs, doDetach);\n empty(component.element);\n component.syncComponents();\n };\n const attachSystem = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, append$2);\n };\n const attachSystemAfter = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, after$2);\n };\n const attachSystemWith = (element, guiSystem, inserter) => {\n inserter(element, guiSystem.element);\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireAttaching);\n });\n };\n const detachSystem = guiSystem => {\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove$6(guiSystem.element);\n };\n\n const rebuild = (sandbox, sConfig, sState, data) => {\n sState.get().each(_data => {\n detachChildren(sandbox);\n });\n const point = sConfig.getAttachPoint(sandbox);\n attach(point, sandbox);\n const built = sandbox.getSystem().build(data);\n attach(sandbox, built);\n sState.set(built);\n return built;\n };\n const open$1 = (sandbox, sConfig, sState, data) => {\n const newState = rebuild(sandbox, sConfig, sState, data);\n sConfig.onOpen(sandbox, newState);\n return newState;\n };\n const setContent = (sandbox, sConfig, sState, data) => sState.get().map(() => rebuild(sandbox, sConfig, sState, data));\n const openWhileCloaked = (sandbox, sConfig, sState, data, transaction) => {\n cloak(sandbox, sConfig);\n open$1(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n const close$1 = (sandbox, sConfig, sState) => {\n sState.get().each(data => {\n detachChildren(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n const isOpen$1 = (_sandbox, _sConfig, sState) => sState.isOpen();\n const isPartOf = (sandbox, sConfig, sState, queryElem) => isOpen$1(sandbox, sConfig, sState) && sState.get().exists(data => sConfig.isPartOf(sandbox, data, queryElem));\n const getState$2 = (_sandbox, _sConfig, sState) => sState.get();\n const store = (sandbox, cssKey, attr, newValue) => {\n getRaw(sandbox.element, cssKey).fold(() => {\n remove$8(sandbox.element, attr);\n }, v => {\n set$9(sandbox.element, attr, v);\n });\n set$8(sandbox.element, cssKey, newValue);\n };\n const restore = (sandbox, cssKey, attr) => {\n getOpt(sandbox.element, attr).fold(() => remove$7(sandbox.element, cssKey), oldValue => set$8(sandbox.element, cssKey, oldValue));\n };\n const cloak = (sandbox, sConfig, _sState) => {\n const sink = sConfig.getAttachPoint(sandbox);\n set$8(sandbox.element, 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n const hasPosition = element => exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], pos => getRaw(element, pos).isSome());\n const decloak = (sandbox, sConfig, _sState) => {\n if (!hasPosition(sandbox.element)) {\n remove$7(sandbox.element, 'position');\n }\n restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n };\n\n var SandboxApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n cloak: cloak,\n decloak: decloak,\n open: open$1,\n openWhileCloaked: openWhileCloaked,\n close: close$1,\n isOpen: isOpen$1,\n isPartOf: isPartOf,\n getState: getState$2,\n setContent: setContent\n });\n\n const events$f = (sandboxConfig, sandboxState) => derive$2([run$1(sandboxClose(), (sandbox, _simulatedEvent) => {\n close$1(sandbox, sandboxConfig, sandboxState);\n })]);\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n required$1('isPartOf'),\n required$1('getAttachPoint'),\n defaulted('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n const init$e = () => {\n const contents = value$4();\n const readState = constant$1('not-implemented');\n return nu$7({\n readState,\n isOpen: contents.isSet,\n clear: contents.clear,\n set: contents.set,\n get: contents.get\n });\n };\n\n var SandboxState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$e\n });\n\n const Sandboxing = create$4({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n const dismissPopups = constant$1('dismiss.popups');\n const repositionPopups = constant$1('reposition.popups');\n const mouseReleased = constant$1('mouse.released');\n\n const schema$x = objOfOnly([\n defaulted('isExtraPart', never),\n optionObjOf('fireEventInstead', [defaulted('event', dismissRequested())])\n ]);\n const receivingChannel$1 = rawSpec => {\n const detail = asRawOrDie$1('Dismissal', schema$x, rawSpec);\n return {\n [dismissPopups()]: {\n schema: objOfOnly([required$1('target')]),\n onReceive: (sandbox, data) => {\n if (Sandboxing.isOpen(sandbox)) {\n const isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n if (!isPart) {\n detail.fireEventInstead.fold(() => Sandboxing.close(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n }\n };\n };\n\n const schema$w = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted('event', repositionRequested())]),\n requiredFunction('doReposition')\n ]);\n const receivingChannel = rawSpec => {\n const detail = asRawOrDie$1('Reposition', schema$w, rawSpec);\n return {\n [repositionPopups()]: {\n onReceive: sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n detail.fireEventInstead.fold(() => detail.doReposition(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n };\n };\n\n const onLoad$5 = (component, repConfig, repState) => {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n const onUnload$2 = (component, repConfig, repState) => {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n const setValue$3 = (component, repConfig, repState, data) => {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n const getValue$3 = (component, repConfig, repState) => repConfig.store.manager.getValue(component, repConfig, repState);\n const getState$1 = (component, repConfig, repState) => repState;\n\n var RepresentApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad$5,\n onUnload: onUnload$2,\n setValue: setValue$3,\n getValue: getValue$3,\n getState: getState$1\n });\n\n const events$e = (repConfig, repState) => {\n const es = repConfig.resetOnDom ? [\n runOnAttached((comp, _se) => {\n onLoad$5(comp, repConfig, repState);\n }),\n runOnDetached((comp, _se) => {\n onUnload$2(comp, repConfig, repState);\n })\n ] : [loadEvent(repConfig, repState, onLoad$5)];\n return derive$2(es);\n };\n\n var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$e\n });\n\n const memory$1 = () => {\n const data = Cell(null);\n const readState = () => ({\n mode: 'memory',\n value: data.get()\n });\n const isNotSet = () => data.get() === null;\n const clear = () => {\n data.set(null);\n };\n return nu$7({\n set: data.set,\n get: data.get,\n isNotSet,\n clear,\n readState\n });\n };\n const manual = () => {\n const readState = noop;\n return nu$7({ readState });\n };\n const dataset = () => {\n const dataByValue = Cell({});\n const dataByText = Cell({});\n const readState = () => ({\n mode: 'dataset',\n dataByValue: dataByValue.get(),\n dataByText: dataByText.get()\n });\n const clear = () => {\n dataByValue.set({});\n dataByText.set({});\n };\n const lookup = itemString => get$h(dataByValue.get(), itemString).orThunk(() => get$h(dataByText.get(), itemString));\n const update = items => {\n const currentDataByValue = dataByValue.get();\n const currentDataByText = dataByText.get();\n const newDataByValue = {};\n const newDataByText = {};\n each$1(items, item => {\n newDataByValue[item.value] = item;\n get$h(item, 'meta').each(meta => {\n get$h(meta, 'text').each(text => {\n newDataByText[text] = item;\n });\n });\n });\n dataByValue.set({\n ...currentDataByValue,\n ...newDataByValue\n });\n dataByText.set({\n ...currentDataByText,\n ...newDataByText\n });\n };\n return nu$7({\n readState,\n lookup,\n update,\n clear\n });\n };\n const init$d = spec => spec.store.manager.state(spec);\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory$1,\n dataset: dataset,\n manual: manual,\n init: init$d\n });\n\n const setValue$2 = (component, repConfig, repState, data) => {\n const store = repConfig.store;\n repState.update([data]);\n store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const getValue$2 = (component, repConfig, repState) => {\n const store = repConfig.store;\n const key = store.getDataKey(component);\n return repState.lookup(key).getOrThunk(() => store.getFallbackEntry(key));\n };\n const onLoad$4 = (component, repConfig, repState) => {\n const store = repConfig.store;\n store.initialValue.each(data => {\n setValue$2(component, repConfig, repState, data);\n });\n };\n const onUnload$1 = (component, repConfig, repState) => {\n repState.clear();\n };\n var DatasetStore = [\n option$3('initialValue'),\n required$1('getFallbackEntry'),\n required$1('getDataKey'),\n required$1('setValue'),\n output$1('manager', {\n setValue: setValue$2,\n getValue: getValue$2,\n onLoad: onLoad$4,\n onUnload: onUnload$1,\n state: dataset\n })\n ];\n\n const getValue$1 = (component, repConfig, _repState) => repConfig.store.getValue(component);\n const setValue$1 = (component, repConfig, _repState, data) => {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const onLoad$3 = (component, repConfig, _repState) => {\n repConfig.store.initialValue.each(data => {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n required$1('getValue'),\n defaulted('setValue', noop),\n option$3('initialValue'),\n output$1('manager', {\n setValue: setValue$1,\n getValue: getValue$1,\n onLoad: onLoad$3,\n onUnload: noop,\n state: NoState.init\n })\n ];\n\n const setValue = (component, repConfig, repState, data) => {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n const getValue = (component, repConfig, repState) => repState.get();\n const onLoad$2 = (component, repConfig, repState) => {\n repConfig.store.initialValue.each(initVal => {\n if (repState.isNotSet()) {\n repState.set(initVal);\n }\n });\n };\n const onUnload = (component, repConfig, repState) => {\n repState.clear();\n };\n var MemoryStore = [\n option$3('initialValue'),\n output$1('manager', {\n setValue,\n getValue,\n onLoad: onLoad$2,\n onUnload,\n state: memory$1\n })\n ];\n\n var RepresentSchema = [\n defaultedOf('store', { mode: 'memory' }, choose$1('mode', {\n memory: MemoryStore,\n manual: ManualStore,\n dataset: DatasetStore\n })),\n onHandler('onSetValue'),\n defaulted('resetOnDom', false)\n ];\n\n const Representing = create$4({\n fields: RepresentSchema,\n name: 'representing',\n active: ActiveRepresenting,\n apis: RepresentApis,\n extra: {\n setValueFrom: (component, source) => {\n const value = Representing.getValue(source);\n Representing.setValue(component, value);\n }\n },\n state: RepresentState\n });\n\n const field = (name, forbidden) => defaultedObjOf(name, {}, map$2(forbidden, f => forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name)).concat([customField('dump', identity)]));\n const get$4 = data => data.dump;\n const augment = (data, original) => ({\n ...derive$1(original),\n ...data.dump\n });\n const SketchBehaviours = {\n field,\n augment,\n get: get$4\n };\n\n const _placeholder = 'placeholder';\n const adt$3 = Adt.generate([\n {\n single: [\n 'required',\n 'valueThunk'\n ]\n },\n {\n multiple: [\n 'required',\n 'valueThunks'\n ]\n }\n ]);\n const isSubstituted = spec => has$2(spec, 'uiType');\n const subPlaceholder = (owner, detail, compSpec, placeholders) => {\n if (owner.exists(o => o !== compSpec.owner)) {\n return adt$3.single(true, constant$1(compSpec));\n }\n return get$h(placeholders, compSpec.name).fold(() => {\n throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n }, newSpec => newSpec.replace());\n };\n const scan = (owner, detail, compSpec, placeholders) => {\n if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n return subPlaceholder(owner, detail, compSpec, placeholders);\n } else {\n return adt$3.single(false, constant$1(compSpec));\n }\n };\n const substitute = (owner, detail, compSpec, placeholders) => {\n const base = scan(owner, detail, compSpec, placeholders);\n return base.fold((req, valueThunk) => {\n const value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n const childSpecs = get$h(value, 'components').getOr([]);\n const substituted = bind$3(childSpecs, c => substitute(owner, detail, c, placeholders));\n return [{\n ...value,\n components: substituted\n }];\n }, (req, valuesThunk) => {\n if (isSubstituted(compSpec)) {\n const values = valuesThunk(detail, compSpec.config, compSpec.validated);\n const preprocessor = compSpec.validated.preprocess.getOr(identity);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n const substituteAll = (owner, detail, components, placeholders) => bind$3(components, c => substitute(owner, detail, c, placeholders));\n const oneReplace = (label, replacements) => {\n let called = false;\n const used = () => called;\n const replace = () => {\n if (called) {\n throw new Error('Trying to use the same placeholder more than once: ' + label);\n }\n called = true;\n return replacements;\n };\n const required = () => replacements.fold((req, _) => req, (req, _) => req);\n return {\n name: constant$1(label),\n required,\n used,\n replace\n };\n };\n const substitutePlaces = (owner, detail, components, placeholders) => {\n const ps = map$1(placeholders, (ph, name) => oneReplace(name, ph));\n const outcome = substituteAll(owner, detail, components, ps);\n each(ps, p => {\n if (p.used() === false && p.required()) {\n throw new Error('Placeholder: ' + p.name() + ' was not found in components list\\nNamespace: ' + owner.getOr('none') + '\\nComponents: ' + JSON.stringify(detail.components, null, 2));\n }\n });\n return outcome;\n };\n const single$2 = adt$3.single;\n const multiple = adt$3.multiple;\n const placeholder = constant$1(_placeholder);\n\n const adt$2 = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n const fFactory = defaulted('factory', { sketch: identity });\n const fSchema = defaulted('schema', []);\n const fName = required$1('name');\n const fPname = field$1('pname', 'pname', defaultedThunk(typeSpec => ''), anyValue());\n const fGroupSchema = customField('schema', () => [option$3('preprocess')]);\n const fDefaults = defaulted('defaults', constant$1({}));\n const fOverrides = defaulted('overrides', constant$1({}));\n const requiredSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const externalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fDefaults,\n fOverrides\n ]);\n const optionalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const groupSpec = objOf([\n fFactory,\n fGroupSchema,\n fName,\n required$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n const asNamedPart = part => {\n return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n };\n const name$2 = part => {\n const get = data => data.name;\n return part.fold(get, get, get, get);\n };\n const asCommon = part => {\n return part.fold(identity, identity, identity, identity);\n };\n const convert = (adtConstructor, partSchema) => spec => {\n const data = asRawOrDie$1('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n const required = convert(adt$2.required, requiredSpec);\n const external = convert(adt$2.external, externalSpec);\n const optional = convert(adt$2.optional, optionalSpec);\n const group = convert(adt$2.group, groupSpec);\n const original = constant$1('entirety');\n\n var PartType = /*#__PURE__*/Object.freeze({\n __proto__: null,\n required: required,\n external: external,\n optional: optional,\n group: group,\n asNamedPart: asNamedPart,\n name: name$2,\n asCommon: asCommon,\n original: original\n });\n\n const combine = (detail, data, partSpec, partValidated) => deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n const subs = (owner, detail, parts) => {\n const internals = {};\n const externals = {};\n each$1(parts, part => {\n part.fold(data => {\n internals[data.pname] = single$2(true, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n const partSpec = detail.parts[data.name];\n externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n }, data => {\n internals[data.pname] = single$2(false, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n internals[data.pname] = multiple(true, (detail, _partSpec, _partValidated) => {\n const units = detail[data.name];\n return map$2(units, u => data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u))));\n });\n });\n });\n return {\n internals: constant$1(internals),\n externals: constant$1(externals)\n };\n };\n\n const generate$3 = (owner, parts) => {\n const r = {};\n each$1(parts, part => {\n asNamedPart(part).each(np => {\n const g = doGenerateOne(owner, np.pname);\n r[np.name] = config => {\n const validated = asRawOrDie$1('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n return {\n ...g,\n config,\n validated\n };\n };\n });\n });\n return r;\n };\n const doGenerateOne = (owner, pname) => ({\n uiType: placeholder(),\n owner,\n name: pname\n });\n const generateOne$1 = (owner, pname, config) => ({\n uiType: placeholder(),\n owner,\n name: pname,\n config,\n validated: {}\n });\n const schemas = parts => bind$3(parts, part => part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(data => requiredObjOf(data.name, data.schema.concat([snapshot(original())]))).toArray());\n const names = parts => map$2(parts, name$2);\n const substitutes = (owner, detail, parts) => subs(owner, detail, parts);\n const components$1 = (owner, detail, internals) => substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n const getPart = (component, detail, partKey) => {\n const uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOptional();\n };\n const getPartOrDie = (component, detail, partKey) => getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n const getParts = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]));\n });\n return r;\n };\n const getAllParts = (component, detail) => {\n const system = component.getSystem();\n return map$1(detail.partUids, (pUid, _k) => constant$1(system.getByUid(pUid)));\n };\n const getAllPartNames = detail => keys(detail.partUids);\n const getPartsOrDie = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n const defaultUids = (baseUid, partTypes) => {\n const partNames = names(partTypes);\n return wrapAll(map$2(partNames, pn => ({\n key: pn,\n value: baseUid + '-' + pn\n })));\n };\n const defaultUidsSchema = partTypes => field$1('partUids', 'partUids', mergeWithThunk(spec => defaultUids(spec.uid, partTypes)), anyValue());\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$3,\n generateOne: generateOne$1,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components$1,\n defaultUids: defaultUids,\n defaultUidsSchema: defaultUidsSchema,\n getAllParts: getAllParts,\n getAllPartNames: getAllPartNames,\n getPart: getPart,\n getPartOrDie: getPartOrDie,\n getParts: getParts,\n getPartsOrDie: getPartsOrDie\n });\n\n const base = (partSchemas, partUidsSchemas) => {\n const ps = partSchemas.length > 0 ? [requiredObjOf('parts', partSchemas)] : [];\n return ps.concat([\n required$1('uid'),\n defaulted('dom', {}),\n defaulted('components', []),\n snapshot('originalSpec'),\n defaulted('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n const asRawOrDie = (label, schema, spec, partSchemas, partUidsSchemas) => {\n const baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie$1(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n const single$1 = (owner, schema, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const detail = asRawOrDie(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n const composite$1 = (owner, schema, partTypes, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const partSchemas = schemas(partTypes);\n const partUidsSchema = defaultUidsSchema(partTypes);\n const detail = asRawOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n const subs = substitutes(owner, detail, partTypes);\n const components = components$1(owner, detail, subs.internals());\n return factory(detail, components, specWithUid, subs.externals());\n };\n const hasUid = spec => has$2(spec, 'uid');\n const supplyUid = spec => {\n return hasUid(spec) ? spec : {\n ...spec,\n uid: generate$5('uid')\n };\n };\n\n const isSketchSpec = spec => {\n return spec.uid !== undefined;\n };\n const singleSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const compositeSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n required$1('partFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const single = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n const sketch = spec => single$1(config.name, config.configFields, config.factory, spec);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n configFields: config.configFields,\n sketch,\n ...apis,\n ...extraApis\n };\n };\n const composite = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n const sketch = spec => composite$1(config.name, config.configFields, config.partFields, config.factory, spec);\n const parts = generate$3(config.name, config.partFields);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n partFields: config.partFields,\n configFields: config.configFields,\n sketch,\n parts,\n ...apis,\n ...extraApis\n };\n };\n\n const inside = target => isTag('input')(target) && get$g(target, 'type') !== 'radio' || isTag('textarea')(target);\n\n const getCurrent = (component, composeConfig, _composeState) => composeConfig.find(component);\n\n var ComposeApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCurrent: getCurrent\n });\n\n const ComposeSchema = [required$1('find')];\n\n const Composing = create$4({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n const nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n const onLoad$1 = (component, disableConfig, disableState) => {\n const f = disableConfig.disabled() ? disable : enable;\n f(component, disableConfig);\n };\n const hasNative = (component, config) => config.useNative === true && contains$2(nativeDisabled, name$3(component.element));\n const nativeIsDisabled = component => has$1(component.element, 'disabled');\n const nativeDisable = component => {\n set$9(component.element, 'disabled', 'disabled');\n };\n const nativeEnable = component => {\n remove$8(component.element, 'disabled');\n };\n const ariaIsDisabled = component => get$g(component.element, 'aria-disabled') === 'true';\n const ariaDisable = component => {\n set$9(component.element, 'aria-disabled', 'true');\n };\n const ariaEnable = component => {\n set$9(component.element, 'aria-disabled', 'false');\n };\n const disable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n add$2(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n f(component);\n disableConfig.onDisabled(component);\n };\n const enable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n remove$3(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n f(component);\n disableConfig.onEnabled(component);\n };\n const isDisabled$1 = (component, disableConfig) => hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n const set$4 = (component, disableConfig, disableState, disabled) => {\n const f = disabled ? disable : enable;\n f(component, disableConfig);\n };\n\n var DisableApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n enable: enable,\n disable: disable,\n isDisabled: isDisabled$1,\n onLoad: onLoad$1,\n set: set$4\n });\n\n const exhibit$5 = (base, disableConfig) => nu$8({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n const events$d = (disableConfig, disableState) => derive$2([\n abort(execute$5(), (component, _simulatedEvent) => isDisabled$1(component, disableConfig)),\n loadEvent(disableConfig, disableState, onLoad$1)\n ]);\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$5,\n events: events$d\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted('useNative', true),\n option$3('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n const Disabling = create$4({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n const dehighlightAllExcept = (component, hConfig, hState, skip) => {\n const highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n each$1(highlighted, h => {\n const shouldSkip = exists(skip, skipComp => eq(skipComp.element, h));\n if (!shouldSkip) {\n remove$3(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(target => {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n });\n }\n });\n };\n const dehighlightAll = (component, hConfig, hState) => dehighlightAllExcept(component, hConfig, hState, []);\n const dehighlight = (component, hConfig, hState, target) => {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$3(target.element, hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n }\n };\n const highlight = (component, hConfig, hState, target) => {\n dehighlightAllExcept(component, hConfig, hState, [target]);\n if (!isHighlighted(component, hConfig, hState, target)) {\n add$2(target.element, hConfig.highlightClass);\n hConfig.onHighlight(component, target);\n emit(target, highlight$1());\n }\n };\n const highlightFirst = (component, hConfig, hState) => {\n getFirst(component, hConfig).each(firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightLast = (component, hConfig, hState) => {\n getLast(component, hConfig).each(lastComp => {\n highlight(component, hConfig, hState, lastComp);\n });\n };\n const highlightAt = (component, hConfig, hState, index) => {\n getByIndex(component, hConfig, hState, index).fold(err => {\n throw err;\n }, firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightBy = (component, hConfig, hState, predicate) => {\n const candidates = getCandidates(component, hConfig);\n const targetComp = find$5(candidates, predicate);\n targetComp.each(c => {\n highlight(component, hConfig, hState, c);\n });\n };\n const isHighlighted = (component, hConfig, hState, queryTarget) => has(queryTarget.element, hConfig.highlightClass);\n const getHighlighted = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.highlightClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getByIndex = (component, hConfig, hState, index) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return Optional.from(items[index]).fold(() => Result.error(new Error('No element found with index ' + index)), component.getSystem().getByDom);\n };\n const getFirst = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.itemClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getLast = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n return last.bind(c => component.getSystem().getByDom(c).toOptional());\n };\n const getDelta$2 = (component, hConfig, hState, delta) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const current = findIndex$1(items, item => has(item, hConfig.highlightClass));\n return current.bind(selected => {\n const dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOptional();\n });\n };\n const getPrevious = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, -1);\n const getNext = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, +1);\n const getCandidates = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return cat(map$2(items, i => component.getSystem().getByDom(i).toOptional()));\n };\n\n var HighlightApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dehighlightAll: dehighlightAll,\n dehighlight: dehighlight,\n highlight: highlight,\n highlightFirst: highlightFirst,\n highlightLast: highlightLast,\n highlightAt: highlightAt,\n highlightBy: highlightBy,\n isHighlighted: isHighlighted,\n getHighlighted: getHighlighted,\n getFirst: getFirst,\n getLast: getLast,\n getPrevious: getPrevious,\n getNext: getNext,\n getCandidates: getCandidates\n });\n\n var HighlightSchema = [\n required$1('highlightClass'),\n required$1('itemClass'),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ];\n\n const Highlighting = create$4({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n const BACKSPACE = [8];\n const TAB = [9];\n const ENTER = [13];\n const ESCAPE = [27];\n const SPACE = [32];\n const LEFT = [37];\n const UP = [38];\n const RIGHT = [39];\n const DOWN = [40];\n\n const cyclePrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n const after = reverse(values.slice(index + 1));\n return find$5(before.concat(after), predicate);\n };\n const tryPrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n return find$5(before, predicate);\n };\n const cycleNext = (values, index, predicate) => {\n const before = values.slice(0, index);\n const after = values.slice(index + 1);\n return find$5(after.concat(before), predicate);\n };\n const tryNext = (values, index, predicate) => {\n const after = values.slice(index + 1);\n return find$5(after, predicate);\n };\n\n const inSet = keys => event => {\n const raw = event.raw;\n return contains$2(keys, raw.which);\n };\n const and = preds => event => forall(preds, pred => pred(event));\n const isShift$1 = event => {\n const raw = event.raw;\n return raw.shiftKey === true;\n };\n const isControl = event => {\n const raw = event.raw;\n return raw.ctrlKey === true;\n };\n const isNotShift = not(isShift$1);\n\n const rule = (matches, action) => ({\n matches,\n classification: action\n });\n const choose = (transitions, event) => {\n const transition = find$5(transitions, t => t.matches(event));\n return transition.map(t => t.classification);\n };\n\n const reportFocusShifting = (component, prevFocus, newFocus) => {\n const noChange = prevFocus.exists(p => newFocus.exists(n => eq(n, p)));\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus,\n newFocus\n });\n }\n };\n const dom$2 = () => {\n const get = component => search(component.element);\n const set = (component, focusee) => {\n const prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element);\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n const highlights = () => {\n const get = component => Highlighting.getHighlighted(component).map(item => item.element);\n const set = (component, element) => {\n const prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, item => {\n Highlighting.highlight(component, item);\n });\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n\n var FocusInsideModes;\n (function (FocusInsideModes) {\n FocusInsideModes['OnFocusMode'] = 'onFocus';\n FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';\n FocusInsideModes['OnApiMode'] = 'onApi';\n }(FocusInsideModes || (FocusInsideModes = {})));\n\n const typical = (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) => {\n const schema = () => infoSchema.concat([\n defaulted('focusManager', dom$2()),\n defaultedOf('focusInside', 'onFocus', valueOf(val => contains$2([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside'))),\n output$1('handler', me),\n output$1('state', stateInit),\n output$1('sendFocusIn', optFocusIn)\n ]);\n const processKey = (component, simulatedEvent, getRules, keyingConfig, keyingState) => {\n const rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose(rules, simulatedEvent.event).bind(rule => rule(component, simulatedEvent, keyingConfig, keyingState));\n };\n const toEvents = (keyingConfig, keyingState) => {\n const onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(focusIn => run$1(focus$4(), (component, simulatedEvent) => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n }));\n const tryGoInsideComponent = (component, simulatedEvent) => {\n const isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n optFocusIn(keyingConfig).each(focusIn => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n }\n };\n const keyboardEvents = [\n run$1(keydown(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(() => {\n tryGoInsideComponent(component, simulatedEvent);\n }, _ => {\n simulatedEvent.stop();\n });\n }),\n run$1(keyup(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(_ => {\n simulatedEvent.stop();\n });\n })\n ];\n return derive$2(onFocusHandler.toArray().concat(keyboardEvents));\n };\n const me = {\n schema,\n processKey,\n toEvents\n };\n return me;\n };\n\n const create$2 = cyclicField => {\n const schema = [\n option$3('onEscape'),\n option$3('onEnter'),\n defaulted('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted('firstTabstop', 0),\n defaulted('useTabstopAt', always),\n option$3('visibilitySelector')\n ].concat([cyclicField]);\n const isVisible = (tabbingConfig, element) => {\n const target = tabbingConfig.visibilitySelector.bind(sel => closest$1(element, sel)).getOr(element);\n return get$e(target) > 0;\n };\n const findInitial = (component, tabbingConfig) => {\n const tabstops = descendants(component.element, tabbingConfig.selector);\n const visibles = filter$2(tabstops, elem => isVisible(tabbingConfig, elem));\n return Optional.from(visibles[tabbingConfig.firstTabstop]);\n };\n const findCurrent = (component, tabbingConfig) => tabbingConfig.focusManager.get(component).bind(elem => closest$1(elem, tabbingConfig.selector));\n const isTabstop = (tabbingConfig, element) => isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n const focusIn = (component, tabbingConfig, _tabbingState) => {\n findInitial(component, tabbingConfig).each(target => {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n const goFromTabstop = (component, tabstops, stopIndex, tabbingConfig, cycle) => cycle(tabstops, stopIndex, elem => isTabstop(tabbingConfig, elem)).fold(() => tabbingConfig.cyclic ? Optional.some(true) : Optional.none(), target => {\n tabbingConfig.focusManager.set(component, target);\n return Optional.some(true);\n });\n const go = (component, _simulatedEvent, tabbingConfig, cycle) => {\n const tabstops = filter$2(descendants(component.element, tabbingConfig.selector), element => isVisible(tabbingConfig, element));\n return findCurrent(component, tabbingConfig).bind(tabstop => {\n const optStopIndex = findIndex$1(tabstops, curry(eq, tabstop));\n return optStopIndex.bind(stopIndex => goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle));\n });\n };\n const goBackwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const goForwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const isFirstChild = elem => parentNode(elem).bind(firstChild).exists(child => eq(child, elem));\n const goFromPseudoTabstop = (component, simulatedEvent, tabbingConfig) => findCurrent(component, tabbingConfig).filter(elem => !tabbingConfig.useTabstopAt(elem)).bind(elem => (isFirstChild(elem) ? goBackwards : goForwards)(component, simulatedEvent, tabbingConfig));\n const execute = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEnter.bind(f => f(component, simulatedEvent));\n const exit = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEscape.bind(f => f(component, simulatedEvent));\n const getKeydownRules = constant$1([\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), goBackwards),\n rule(inSet(TAB), goForwards),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), execute)\n ]);\n const getKeyupRules = constant$1([\n rule(inSet(ESCAPE), exit),\n rule(inSet(TAB), goFromPseudoTabstop)\n ]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, () => Optional.some(focusIn));\n };\n\n var AcyclicType = create$2(customField('cyclic', never));\n\n var CyclicType = create$2(customField('cyclic', always));\n\n const doDefaultExecute = (component, _simulatedEvent, focused) => {\n dispatch(component, focused, execute$5());\n return Optional.some(true);\n };\n const defaultExecute = (component, simulatedEvent, focused) => {\n const isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n const stopEventForFirefox = (_component, _simulatedEvent) => Optional.some(true);\n\n const schema$v = [\n defaulted('execute', defaultExecute),\n defaulted('useSpace', false),\n defaulted('useEnter', true),\n defaulted('useControlEnter', false),\n defaulted('useDown', false)\n ];\n const execute$4 = (component, simulatedEvent, executeConfig) => executeConfig.execute(component, simulatedEvent, component.element);\n const getKeydownRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => {\n const spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n const enterExec = executeConfig.useEnter ? ENTER : [];\n const downExec = executeConfig.useDown ? DOWN : [];\n const execKeys = spaceExec.concat(enterExec).concat(downExec);\n return [rule(inSet(execKeys), execute$4)].concat(executeConfig.useControlEnter ? [rule(and([\n isControl,\n inSet(ENTER)\n ]), execute$4)] : []);\n };\n const getKeyupRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, () => Optional.none());\n\n const flatgrid$1 = () => {\n const dimensions = value$4();\n const setGridSize = (numRows, numColumns) => {\n dimensions.set({\n numRows,\n numColumns\n });\n };\n const getNumRows = () => dimensions.get().map(d => d.numRows);\n const getNumColumns = () => dimensions.get().map(d => d.numColumns);\n return nu$7({\n readState: () => dimensions.get().map(d => ({\n numRows: String(d.numRows),\n numColumns: String(d.numColumns)\n })).getOr({\n numRows: '?',\n numColumns: '?'\n }),\n setGridSize,\n getNumRows,\n getNumColumns\n });\n };\n const init$c = spec => spec.state(spec);\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid$1,\n init: init$c\n });\n\n const useH = movement => (component, simulatedEvent, config, state) => {\n const move = movement(component.element);\n return use(move, component, simulatedEvent, config, state);\n };\n const west$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n const east$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n const useV = move => (component, simulatedEvent, config, state) => use(move, component, simulatedEvent, config, state);\n const use = (move, component, simulatedEvent, config, state) => {\n const outcome = config.focusManager.get(component).bind(focused => move(component.element, focused, config, state));\n return outcome.map(newFocus => {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n const north$1 = useV;\n const south$1 = useV;\n const move$1 = useV;\n\n const isHidden$1 = dom => dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n const isVisible = element => !isHidden$1(element.dom);\n\n const locate = (candidates, predicate) => findIndex$1(candidates, predicate).map(index => ({\n index,\n candidates\n }));\n\n const locateVisible = (container, current, selector) => {\n const predicate = x => eq(x, current);\n const candidates = descendants(container, selector);\n const visible = filter$2(candidates, isVisible);\n return locate(visible, predicate);\n };\n const findIndex = (elements, target) => findIndex$1(elements, elem => eq(target, elem));\n\n const withGrid = (values, index, numCols, f) => {\n const oldRow = Math.floor(index / numCols);\n const oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(address => {\n const newIndex = address.row * numCols + address.column;\n return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n });\n };\n const cycleHorizontal$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const onLastRow = oldRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n const newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Optional.some({\n row: oldRow,\n column: newColumn\n });\n });\n const cycleVertical$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n const onLastRow = newRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n const newCol = clamp(oldColumn, 0, colsInRow - 1);\n return Optional.some({\n row: newRow,\n column: newCol\n });\n });\n const cycleRight$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, +1);\n const cycleLeft$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, -1);\n const cycleUp$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, -1);\n const cycleDown$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, +1);\n\n const schema$u = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('captureTab', false),\n initSize()\n ];\n const focusIn$4 = (component, gridConfig, _gridState) => {\n descendant(component.element, gridConfig.selector).each(first => {\n gridConfig.focusManager.set(component, first);\n });\n };\n const findCurrent$1 = (component, gridConfig) => gridConfig.focusManager.get(component).bind(elem => closest$1(elem, gridConfig.selector));\n const execute$3 = (component, simulatedEvent, gridConfig, _gridState) => findCurrent$1(component, gridConfig).bind(focused => gridConfig.execute(component, simulatedEvent, focused));\n const doMove$2 = cycle => (element, focused, gridConfig, gridState) => locateVisible(element, focused, gridConfig.selector).bind(identified => cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns)));\n const handleTab = (_component, _simulatedEvent, gridConfig) => gridConfig.captureTab ? Optional.some(true) : Optional.none();\n const doEscape$1 = (component, simulatedEvent, gridConfig) => gridConfig.onEscape(component, simulatedEvent);\n const moveLeft$3 = doMove$2(cycleLeft$1);\n const moveRight$3 = doMove$2(cycleRight$1);\n const moveNorth$1 = doMove$2(cycleUp$1);\n const moveSouth$1 = doMove$2(cycleDown$1);\n const getKeydownRules$4 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft$3, moveRight$3)),\n rule(inSet(RIGHT), east$1(moveLeft$3, moveRight$3)),\n rule(inSet(UP), north$1(moveNorth$1)),\n rule(inSet(DOWN), south$1(moveSouth$1)),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), handleTab),\n rule(inSet(SPACE.concat(ENTER)), execute$3)\n ]);\n const getKeyupRules$4 = constant$1([\n rule(inSet(ESCAPE), doEscape$1),\n rule(inSet(SPACE), stopEventForFirefox)\n ]);\n var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, () => Optional.some(focusIn$4));\n\n const f = (container, selector, current, delta, getNewIndex) => {\n const isDisabledButton = candidate => name$3(candidate) === 'button' && get$g(candidate, 'disabled') === 'disabled';\n const tryNewIndex = (initial, index, candidates) => getNewIndex(initial, index, delta, 0, candidates.length - 1, candidates[index], newIndex => isDisabledButton(candidates[newIndex]) ? tryNewIndex(initial, newIndex, candidates) : Optional.from(candidates[newIndex]));\n return locateVisible(container, current, selector).bind(identified => {\n const index = identified.index;\n const candidates = identified.candidates;\n return tryNewIndex(index, index, candidates);\n });\n };\n const horizontalWithoutCycles = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, oldCandidate, onNewIndex) => {\n const newIndex = clamp(v + d, min, max);\n return newIndex === prevIndex ? Optional.from(oldCandidate) : onNewIndex(newIndex);\n });\n const horizontal = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, _oldCandidate, onNewIndex) => {\n const newIndex = cycleBy(v, d, min, max);\n return newIndex === prevIndex ? Optional.none() : onNewIndex(newIndex);\n });\n\n const schema$t = [\n required$1('selector'),\n defaulted('getInitial', Optional.none),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('executeOnMove', false),\n defaulted('allowVertical', true),\n defaulted('allowHorizontal', true),\n defaulted('cycles', true)\n ];\n const findCurrent = (component, flowConfig) => flowConfig.focusManager.get(component).bind(elem => closest$1(elem, flowConfig.selector));\n const execute$2 = (component, simulatedEvent, flowConfig) => findCurrent(component, flowConfig).bind(focused => flowConfig.execute(component, simulatedEvent, focused));\n const focusIn$3 = (component, flowConfig, _state) => {\n flowConfig.getInitial(component).orThunk(() => descendant(component.element, flowConfig.selector)).each(first => {\n flowConfig.focusManager.set(component, first);\n });\n };\n const moveLeft$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, -1);\n const moveRight$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, +1);\n const doMove$1 = movement => (component, simulatedEvent, flowConfig, flowState) => movement(component, simulatedEvent, flowConfig, flowState).bind(() => flowConfig.executeOnMove ? execute$2(component, simulatedEvent, flowConfig) : Optional.some(true));\n const doEscape = (component, simulatedEvent, flowConfig) => flowConfig.onEscape(component, simulatedEvent);\n const getKeydownRules$3 = (_component, _se, flowConfig, _flowState) => {\n const westMovers = [...flowConfig.allowHorizontal ? LEFT : []].concat(flowConfig.allowVertical ? UP : []);\n const eastMovers = [...flowConfig.allowHorizontal ? RIGHT : []].concat(flowConfig.allowVertical ? DOWN : []);\n return [\n rule(inSet(westMovers), doMove$1(west$1(moveLeft$2, moveRight$2))),\n rule(inSet(eastMovers), doMove$1(east$1(moveLeft$2, moveRight$2))),\n rule(inSet(ENTER), execute$2),\n rule(inSet(SPACE), execute$2)\n ];\n };\n const getKeyupRules$3 = constant$1([\n rule(inSet(SPACE), stopEventForFirefox),\n rule(inSet(ESCAPE), doEscape)\n ]);\n var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, () => Optional.some(focusIn$3));\n\n const toCell = (matrix, rowIndex, columnIndex) => Optional.from(matrix[rowIndex]).bind(row => Optional.from(row[columnIndex]).map(cell => ({\n rowIndex,\n columnIndex,\n cell\n })));\n const cycleHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const cycleVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const moveHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const moveVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const cycleRight = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, +1);\n const cycleLeft = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, -1);\n const cycleUp = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, -1);\n const cycleDown = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, +1);\n const moveLeft$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, -1);\n const moveRight$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, +1);\n const moveUp$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, -1);\n const moveDown$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, +1);\n\n const schema$s = [\n requiredObjOf('selectors', [\n required$1('row'),\n required$1('cell')\n ]),\n defaulted('cycles', true),\n defaulted('previousSelector', Optional.none),\n defaulted('execute', defaultExecute)\n ];\n const focusIn$2 = (component, matrixConfig, _state) => {\n const focused = matrixConfig.previousSelector(component).orThunk(() => {\n const selectors = matrixConfig.selectors;\n return descendant(component.element, selectors.cell);\n });\n focused.each(cell => {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n const execute$1 = (component, simulatedEvent, matrixConfig) => search(component.element).bind(focused => matrixConfig.execute(component, simulatedEvent, focused));\n const toMatrix = (rows, matrixConfig) => map$2(rows, row => descendants(row, matrixConfig.selectors.cell));\n const doMove = (ifCycle, ifMove) => (element, focused, matrixConfig) => {\n const move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$1(focused, matrixConfig.selectors.row).bind(inRow => {\n const cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex(cellsInRow, focused).bind(colIndex => {\n const allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex(allRows, inRow).bind(rowIndex => {\n const matrix = toMatrix(allRows, matrixConfig);\n return move(matrix, rowIndex, colIndex).map(next => next.cell);\n });\n });\n });\n };\n const moveLeft = doMove(cycleLeft, moveLeft$1);\n const moveRight = doMove(cycleRight, moveRight$1);\n const moveNorth = doMove(cycleUp, moveUp$1);\n const moveSouth = doMove(cycleDown, moveDown$1);\n const getKeydownRules$2 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft, moveRight)),\n rule(inSet(RIGHT), east$1(moveLeft, moveRight)),\n rule(inSet(UP), north$1(moveNorth)),\n rule(inSet(DOWN), south$1(moveSouth)),\n rule(inSet(SPACE.concat(ENTER)), execute$1)\n ]);\n const getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, () => Optional.some(focusIn$2));\n\n const schema$r = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n defaulted('moveOnTab', false)\n ];\n const execute = (component, simulatedEvent, menuConfig) => menuConfig.focusManager.get(component).bind(focused => menuConfig.execute(component, simulatedEvent, focused));\n const focusIn$1 = (component, menuConfig, _state) => {\n descendant(component.element, menuConfig.selector).each(first => {\n menuConfig.focusManager.set(component, first);\n });\n };\n const moveUp = (element, focused, info) => horizontal(element, info.selector, focused, -1);\n const moveDown = (element, focused, info) => horizontal(element, info.selector, focused, +1);\n const fireShiftTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const fireTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const getKeydownRules$1 = constant$1([\n rule(inSet(UP), move$1(moveUp)),\n rule(inSet(DOWN), move$1(moveDown)),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), fireShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), fireTab),\n rule(inSet(ENTER), execute),\n rule(inSet(SPACE), execute)\n ]);\n const getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, () => Optional.some(focusIn$1));\n\n const schema$q = [\n onKeyboardHandler('onSpace'),\n onKeyboardHandler('onEnter'),\n onKeyboardHandler('onShiftEnter'),\n onKeyboardHandler('onLeft'),\n onKeyboardHandler('onRight'),\n onKeyboardHandler('onTab'),\n onKeyboardHandler('onShiftTab'),\n onKeyboardHandler('onUp'),\n onKeyboardHandler('onDown'),\n onKeyboardHandler('onEscape'),\n defaulted('stopSpaceKeyup', false),\n option$3('focusIn')\n ];\n const getKeydownRules = (component, simulatedEvent, specialInfo) => [\n rule(inSet(SPACE), specialInfo.onSpace),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), specialInfo.onEnter),\n rule(and([\n isShift$1,\n inSet(ENTER)\n ]), specialInfo.onShiftEnter),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), specialInfo.onShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), specialInfo.onTab),\n rule(inSet(UP), specialInfo.onUp),\n rule(inSet(DOWN), specialInfo.onDown),\n rule(inSet(LEFT), specialInfo.onLeft),\n rule(inSet(RIGHT), specialInfo.onRight),\n rule(inSet(SPACE), specialInfo.onSpace)\n ];\n const getKeyupRules = (component, simulatedEvent, specialInfo) => [\n ...specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [],\n rule(inSet(ESCAPE), specialInfo.onEscape)\n ];\n var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, specialInfo => specialInfo.focusIn);\n\n const acyclic = AcyclicType.schema();\n const cyclic = CyclicType.schema();\n const flow = FlowType.schema();\n const flatgrid = FlatgridType.schema();\n const matrix = MatrixType.schema();\n const execution = ExecutionType.schema();\n const menu = MenuType.schema();\n const special = SpecialType.schema();\n\n var KeyboardBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n acyclic: acyclic,\n cyclic: cyclic,\n flow: flow,\n flatgrid: flatgrid,\n matrix: matrix,\n execution: execution,\n menu: menu,\n special: special\n });\n\n const isFlatgridState = keyState => hasNonNullableKey(keyState, 'setGridSize');\n const Keying = createModes({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: (keyingConfig, keyingState) => {\n const handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: (component, keyConfig, keyState) => {\n keyConfig.sendFocusIn(keyConfig).fold(() => {\n component.getSystem().triggerFocus(component.element, component.element);\n }, sendFocusIn => {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: (component, keyConfig, keyState, numRows, numColumns) => {\n if (!isFlatgridState(keyState)) {\n console.error('Layout does not support setGridSize');\n } else {\n keyState.setGridSize(numRows, numColumns);\n }\n }\n },\n state: KeyingState\n });\n\n const withoutReuse = (parent, data) => {\n preserve$1(() => {\n replaceChildren(parent, data, () => map$2(data, parent.getSystem().build));\n }, parent.element);\n };\n const withReuse = (parent, data) => {\n preserve$1(() => {\n virtualReplaceChildren(parent, data, () => {\n return patchSpecChildren(parent.element, data, parent.getSystem().buildOrPatch);\n });\n }, parent.element);\n };\n\n const virtualReplace = (component, replacee, replaceeIndex, childSpec) => {\n virtualDetach(replacee);\n const child = patchSpecChild(component.element, replaceeIndex, childSpec, component.getSystem().buildOrPatch);\n virtualAttach(component, child);\n component.syncComponents();\n };\n const insert = (component, insertion, childSpec) => {\n const child = component.getSystem().build(childSpec);\n attachWith(component, child, insertion);\n };\n const replace = (component, replacee, replaceeIndex, childSpec) => {\n detach(replacee);\n insert(component, (p, c) => appendAt(p, c, replaceeIndex), childSpec);\n };\n const set$3 = (component, replaceConfig, replaceState, data) => {\n const replacer = replaceConfig.reuseDom ? withReuse : withoutReuse;\n return replacer(component, data);\n };\n const append = (component, replaceConfig, replaceState, appendee) => {\n insert(component, append$2, appendee);\n };\n const prepend = (component, replaceConfig, replaceState, prependee) => {\n insert(component, prepend$1, prependee);\n };\n const remove$1 = (component, replaceConfig, replaceState, removee) => {\n const children = contents(component);\n const foundChild = find$5(children, child => eq(removee.element, child.element));\n foundChild.each(detach);\n };\n const contents = (component, _replaceConfig) => component.components();\n const replaceAt = (component, replaceConfig, replaceState, replaceeIndex, replacer) => {\n const children = contents(component);\n return Optional.from(children[replaceeIndex]).map(replacee => {\n replacer.fold(() => detach(replacee), r => {\n const replacer = replaceConfig.reuseDom ? virtualReplace : replace;\n replacer(component, replacee, replaceeIndex, r);\n });\n return replacee;\n });\n };\n const replaceBy = (component, replaceConfig, replaceState, replaceePred, replacer) => {\n const children = contents(component);\n return findIndex$1(children, replaceePred).bind(replaceeIndex => replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer));\n };\n\n var ReplaceApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n remove: remove$1,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$3,\n contents: contents\n });\n\n const Replacing = create$4({\n fields: [defaultedBoolean('reuseDom', true)],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n const events$c = (name, eventHandlers) => {\n const events = derive$2(eventHandlers);\n return create$4({\n fields: [required$1('enabled')],\n name,\n active: { events: constant$1(events) }\n });\n };\n const config = (name, eventHandlers) => {\n const me = events$c(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me,\n configAsRaw: constant$1({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n const focus$2 = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n focus$3(component.element);\n focusConfig.onFocus(component);\n }\n };\n const blur = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n blur$1(component.element);\n }\n };\n const isFocused = component => hasFocus(component.element);\n\n var FocusApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n focus: focus$2,\n blur: blur,\n isFocused: isFocused\n });\n\n const exhibit$4 = (base, focusConfig) => {\n const mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$8(mod);\n };\n const events$b = focusConfig => derive$2([run$1(focus$4(), (component, simulatedEvent) => {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), (_, simulatedEvent) => {\n simulatedEvent.event.prevent();\n })] : []));\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4,\n events: events$b\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted('stopMousedown', false),\n defaulted('ignore', false)\n ];\n\n const Focusing = create$4({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n const SetupBehaviourCellState = initialState => {\n const init = () => {\n const cell = Cell(initialState);\n const get = () => cell.get();\n const set = newState => cell.set(newState);\n const clear = () => cell.set(initialState);\n const readState = () => cell.get();\n return {\n get,\n set,\n clear,\n readState\n };\n };\n return { init };\n };\n\n const updateAriaState = (component, toggleConfig, toggleState) => {\n const ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n const updateClass = (component, toggleConfig, toggleState) => {\n toggleConfig.toggleClass.each(toggleClass => {\n if (toggleState.get()) {\n add$2(component.element, toggleClass);\n } else {\n remove$3(component.element, toggleClass);\n }\n });\n };\n const set$2 = (component, toggleConfig, toggleState, state) => {\n const initialState = toggleState.get();\n toggleState.set(state);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n if (initialState !== state) {\n toggleConfig.onToggled(component, state);\n }\n };\n const toggle$2 = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, !toggleState.get());\n };\n const on = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, true);\n };\n const off = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, false);\n };\n const isOn = (component, toggleConfig, toggleState) => toggleState.get();\n const onLoad = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, toggleConfig.selected);\n };\n\n var ToggleApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad,\n toggle: toggle$2,\n isOn: isOn,\n on: on,\n off: off,\n set: set$2\n });\n\n const exhibit$3 = () => nu$8({});\n const events$a = (toggleConfig, toggleState) => {\n const execute = executeEvent(toggleConfig, toggleState, toggle$2);\n const load = loadEvent(toggleConfig, toggleState, onLoad);\n return derive$2(flatten([\n toggleConfig.toggleOnExecute ? [execute] : [],\n [load]\n ]));\n };\n\n var ActiveToggle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$a\n });\n\n const updatePressed = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-pressed', status);\n if (ariaInfo.syncWithExpanded) {\n updateExpanded(component, ariaInfo, status);\n }\n };\n const updateSelected = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-selected', status);\n };\n const updateChecked = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-checked', status);\n };\n const updateExpanded = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted('selected', false),\n option$3('toggleClass'),\n defaulted('toggleOnExecute', true),\n onHandler('onToggled'),\n defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n pressed: [\n defaulted('syncWithExpanded', false),\n output$1('update', updatePressed)\n ],\n checked: [output$1('update', updateChecked)],\n expanded: [output$1('update', updateExpanded)],\n selected: [output$1('update', updateSelected)],\n none: [output$1('update', noop)]\n }))\n ];\n\n const Toggling = create$4({\n fields: ToggleSchema,\n name: 'toggling',\n active: ActiveToggle,\n apis: ToggleApis,\n state: SetupBehaviourCellState(false)\n });\n\n const pointerEvents = () => {\n const onClick = (component, simulatedEvent) => {\n simulatedEvent.stop();\n emitExecute(component);\n };\n return [\n run$1(click(), onClick),\n run$1(tap(), onClick),\n cutter(touchstart()),\n cutter(mousedown())\n ];\n };\n const events$9 = optAction => {\n const executeHandler = action => runOnExecute$1((component, simulatedEvent) => {\n action(component);\n simulatedEvent.stop();\n });\n return derive$2(flatten([\n optAction.map(executeHandler).toArray(),\n pointerEvents()\n ]));\n };\n\n const hoverEvent = 'alloy.item-hover';\n const focusEvent = 'alloy.item-focus';\n const toggledEvent = 'alloy.item-toggled';\n const onHover = item => {\n if (search(item.element).isNone() || Focusing.isFocused(item)) {\n if (!Focusing.isFocused(item)) {\n Focusing.focus(item);\n }\n emitWith(item, hoverEvent, { item });\n }\n };\n const onFocus$1 = item => {\n emitWith(item, focusEvent, { item });\n };\n const onToggled = (item, state) => {\n emitWith(item, toggledEvent, {\n item,\n state\n });\n };\n const hover = constant$1(hoverEvent);\n const focus$1 = constant$1(focusEvent);\n const toggled = constant$1(toggledEvent);\n\n const getItemRole = detail => detail.role.fold(() => detail.toggling.map(toggling => toggling.exclusive ? 'menuitemradio' : 'menuitemcheckbox').getOr('menuitem'), identity);\n const getTogglingSpec = (tConfig, isOption) => ({\n aria: { mode: isOption ? 'selected' : 'checked' },\n ...filter$1(tConfig, (_value, name) => name !== 'exclusive'),\n onToggled: (component, state) => {\n if (isFunction(tConfig.onToggled)) {\n tConfig.onToggled(component, state);\n }\n onToggled(component, state);\n }\n });\n const builder$2 = detail => ({\n dom: detail.dom,\n domModification: {\n ...detail.domModification,\n attributes: {\n 'role': getItemRole(detail),\n ...detail.domModification.attributes,\n 'aria-haspopup': detail.hasSubmenu,\n ...detail.hasSubmenu ? { 'aria-expanded': false } : {}\n }\n },\n behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n detail.toggling.fold(Toggling.revoke, tConfig => Toggling.config(getTogglingSpec(tConfig, detail.role.exists(role => role === 'option')))),\n Focusing.config({\n ignore: detail.ignoreFocus,\n stopMousedown: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({ mode: 'execution' }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n config('item-type-events', [\n ...pointerEvents(),\n run$1(mouseover(), onHover),\n run$1(focusItem(), Focusing.focus)\n ])\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n });\n const schema$p = [\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('hasSubmenu', false),\n option$3('toggling'),\n option$3('role'),\n SketchBehaviours.field('itemBehaviours', [\n Toggling,\n Focusing,\n Keying,\n Representing\n ]),\n defaulted('ignoreFocus', false),\n defaulted('domModification', {}),\n output$1('builder', builder$2),\n defaulted('eventOrder', {})\n ];\n\n const builder$1 = detail => ({\n dom: detail.dom,\n components: detail.components,\n events: derive$2([stopper(focusItem())])\n });\n const schema$o = [\n required$1('dom'),\n required$1('components'),\n output$1('builder', builder$1)\n ];\n\n const owner$2 = constant$1('item-widget');\n const parts$h = constant$1([required({\n name: 'widget',\n overrides: detail => {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: _component => {\n return detail.data;\n },\n setValue: noop\n }\n })])\n };\n }\n })]);\n\n const builder = detail => {\n const subs = substitutes(owner$2(), detail, parts$h());\n const components = components$1(owner$2(), detail, subs.internals());\n const focusWidget = component => getPart(component, detail, 'widget').map(widget => {\n Keying.focusIn(widget);\n return widget;\n });\n const onHorizontalArrow = (component, simulatedEvent) => inside(simulatedEvent.event.target) ? Optional.none() : (() => {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n })();\n return {\n dom: detail.dom,\n components,\n domModification: detail.domModification,\n events: derive$2([\n runOnExecute$1((component, simulatedEvent) => {\n focusWidget(component).each(_widget => {\n simulatedEvent.stop();\n });\n }),\n run$1(mouseover(), onHover),\n run$1(focusItem(), (component, _simulatedEvent) => {\n if (detail.autofocus) {\n focusWidget(component);\n } else {\n Focusing.focus(component);\n }\n })\n ]),\n behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? component => {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: (component, simulatedEvent) => {\n if (!Focusing.isFocused(component) && !detail.autofocus) {\n Focusing.focus(component);\n return Optional.some(true);\n } else if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }\n })\n ])\n };\n };\n const schema$n = [\n required$1('uid'),\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('autofocus', false),\n defaulted('ignoreFocus', false),\n SketchBehaviours.field('widgetBehaviours', [\n Representing,\n Focusing,\n Keying\n ]),\n defaulted('domModification', {}),\n defaultUidsSchema(parts$h()),\n output$1('builder', builder)\n ];\n\n const itemSchema$2 = choose$1('type', {\n widget: schema$n,\n item: schema$p,\n separator: schema$o\n });\n const configureGrid = (detail, movementInfo) => ({\n mode: 'flatgrid',\n selector: '.' + detail.markers.item,\n initSize: {\n numColumns: movementInfo.initSize.numColumns,\n numRows: movementInfo.initSize.numRows\n },\n focusManager: detail.focusManager\n });\n const configureMatrix = (detail, movementInfo) => ({\n mode: 'matrix',\n selectors: {\n row: movementInfo.rowSelector,\n cell: '.' + detail.markers.item\n },\n previousSelector: movementInfo.previousSelector,\n focusManager: detail.focusManager\n });\n const configureMenu = (detail, movementInfo) => ({\n mode: 'menu',\n selector: '.' + detail.markers.item,\n moveOnTab: movementInfo.moveOnTab,\n focusManager: detail.focusManager\n });\n const parts$g = constant$1([group({\n factory: {\n sketch: spec => {\n const itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: (detail, u) => {\n return has$2(u, 'uid') ? u : {\n ...u,\n uid: generate$5('item')\n };\n },\n overrides: (detail, u) => {\n return {\n type: u.type,\n ignoreFocus: detail.fakeFocus,\n domModification: { classes: [detail.markers.item] }\n };\n }\n })]);\n const schema$m = constant$1([\n optionString('role'),\n required$1('value'),\n required$1('items'),\n required$1('dom'),\n required$1('components'),\n defaulted('eventOrder', {}),\n field('menuBehaviours', [\n Highlighting,\n Representing,\n Composing,\n Keying\n ]),\n defaultedOf('movement', {\n mode: 'menu',\n moveOnTab: true\n }, choose$1('mode', {\n grid: [\n initSize(),\n output$1('config', configureGrid)\n ],\n matrix: [\n output$1('config', configureMatrix),\n required$1('rowSelector'),\n defaulted('previousSelector', Optional.none)\n ],\n menu: [\n defaulted('moveOnTab', true),\n output$1('config', configureMenu)\n ]\n })),\n itemMarkers(),\n defaulted('fakeFocus', false),\n defaulted('focusManager', dom$2()),\n onHandler('onHighlight'),\n onHandler('onDehighlight'),\n defaulted('showMenuRole', true)\n ]);\n\n const focus = constant$1('alloy.menu-focus');\n\n const deselectOtherRadioItems = (menu, item) => {\n const checkedRadioItems = descendants(menu.element, '[role=\"menuitemradio\"][aria-checked=\"true\"]');\n each$1(checkedRadioItems, ele => {\n if (!eq(ele, item.element)) {\n menu.getSystem().getByDom(ele).each(c => {\n Toggling.off(c);\n });\n }\n });\n };\n const make$7 = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.menuBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedItem,\n itemClass: detail.markers.item,\n onHighlight: detail.onHighlight,\n onDehighlight: detail.onDehighlight\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n }),\n Composing.config({ find: Optional.some }),\n Keying.config(detail.movement.config(detail, detail.movement))\n ]),\n events: derive$2([\n run$1(focus$1(), (menu, simulatedEvent) => {\n const event = simulatedEvent.event;\n menu.getSystem().getByDom(event.target).each(item => {\n Highlighting.highlight(menu, item);\n simulatedEvent.stop();\n emitWith(menu, focus(), {\n menu,\n item\n });\n });\n }),\n run$1(hover(), (menu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n Highlighting.highlight(menu, item);\n }),\n run$1(toggled(), (menu, simulatedEvent) => {\n const {item, state} = simulatedEvent.event;\n if (state && get$g(item.element, 'role') === 'menuitemradio') {\n deselectOtherRadioItems(menu, item);\n }\n })\n ]),\n components,\n eventOrder: detail.eventOrder,\n ...detail.showMenuRole ? { domModification: { attributes: { role: detail.role.getOr('menu') } } } : {}\n });\n\n const Menu = composite({\n name: 'Menu',\n configFields: schema$m(),\n partFields: parts$g(),\n factory: make$7\n });\n\n const transpose$1 = obj => tupleMap(obj, (v, k) => ({\n k: v,\n v: k\n }));\n const trace = (items, byItem, byMenu, finish) => get$h(byMenu, finish).bind(triggerItem => get$h(items, triggerItem).bind(triggerMenu => {\n const rest = trace(items, byItem, byMenu, triggerMenu);\n return Optional.some([triggerMenu].concat(rest));\n })).getOr([]);\n const generate$2 = (menus, expansions) => {\n const items = {};\n each(menus, (menuItems, menu) => {\n each$1(menuItems, item => {\n items[item] = menu;\n });\n });\n const byItem = expansions;\n const byMenu = transpose$1(expansions);\n const menuPaths = map$1(byMenu, (_triggerItem, submenu) => [submenu].concat(trace(items, byItem, byMenu, submenu)));\n return map$1(items, menu => get$h(menuPaths, menu).getOr([menu]));\n };\n\n const init$b = () => {\n const expansions = Cell({});\n const menus = Cell({});\n const paths = Cell({});\n const primary = value$4();\n const directory = Cell({});\n const clear = () => {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.clear();\n };\n const isClear = () => primary.get().isNone();\n const setMenuBuilt = (menuName, built) => {\n menus.set({\n ...menus.get(),\n [menuName]: {\n type: 'prepared',\n menu: built\n }\n });\n };\n const setContents = (sPrimary, sMenus, sExpansions, dir) => {\n primary.set(sPrimary);\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n const sPaths = generate$2(dir, sExpansions);\n paths.set(sPaths);\n };\n const getTriggeringItem = menuValue => find$4(expansions.get(), (v, _k) => v === menuValue);\n const getTriggerData = (menuValue, getItemByValue, path) => getPreparedMenu(menuValue).bind(menu => getTriggeringItem(menuValue).bind(triggeringItemValue => getItemByValue(triggeringItemValue).map(triggeredItem => ({\n triggeredMenu: menu,\n triggeringItem: triggeredItem,\n triggeringPath: path\n }))));\n const getTriggeringPath = (itemValue, getItemByValue) => {\n const extraPath = filter$2(lookupItem(itemValue).toArray(), menuValue => getPreparedMenu(menuValue).isSome());\n return get$h(paths.get(), itemValue).bind(path => {\n const revPath = reverse(extraPath.concat(path));\n const triggers = bind$3(revPath, (menuValue, menuIndex) => getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(() => is$1(primary.get(), menuValue) ? [] : [Optional.none()], data => [Optional.some(data)]));\n return sequence(triggers);\n });\n };\n const expand = itemValue => get$h(expansions.get(), itemValue).map(menu => {\n const current = get$h(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n const collapse = itemValue => get$h(paths.get(), itemValue).bind(path => path.length > 1 ? Optional.some(path.slice(1)) : Optional.none());\n const refresh = itemValue => get$h(paths.get(), itemValue);\n const getPreparedMenu = menuValue => lookupMenu(menuValue).bind(extractPreparedMenu);\n const lookupMenu = menuValue => get$h(menus.get(), menuValue);\n const lookupItem = itemValue => get$h(expansions.get(), itemValue);\n const otherMenus = path => {\n const menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n const getPrimary = () => primary.get().bind(getPreparedMenu);\n const getMenus = () => menus.get();\n return {\n setMenuBuilt,\n setContents,\n expand,\n refresh,\n collapse,\n lookupMenu,\n lookupItem,\n otherMenus,\n getPrimary,\n getMenus,\n clear,\n isClear,\n getTriggeringPath\n };\n };\n const extractPreparedMenu = prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n const LayeredState = {\n init: init$b,\n extractPreparedMenu\n };\n\n const onMenuItemHighlightedEvent = generate$6('tiered-menu-item-highlight');\n const onMenuItemDehighlightedEvent = generate$6('tiered-menu-item-dehighlight');\n\n var HighlightOnOpen;\n (function (HighlightOnOpen) {\n HighlightOnOpen[HighlightOnOpen['HighlightMenuAndItem'] = 0] = 'HighlightMenuAndItem';\n HighlightOnOpen[HighlightOnOpen['HighlightJustMenu'] = 1] = 'HighlightJustMenu';\n HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 2] = 'HighlightNone';\n }(HighlightOnOpen || (HighlightOnOpen = {})));\n\n const make$6 = (detail, _rawUiSpec) => {\n const submenuParentItems = value$4();\n const buildMenus = (container, primaryName, menus) => map$1(menus, (spec, name) => {\n const makeSketch = () => Menu.sketch({\n ...spec,\n value: name,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: (menuComp, itemComp) => {\n const highlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemHighlightedEvent, highlightData);\n },\n onDehighlight: (menuComp, itemComp) => {\n const dehighlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemDehighlightedEvent, dehighlightData);\n },\n focusManager: detail.fakeFocus ? highlights() : dom$2()\n });\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n const layeredState = LayeredState.init();\n const setup = container => {\n const componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n const directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n const getItemValue = item => Representing.getValue(item).value;\n const getItemByValue = (_container, menus, itemValue) => findMap(menus, menu => {\n if (!menu.getSystem().isConnected()) {\n return Optional.none();\n }\n const candidates = Highlighting.getCandidates(menu);\n return find$5(candidates, c => getItemValue(c) === itemValue);\n });\n const toDirectory = _container => map$1(detail.data.menus, (data, _menuName) => bind$3(data.items, item => item.type === 'separator' ? [] : [item.data.value]));\n const setActiveMenu = Highlighting.highlight;\n const setActiveMenuAndItem = (container, menu) => {\n setActiveMenu(container, menu);\n Highlighting.getHighlighted(menu).orThunk(() => Highlighting.getFirst(menu)).each(item => {\n if (detail.fakeFocus) {\n Highlighting.highlight(menu, item);\n } else {\n dispatch(container, item.element, focusItem());\n }\n });\n };\n const getMenus = (state, menuValues) => cat(map$2(menuValues, mv => state.lookupMenu(mv).bind(prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none())));\n const closeOthers = (container, state, path) => {\n const others = getMenus(state, state.otherMenus(path));\n each$1(others, o => {\n remove$2(o.element, [detail.markers.backgroundMenu]);\n if (!detail.stayInDom) {\n Replacing.remove(container, o);\n }\n });\n };\n const getSubmenuParents = container => submenuParentItems.get().getOrThunk(() => {\n const r = {};\n const items = descendants(container.element, `.${ detail.markers.item }`);\n const parentItems = filter$2(items, i => get$g(i, 'aria-haspopup') === 'true');\n each$1(parentItems, i => {\n container.getSystem().getByDom(i).each(itemComp => {\n const key = getItemValue(itemComp);\n r[key] = itemComp;\n });\n });\n submenuParentItems.set(r);\n return r;\n });\n const updateAriaExpansions = (container, path) => {\n const parentItems = getSubmenuParents(container);\n each(parentItems, (v, k) => {\n const expanded = contains$2(path, k);\n set$9(v.element, 'aria-expanded', expanded);\n });\n };\n const updateMenuPath = (container, state, path) => Optional.from(path[0]).bind(latestMenuName => state.lookupMenu(latestMenuName).bind(menuPrep => {\n if (menuPrep.type === 'notbuilt') {\n return Optional.none();\n } else {\n const activeMenu = menuPrep.menu;\n const rest = getMenus(state, path.slice(1));\n each$1(rest, r => {\n add$2(r.element, detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n remove$2(activeMenu.element, [detail.markers.backgroundMenu]);\n setActiveMenuAndItem(container, activeMenu);\n closeOthers(container, state, path);\n return Optional.some(activeMenu);\n }\n }));\n let ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n const buildIfRequired = (container, menuName, menuPrep) => {\n if (menuPrep.type === 'notbuilt') {\n const menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n const expandRight = (container, item, decision = ExpandHighlightDecision.HighlightSubmenu) => {\n if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) {\n return Optional.some(item);\n } else {\n const value = getItemValue(item);\n return layeredState.expand(value).bind(path => {\n updateAriaExpansions(container, path);\n return Optional.from(path[0]).bind(menuName => layeredState.lookupMenu(menuName).bind(activeMenuPrep => {\n const activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n detail.onOpenSubmenu(container, item, activeMenu, reverse(path));\n if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n Highlighting.highlightFirst(activeMenu);\n return updateMenuPath(container, layeredState, path);\n } else {\n Highlighting.dehighlightAll(activeMenu);\n return Optional.some(item);\n }\n }));\n });\n }\n };\n const collapseLeft = (container, item) => {\n const value = getItemValue(item);\n return layeredState.collapse(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(activeMenu => {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n const updateView = (container, item) => {\n const value = getItemValue(item);\n return layeredState.refresh(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n const onRight = (container, item) => inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n const onLeft = (container, item) => inside(item.element) ? Optional.none() : collapseLeft(container, item);\n const onEscape = (container, item) => collapseLeft(container, item).orThunk(() => detail.onEscape(container, item).map(() => container));\n const keyOnItem = f => (container, simulatedEvent) => {\n return closest$1(simulatedEvent.getSource(), `.${ detail.markers.item }`).bind(target => container.getSystem().getByDom(target).toOptional().bind(item => f(container, item).map(always)));\n };\n const events = derive$2([\n run$1(focus(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n layeredState.lookupItem(getItemValue(item)).each(() => {\n const menu = simulatedEvent.event.menu;\n Highlighting.highlight(tmenu, menu);\n const value = getItemValue(simulatedEvent.event.item);\n layeredState.refresh(value).each(path => closeOthers(tmenu, layeredState, path));\n });\n }),\n runOnExecute$1((component, simulatedEvent) => {\n const target = simulatedEvent.event.target;\n component.getSystem().getByDom(target).each(item => {\n const itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(() => {\n detail.onExecute(component, item);\n }, noop);\n });\n }),\n runOnAttached((container, _simulatedEvent) => {\n setup(container).each(primary => {\n Replacing.append(container, premade(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightOnOpen === HighlightOnOpen.HighlightMenuAndItem) {\n setActiveMenuAndItem(container, primary);\n } else if (detail.highlightOnOpen === HighlightOnOpen.HighlightJustMenu) {\n setActiveMenu(container, primary);\n }\n });\n }),\n run$1(onMenuItemHighlightedEvent, (tmenuComp, se) => {\n detail.onHighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n run$1(onMenuItemDehighlightedEvent, (tmenuComp, se) => {\n detail.onDehighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n ...detail.navigateOnHover ? [run$1(hover(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n updateView(tmenu, item);\n expandRight(tmenu, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(tmenu, item);\n })] : []\n ]);\n const getActiveItem = container => Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n const collapseMenuApi = container => {\n getActiveItem(container).each(currentItem => {\n collapseLeft(container, currentItem);\n });\n };\n const highlightPrimary = container => {\n layeredState.getPrimary().each(primary => {\n setActiveMenuAndItem(container, primary);\n });\n };\n const extractMenuFromContainer = container => Optional.from(container.components()[0]).filter(comp => get$g(comp.element, 'role') === 'menu');\n const repositionMenus = container => {\n const maybeActivePrimary = layeredState.getPrimary().bind(primary => getActiveItem(container).bind(currentItem => {\n const itemValue = getItemValue(currentItem);\n const allMenus = values(layeredState.getMenus());\n const preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu));\n return layeredState.getTriggeringPath(itemValue, v => getItemByValue(container, preparedMenus, v));\n }).map(triggeringPath => ({\n primary,\n triggeringPath\n })));\n maybeActivePrimary.fold(() => {\n extractMenuFromContainer(container).each(primaryMenu => {\n detail.onRepositionMenu(container, primaryMenu, []);\n });\n }, ({primary, triggeringPath}) => {\n detail.onRepositionMenu(container, primary, triggeringPath);\n });\n };\n const apis = {\n collapseMenu: collapseMenuApi,\n highlightPrimary,\n repositionMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.tmenuBehaviours, [\n Keying.config({\n mode: 'special',\n onRight: keyOnItem(onRight),\n onLeft: keyOnItem(onLeft),\n onEscape: keyOnItem(onEscape),\n focusIn: (container, _keyInfo) => {\n layeredState.getPrimary().each(primary => {\n dispatch(container, primary.element, focusItem());\n });\n }\n }),\n Highlighting.config({\n highlightClass: detail.markers.selectedMenu,\n itemClass: detail.markers.menu\n }),\n Composing.config({\n find: container => {\n return Highlighting.getHighlighted(container);\n }\n }),\n Replacing.config({})\n ]),\n eventOrder: detail.eventOrder,\n apis,\n events\n };\n };\n const collapseItem$1 = constant$1('collapse-item');\n\n const tieredData = (primary, menus, expansions) => ({\n primary,\n menus,\n expansions\n });\n const singleData = (name, menu) => ({\n primary: name,\n menus: wrap$1(name, menu),\n expansions: {}\n });\n const collapseItem = text => ({\n value: generate$6(collapseItem$1()),\n meta: { text }\n });\n const tieredMenu = single({\n name: 'TieredMenu',\n configFields: [\n onStrictKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape'),\n onStrictHandler('onOpenMenu'),\n onStrictHandler('onOpenSubmenu'),\n onHandler('onRepositionMenu'),\n onHandler('onCollapseMenu'),\n defaulted('highlightOnOpen', HighlightOnOpen.HighlightMenuAndItem),\n requiredObjOf('data', [\n required$1('primary'),\n required$1('menus'),\n required$1('expansions')\n ]),\n defaulted('fakeFocus', false),\n onHandler('onHighlightItem'),\n onHandler('onDehighlightItem'),\n onHandler('onHover'),\n tieredMenuMarkers(),\n required$1('dom'),\n defaulted('navigateOnHover', true),\n defaulted('stayInDom', false),\n field('tmenuBehaviours', [\n Keying,\n Highlighting,\n Composing,\n Replacing\n ]),\n defaulted('eventOrder', {})\n ],\n apis: {\n collapseMenu: (apis, tmenu) => {\n apis.collapseMenu(tmenu);\n },\n highlightPrimary: (apis, tmenu) => {\n apis.highlightPrimary(tmenu);\n },\n repositionMenus: (apis, tmenu) => {\n apis.repositionMenus(tmenu);\n }\n },\n factory: make$6,\n extraApis: {\n tieredData,\n singleData,\n collapseItem\n }\n });\n\n const makeMenu = (detail, menuSandbox, placementSpec, menuSpec, getBounds) => {\n const lazySink = () => detail.lazySink(menuSandbox);\n const layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: () => belowOrAbove(),\n onRtl: () => belowOrAboveRtl()\n }\n } : {};\n const isFirstTierSubmenu = triggeringPaths => triggeringPaths.length === 2;\n const getSubmenuLayouts = triggeringPaths => isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightOnOpen: menuSpec.menu.highlightOnOpen,\n fakeFocus: menuSpec.menu.fakeFocus,\n onEscape: () => {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(handler => handler(menuSandbox));\n return Optional.some(true);\n },\n onExecute: () => {\n return Optional.some(true);\n },\n onOpenMenu: (tmenu, menu) => {\n Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds());\n },\n onOpenSubmenu: (tmenu, item, submenu, triggeringPaths) => {\n const sink = lazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item,\n ...getSubmenuLayouts(triggeringPaths)\n }\n });\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds());\n each$1(submenuTriggers, st => {\n const submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem,\n ...submenuLayouts\n }\n });\n });\n }\n });\n };\n const factory$o = (detail, spec) => {\n const isPartOfRelated = (sandbox, queryElem) => {\n const related = detail.getRelated(sandbox);\n return related.exists(rel => isPartOf$1(rel, queryElem));\n };\n const setContent = (sandbox, thing) => {\n Sandboxing.setContent(sandbox, thing);\n };\n const showAt = (sandbox, thing, placementSpec) => {\n const getBounds = Optional.none;\n showWithinBounds(sandbox, thing, placementSpec, getBounds);\n };\n const showWithinBounds = (sandbox, thing, placementSpec, getBounds) => {\n const sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, () => Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds()));\n Representing.setValue(sandbox, Optional.some({\n mode: 'position',\n config: placementSpec,\n getBounds\n }));\n };\n const showMenuAt = (sandbox, placementSpec, menuSpec) => {\n showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n };\n const showMenuWithinBounds = (sandbox, placementSpec, menuSpec, getBounds) => {\n const menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Optional.some({\n mode: 'menu',\n menu\n }));\n };\n const hide = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Optional.none());\n Sandboxing.close(sandbox);\n }\n };\n const getContent = sandbox => Sandboxing.getState(sandbox);\n const reposition = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(state => {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n break;\n case 'position':\n const sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds());\n break;\n }\n });\n }\n };\n const apis = {\n setContent,\n showAt,\n showWithinBounds,\n showMenuAt,\n showMenuWithinBounds,\n hide,\n getContent,\n reposition,\n isOpen: Sandboxing.isOpen\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.inlineBehaviours, [\n Sandboxing.config({\n isPartOf: (sandbox, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: sandbox => {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: sandbox => {\n detail.onShow(sandbox);\n },\n onClose: sandbox => {\n detail.onHide(sandbox);\n }\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: Optional.none()\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: spec.isExtraPart,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n ...detail.fireRepositionEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({}),\n doReposition: reposition\n })\n }\n })\n ]),\n eventOrder: detail.eventOrder,\n apis\n };\n };\n const InlineView = single({\n name: 'InlineView',\n configFields: [\n required$1('lazySink'),\n onHandler('onShow'),\n onHandler('onHide'),\n optionFunction('onEscape'),\n field('inlineBehaviours', [\n Sandboxing,\n Representing,\n Receiving\n ]),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n optionObjOf('fireRepositionEventInstead', [defaulted('event', repositionRequested())]),\n defaulted('getRelated', Optional.none),\n defaulted('isExtraPart', never),\n defaulted('eventOrder', Optional.none)\n ],\n factory: factory$o,\n apis: {\n showAt: (apis, component, anchor, thing) => {\n apis.showAt(component, anchor, thing);\n },\n showWithinBounds: (apis, component, anchor, thing, bounds) => {\n apis.showWithinBounds(component, anchor, thing, bounds);\n },\n showMenuAt: (apis, component, anchor, menuSpec) => {\n apis.showMenuAt(component, anchor, menuSpec);\n },\n showMenuWithinBounds: (apis, component, anchor, menuSpec, bounds) => {\n apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n },\n hide: (apis, component) => {\n apis.hide(component);\n },\n isOpen: (apis, component) => apis.isOpen(component),\n getContent: (apis, component) => apis.getContent(component),\n setContent: (apis, component, thing) => {\n apis.setContent(component, thing);\n },\n reposition: (apis, component) => {\n apis.reposition(component);\n }\n }\n });\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var ToolbarMode$1;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode$1 || (ToolbarMode$1 = {})));\n var ToolbarLocation$1;\n (function (ToolbarLocation) {\n ToolbarLocation['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation$1 || (ToolbarLocation$1 = {})));\n const option$2 = name => editor => editor.options.get(name);\n const wrapOptional = fn => editor => Optional.from(fn(editor));\n const register$f = editor => {\n const isPhone = global$6.deviceType.isPhone();\n const isMobile = global$6.deviceType.isTablet() || isPhone;\n const registerOption = editor.options.register;\n const stringOrFalseProcessor = value => isString(value) || value === false;\n const stringOrNumberProcessor = value => isString(value) || isNumber(value);\n registerOption('skin', {\n processor: value => isString(value) || value === false,\n default: 'oxide'\n });\n registerOption('skin_url', { processor: 'string' });\n registerOption('height', {\n processor: stringOrNumberProcessor,\n default: Math.max(editor.getElement().offsetHeight, 400)\n });\n registerOption('width', {\n processor: stringOrNumberProcessor,\n default: global$8.DOM.getStyle(editor.getElement(), 'width')\n });\n registerOption('min_height', {\n processor: 'number',\n default: 100\n });\n registerOption('min_width', { processor: 'number' });\n registerOption('max_height', { processor: 'number' });\n registerOption('max_width', { processor: 'number' });\n registerOption('style_formats', { processor: 'object[]' });\n registerOption('style_formats_merge', {\n processor: 'boolean',\n default: false\n });\n registerOption('style_formats_autohide', {\n processor: 'boolean',\n default: false\n });\n registerOption('line_height_formats', {\n processor: 'string',\n default: '1 1.1 1.2 1.3 1.4 1.5 2'\n });\n registerOption('font_family_formats', {\n processor: 'string',\n default: 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'\n });\n registerOption('font_size_formats', {\n processor: 'string',\n default: '8pt 10pt 12pt 14pt 18pt 24pt 36pt'\n });\n registerOption('font_size_input_default_unit', {\n processor: 'string',\n default: 'pt'\n });\n registerOption('block_formats', {\n processor: 'string',\n default: 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'\n });\n registerOption('content_langs', { processor: 'object[]' });\n registerOption('removed_menuitems', {\n processor: 'string',\n default: ''\n });\n registerOption('menubar', {\n processor: value => isString(value) || isBoolean(value),\n default: !isPhone\n });\n registerOption('menu', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar', {\n processor: value => {\n if (isBoolean(value) || isString(value) || isArray(value)) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a boolean, string or array.'\n };\n }\n },\n default: true\n });\n range$2(9, num => {\n registerOption('toolbar' + (num + 1), { processor: 'string' });\n });\n registerOption('toolbar_mode', {\n processor: 'string',\n default: isMobile ? 'scrolling' : 'floating'\n });\n registerOption('toolbar_groups', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar_location', {\n processor: 'string',\n default: ToolbarLocation$1.auto\n });\n registerOption('toolbar_persist', {\n processor: 'boolean',\n default: false\n });\n registerOption('toolbar_sticky', {\n processor: 'boolean',\n default: editor.inline\n });\n registerOption('toolbar_sticky_offset', {\n processor: 'number',\n default: 0\n });\n registerOption('fixed_toolbar_container', {\n processor: 'string',\n default: ''\n });\n registerOption('fixed_toolbar_container_target', { processor: 'object' });\n registerOption('ui_mode', {\n processor: 'string',\n default: 'combined'\n });\n registerOption('file_picker_callback', { processor: 'function' });\n registerOption('file_picker_validator_handler', { processor: 'function' });\n registerOption('file_picker_types', { processor: 'string' });\n registerOption('typeahead_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('anchor_top', {\n processor: stringOrFalseProcessor,\n default: '#top'\n });\n registerOption('anchor_bottom', {\n processor: stringOrFalseProcessor,\n default: '#bottom'\n });\n registerOption('draggable_modal', {\n processor: 'boolean',\n default: false\n });\n registerOption('statusbar', {\n processor: 'boolean',\n default: true\n });\n registerOption('elementpath', {\n processor: 'boolean',\n default: true\n });\n registerOption('branding', {\n processor: 'boolean',\n default: true\n });\n registerOption('promotion', {\n processor: 'boolean',\n default: true\n });\n registerOption('resize', {\n processor: value => value === 'both' || isBoolean(value),\n default: !global$6.deviceType.isTouch()\n });\n registerOption('sidebar_show', { processor: 'string' });\n registerOption('help_accessibility', {\n processor: 'boolean',\n default: editor.hasPlugin('help')\n });\n registerOption('default_font_stack', {\n processor: 'string[]',\n default: []\n });\n };\n const isReadOnly = option$2('readonly');\n const isDisabled = option$2('disabled');\n const getHeightOption = option$2('height');\n const getWidthOption = option$2('width');\n const getMinWidthOption = wrapOptional(option$2('min_width'));\n const getMinHeightOption = wrapOptional(option$2('min_height'));\n const getMaxWidthOption = wrapOptional(option$2('max_width'));\n const getMaxHeightOption = wrapOptional(option$2('max_height'));\n const getUserStyleFormats = wrapOptional(option$2('style_formats'));\n const shouldMergeStyleFormats = option$2('style_formats_merge');\n const shouldAutoHideStyleFormats = option$2('style_formats_autohide');\n const getContentLanguages = option$2('content_langs');\n const getRemovedMenuItems = option$2('removed_menuitems');\n const getToolbarMode = option$2('toolbar_mode');\n const getToolbarGroups = option$2('toolbar_groups');\n const getToolbarLocation = option$2('toolbar_location');\n const fixedContainerSelector = option$2('fixed_toolbar_container');\n const fixedToolbarContainerTarget = option$2('fixed_toolbar_container_target');\n const isToolbarPersist = option$2('toolbar_persist');\n const getStickyToolbarOffset = option$2('toolbar_sticky_offset');\n const getMenubar = option$2('menubar');\n const getToolbar = option$2('toolbar');\n const getFilePickerCallback = option$2('file_picker_callback');\n const getFilePickerValidatorHandler = option$2('file_picker_validator_handler');\n const getFontSizeInputDefaultUnit = option$2('font_size_input_default_unit');\n const getFilePickerTypes = option$2('file_picker_types');\n const useTypeaheadUrls = option$2('typeahead_urls');\n const getAnchorTop = option$2('anchor_top');\n const getAnchorBottom = option$2('anchor_bottom');\n const isDraggableModal$1 = option$2('draggable_modal');\n const useStatusBar = option$2('statusbar');\n const useElementPath = option$2('elementpath');\n const useBranding = option$2('branding');\n const getResize = option$2('resize');\n const getPasteAsText = option$2('paste_as_text');\n const getSidebarShow = option$2('sidebar_show');\n const promotionEnabled = option$2('promotion');\n const useHelpAccessibility = option$2('help_accessibility');\n const getDefaultFontStack = option$2('default_font_stack');\n const getSkin = option$2('skin');\n const isSkinDisabled = editor => editor.options.get('skin') === false;\n const isMenubarEnabled = editor => editor.options.get('menubar') !== false;\n const getSkinUrl = editor => {\n const skinUrl = editor.options.get('skin_url');\n if (isSkinDisabled(editor)) {\n return skinUrl;\n } else {\n if (skinUrl) {\n return editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n const skin = editor.options.get('skin');\n return global$7.baseURL + '/skins/ui/' + skin;\n }\n }\n };\n const getSkinUrlOption = editor => Optional.from(editor.options.get('skin_url'));\n const getLineHeightFormats = editor => editor.options.get('line_height_formats').split(' ');\n const isToolbarEnabled = editor => {\n const toolbar = getToolbar(editor);\n const isToolbarString = isString(toolbar);\n const isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || toolbar === true);\n };\n const getMultipleToolbarsOption = editor => {\n const toolbars = range$2(9, num => editor.options.get('toolbar' + (num + 1)));\n const toolbarArray = filter$2(toolbars, isString);\n return someIf(toolbarArray.length > 0, toolbarArray);\n };\n const isMultipleToolbars = editor => getMultipleToolbarsOption(editor).fold(() => {\n const toolbar = getToolbar(editor);\n return isArrayOf(toolbar, isString) && toolbar.length > 0;\n }, always);\n const isToolbarLocationBottom = editor => getToolbarLocation(editor) === ToolbarLocation$1.bottom;\n const fixedContainerTarget = editor => {\n var _a;\n if (!editor.inline) {\n return Optional.none();\n }\n const selector = (_a = fixedContainerSelector(editor)) !== null && _a !== void 0 ? _a : '';\n if (selector.length > 0) {\n return descendant(body(), selector);\n }\n const element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n const useFixedContainer = editor => editor.inline && fixedContainerTarget(editor).isSome();\n const getUiContainer = editor => {\n const fixedContainer = fixedContainerTarget(editor);\n return fixedContainer.getOrThunk(() => getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement()))));\n };\n const isDistractionFree = editor => editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n const isStickyToolbar = editor => {\n const isStickyToolbar = editor.options.get('toolbar_sticky');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n const isSplitUiMode = editor => !useFixedContainer(editor) && editor.options.get('ui_mode') === 'split';\n const getMenus = editor => {\n const menu = editor.options.get('menu');\n return map$1(menu, menu => ({\n ...menu,\n items: menu.items\n }));\n };\n\n var Options = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get ToolbarMode () { return ToolbarMode$1; },\n get ToolbarLocation () { return ToolbarLocation$1; },\n register: register$f,\n getSkinUrl: getSkinUrl,\n getSkinUrlOption: getSkinUrlOption,\n isReadOnly: isReadOnly,\n isDisabled: isDisabled,\n getSkin: getSkin,\n isSkinDisabled: isSkinDisabled,\n getHeightOption: getHeightOption,\n getWidthOption: getWidthOption,\n getMinWidthOption: getMinWidthOption,\n getMinHeightOption: getMinHeightOption,\n getMaxWidthOption: getMaxWidthOption,\n getMaxHeightOption: getMaxHeightOption,\n getUserStyleFormats: getUserStyleFormats,\n shouldMergeStyleFormats: shouldMergeStyleFormats,\n shouldAutoHideStyleFormats: shouldAutoHideStyleFormats,\n getLineHeightFormats: getLineHeightFormats,\n getContentLanguages: getContentLanguages,\n getRemovedMenuItems: getRemovedMenuItems,\n isMenubarEnabled: isMenubarEnabled,\n isMultipleToolbars: isMultipleToolbars,\n isToolbarEnabled: isToolbarEnabled,\n isToolbarPersist: isToolbarPersist,\n getMultipleToolbarsOption: getMultipleToolbarsOption,\n getUiContainer: getUiContainer,\n useFixedContainer: useFixedContainer,\n isSplitUiMode: isSplitUiMode,\n getToolbarMode: getToolbarMode,\n isDraggableModal: isDraggableModal$1,\n isDistractionFree: isDistractionFree,\n isStickyToolbar: isStickyToolbar,\n getStickyToolbarOffset: getStickyToolbarOffset,\n getToolbarLocation: getToolbarLocation,\n isToolbarLocationBottom: isToolbarLocationBottom,\n getToolbarGroups: getToolbarGroups,\n getMenus: getMenus,\n getMenubar: getMenubar,\n getToolbar: getToolbar,\n getFilePickerCallback: getFilePickerCallback,\n getFilePickerTypes: getFilePickerTypes,\n useTypeaheadUrls: useTypeaheadUrls,\n getAnchorTop: getAnchorTop,\n getAnchorBottom: getAnchorBottom,\n getFilePickerValidatorHandler: getFilePickerValidatorHandler,\n getFontSizeInputDefaultUnit: getFontSizeInputDefaultUnit,\n useStatusBar: useStatusBar,\n useElementPath: useElementPath,\n promotionEnabled: promotionEnabled,\n useBranding: useBranding,\n getResize: getResize,\n getPasteAsText: getPasteAsText,\n getSidebarShow: getSidebarShow,\n useHelpAccessibility: useHelpAccessibility,\n getDefaultFontStack: getDefaultFontStack\n });\n\n const nonScrollingOverflows = [\n 'visible',\n 'hidden',\n 'clip'\n ];\n const isScrollingOverflowValue = value => trim$1(value).length > 0 && !contains$2(nonScrollingOverflows, value);\n const isScroller = elem => {\n if (isHTMLElement(elem)) {\n const overflowX = get$f(elem, 'overflow-x');\n const overflowY = get$f(elem, 'overflow-y');\n return isScrollingOverflowValue(overflowX) || isScrollingOverflowValue(overflowY);\n } else {\n return false;\n }\n };\n const isFullscreen = editor => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n const detect = (editor, popupSinkElem) => {\n const ancestorsScrollers = ancestors(popupSinkElem, isScroller);\n const scrollers = ancestorsScrollers.length === 0 ? getShadowRoot(popupSinkElem).map(getShadowHost).map(x => ancestors(x, isScroller)).getOr([]) : ancestorsScrollers;\n return head(scrollers).map(element => ({\n element,\n others: scrollers.slice(1),\n isFullscreen: () => isFullscreen(editor)\n }));\n };\n const detectWhenSplitUiMode = (editor, popupSinkElem) => isSplitUiMode(editor) ? detect(editor, popupSinkElem) : Optional.none();\n const getBoundsFrom = sc => {\n const scrollableBoxes = [\n ...map$2(sc.others, box$1),\n win()\n ];\n return sc.isFullscreen() ? win() : constrainByMany(box$1(sc.element), scrollableBoxes);\n };\n\n const factory$n = detail => {\n const events = events$9(detail.action);\n const tag = detail.dom.tag;\n const lookupAttr = attr => get$h(detail.dom, 'attributes').bind(attrs => get$h(attrs, attr));\n const getModAttributes = () => {\n if (tag === 'button') {\n const type = lookupAttr('type').getOr('button');\n const roleAttrs = lookupAttr('role').map(role => ({ role })).getOr({});\n return {\n type,\n ...roleAttrs\n };\n } else {\n const role = detail.role.getOr(lookupAttr('role').getOr('button'));\n return { role };\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events,\n behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n })\n ]),\n domModification: { attributes: getModAttributes() },\n eventOrder: detail.eventOrder\n };\n };\n const Button = single({\n name: 'Button',\n factory: factory$n,\n configFields: [\n defaulted('uid', undefined),\n required$1('dom'),\n defaulted('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option$3('action'),\n option$3('role'),\n defaulted('eventOrder', {})\n ]\n });\n\n const getAttrs = elem => {\n const attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : [];\n return foldl(attributes, (b, attr) => {\n if (attr.name === 'class') {\n return b;\n } else {\n return {\n ...b,\n [attr.name]: attr.value\n };\n }\n }, {});\n };\n const getClasses = elem => Array.prototype.slice.call(elem.dom.classList, 0);\n const fromHtml = html => {\n const elem = SugarElement.fromHtml(html);\n const children$1 = children(elem);\n const attrs = getAttrs(elem);\n const classes = getClasses(elem);\n const contents = children$1.length === 0 ? {} : { innerHtml: get$8(elem) };\n return {\n tag: name$3(elem),\n classes,\n attributes: attrs,\n ...contents\n };\n };\n\n const record = spec => {\n const uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$5('memento');\n const get = anyInSystem => anyInSystem.getSystem().getByUid(uid).getOrDie();\n const getOpt = anyInSystem => anyInSystem.getSystem().getByUid(uid).toOptional();\n const asSpec = () => ({\n ...spec,\n uid\n });\n return {\n get,\n getOpt,\n asSpec\n };\n };\n\n const exhibit$2 = (base, tabConfig) => nu$8({\n attributes: wrapAll([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$2\n });\n\n var TabstopSchema = [defaulted('tabAttr', 'data-alloy-tabstop')];\n\n const Tabstopping = create$4({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n const ExclusivityChannel = generate$6('tooltip.exclusive');\n const ShowTooltipEvent = generate$6('tooltip.show');\n const HideTooltipEvent = generate$6('tooltip.hide');\n const ImmediateHideTooltipEvent = generate$6('tooltip.immediateHide');\n const ImmediateShowTooltipEvent = generate$6('tooltip.immediateShow');\n\n const hideAllExclusive = (component, _tConfig, _tState) => {\n component.getSystem().broadcastOn([ExclusivityChannel], {});\n };\n const setComponents = (_component, _tConfig, tState, specs) => {\n tState.getTooltip().each(tooltip => {\n if (tooltip.getSystem().isConnected()) {\n Replacing.set(tooltip, specs);\n }\n });\n };\n const isEnabled = (_component, _tConfig, tState) => tState.isEnabled();\n const setEnabled = (_component, _tConfig, tState, enabled) => tState.setEnabled(enabled);\n const immediateOpenClose = (component, _tConfig, _tState, open) => emit(component, open ? ImmediateShowTooltipEvent : ImmediateHideTooltipEvent);\n\n var TooltippingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hideAllExclusive: hideAllExclusive,\n immediateOpenClose: immediateOpenClose,\n isEnabled: isEnabled,\n setComponents: setComponents,\n setEnabled: setEnabled\n });\n\n const events$8 = (tooltipConfig, state) => {\n const hide = comp => {\n state.getTooltip().each(p => {\n if (p.getSystem().isConnected()) {\n detach(p);\n tooltipConfig.onHide(comp, p);\n state.clearTooltip();\n }\n });\n state.clearTimer();\n };\n const show = comp => {\n if (!state.isShowing() && state.isEnabled()) {\n hideAllExclusive(comp);\n const sink = tooltipConfig.lazySink(comp).getOrDie();\n const popup = comp.getSystem().build({\n dom: tooltipConfig.tooltipDom,\n components: tooltipConfig.tooltipComponents,\n events: derive$2(tooltipConfig.mode === 'normal' ? [\n run$1(mouseover(), _ => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), _ => {\n emit(comp, HideTooltipEvent);\n })\n ] : []),\n behaviours: derive$1([Replacing.config({})])\n });\n state.setTooltip(popup);\n attach(sink, popup);\n tooltipConfig.onShow(comp, popup);\n Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) });\n }\n };\n const reposition = comp => {\n state.getTooltip().each(tooltip => {\n const sink = tooltipConfig.lazySink(comp).getOrDie();\n Positioning.position(sink, tooltip, { anchor: tooltipConfig.anchor(comp) });\n });\n };\n const getEvents = () => {\n switch (tooltipConfig.mode) {\n case 'normal':\n return [\n run$1(focusin(), comp => {\n emit(comp, ImmediateShowTooltipEvent);\n }),\n run$1(postBlur(), comp => {\n emit(comp, ImmediateHideTooltipEvent);\n }),\n run$1(mouseover(), comp => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ];\n case 'follow-highlight':\n return [\n run$1(highlight$1(), (comp, _se) => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(dehighlight$1(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ];\n case 'children-normal':\n return [\n run$1(focusin(), (comp, se) => {\n search(comp.element).each(_ => {\n if (is(se.event.target, '[data-mce-tooltip]')) {\n state.getTooltip().fold(() => {\n emit(comp, ImmediateShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n }\n });\n }),\n run$1(postBlur(), comp => {\n search(comp.element).fold(() => {\n emit(comp, ImmediateHideTooltipEvent);\n }, noop);\n }),\n run$1(mouseover(), comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').each(_ => {\n state.getTooltip().fold(() => {\n emit(comp, ShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n });\n }),\n run$1(mouseout(), comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').fold(() => {\n emit(comp, HideTooltipEvent);\n }, noop);\n })\n ];\n default:\n return [\n run$1(focusin(), (comp, se) => {\n search(comp.element).each(_ => {\n if (is(se.event.target, '[data-mce-tooltip]')) {\n state.getTooltip().fold(() => {\n emit(comp, ImmediateShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n }\n });\n }),\n run$1(postBlur(), comp => {\n search(comp.element).fold(() => {\n emit(comp, ImmediateHideTooltipEvent);\n }, noop);\n })\n ];\n }\n };\n return derive$2(flatten([\n [\n runOnInit(component => {\n tooltipConfig.onSetup(component);\n }),\n run$1(ShowTooltipEvent, comp => {\n state.resetTimer(() => {\n show(comp);\n }, tooltipConfig.delayForShow());\n }),\n run$1(HideTooltipEvent, comp => {\n state.resetTimer(() => {\n hide(comp);\n }, tooltipConfig.delayForHide());\n }),\n run$1(ImmediateShowTooltipEvent, comp => {\n state.resetTimer(() => {\n show(comp);\n }, 0);\n }),\n run$1(ImmediateHideTooltipEvent, comp => {\n state.resetTimer(() => {\n hide(comp);\n }, 0);\n }),\n run$1(receive(), (comp, message) => {\n const receivingData = message;\n if (!receivingData.universal) {\n if (contains$2(receivingData.channels, ExclusivityChannel)) {\n hide(comp);\n }\n }\n }),\n runOnDetached(comp => {\n hide(comp);\n })\n ],\n getEvents()\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\n });\n\n var TooltippingSchema = [\n required$1('lazySink'),\n required$1('tooltipDom'),\n defaulted('exclusive', true),\n defaulted('tooltipComponents', []),\n defaultedFunction('delayForShow', constant$1(300)),\n defaultedFunction('delayForHide', constant$1(100)),\n defaultedFunction('onSetup', noop),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight',\n 'children-keyboard-focus',\n 'children-normal'\n ]),\n defaulted('anchor', comp => ({\n type: 'hotspot',\n hotspot: comp,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n const init$a = () => {\n const enabled = Cell(true);\n const timer = value$4();\n const popup = value$4();\n const clearTimer = () => {\n timer.on(clearTimeout);\n };\n const resetTimer = (f, delay) => {\n clearTimer();\n timer.set(setTimeout(f, delay));\n };\n const readState = constant$1('not-implemented');\n return nu$7({\n getTooltip: popup.get,\n isShowing: popup.isSet,\n setTooltip: popup.set,\n clearTooltip: popup.clear,\n clearTimer,\n resetTimer,\n readState,\n isEnabled: () => enabled.get(),\n setEnabled: setToEnabled => enabled.set(setToEnabled)\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n const Tooltipping = create$4({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n /*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE */\n\n const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n } = Object;\n let {\n freeze,\n seal,\n create: create$1\n } = Object; // eslint-disable-line import/no-mutable-exports\n let {\n apply,\n construct\n } = typeof Reflect !== 'undefined' && Reflect;\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 (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const arraySplice = unapply(Array.prototype.splice);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\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 /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\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 /**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\n function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n /**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\n function cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n /**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\n function clone(object) {\n const newObject = create$1(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\n function lookupGetter(object, prop) {\n while (object !== null) {\n const 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() {\n return null;\n }\n return fallbackValue;\n }\n\n const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n const text$1 = freeze(['#text']);\n\n const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\n const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n });\n\n /* eslint-disable @typescript-eslint/indent */\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n const _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n };\n function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.2.4';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text$1]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create$1(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 /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\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 if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text$1);\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 /* Merge configuration parameters */\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, transformCaseFunc);\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, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\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, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\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 // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\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 /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(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)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n 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))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n const initValue = value;\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Remove attribute */\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const 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 /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\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 = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\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 /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const 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 arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n\n const sanitizeHtmlString = html => purify().sanitize(html);\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n const rtlTransform = {\n 'indent': true,\n 'outdent': true,\n 'table-insert-column-after': true,\n 'table-insert-column-before': true,\n 'paste-column-after': true,\n 'paste-column-before': true,\n 'unordered-list': true,\n 'list-bull-circle': true,\n 'list-bull-default': true,\n 'list-bull-square': true\n };\n const defaultIconName = 'temporary-placeholder';\n const defaultIcon = icons => () => get$h(icons, defaultIconName).getOr('!not found!');\n const getIconName = (name, icons) => {\n const lcName = name.toLowerCase();\n if (global$5.isRtl()) {\n const rtlName = ensureTrailing(lcName, '-rtl');\n return has$2(icons, rtlName) ? rtlName : lcName;\n } else {\n return lcName;\n }\n };\n const lookupIcon = (name, icons) => get$h(icons, getIconName(name, icons));\n const get$3 = (name, iconProvider) => {\n const icons = iconProvider();\n return lookupIcon(name, icons).getOrThunk(defaultIcon(icons));\n };\n const getOr = (name, iconProvider, fallbackIcon) => {\n const icons = iconProvider();\n return lookupIcon(name, icons).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n };\n const needsRtlTransform = iconName => global$5.isRtl() ? has$2(rtlTransform, iconName) : false;\n const addFocusableBehaviour = () => config('add-focusable', [runOnAttached(comp => {\n child(comp.element, 'svg').each(svg => set$9(svg, 'focusable', 'false'));\n })]);\n const renderIcon$3 = (spec, iconName, icons, fallbackIcon) => {\n var _a, _b;\n const rtlIconClasses = needsRtlTransform(iconName) ? ['tox-icon--flip'] : [];\n const iconHtml = get$h(icons, getIconName(iconName, icons)).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n return {\n dom: {\n tag: spec.tag,\n attributes: (_a = spec.attributes) !== null && _a !== void 0 ? _a : {},\n classes: spec.classes.concat(rtlIconClasses),\n innerHtml: iconHtml\n },\n behaviours: derive$1([\n ...(_b = spec.behaviours) !== null && _b !== void 0 ? _b : [],\n addFocusableBehaviour()\n ])\n };\n };\n const render$3 = (iconName, spec, iconProvider, fallbackIcon = Optional.none()) => renderIcon$3(spec, iconName, iconProvider(), fallbackIcon);\n const renderFirst = (iconNames, spec, iconProvider) => {\n const icons = iconProvider();\n const iconName = find$5(iconNames, name => has$2(icons, getIconName(name, icons)));\n return renderIcon$3(spec, iconName.getOr(defaultIconName), icons, Optional.none());\n };\n\n const notificationIconMap = {\n success: 'checkmark',\n error: 'warning',\n err: 'error',\n warning: 'warning',\n warn: 'warning',\n info: 'info'\n };\n const factory$m = detail => {\n const notificationTextId = generate$6('notification-text');\n const memBannerText = record({\n dom: fromHtml(`

    ${ sanitizeHtmlString(detail.backstageProvider.translate(detail.text)) }

    `),\n behaviours: derive$1([Replacing.config({})])\n });\n const renderPercentBar = percent => ({\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n styles: { width: `${ percent }%` }\n }\n });\n const renderPercentText = percent => ({\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: `${ percent }%`\n }\n });\n const memBannerProgress = record({\n dom: {\n tag: 'div',\n classes: detail.progress ? [\n 'tox-progress-bar',\n 'tox-progress-indicator'\n ] : ['tox-progress-bar']\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(0)]\n },\n renderPercentText(0)\n ],\n behaviours: derive$1([Replacing.config({})])\n });\n const updateProgress = (comp, percent) => {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(progress => {\n Replacing.set(progress, [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(percent)]\n },\n renderPercentText(percent)\n ]);\n });\n }\n };\n const updateText = (comp, text) => {\n if (comp.getSystem().isConnected()) {\n const banner = memBannerText.get(comp);\n Replacing.set(banner, [text$2(text)]);\n }\n };\n const apis = {\n updateProgress,\n updateText\n };\n const iconChoices = flatten([\n detail.icon.toArray(),\n [detail.level],\n Optional.from(notificationIconMap[detail.level]).toArray()\n ]);\n const memButton = record(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-notification__dismiss',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: { 'aria-label': detail.backstageProvider.translate('Close') }\n },\n components: [render$3('close', {\n tag: 'span',\n classes: ['tox-icon']\n }, detail.iconProvider)],\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n Tooltipping.config({ ...detail.backstageProvider.tooltips.getConfig({ tooltipText: detail.backstageProvider.translate('Close') }) })\n ]),\n action: comp => {\n detail.onAction(comp);\n }\n }));\n const notificationIconSpec = renderFirst(iconChoices, {\n tag: 'div',\n classes: ['tox-notification__icon']\n }, detail.iconProvider);\n const notificationBodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n };\n const components = [\n notificationIconSpec,\n notificationBodySpec\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: {\n 'role': 'alert',\n 'aria-labelledby': notificationTextId\n },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ detail.level }`\n ]\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEscape: comp => {\n detail.onAction(comp);\n return Optional.some(true);\n }\n })\n ]),\n components: components.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat([memButton.asSpec()]),\n apis\n };\n };\n const Notification = single({\n name: 'Notification',\n factory: factory$m,\n configFields: [\n defaultedStringEnum('level', 'info', [\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ]),\n required$1('progress'),\n option$3('icon'),\n required$1('onAction'),\n required$1('text'),\n required$1('iconProvider'),\n required$1('backstageProvider')\n ],\n apis: {\n updateProgress: (apis, comp, percent) => {\n apis.updateProgress(comp, percent);\n },\n updateText: (apis, comp, text) => {\n apis.updateText(comp, text);\n }\n }\n });\n\n var NotificationManagerImpl = (editor, extras, uiMothership, notificationRegion) => {\n const sharedBackstage = extras.backstage.shared;\n const getBoundsContainer = () => SugarElement.fromDom(editor.queryCommandValue('ToggleView') === '' ? editor.getContentAreaContainer() : editor.getContainer());\n const getBounds = () => {\n const contentArea = box$1(getBoundsContainer());\n return Optional.some(contentArea);\n };\n const clampComponentsToBounds = components => {\n getBounds().each(bounds => {\n each$1(components, comp => {\n remove$7(comp.element, 'width');\n if (get$d(comp.element) > bounds.width) {\n set$8(comp.element, 'width', bounds.width + 'px');\n }\n });\n });\n };\n const open = (settings, closeCallback, isEditorOrUIFocused) => {\n const close = () => {\n const removeNotificationAndReposition = region => {\n Replacing.remove(region, notification);\n reposition();\n };\n const manageRegionVisibility = (region, editorOrUiFocused) => {\n if (children(region.element).length === 0) {\n handleEmptyRegion(region, editorOrUiFocused);\n } else {\n handleRegionWithChildren(region, editorOrUiFocused);\n }\n };\n const handleEmptyRegion = (region, editorOrUIFocused) => {\n InlineView.hide(region);\n notificationRegion.clear();\n if (editorOrUIFocused) {\n editor.focus();\n }\n };\n const handleRegionWithChildren = (region, editorOrUIFocused) => {\n if (editorOrUIFocused) {\n Keying.focusIn(region);\n }\n };\n notificationRegion.on(region => {\n closeCallback();\n const editorOrUIFocused = isEditorOrUIFocused();\n removeNotificationAndReposition(region);\n manageRegionVisibility(region, editorOrUIFocused);\n });\n };\n const shouldApplyDocking = () => !isStickyToolbar(editor) || !sharedBackstage.header.isPositionedAtTop();\n const notification = build$1(Notification.sketch({\n text: settings.text,\n level: contains$2([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: settings.icon,\n onAction: close,\n iconProvider: sharedBackstage.providers.icons,\n backstageProvider: sharedBackstage.providers\n }));\n if (!notificationRegion.isSet()) {\n const notificationWrapper = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container'],\n attributes: {\n 'aria-label': 'Notifications',\n 'role': 'region'\n }\n },\n lazySink: sharedBackstage.getSink,\n fireDismissalEventInstead: {},\n ...sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n selector: '.tox-notification, .tox-notification a, .tox-notification button'\n }),\n Replacing.config({}),\n ...shouldApplyDocking() ? [Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(getBoundsContainer())),\n fadeInClass: 'tox-notification-container-dock-fadein',\n fadeOutClass: 'tox-notification-container-dock-fadeout',\n transitionClass: 'tox-notification-container-dock-transition'\n },\n modes: ['top'],\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.map(sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n }).getOrThunk(() => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n }));\n }\n })] : []\n ])\n }));\n const notificationSpec = premade(notification);\n const anchorOverrides = { maxHeightFunction: expandable$1() };\n const anchor = {\n ...sharedBackstage.anchors.banner(),\n overrides: anchorOverrides\n };\n notificationRegion.set(notificationWrapper);\n uiMothership.add(notificationWrapper);\n InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor }, getBounds);\n } else {\n const notificationSpec = premade(notification);\n notificationRegion.on(notificationWrapper => {\n Replacing.append(notificationWrapper, notificationSpec);\n InlineView.reposition(notificationWrapper);\n if (notification.hasConfigured(Docking)) {\n Docking.refresh(notificationWrapper);\n }\n clampComponentsToBounds(notificationWrapper.components());\n });\n }\n if (isNumber(settings.timeout) && settings.timeout > 0) {\n global$9.setEditorTimeout(editor, () => {\n close();\n }, settings.timeout);\n }\n const reposition = () => {\n notificationRegion.on(region => {\n InlineView.reposition(region);\n if (region.hasConfigured(Docking)) {\n Docking.refresh(region);\n }\n clampComponentsToBounds(region.components());\n });\n };\n const thisNotification = {\n close,\n reposition,\n text: nuText => {\n Notification.updateText(notification, nuText);\n },\n settings,\n getEl: () => notification.element.dom,\n progressBar: {\n value: percent => {\n Notification.updateProgress(notification, percent);\n }\n }\n };\n return thisNotification;\n };\n const close = notification => {\n notification.close();\n };\n const getArgs = notification => {\n return notification.settings;\n };\n return {\n open,\n close,\n getArgs\n };\n };\n\n const setup$e = (api, editor) => {\n const redirectKeyToItem = (item, e) => {\n emitWith(item, keydown(), { raw: e });\n };\n const getItem = () => api.getMenu().bind(Highlighting.getHighlighted);\n editor.on('keydown', e => {\n const keyCode = e.which;\n if (!api.isActive()) {\n return;\n }\n if (api.isMenuOpen()) {\n if (keyCode === 13) {\n getItem().each(emitExecute);\n e.preventDefault();\n } else if (keyCode === 40) {\n getItem().fold(() => {\n api.getMenu().each(Highlighting.highlightFirst);\n }, item => {\n redirectKeyToItem(item, e);\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n } else if (keyCode === 37 || keyCode === 38 || keyCode === 39) {\n getItem().each(item => {\n redirectKeyToItem(item, e);\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n }\n } else {\n if (keyCode === 13 || keyCode === 38 || keyCode === 40) {\n api.cancelIfNecessary();\n }\n }\n });\n editor.on('NodeChange', () => {\n if (api.isActive() && !api.isProcessingAction() && !editor.queryCommandState('mceAutoCompleterInRange')) {\n api.cancelIfNecessary();\n }\n });\n };\n const AutocompleterEditorEvents = { setup: setup$e };\n\n var ItemResponse;\n (function (ItemResponse) {\n ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';\n ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';\n }(ItemResponse || (ItemResponse = {})));\n var ItemResponse$1 = ItemResponse;\n\n const navClass = 'tox-menu-nav__js';\n const selectableClass = 'tox-collection__item';\n const colorClass = 'tox-swatch';\n const presetClasses = {\n normal: navClass,\n color: colorClass\n };\n const tickedClass = 'tox-collection__item--enabled';\n const groupHeadingClass = 'tox-collection__group-heading';\n const iconClass = 'tox-collection__item-icon';\n const textClass = 'tox-collection__item-label';\n const accessoryClass = 'tox-collection__item-accessory';\n const caretClass = 'tox-collection__item-caret';\n const checkmarkClass = 'tox-collection__item-checkmark';\n const activeClass = 'tox-collection__item--active';\n const containerClass = 'tox-collection__item-container';\n const containerColumnClass = 'tox-collection__item-container--column';\n const containerRowClass = 'tox-collection__item-container--row';\n const containerAlignRightClass = 'tox-collection__item-container--align-right';\n const containerAlignLeftClass = 'tox-collection__item-container--align-left';\n const containerValignTopClass = 'tox-collection__item-container--valign-top';\n const containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n const containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n const classForPreset = presets => get$h(presetClasses, presets).getOr(navClass);\n\n const forMenu = presets => {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n const classes = presets => ({\n backgroundMenu: 'tox-background-menu',\n selectedMenu: 'tox-selected-menu',\n selectedItem: 'tox-collection__item--active',\n hasIcons: 'tox-menu--has-icons',\n menu: forMenu(presets),\n tieredMenu: 'tox-tiered-menu'\n });\n\n const markers = presets => {\n const menuClasses = classes(presets);\n return {\n backgroundMenu: menuClasses.backgroundMenu,\n selectedMenu: menuClasses.selectedMenu,\n menu: menuClasses.menu,\n selectedItem: menuClasses.selectedItem,\n item: classForPreset(presets)\n };\n };\n const dom$1 = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n return {\n tag: 'div',\n classes: flatten([\n [\n menuClasses.menu,\n `tox-menu-${ columns }-column`\n ],\n hasIcons ? [menuClasses.hasIcons] : []\n ])\n };\n };\n const components = [Menu.parts.items({})];\n const part = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n const d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers(presets)\n };\n };\n\n const schema$l = constant$1([\n defaultedString('type', 'text'),\n option$3('data'),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('tag', 'input'),\n defaulted('inputClasses', []),\n onHandler('onSetValue'),\n defaultedFunction('fromInputValue', identity),\n defaultedFunction('toInputValue', identity),\n defaulted('styles', {}),\n defaulted('eventOrder', {}),\n field('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted('selectOnFocus', true)\n ]);\n const focusBehaviours = detail => derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : component => {\n const input = component.element;\n const value = get$7(input);\n if (detail.type !== 'range') {\n input.dom.setSelectionRange(0, value.length);\n }\n }\n })]);\n const behaviours = detail => ({\n ...focusBehaviours(detail),\n ...augment(detail.inputBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n ...detail.data.map(data => ({ initialValue: data })).getOr({}),\n getValue: input => {\n return detail.fromInputValue(get$7(input.element));\n },\n setValue: (input, data) => {\n const current = get$7(input.element);\n if (current !== data) {\n set$5(input.element, detail.toInputValue(data));\n }\n }\n },\n onSetValue: detail.onSetValue\n })])\n });\n const dom = detail => ({\n tag: detail.tag,\n attributes: {\n type: detail.type,\n ...detail.inputAttributes\n },\n styles: detail.inputStyles,\n classes: detail.inputClasses\n });\n\n const factory$l = (detail, _spec) => ({\n uid: detail.uid,\n dom: dom(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n });\n const Input = single({\n name: 'Input',\n configFields: schema$l(),\n factory: factory$l\n });\n\n const refetchTriggerEvent = generate$6('refetch-trigger-event');\n const redirectMenuItemInteractionEvent = generate$6('redirect-menu-item-interaction');\n\n const menuSearcherClass = 'tox-menu__searcher';\n const findWithinSandbox = sandboxComp => {\n return descendant(sandboxComp.element, `.${ menuSearcherClass }`).bind(inputElem => sandboxComp.getSystem().getByDom(inputElem).toOptional());\n };\n const findWithinMenu = findWithinSandbox;\n const restoreState = (inputComp, searcherState) => {\n Representing.setValue(inputComp, searcherState.fetchPattern);\n inputComp.element.dom.selectionStart = searcherState.selectionStart;\n inputComp.element.dom.selectionEnd = searcherState.selectionEnd;\n };\n const saveState = inputComp => {\n const fetchPattern = Representing.getValue(inputComp);\n const selectionStart = inputComp.element.dom.selectionStart;\n const selectionEnd = inputComp.element.dom.selectionEnd;\n return {\n fetchPattern,\n selectionStart,\n selectionEnd\n };\n };\n const setActiveDescendant = (inputComp, active) => {\n getOpt(active.element, 'id').each(id => set$9(inputComp.element, 'aria-activedescendant', id));\n };\n const renderMenuSearcher = spec => {\n const handleByBrowser = (comp, se) => {\n se.cut();\n return Optional.none();\n };\n const handleByHighlightedItem = (comp, se) => {\n const eventData = {\n interactionEvent: se.event,\n eventType: se.event.raw.type\n };\n emitWith(comp, redirectMenuItemInteractionEvent, eventData);\n return Optional.some(true);\n };\n const customSearcherEventsName = 'searcher-events';\n return {\n dom: {\n tag: 'div',\n classes: [selectableClass]\n },\n components: [Input.sketch({\n inputClasses: [\n menuSearcherClass,\n 'tox-textfield'\n ],\n inputAttributes: {\n ...spec.placeholder.map(placeholder => ({ placeholder: spec.i18n(placeholder) })).getOr({}),\n 'type': 'search',\n 'aria-autocomplete': 'list'\n },\n inputBehaviours: derive$1([\n config(customSearcherEventsName, [\n run$1(input(), inputComp => {\n emit(inputComp, refetchTriggerEvent);\n }),\n run$1(keydown(), (inputComp, se) => {\n if (se.event.raw.key === 'Escape') {\n se.stop();\n }\n })\n ]),\n Keying.config({\n mode: 'special',\n onLeft: handleByBrowser,\n onRight: handleByBrowser,\n onSpace: handleByBrowser,\n onEnter: handleByHighlightedItem,\n onEscape: handleByHighlightedItem,\n onUp: handleByHighlightedItem,\n onDown: handleByHighlightedItem\n })\n ]),\n eventOrder: {\n keydown: [\n customSearcherEventsName,\n Keying.name()\n ]\n }\n })]\n };\n };\n\n const searchResultsClass = 'tox-collection--results__js';\n const augmentWithAria = item => {\n var _a;\n if (item.dom) {\n return {\n ...item,\n dom: {\n ...item.dom,\n attributes: {\n ...(_a = item.dom.attributes) !== null && _a !== void 0 ? _a : {},\n 'id': generate$6('aria-item-search-result-id'),\n 'aria-selected': 'false'\n }\n }\n };\n } else {\n return item;\n }\n };\n\n const chunk = (rowDom, numColumns) => items => {\n const chunks = chunk$1(items, numColumns);\n return map$2(chunks, c => ({\n dom: rowDom,\n components: c\n }));\n };\n const forSwatch = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-swatches-menu'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-swatches']\n },\n components: [Menu.parts.items({\n preprocess: columns !== 'auto' ? chunk({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity\n })]\n }]\n });\n const forToolbar = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n 'tox-collection--toolbar',\n 'tox-collection--toolbar-lg'\n ]\n },\n components: [Menu.parts.items({\n preprocess: chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)\n })]\n });\n const preprocessCollection = (items, isSeparator) => {\n const allSplits = [];\n let currentSplit = [];\n each$1(items, (item, i) => {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has$2(item.dom, 'innerHtml') || item.components && item.components.length > 0) {\n currentSplit.push(item);\n }\n } else {\n currentSplit.push(item);\n }\n });\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n return map$2(allSplits, s => ({\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n }));\n };\n const insertItemsPlaceholder = (columns, initItems, onItem) => {\n return Menu.parts.items({\n preprocess: rawItems => {\n const enrichedItems = map$2(rawItems, onItem);\n if (columns !== 'auto' && columns > 1) {\n return chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(enrichedItems);\n } else {\n return preprocessCollection(enrichedItems, (_item, i) => initItems[i].type === 'separator');\n }\n }\n });\n };\n const forCollection = (columns, initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [insertItemsPlaceholder(columns, initItems, identity)]\n });\n const forCollectionWithSearchResults = (columns, initItems, _hasIcons = true) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n searchResultsClass\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']),\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n };\n };\n const forCollectionWithSearchField = (columns, initItems, searchField) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [\n renderMenuSearcher({\n i18n: global$5.translate,\n placeholder: searchField.placeholder\n }),\n {\n dom: {\n tag: 'div',\n classes: [\n ...columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'],\n searchResultsClass\n ],\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n }\n ]\n };\n };\n const forHorizontalCollection = (initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts.items({ preprocess: items => preprocessCollection(items, (_item, i) => initItems[i].type === 'separator') })]\n });\n\n const menuHasIcons = xs => exists(xs, item => 'icon' in item && item.icon !== undefined);\n const handleError = error => {\n console.error(formatError(error));\n console.log(error);\n return Optional.none();\n };\n const createHorizontalPartialMenuWithAlloyItems = (value, _hasIcons, items, _columns, _menuLayout) => {\n const structure = forHorizontalCollection(items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n };\n const createPartialMenuWithAlloyItems = (value, hasIcons, items, columns, menuLayout) => {\n const getNormalStructure = () => {\n if (menuLayout.menuType !== 'searchable') {\n return forCollection(columns, items);\n } else {\n return menuLayout.searchMode.searchMode === 'search-with-field' ? forCollectionWithSearchField(columns, items, menuLayout.searchMode) : forCollectionWithSearchResults(columns, items);\n }\n };\n if (menuLayout.menuType === 'color') {\n const structure = forSwatch(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' && columns === 'auto') {\n const structure = forCollection(columns, items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' || menuLayout.menuType === 'searchable') {\n const structure = getNormalStructure();\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'listpreview' && columns !== 'auto') {\n const structure = forToolbar(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else {\n return {\n value,\n dom: dom$1(hasIcons, columns, menuLayout.menuType),\n components: components,\n items\n };\n }\n };\n\n const type = requiredString('type');\n const name$1 = requiredString('name');\n const label = requiredString('label');\n const text = requiredString('text');\n const title = requiredString('title');\n const icon = requiredString('icon');\n const value$1 = requiredString('value');\n const fetch$1 = requiredFunction('fetch');\n const getSubmenuItems = requiredFunction('getSubmenuItems');\n const onAction = requiredFunction('onAction');\n const onItemAction = requiredFunction('onItemAction');\n const onSetup = defaultedFunction('onSetup', () => noop);\n const optionalName = optionString('name');\n const optionalText = optionString('text');\n const optionalRole = optionString('role');\n const optionalIcon = optionString('icon');\n const optionalTooltip = optionString('tooltip');\n const optionalLabel = optionString('label');\n const optionalShortcut = optionString('shortcut');\n const optionalSelect = optionFunction('select');\n const active = defaultedBoolean('active', false);\n const borderless = defaultedBoolean('borderless', false);\n const enabled = defaultedBoolean('enabled', true);\n const primary = defaultedBoolean('primary', false);\n const defaultedColumns = num => defaulted('columns', num);\n const defaultedMeta = defaulted('meta', {});\n const defaultedOnAction = defaultedFunction('onAction', noop);\n const defaultedType = type => defaultedString('type', type);\n const generatedName = namePrefix => field$1('name', 'name', defaultedThunk(() => generate$6(`${ namePrefix }-name`)), string);\n const generatedValue = valuePrefix => field$1('value', 'value', defaultedThunk(() => generate$6(`${ valuePrefix }-value`)), anyValue());\n\n const separatorMenuItemSchema = objOf([\n type,\n optionalText\n ]);\n const createSeparatorMenuItem = spec => asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n\n const autocompleterItemSchema = objOf([\n defaultedType('autocompleteitem'),\n active,\n enabled,\n defaultedMeta,\n value$1,\n optionalText,\n optionalIcon\n ]);\n const createSeparatorItem = spec => asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n const createAutocompleterItem = spec => asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup,\n defaultedString('context', 'mode:design')\n ];\n const toolbarButtonSchema = objOf([\n type,\n onAction,\n optionalShortcut\n ].concat(baseToolbarButtonFields));\n const createToolbarButton = spec => asRaw('toolbarbutton', toolbarButtonSchema, spec);\n\n const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n const toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n type,\n onAction,\n optionalShortcut\n ]));\n const createToggleButton = spec => asRaw('ToggleButton', toggleButtonSchema, spec);\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 defaultedString('align', 'end'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n defaultedString('align', 'end'),\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$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n const baseContextFormFields = [\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n })),\n defaultedFunction('onInput', noop),\n defaultedFunction('onSetup', noop)\n ];\n const contextFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextform']),\n defaultedFunction('initValue', constant$1('')),\n optionString('placeholder')\n ];\n const contextSliderFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsliderform']),\n defaultedFunction('initValue', constant$1(0)),\n defaultedFunction('min', constant$1(0)),\n defaultedFunction('max', constant$1(100))\n ];\n const contextSizeInputFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsizeinputform']),\n defaultedFunction('initValue', constant$1({\n width: '',\n height: ''\n }))\n ];\n const contextFormSchema = choose$1('type', {\n contextform: contextFormFields,\n contextsliderform: contextSliderFormFields,\n contextsizeinputform: contextSizeInputFormFields\n });\n const createContextForm = spec => asRaw('ContextForm', contextFormSchema, spec);\n\n const contextToolbarSchema = objOf([\n defaultedType('contexttoolbar'),\n requiredOf('items', oneOf([\n string,\n arrOfObj([\n optionString('name'),\n optionString('label'),\n requiredArrayOf('items', string)\n ])\n ]))\n ].concat(contextBarFields));\n const toolbarGroupBackToSpec = toolbarGroup => ({\n name: toolbarGroup.name.getOrUndefined(),\n label: toolbarGroup.label.getOrUndefined(),\n items: toolbarGroup.items\n });\n const contextToolbarToSpec = contextToolbar => ({\n ...contextToolbar,\n items: isString(contextToolbar.items) ? contextToolbar.items : map$2(contextToolbar.items, toolbarGroupBackToSpec)\n });\n const createContextToolbar = spec => asRaw('ContextToolbar', contextToolbarSchema, spec);\n\n const cardImageFields = [\n type,\n requiredString('src'),\n optionString('alt'),\n defaultedArrayOf('classes', [], string)\n ];\n const cardImageSchema = objOf(cardImageFields);\n\n const cardTextFields = [\n type,\n text,\n optionalName,\n defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n ];\n const cardTextSchema = objOf(cardTextFields);\n\n const itemSchema$1 = valueThunk(() => choose$2('type', {\n cardimage: cardImageSchema,\n cardtext: cardTextSchema,\n cardcontainer: cardContainerSchema\n }));\n const cardContainerSchema = objOf([\n type,\n defaultedString('direction', 'horizontal'),\n defaultedString('align', 'left'),\n defaultedString('valign', 'middle'),\n requiredArrayOf('items', itemSchema$1)\n ]);\n\n const commonMenuItemFields = [\n enabled,\n optionalText,\n optionalRole,\n optionalShortcut,\n generatedValue('menuitem'),\n defaultedMeta,\n defaultedString('context', 'mode:design')\n ];\n\n const cardMenuItemSchema = objOf([\n type,\n optionalLabel,\n requiredArrayOf('items', itemSchema$1),\n onSetup,\n defaultedOnAction\n ].concat(commonMenuItemFields));\n const createCardMenuItem = spec => asRaw('cardmenuitem', cardMenuItemSchema, spec);\n\n const choiceMenuItemSchema = objOf([\n type,\n active,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createChoiceMenuItem = spec => asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n\n const baseFields = [\n type,\n requiredString('fancytype'),\n defaultedOnAction\n ];\n const insertTableFields = [defaulted('initData', {})].concat(baseFields);\n const colorSwatchFields = [\n optionFunction('select'),\n defaultedObjOf('initData', {}, [\n defaultedBoolean('allowCustomColors', true),\n defaultedString('storageKey', 'default'),\n optionArrayOf('colors', anyValue())\n ])\n ].concat(baseFields);\n const fancyMenuItemSchema = choose$1('fancytype', {\n inserttable: insertTableFields,\n colorswatch: colorSwatchFields\n });\n const createFancyMenuItem = spec => asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n\n const menuItemSchema = objOf([\n type,\n onSetup,\n defaultedOnAction,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createMenuItem = spec => asRaw('menuitem', menuItemSchema, spec);\n\n const nestedMenuItemSchema = objOf([\n type,\n getSubmenuItems,\n onSetup,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createNestedMenuItem = spec => asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n\n const toggleMenuItemSchema = objOf([\n type,\n optionalIcon,\n active,\n onSetup,\n onAction\n ].concat(commonMenuItemFields));\n const createToggleMenuItem = spec => asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n\n const detectSize = (comp, margin, selectorClass) => {\n const descendants$1 = descendants(comp.element, '.' + selectorClass);\n if (descendants$1.length > 0) {\n const columnLength = findIndex$1(descendants$1, c => {\n const thisTop = c.dom.getBoundingClientRect().top;\n const cTop = descendants$1[0].dom.getBoundingClientRect().top;\n return Math.abs(thisTop - cTop) > margin;\n }).getOr(descendants$1.length);\n return Optional.some({\n numColumns: columnLength,\n numRows: Math.ceil(descendants$1.length / columnLength)\n });\n } else {\n return Optional.none();\n }\n };\n\n const namedEvents = (name, handlers) => derive$1([config(name, handlers)]);\n const unnamedEvents = handlers => namedEvents(generate$6('unnamed-events'), handlers);\n const SimpleBehaviours = {\n namedEvents,\n unnamedEvents\n };\n\n const escape = text => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const item = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n const button = disabled => Disabling.config({ disabled });\n const splitButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n const toolbarButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n const DisablingConfigs = {\n item,\n button,\n splitButton,\n toolbarButton\n };\n\n const runWithApi = (info, comp) => {\n const api = info.getApi(comp);\n return f => {\n f(api);\n };\n };\n const onControlAttached = (info, editorOffCell) => runOnAttached(comp => {\n if (isFunction(info.onBeforeSetup)) {\n info.onBeforeSetup(comp);\n }\n const run = runWithApi(info, comp);\n run(api => {\n const onDestroy = info.onSetup(api);\n if (isFunction(onDestroy)) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n const onControlDetached = (getApi, editorOffCell) => runOnDetached(comp => runWithApi(getApi, comp)(editorOffCell.get()));\n const onContextFormControlDetached = (getApi, editorOffCell, valueState) => runOnDetached(comp => {\n valueState.set(Representing.getValue(comp));\n return runWithApi(getApi, comp)(editorOffCell.get());\n });\n\n const UiStateChannel = 'silver.uistate';\n const messageSetDisabled = 'setDisabled';\n const messageSetEnabled = 'setEnabled';\n const messageInit = 'init';\n const messageSwitchMode = 'switchmode';\n const modeContextMessages = [\n messageSwitchMode,\n messageInit\n ];\n const broadcastEvents = (uiRefs, messageType) => {\n const outerContainer = uiRefs.mainUi.outerContainer;\n const motherships = [\n uiRefs.mainUi.mothership,\n ...uiRefs.uiMotherships\n ];\n if (messageType === messageSetDisabled) {\n each$1(motherships, m => {\n m.broadcastOn([dismissPopups()], { target: outerContainer.element });\n });\n }\n each$1(motherships, m => {\n m.broadcastOn([UiStateChannel], messageType);\n });\n };\n const setupEventsForUi = (editor, uiRefs) => {\n editor.on('init SwitchMode', event => {\n broadcastEvents(uiRefs, event.type);\n });\n editor.on('DisabledStateChange', event => {\n if (!event.isDefaultPrevented()) {\n const messageType = event.state ? messageSetDisabled : messageInit;\n broadcastEvents(uiRefs, messageType);\n if (!event.state) {\n editor.nodeChanged();\n }\n }\n });\n editor.on('NodeChange', e => {\n const messageType = editor.ui.isEnabled() ? e.type : messageSetDisabled;\n broadcastEvents(uiRefs, messageType);\n });\n if (isReadOnly(editor)) {\n editor.mode.set('readonly');\n }\n };\n const toggleOnReceive = getContext => Receiving.config({\n channels: {\n [UiStateChannel]: {\n onReceive: (comp, messageType) => {\n if (messageType === messageSetDisabled || messageType === messageSetEnabled) {\n Disabling.set(comp, messageType === messageSetDisabled);\n return;\n }\n const {contextType, shouldDisable} = getContext();\n if (contextType === 'mode' && !contains$2(modeContextMessages, messageType)) {\n return;\n }\n Disabling.set(comp, shouldDisable);\n }\n }\n }\n });\n\n const onMenuItemExecute = (info, itemResponse) => runOnExecute$1((comp, simulatedEvent) => {\n runWithApi(info, comp)(info.onAction);\n if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n if (comp.getSystem().isConnected()) {\n emit(comp, sandboxClose());\n }\n simulatedEvent.stop();\n }\n });\n const menuItemEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ]\n };\n\n const componentRenderPipeline = cat;\n const renderCommonItem = (spec, structure, itemResponse, providersBackstage) => {\n const editorOffCell = Cell(noop);\n return {\n type: 'item',\n dom: structure.dom,\n components: componentRenderPipeline(structure.optComponents),\n data: spec.data,\n eventOrder: menuItemEventOrder,\n hasSubmenu: spec.triggersSubmenu,\n itemBehaviours: derive$1([\n config('item-events', [\n onMenuItemExecute(spec, itemResponse),\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n const buildData = source => ({\n value: source.value,\n meta: {\n text: source.text.getOr(''),\n ...source.meta\n }\n });\n\n const convertText = source => {\n const isMac = global$6.os.isMacOS() || global$6.os.isiOS();\n const mac = {\n alt: '\\u2325',\n ctrl: '\\u2303',\n shift: '\\u21E7',\n meta: '\\u2318',\n access: '\\u2303\\u2325'\n };\n const other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n const replace = isMac ? mac : other;\n const shortcut = source.split('+');\n const updated = map$2(shortcut, segment => {\n const search = segment.toLowerCase().trim();\n return has$2(replace, search) ? replace[search] : segment;\n });\n return isMac ? updated.join('') : updated.join('+');\n };\n\n const renderIcon$2 = (name, icons, classes = [iconClass]) => render$3(name, {\n tag: 'div',\n classes\n }, icons);\n const renderText = text => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text$2(global$5.translate(text))]\n });\n const renderHtml = (html, classes) => ({\n dom: {\n tag: 'div',\n classes,\n innerHtml: html\n }\n });\n const renderStyledText = (style, text) => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [{\n dom: {\n tag: style.tag,\n styles: style.styles\n },\n components: [text$2(global$5.translate(text))]\n }]\n });\n const renderShortcut = shortcut => ({\n dom: {\n tag: 'div',\n classes: [accessoryClass]\n },\n components: [text$2(convertText(shortcut))]\n });\n const renderCheckmark = icons => renderIcon$2('checkmark', icons, [checkmarkClass]);\n const renderSubmenuCaret = icons => renderIcon$2('chevron-right', icons, [caretClass]);\n const renderDownwardsCaret = icons => renderIcon$2('chevron-down', icons, [caretClass]);\n const renderContainer = (container, components) => {\n const directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n const alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n const getValignClass = () => {\n switch (container.valign) {\n case 'top':\n return containerValignTopClass;\n case 'middle':\n return containerValignMiddleClass;\n case 'bottom':\n return containerValignBottomClass;\n }\n };\n return {\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n directionClass,\n alignClass,\n getValignClass()\n ]\n },\n components\n };\n };\n const renderImage = (src, classes, alt) => ({\n dom: {\n tag: 'img',\n classes,\n attributes: {\n src,\n alt: alt.getOr('')\n }\n }\n });\n\n const renderColorStructure = (item, providerBackstage, fallbackIcon) => {\n const colorPickerCommand = 'custom';\n const removeColorCommand = 'remove';\n const itemValue = item.value;\n const iconSvg = item.iconContent.map(name => getOr(name, providerBackstage.icons, fallbackIcon));\n const attributes = item.ariaLabel.map(al => ({\n 'aria-label': providerBackstage.translate(al),\n 'data-mce-name': al\n })).getOr({});\n const getDom = () => {\n const common = colorClass;\n const icon = iconSvg.getOr('');\n const baseDom = {\n tag: 'div',\n attributes,\n classes: [common]\n };\n if (itemValue === colorPickerCommand) {\n return {\n ...baseDom,\n tag: 'button',\n classes: [\n ...baseDom.classes,\n 'tox-swatches__picker-btn'\n ],\n innerHtml: icon\n };\n } else if (itemValue === removeColorCommand) {\n return {\n ...baseDom,\n classes: [\n ...baseDom.classes,\n 'tox-swatch--remove'\n ],\n innerHtml: icon\n };\n } else if (isNonNullable(itemValue)) {\n return {\n ...baseDom,\n attributes: {\n ...baseDom.attributes,\n 'data-mce-color': itemValue\n },\n styles: { 'background-color': itemValue },\n innerHtml: icon\n };\n } else {\n return baseDom;\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n const renderItemDomStructure = ariaLabel => {\n const domTitle = ariaLabel.map(label => ({\n attributes: {\n 'id': generate$6('menu-item'),\n 'aria-label': global$5.translate(label)\n }\n })).getOr({});\n return {\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ],\n ...domTitle\n };\n };\n const renderNormalItemStructure = (info, providersBackstage, renderIcons, fallbackIcon) => {\n const iconSpec = {\n tag: 'div',\n classes: [iconClass]\n };\n const renderIcon = iconName => render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n const renderEmptyIcon = () => Optional.some({ dom: iconSpec });\n const leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none();\n const checkmark = info.checkMark;\n const textRender = Optional.from(info.meta).fold(() => renderText, meta => has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText);\n const content = info.htmlContent.fold(() => info.textContent.map(textRender), html => Optional.some(renderHtml(html, [textClass])));\n const menuItem = {\n dom: renderItemDomStructure(info.ariaLabel),\n optComponents: [\n leftIcon,\n content,\n info.shortcutContent.map(renderShortcut),\n checkmark,\n info.caret\n ]\n };\n return menuItem;\n };\n const renderItemStructure = (info, providersBackstage, renderIcons, fallbackIcon = Optional.none()) => {\n if (info.presets === 'color') {\n return renderColorStructure(info, providersBackstage, fallbackIcon);\n } else {\n return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n }\n };\n\n const tooltipBehaviour = (meta, sharedBackstage, tooltipText) => get$h(meta, 'tooltipWorker').map(tooltipWorker => [Tooltipping.config({\n lazySink: sharedBackstage.getSink,\n tooltipDom: {\n tag: 'div',\n classes: ['tox-tooltip-worker-container']\n },\n tooltipComponents: [],\n anchor: comp => ({\n type: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable$1 }\n }),\n mode: 'follow-highlight',\n onShow: (component, _tooltip) => {\n tooltipWorker(elm => {\n Tooltipping.setComponents(component, [external$1({ element: SugarElement.fromDom(elm) })]);\n });\n }\n })]).getOrThunk(() => {\n return tooltipText.map(text => [Tooltipping.config({\n ...sharedBackstage.providers.tooltips.getConfig({ tooltipText: text }),\n mode: 'follow-highlight'\n })]).getOr([]);\n });\n const encodeText = text => global$8.DOM.encode(text);\n const replaceText = (text, matchText) => {\n const translated = global$5.translate(text);\n const encoded = encodeText(translated);\n if (matchText.length > 0) {\n const escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, match => `${ match }`);\n } else {\n return encoded;\n }\n };\n const renderAutocompleteItem = (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons = true) => {\n const structure = renderItemStructure({\n presets,\n textContent: Optional.none(),\n htmlContent: useText ? spec.text.map(text => replaceText(text, matchText)) : Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: Optional.none(),\n checkMark: Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, sharedBackstage.providers, renderIcons, spec.icon);\n const tooltipString = spec.text.filter(text => !useText && text !== '');\n return renderCommonItem({\n context: 'mode:design',\n data: buildData(spec),\n enabled: spec.enabled,\n getApi: constant$1({}),\n onAction: _api => onItemValueHandler(spec.value, spec.meta),\n onSetup: constant$1(noop),\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec, sharedBackstage, tooltipString)\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const render$2 = (items, extras) => map$2(items, item => {\n switch (item.type) {\n case 'cardcontainer':\n return renderContainer(item, render$2(item.items, extras));\n case 'cardimage':\n return renderImage(item.src, item.classes, item.alt);\n case 'cardtext':\n const shouldHighlight = item.name.exists(name => contains$2(extras.cardText.highlightOn, name));\n const matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n return renderHtml(replaceText(item.text, matchText), item.classes);\n }\n });\n const renderCardMenuItem = (spec, itemResponse, sharedBackstage, extras) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => {\n Disabling.set(component, !state);\n each$1(descendants(component.element, '*'), elm => {\n component.getSystem().getByDom(elm).each(comp => {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, !state);\n }\n });\n });\n }\n });\n const structure = {\n dom: renderItemDomStructure(spec.label),\n optComponents: [Optional.some({\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n containerRowClass\n ]\n },\n components: render$2(spec.items, extras)\n })]\n };\n return renderCommonItem({\n context: 'mode:design',\n data: buildData({\n text: Optional.none(),\n ...spec\n }),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: Optional.from(extras.itemBehaviours).getOr([])\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const renderChoiceItem = (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets,\n textContent: useText ? spec.text : Optional.none(),\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: useText ? spec.shortcut : Optional.none(),\n checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, providersBackstage, renderIcons);\n const optTooltipping = spec.text.filter(constant$1(!useText)).map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) })));\n return deepMerge(renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: _api => onItemValueHandler(spec.value),\n onSetup: api => {\n api.setActive(isSelected);\n return noop;\n },\n triggersSubmenu: false,\n itemBehaviours: [...optTooltipping.toArray()]\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active,\n exclusive: true\n }\n });\n };\n\n const parts$f = generate$3(owner$2(), parts$h());\n\n const hexColour = value => ({ value: normalizeHex(value) });\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n const isHexString = hex => shorthandRegex.test(hex) || longformRegex.test(hex);\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n const fromString$1 = hex => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n const getLongForm = hex => {\n const hexString = hex.value.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n return { value: hexString };\n };\n const extractValues = hex => {\n const longForm = getLongForm(hex);\n const splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\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 min = Math.min;\n const max = Math.max;\n const round$1 = Math.round;\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*((?:\\d?\\.\\d+|\\d+)%?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const isRgbaComponent = value => {\n const num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n const fromHsv = hsv => {\n let r;\n let g;\n let b;\n const hue = (hsv.hue || 0) % 360;\n let saturation = hsv.saturation / 100;\n let brightness = hsv.value / 100;\n saturation = max(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$1(255 * brightness);\n return rgbaColour(r, g, b, 1);\n }\n const side = hue / 60;\n const chroma = brightness * saturation;\n const x = chroma * (1 - Math.abs(side % 2 - 1));\n const match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$1(255 * (r + match));\n g = round$1(255 * (g + match));\n b = round$1(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n const fromHex = hexColour => {\n const result = extractValues(hexColour);\n const red = parseInt(result[1], 16);\n const green = parseInt(result[2], 16);\n const blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\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 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 const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n const red = rgbaColour(255, 0, 0, 1);\n\n const fireSkinLoaded$1 = editor => {\n editor.dispatch('SkinLoaded');\n };\n const fireSkinLoadError$1 = (editor, error) => {\n editor.dispatch('SkinLoadError', error);\n };\n const fireResizeEditor = editor => {\n editor.dispatch('ResizeEditor');\n };\n const fireResizeContent = (editor, e) => {\n editor.dispatch('ResizeContent', e);\n };\n const fireScrollContent = (editor, e) => {\n editor.dispatch('ScrollContent', e);\n };\n const fireTextColorChange = (editor, data) => {\n editor.dispatch('TextColorChange', data);\n };\n const fireAfterProgressState = (editor, state) => {\n editor.dispatch('AfterProgressState', { state });\n };\n const fireResolveName = (editor, node) => editor.dispatch('ResolveName', {\n name: node.nodeName.toLowerCase(),\n target: node\n });\n const fireToggleToolbarDrawer = (editor, state) => {\n editor.dispatch('ToggleToolbarDrawer', { state });\n };\n const fireStylesTextUpdate = (editor, data) => {\n editor.dispatch('StylesTextUpdate', data);\n };\n const fireAlignTextUpdate = (editor, data) => {\n editor.dispatch('AlignTextUpdate', data);\n };\n const fireFontSizeTextUpdate = (editor, data) => {\n editor.dispatch('FontSizeTextUpdate', data);\n };\n const fireFontSizeInputTextUpdate = (editor, data) => {\n editor.dispatch('FontSizeInputTextUpdate', data);\n };\n const fireBlocksTextUpdate = (editor, data) => {\n editor.dispatch('BlocksTextUpdate', data);\n };\n const fireFontFamilyTextUpdate = (editor, data) => {\n editor.dispatch('FontFamilyTextUpdate', data);\n };\n const fireToggleSidebar = editor => {\n editor.dispatch('ToggleSidebar');\n };\n const fireToggleView = editor => {\n editor.dispatch('ToggleView');\n };\n const fireContextToolbarClose = editor => {\n editor.dispatch('ContextToolbarClose');\n };\n const fireContextFormSlideBack = editor => {\n editor.dispatch('ContextFormSlideBack');\n };\n\n const composeUnbinders = (f, g) => () => {\n f();\n g();\n };\n const onSetupEditableToggle = editor => onSetupEvent(editor, 'NodeChange', api => {\n api.setEnabled(editor.selection.isEditable());\n });\n const onSetupFormatToggle = (editor, name) => api => {\n const boundFormatChangeCallback = unbindable();\n const init = () => {\n api.setActive(editor.formatter.match(name));\n const binding = editor.formatter.formatChanged(name, api.setActive);\n boundFormatChangeCallback.set(binding);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n boundFormatChangeCallback.clear();\n };\n };\n const onSetupStateToggle = (editor, name) => api => {\n const unbindEditableToogle = onSetupEditableToggle(editor)(api);\n const unbindFormatToggle = onSetupFormatToggle(editor, name)(api);\n return () => {\n unbindEditableToogle();\n unbindFormatToggle();\n };\n };\n const onSetupEvent = (editor, event, f) => api => {\n const handleEvent = () => f(api);\n const init = () => {\n f(api);\n editor.on(event, handleEvent);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n editor.off(event, handleEvent);\n };\n };\n const onActionToggleFormat$1 = editor => rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('mceToggleFormat', false, rawItem.format);\n });\n };\n const onActionExecCommand = (editor, command) => () => editor.execCommand(command);\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n const cacheStorage = {};\n const ColorCache = (storageId, max = 10) => {\n const storageString = global$4.getItem(storageId);\n const localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n const prune = list => {\n const diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n const cache = prune(localstorage);\n const add = key => {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$4.setItem(storageId, JSON.stringify(cache));\n };\n const remove = idx => {\n cache.splice(idx, 1);\n };\n const state = () => cache.slice(0);\n return {\n add,\n state\n };\n };\n const getCacheForId = id => get$h(cacheStorage, id).getOrThunk(() => {\n const storageId = `tinymce-custom-colors-${ id }`;\n const currentData = global$4.getItem(storageId);\n if (isNullable(currentData)) {\n const legacyDefault = global$4.getItem('tinymce-custom-colors');\n global$4.setItem(storageId, isNonNullable(legacyDefault) ? legacyDefault : '[]');\n }\n const storage = ColorCache(storageId, 10);\n cacheStorage[id] = storage;\n return storage;\n });\n const getCurrentColors = id => map$2(getCacheForId(id).state(), color => ({\n type: 'choiceitem',\n text: color,\n icon: 'checkmark',\n value: color\n }));\n const addColor = (id, color) => {\n getCacheForId(id).add(color);\n };\n\n const hsvColour = (hue, saturation, value) => ({\n hue,\n saturation,\n value\n });\n const fromRgb = rgbaColour => {\n let h = 0;\n let s = 0;\n let v = 0;\n const r = rgbaColour.red / 255;\n const g = rgbaColour.green / 255;\n const b = rgbaColour.blue / 255;\n const minRGB = Math.min(r, Math.min(g, b));\n const maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n const d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n const hexToHsv = hex => fromRgb(fromHex(hex));\n const hsvToHex = hsv => fromRgba(fromHsv(hsv));\n const anyToHex = color => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n const canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n const canvasContext = canvas.getContext('2d');\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.fillStyle = '#FFFFFF';\n canvasContext.fillStyle = color;\n canvasContext.fillRect(0, 0, 1, 1);\n const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n const r = rgba[0];\n const g = rgba[1];\n const b = rgba[2];\n const a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\n\n const foregroundId = 'forecolor';\n const backgroundId = 'hilitecolor';\n const fallbackCols = 5;\n const mapColors = colorMap => mapColorsRaw(colorMap.map((color, index) => {\n if (index % 2 === 0) {\n return '#' + anyToHex(color).value;\n }\n return color;\n }));\n const mapColorsRaw = colorMap => {\n const colors = [];\n for (let i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: colorMap[i],\n icon: 'checkmark',\n type: 'choiceitem'\n });\n }\n return colors;\n };\n const option$1 = name => editor => editor.options.get(name);\n const fallbackColor = '#000000';\n const register$e = editor => {\n const registerOption = editor.options.register;\n const colorProcessor = value => {\n if (isArrayOf(value, isString)) {\n return {\n value: mapColors(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of strings.'\n };\n }\n };\n const colorProcessorRaw = value => {\n if (isArrayOf(value, isString)) {\n return {\n value: mapColorsRaw(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of strings.'\n };\n }\n };\n const colorColsProcessor = value => {\n if (isNumber(value) && value > 0) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a positive number.'\n };\n }\n };\n registerOption('color_map', {\n processor: colorProcessor,\n default: [\n '#BFEDD2',\n 'Light Green',\n '#FBEEB8',\n 'Light Yellow',\n '#F8CAC6',\n 'Light Red',\n '#ECCAFA',\n 'Light Purple',\n '#C2E0F4',\n 'Light Blue',\n '#2DC26B',\n 'Green',\n '#F1C40F',\n 'Yellow',\n '#E03E2D',\n 'Red',\n '#B96AD9',\n 'Purple',\n '#3598DB',\n 'Blue',\n '#169179',\n 'Dark Turquoise',\n '#E67E23',\n 'Orange',\n '#BA372A',\n 'Dark Red',\n '#843FA1',\n 'Dark Purple',\n '#236FA1',\n 'Dark Blue',\n '#ECF0F1',\n 'Light Gray',\n '#CED4D9',\n 'Medium Gray',\n '#95A5A6',\n 'Gray',\n '#7E8C8D',\n 'Dark Gray',\n '#34495E',\n 'Navy Blue',\n '#000000',\n 'Black',\n '#ffffff',\n 'White'\n ]\n });\n registerOption('color_map_raw', { processor: colorProcessorRaw });\n registerOption('color_map_background', { processor: colorProcessor });\n registerOption('color_map_foreground', { processor: colorProcessor });\n registerOption('color_cols', {\n processor: colorColsProcessor,\n default: calcCols(editor)\n });\n registerOption('color_cols_foreground', {\n processor: colorColsProcessor,\n default: defaultCols(editor, foregroundId)\n });\n registerOption('color_cols_background', {\n processor: colorColsProcessor,\n default: defaultCols(editor, backgroundId)\n });\n registerOption('custom_colors', {\n processor: 'boolean',\n default: true\n });\n registerOption('color_default_foreground', {\n processor: 'string',\n default: fallbackColor\n });\n registerOption('color_default_background', {\n processor: 'string',\n default: fallbackColor\n });\n };\n const getColors$2 = (editor, id) => {\n if (id === foregroundId && editor.options.isSet('color_map_foreground')) {\n return option$1('color_map_foreground')(editor);\n } else if (id === backgroundId && editor.options.isSet('color_map_background')) {\n return option$1('color_map_background')(editor);\n } else if (editor.options.isSet('color_map_raw')) {\n return option$1('color_map_raw')(editor);\n } else {\n return option$1('color_map')(editor);\n }\n };\n const calcCols = (editor, id = 'default') => Math.max(fallbackCols, Math.ceil(Math.sqrt(getColors$2(editor, id).length)));\n const defaultCols = (editor, id) => {\n const defaultCols = option$1('color_cols')(editor);\n const calculatedCols = calcCols(editor, id);\n if (defaultCols === calcCols(editor)) {\n return calculatedCols;\n } else {\n return defaultCols;\n }\n };\n const getColorCols$1 = (editor, id = 'default') => {\n const getCols = () => {\n if (id === foregroundId) {\n return option$1('color_cols_foreground')(editor);\n } else if (id === backgroundId) {\n return option$1('color_cols_background')(editor);\n } else {\n return option$1('color_cols')(editor);\n }\n };\n return Math.round(getCols());\n };\n const hasCustomColors$1 = option$1('custom_colors');\n const getDefaultForegroundColor = option$1('color_default_foreground');\n const getDefaultBackgroundColor = option$1('color_default_background');\n\n const defaultBackgroundColor = 'rgba(0, 0, 0, 0)';\n const isValidBackgroundColor = value => fromString(value).exists(c => c.alpha !== 0);\n const getClosestCssBackgroundColorValue = scope => {\n return closest$4(scope, node => {\n if (isElement$1(node)) {\n const color = get$f(node, 'background-color');\n return someIf(isValidBackgroundColor(color), color);\n } else {\n return Optional.none();\n }\n }).getOr(defaultBackgroundColor);\n };\n const getCurrentColor = (editor, format) => {\n const node = SugarElement.fromDom(editor.selection.getStart());\n const cssRgbValue = format === 'hilitecolor' ? getClosestCssBackgroundColorValue(node) : get$f(node, 'color');\n return fromString(cssRgbValue).map(rgba => '#' + fromRgba(rgba).value);\n };\n const applyFormat = (editor, format, value) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.apply(format, { value });\n editor.nodeChanged();\n });\n };\n const removeFormat = (editor, format) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.remove(format, { value: null }, undefined, true);\n editor.nodeChanged();\n });\n };\n const registerCommands = editor => {\n editor.addCommand('mceApplyTextcolor', (format, value) => {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', format => {\n removeFormat(editor, format);\n });\n };\n const getAdditionalColors = hasCustom => {\n const type = 'choiceitem';\n const remove = {\n type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n const custom = {\n type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n const applyColor = (editor, format, value, onChoice) => {\n if (value === 'custom') {\n const dialog = colorPickerDialog(editor);\n dialog(colorOpt => {\n colorOpt.each(color => {\n addColor(format, color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, getCurrentColor(editor, format).getOr(fallbackColor));\n } else if (value === 'remove') {\n onChoice('');\n editor.execCommand('mceRemoveTextcolor', format);\n } else {\n onChoice(value);\n editor.execCommand('mceApplyTextcolor', format, value);\n }\n };\n const getColors$1 = (colors, id, hasCustom) => colors.concat(getCurrentColors(id).concat(getAdditionalColors(hasCustom)));\n const getFetch$1 = (colors, id, hasCustom) => callback => {\n callback(getColors$1(colors, id, hasCustom));\n };\n const setIconColor = (splitButtonApi, name, newColor) => {\n const id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n splitButtonApi.setIconFill(id, newColor);\n };\n const setTooltip = (buttonApi, tooltip) => {\n buttonApi.setTooltip(tooltip);\n };\n const select$1 = (editor, format) => value => {\n const optCurrentHex = getCurrentColor(editor, format);\n return is$1(optCurrentHex, value.toUpperCase());\n };\n const getToolTipText = (editor, format, lastColor) => {\n if (isEmpty(lastColor)) {\n return format === 'forecolor' ? 'Text color' : 'Background color';\n }\n const tooltipPrefix = format === 'forecolor' ? 'Text color {0}' : 'Background color {0}';\n const colors = getColors$1(getColors$2(editor, format), format, false);\n const colorText = find$5(colors, c => c.value === lastColor).getOr({ text: '' }).text;\n return editor.translate([\n tooltipPrefix,\n editor.translate(colorText)\n ]);\n };\n const registerTextColorButton = (editor, name, format, lastColor) => {\n editor.ui.registry.addSplitButton(name, {\n tooltip: getToolTipText(editor, format, lastColor.get()),\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: select$1(editor, format),\n columns: getColorCols$1(editor, format),\n fetch: getFetch$1(getColors$2(editor, format), format, hasCustomColors$1(editor)),\n onAction: _splitButtonApi => {\n applyColor(editor, format, lastColor.get(), noop);\n },\n onItemAction: (_splitButtonApi, value) => {\n applyColor(editor, format, value, newColor => {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name,\n color: newColor\n });\n });\n },\n onSetup: splitButtonApi => {\n setIconColor(splitButtonApi, name, lastColor.get());\n const handler = e => {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n setTooltip(splitButtonApi, getToolTipText(editor, format, e.color));\n }\n };\n editor.on('TextColorChange', handler);\n return composeUnbinders(onSetupEditableToggle(editor)(splitButtonApi), () => {\n editor.off('TextColorChange', handler);\n });\n }\n });\n };\n const registerTextColorMenuItem = (editor, name, format, text, lastColor) => {\n editor.ui.registry.addNestedMenuItem(name, {\n text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n onSetup: api => {\n setTooltip(api, getToolTipText(editor, format, lastColor.get()));\n setIconColor(api, name, lastColor.get());\n return onSetupEditableToggle(editor)(api);\n },\n getSubmenuItems: () => [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n select: select$1(editor, format),\n initData: { storageKey: format },\n onAction: data => {\n applyColor(editor, format, data.value, newColor => {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name,\n color: newColor\n });\n });\n }\n }]\n });\n };\n const colorPickerDialog = editor => (callback, value) => {\n let isValid = false;\n const onSubmit = api => {\n const data = api.getData();\n const hex = data.colorpicker;\n if (isValid) {\n callback(Optional.from(hex));\n api.close();\n } else {\n editor.windowManager.alert(editor.translate([\n 'Invalid hex color code: {0}',\n hex\n ]));\n }\n };\n const onAction = (_api, details) => {\n if (details.name === 'hex-valid') {\n isValid = details.value;\n }\n };\n const initialData = { colorpicker: value };\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onAction,\n onSubmit,\n onClose: noop,\n onCancel: () => {\n callback(Optional.none());\n }\n });\n };\n const register$d = editor => {\n registerCommands(editor);\n const fallbackColorForeground = getDefaultForegroundColor(editor);\n const fallbackColorBackground = getDefaultBackgroundColor(editor);\n const lastForeColor = Cell(fallbackColorForeground);\n const lastBackColor = Cell(fallbackColorBackground);\n registerTextColorButton(editor, 'forecolor', 'forecolor', lastForeColor);\n registerTextColorButton(editor, 'backcolor', 'hilitecolor', lastBackColor);\n registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);\n registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);\n };\n\n const createPartialChoiceMenu = (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) => {\n const hasIcons = menuHasIcons(items);\n const presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n const alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n const menuLayout = { menuType: presets };\n return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, menuLayout);\n };\n const createChoiceItems = (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) => cat(map$2(items, item => {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, d => Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(d.value), itemResponse, providersBackstage, menuHasIcons(items))));\n } else {\n return Optional.none();\n }\n }));\n\n const deriveMenuMovement = (columns, presets) => {\n const menuMarkers = markers(presets);\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: true\n };\n } else if (columns === 'auto') {\n return {\n mode: 'grid',\n selector: '.' + menuMarkers.item,\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n const rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass,\n previousSelector: menu => {\n return presets === 'color' ? descendant(menu.element, '[aria-checked=true]') : Optional.none();\n }\n };\n }\n };\n const deriveCollectionMovement = (columns, presets) => {\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: false,\n selector: '.tox-collection__item'\n };\n } else if (columns === 'auto') {\n return {\n mode: 'flatgrid',\n selector: '.' + 'tox-collection__item',\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n return {\n mode: 'matrix',\n selectors: {\n row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',\n cell: presets === 'color' ? `.${ colorClass }` : `.${ selectableClass }`\n }\n };\n }\n };\n\n const renderColorSwatchItem = (spec, backstage) => {\n const items = getColorItems(spec, backstage);\n const columns = backstage.colorinput.getColorCols(spec.initData.storageKey);\n const presets = 'color';\n const menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onAction({ value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), backstage.shared.providers);\n const widgetSpec = {\n ...menuSpec,\n markers: markers(presets),\n movement: deriveMenuMovement(columns, presets),\n showMenuRole: false\n };\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget(Menu.sketch(widgetSpec))]\n };\n };\n const getColorItems = (spec, backstage) => {\n const useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n return spec.initData.colors.fold(() => getColors$1(backstage.colorinput.getColors(spec.initData.storageKey), spec.initData.storageKey, useCustomColors), colors => colors.concat(getAdditionalColors(useCustomColors)));\n };\n\n const cellOverEvent = generate$6('cell-over');\n const cellExecuteEvent = generate$6('cell-execute');\n const makeAnnouncementText = backstage => (row, col) => backstage.shared.providers.translate([\n '{0} columns, {1} rows',\n col,\n row\n ]);\n const makeCell = (row, col, label) => {\n const emitCellOver = c => emitWith(c, cellOverEvent, {\n row,\n col\n });\n const emitExecute = c => emitWith(c, cellExecuteEvent, {\n row,\n col\n });\n const onClick = (c, se) => {\n se.stop();\n emitExecute(c);\n };\n return build$1({\n dom: {\n tag: 'div',\n attributes: {\n role: 'button',\n ['aria-label']: label\n }\n },\n behaviours: derive$1([\n config('insert-table-picker-cell', [\n run$1(mouseover(), Focusing.focus),\n run$1(execute$5(), emitExecute),\n run$1(click(), onClick),\n run$1(tap(), onClick)\n ]),\n Toggling.config({\n toggleClass: 'tox-insert-table-picker__selected',\n toggleOnExecute: false\n }),\n Focusing.config({ onFocus: emitCellOver })\n ])\n });\n };\n const makeCells = (getCellLabel, numRows, numCols) => {\n const cells = [];\n for (let i = 0; i < numRows; i++) {\n const row = [];\n for (let j = 0; j < numCols; j++) {\n const label = getCellLabel(i + 1, j + 1);\n row.push(makeCell(i, j, label));\n }\n cells.push(row);\n }\n return cells;\n };\n const selectCells = (cells, selectedRow, selectedColumn, numRows, numColumns) => {\n for (let i = 0; i < numRows; i++) {\n for (let j = 0; j < numColumns; j++) {\n Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n }\n }\n };\n const makeComponents = cells => bind$3(cells, cellRow => map$2(cellRow, premade));\n const makeLabelText = (row, col) => text$2(`${ col }x${ row }`);\n const renderInsertTableMenuItem = (spec, backstage) => {\n const numRows = 10;\n const numColumns = 10;\n const getCellLabel = makeAnnouncementText(backstage);\n const cells = makeCells(getCellLabel, numRows, numColumns);\n const emptyLabelText = makeLabelText(0, 0);\n const memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label']\n },\n components: [emptyLabelText],\n behaviours: derive$1([Replacing.config({})])\n });\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget({\n dom: {\n tag: 'div',\n classes: ['tox-insert-table-picker']\n },\n components: makeComponents(cells).concat(memLabel.asSpec()),\n behaviours: derive$1([\n config('insert-table-picker', [\n runOnAttached(c => {\n Replacing.set(memLabel.get(c), [emptyLabelText]);\n }),\n runWithTarget(cellOverEvent, (c, t, e) => {\n const {row, col} = e.event;\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row + 1, col + 1)]);\n }),\n runWithTarget(cellExecuteEvent, (c, _, e) => {\n const {row, col} = e.event;\n emit(c, sandboxClose());\n spec.onAction({\n numRows: row + 1,\n numColumns: col + 1\n });\n })\n ]),\n Keying.config({\n initSize: {\n numRows,\n numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n const fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n const renderFancyMenuItem = (spec, backstage) => get$h(fancyMenuItems, spec.fancytype).map(render => render(spec, backstage));\n\n const renderNestedItem = (spec, itemResponse, providersBackstage, renderIcons = true, downwardsCaret = false) => {\n const caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setIconFill: (id, value) => {\n descendant(component.element, `svg path[class=\"${ id }\"], rect[class=\"${ id }\"]`).each(underlinePath => {\n set$9(underlinePath, 'fill', value);\n });\n },\n setTooltip: tooltip => {\n const translatedTooltip = providersBackstage.translate(tooltip);\n set$9(component.element, 'aria-label', translatedTooltip);\n }\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.some(caret),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderNormalItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.none(),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderSeparatorItem = spec => ({\n type: 'separator',\n dom: {\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n },\n components: spec.text.map(text$2).toArray()\n });\n\n const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n checkMark: Optional.some(renderCheckmark(providersBackstage.icons)),\n caret: Optional.none(),\n shortcutContent: spec.shortcut,\n presets: 'normal',\n meta: spec.meta\n }, providersBackstage, renderIcons);\n return deepMerge(renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n },\n role: spec.role.getOrUndefined()\n });\n };\n\n const autocomplete = renderAutocompleteItem;\n const separator$3 = renderSeparatorItem;\n const normal = renderNormalItem;\n const nested = renderNestedItem;\n const toggle$1 = renderToggleMenuItem;\n const fancy = renderFancyMenuItem;\n const card = renderCardMenuItem;\n\n const getCoupled = (component, coupleConfig, coupleState, name) => coupleState.getOrCreate(component, coupleConfig, name);\n const getExistingCoupled = (component, coupleConfig, coupleState, name) => coupleState.getExisting(component, coupleConfig, name);\n\n var CouplingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCoupled: getCoupled,\n getExistingCoupled: getExistingCoupled\n });\n\n var CouplingSchema = [requiredOf('others', setOf(Result.value, anyValue()))];\n\n const init$9 = () => {\n const coupled = {};\n const lookupCoupled = (coupleConfig, coupledName) => {\n const available = keys(coupleConfig.others);\n if (available.length === 0) {\n throw new Error('Cannot find any known coupled components');\n } else {\n return get$h(coupled, coupledName);\n }\n };\n const getOrCreate = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).getOrThunk(() => {\n const builder = get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n const spec = builder(component);\n const built = component.getSystem().build(spec);\n coupled[name] = built;\n return built;\n });\n };\n const getExisting = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).orThunk(() => {\n get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n return Optional.none();\n });\n };\n const readState = constant$1({});\n return nu$7({\n readState,\n getExisting,\n getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$9\n });\n\n const Coupling = create$4({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n const nu$3 = baseFn => {\n let data = Optional.none();\n let callbacks = [];\n const map = f => nu$3(nCallback => {\n get(data => {\n nCallback(f(data));\n });\n });\n const get = nCallback => {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n const set = x => {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n const isReady = () => data.isSome();\n const run = cbs => {\n each$1(cbs, call);\n };\n const call = cb => {\n data.each(x => {\n setTimeout(() => {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get,\n map,\n isReady\n };\n };\n const pure$1 = a => nu$3(callback => {\n callback(a);\n });\n const LazyValue = {\n nu: nu$3,\n pure: pure$1\n };\n\n const errorReporter = err => {\n setTimeout(() => {\n throw err;\n }, 0);\n };\n const make$5 = run => {\n const get = callback => {\n run().then(callback, errorReporter);\n };\n const map = fab => {\n return make$5(() => run().then(fab));\n };\n const bind = aFutureB => {\n return make$5(() => run().then(v => aFutureB(v).toPromise()));\n };\n const anonBind = futureB => {\n return make$5(() => run().then(() => futureB.toPromise()));\n };\n const toLazy = () => {\n return LazyValue.nu(get);\n };\n const toCached = () => {\n let cache = null;\n return make$5(() => {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n const toPromise = run;\n return {\n map,\n bind,\n anonBind,\n toLazy,\n toCached,\n toPromise,\n get\n };\n };\n const nu$2 = baseFn => {\n return make$5(() => new Promise(baseFn));\n };\n const pure = a => {\n return make$5(() => Promise.resolve(a));\n };\n const Future = {\n nu: nu$2,\n pure\n };\n\n const suffix = constant$1('sink');\n const partType$1 = constant$1(optional({\n name: suffix(),\n overrides: constant$1({\n dom: { tag: 'div' },\n behaviours: derive$1([Positioning.config({ useFixed: always })]),\n events: derive$2([\n cutter(keydown()),\n cutter(mousedown()),\n cutter(click())\n ])\n })\n }));\n\n const getAnchor = (detail, component) => {\n const hotspot = detail.getHotspot(component).getOr(component);\n const type = 'hotspot';\n const overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(() => ({\n type,\n hotspot,\n overrides\n }), layouts => ({\n type,\n hotspot,\n overrides,\n layouts\n }));\n };\n const fetch = (detail, mapFetch, component) => {\n const fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n const openF = (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) => {\n const futureData = fetch(detail, mapFetch, component);\n const getLazySink = getSink(component, detail);\n return futureData.map(tdata => tdata.bind(data => {\n const primaryMenu = data.menus[data.primary];\n Optional.from(primaryMenu).each(menu => {\n detail.listRole.each(listRole => {\n menu.role = listRole;\n });\n });\n return Optional.from(tieredMenu.sketch({\n ...externals.menu(),\n uid: generate$5(''),\n data,\n highlightOnOpen,\n onOpenMenu: (tmenu, menu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, menu, { anchor });\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: (tmenu, item, submenu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item\n }\n });\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, primaryMenu, { anchor });\n each$1(submenuTriggers, st => {\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem\n }\n });\n });\n },\n onEscape: () => {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n }));\n }));\n };\n const open = (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) => {\n const anchor = getAnchor(detail, hotspot);\n const processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n return processed.map(tdata => {\n tdata.fold(() => {\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n }\n }, data => {\n Sandboxing.cloak(sandbox);\n Sandboxing.open(sandbox, data);\n onOpenSync(sandbox);\n });\n return sandbox;\n });\n };\n const close = (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) => {\n Sandboxing.close(sandbox);\n return Future.pure(sandbox);\n };\n const togglePopup = (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) => {\n const sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n const showing = Sandboxing.isOpen(sandbox);\n const action = showing ? close : open;\n return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n };\n const matchWidth = (hotspot, container, useMinWidth) => {\n const menu = Composing.getCurrent(container).getOr(container);\n const buttonWidth = get$d(hotspot.element);\n if (useMinWidth) {\n set$8(menu.element, 'min-width', buttonWidth + 'px');\n } else {\n set$7(menu.element, buttonWidth);\n }\n };\n const getSink = (anyInSystem, sinkDetail) => anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(internalSink => () => Result.value(internalSink)).getOrThunk(() => sinkDetail.lazySink.fold(() => () => Result.error(new Error('No internal sink is specified, nor could an external sink be found')), lazySinkFn => () => lazySinkFn(anyInSystem)));\n const doRepositionMenus = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.repositionMenus(tmenu);\n });\n };\n const makeSandbox$1 = (detail, hotspot, extras) => {\n const ariaControls = manager();\n const onOpen = (component, menu) => {\n const anchor = getAnchor(detail, hotspot);\n ariaControls.link(hotspot.element);\n if (detail.matchWidth) {\n matchWidth(anchor.hotspot, menu, detail.useMinWidth);\n }\n detail.onOpen(anchor, component, menu);\n if (extras !== undefined && extras.onOpen !== undefined) {\n extras.onOpen(component, menu);\n }\n };\n const onClose = (component, menu) => {\n ariaControls.unlink(hotspot.element);\n lazySink().getOr(menu).element.dom.dispatchEvent(new window.FocusEvent('focusout'));\n if (extras !== undefined && extras.onClose !== undefined) {\n extras.onClose(component, menu);\n }\n };\n const lazySink = getSink(hotspot, detail);\n return {\n dom: {\n tag: 'div',\n classes: detail.sandboxClasses,\n attributes: { id: ariaControls.id }\n },\n behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: hotspot\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(hotspot, queryElem);\n },\n getAttachPoint: () => {\n return lazySink().getOrDie();\n }\n }),\n Composing.config({\n find: sandbox => {\n return Sandboxing.getState(sandbox).bind(menu => Composing.getCurrent(menu));\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({ isExtraPart: never }),\n ...receivingChannel({ doReposition: doRepositionMenus })\n }\n })\n ])\n };\n };\n const repositionMenus = comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n doRepositionMenus(sandbox);\n };\n\n const sandboxFields = () => [\n defaulted('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n\n const schema$k = constant$1([\n required$1('dom'),\n required$1('fetch'),\n onHandler('onOpen'),\n onKeyboardHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n field('dropdownBehaviours', [\n Toggling,\n Coupling,\n Keying,\n Focusing\n ]),\n required$1('toggleClass'),\n defaulted('eventOrder', {}),\n option$3('lazySink'),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n option$3('role'),\n option$3('listRole')\n ].concat(sandboxFields()));\n const parts$e = constant$1([\n external({\n schema: [\n tieredMenuMarkers(),\n defaulted('fakeFocus', false)\n ],\n name: 'menu',\n defaults: detail => {\n return { onExecute: detail.onExecute };\n }\n }),\n partType$1()\n ]);\n\n const factory$k = (detail, components, _spec, externals) => {\n const lookupAttr = attr => get$h(detail.dom, 'attributes').bind(attrs => get$h(attrs, attr));\n const switchToMenu = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.highlightPrimary(tmenu);\n });\n };\n const togglePopup$1 = (dropdownComp, onOpenSync, highlightOnOpen) => {\n return togglePopup(detail, identity, dropdownComp, externals, onOpenSync, highlightOnOpen);\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup$1(component, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const apis = {\n expand: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n refetch: comp => {\n const optSandbox = Coupling.getExistingCoupled(comp, 'sandbox');\n return optSandbox.fold(() => {\n return togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n }, sandboxComp => {\n return open(detail, identity, comp, sandboxComp, externals, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n });\n },\n isOpen: Toggling.isOn,\n close: comp => {\n if (Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n const triggerExecute = (comp, _se) => {\n emitExecute(comp);\n return Optional.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.dropdownBehaviours, [\n Toggling.config({\n toggleClass: detail.toggleClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => Toggling.off(hotspot)\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Optional.some(true);\n },\n onEscape: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n Dropdown.close(comp);\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n }\n }),\n Focusing.config({})\n ]),\n events: events$9(Optional.some(action)),\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n apis,\n domModification: {\n attributes: {\n 'aria-haspopup': detail.listRole.getOr('true'),\n ...detail.role.fold(() => ({}), role => ({ role })),\n ...detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {}\n }\n }\n };\n };\n const Dropdown = composite({\n name: 'Dropdown',\n configFields: schema$k(),\n partFields: parts$e(),\n factory: factory$k,\n apis: {\n open: (apis, comp) => apis.open(comp),\n refetch: (apis, comp) => apis.refetch(comp),\n expand: (apis, comp) => apis.expand(comp),\n close: (apis, comp) => apis.close(comp),\n isOpen: (apis, comp) => apis.isOpen(comp),\n repositionMenus: (apis, comp) => apis.repositionMenus(comp)\n }\n });\n\n const identifyMenuLayout = searchMode => {\n switch (searchMode.searchMode) {\n case 'no-search': {\n return { menuType: 'normal' };\n }\n default: {\n return {\n menuType: 'searchable',\n searchMode\n };\n }\n }\n };\n const handleRefetchTrigger = originalSandboxComp => {\n const dropdown = Representing.getValue(originalSandboxComp);\n const optSearcherState = findWithinSandbox(originalSandboxComp).map(saveState);\n Dropdown.refetch(dropdown).get(() => {\n const newSandboxComp = Coupling.getCoupled(dropdown, 'sandbox');\n optSearcherState.each(searcherState => findWithinSandbox(newSandboxComp).each(inputComp => restoreState(inputComp, searcherState)));\n });\n };\n const handleRedirectToMenuItem = (sandboxComp, se) => {\n getActiveMenuItemFrom(sandboxComp).each(activeItem => {\n retargetAndDispatchWith(sandboxComp, activeItem.element, se.event.eventType, se.event.interactionEvent);\n });\n };\n const getActiveMenuItemFrom = sandboxComp => {\n return Sandboxing.getState(sandboxComp).bind(Highlighting.getHighlighted).bind(Highlighting.getHighlighted);\n };\n const getSearchResults = activeMenuComp => {\n return has(activeMenuComp.element, searchResultsClass) ? Optional.some(activeMenuComp.element) : descendant(activeMenuComp.element, '.' + searchResultsClass);\n };\n const updateAriaOnHighlight = (tmenuComp, menuComp, itemComp) => {\n findWithinMenu(tmenuComp).each(inputComp => {\n setActiveDescendant(inputComp, itemComp);\n const optActiveResults = getSearchResults(menuComp);\n optActiveResults.each(resultsElem => {\n getOpt(resultsElem, 'id').each(controlledId => set$9(inputComp.element, 'aria-controls', controlledId));\n });\n });\n set$9(itemComp.element, 'aria-selected', 'true');\n };\n const updateAriaOnDehighlight = (tmenuComp, menuComp, itemComp) => {\n set$9(itemComp.element, 'aria-selected', 'false');\n };\n const focusSearchField = tmenuComp => {\n findWithinMenu(tmenuComp).each(searcherComp => Focusing.focus(searcherComp));\n };\n const getSearchPattern = dropdownComp => {\n const optSandboxComp = Coupling.getExistingCoupled(dropdownComp, 'sandbox');\n return optSandboxComp.bind(findWithinSandbox).map(saveState).map(state => state.fetchPattern).getOr('');\n };\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n const createMenuItemFromBridge = (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) => {\n const providersBackstage = backstage.shared.providers;\n const parseForHorizontalMenu = menuitem => !isHorizontalMenu ? menuitem : {\n ...menuitem,\n shortcut: Optional.none(),\n icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, d => Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, d => Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu)));\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, d => Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, d => fancy(d, backstage));\n default: {\n console.error('Unknown item in general menu', item);\n return Optional.none();\n }\n }\n };\n const createAutocompleteItems = (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) => {\n const renderText = columns === 1;\n const renderIcons = !renderText || menuHasIcons(items);\n return cat(map$2(items, item => {\n switch (item.type) {\n case 'separator':\n return createSeparatorItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'cardmenuitem':\n return createCardMenuItem(item).fold(handleError, d => Optional.some(card({\n ...d,\n onAction: api => {\n d.onAction(api);\n onItemValueHandler(d.value, d.meta);\n }\n }, itemResponse, sharedBackstage, {\n itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage, Optional.none()),\n cardText: {\n matchText,\n highlightOn\n }\n })));\n case 'autocompleteitem':\n default:\n return createAutocompleterItem(item).fold(handleError, d => Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons)));\n }\n }));\n };\n const createPartialMenu = (value, items, itemResponse, backstage, isHorizontalMenu, searchMode) => {\n const hasIcons = menuHasIcons(items);\n const alloyItems = cat(map$2(items, item => {\n const itemHasIcon = i => isHorizontalMenu ? !has$2(i, 'text') : hasIcons;\n const createItem = i => createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n return createItem({\n ...item,\n enabled: false\n });\n } else {\n return createItem(item);\n }\n }));\n const menuLayout = identifyMenuLayout(searchMode);\n const createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n return createPartial(value, hasIcons, alloyItems, 1, menuLayout);\n };\n const createTieredDataFrom = partialMenu => tieredMenu.singleData(partialMenu.value, partialMenu);\n const createInlineMenuFrom = (partialMenu, columns, focusMode, presets) => {\n const movement = deriveMenuMovement(columns, presets);\n const menuMarkers = markers(presets);\n return {\n data: createTieredDataFrom({\n ...partialMenu,\n movement,\n menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, menuMarkers.item).each(({numColumns, numRows}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }),\n menu: {\n markers: markers(presets),\n fakeFocus: focusMode === FocusMode.ContentFocus\n }\n };\n };\n\n const rangeToSimRange = r => SimRange.create(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n const register$c = (editor, sharedBackstage) => {\n const autocompleterId = generate$6('autocompleter');\n const processingAction = Cell(false);\n const activeState = Cell(false);\n const activeRange = value$4();\n const autocompleter = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-autocompleter'],\n attributes: { id: autocompleterId }\n },\n components: [],\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissAutocompleter', [\n run$1(dismissRequested(), () => cancelIfNecessary()),\n run$1(highlight$1(), (_, se) => {\n getOpt(se.event.target, 'id').each(id => set$9(SugarElement.fromDom(editor.getBody()), 'aria-activedescendant', id));\n })\n ])]),\n lazySink: sharedBackstage.getSink\n }));\n const isMenuOpen = () => InlineView.isOpen(autocompleter);\n const isActive = activeState.get;\n const hideIfNecessary = () => {\n if (isMenuOpen()) {\n InlineView.hide(autocompleter);\n editor.dom.remove(autocompleterId, false);\n const editorBody = SugarElement.fromDom(editor.getBody());\n getOpt(editorBody, 'aria-owns').filter(ariaOwnsAttr => ariaOwnsAttr === autocompleterId).each(() => {\n remove$8(editorBody, 'aria-owns');\n remove$8(editorBody, 'aria-activedescendant');\n });\n }\n };\n const getMenu = () => InlineView.getContent(autocompleter).bind(tmenu => {\n return get$i(tmenu.components(), 0);\n });\n const cancelIfNecessary = () => editor.execCommand('mceAutocompleterClose');\n const getCombinedItems = matches => {\n const columns = findMap(matches, m => Optional.from(m.columns)).getOr(1);\n return bind$3(matches, match => {\n const choices = match.items;\n return createAutocompleteItems(choices, match.matchText, (itemValue, itemMeta) => {\n const autocompleterApi = {\n hide: () => cancelIfNecessary(),\n reload: fetchOptions => {\n hideIfNecessary();\n editor.execCommand('mceAutocompleterReload', false, { fetchOptions });\n }\n };\n editor.execCommand('mceAutocompleterRefreshActiveRange');\n activeRange.get().each(range => {\n processingAction.set(true);\n match.onAction(autocompleterApi, range, itemValue, itemMeta);\n processingAction.set(false);\n });\n }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match.highlightOn);\n });\n };\n const display = (lookupData, items) => {\n const columns = findMap(lookupData, ld => Optional.from(ld.columns)).getOr(1);\n InlineView.showMenuAt(autocompleter, {\n anchor: {\n type: 'selection',\n getSelection: () => activeRange.get().map(rangeToSimRange),\n root: SugarElement.fromDom(editor.getBody())\n }\n }, createInlineMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, { menuType: 'normal' }), columns, FocusMode.ContentFocus, 'normal'));\n getMenu().each(Highlighting.highlightFirst);\n };\n const updateDisplay = lookupData => {\n const combinedItems = getCombinedItems(lookupData);\n if (combinedItems.length > 0) {\n display(lookupData, combinedItems);\n set$9(SugarElement.fromDom(editor.getBody()), 'aria-owns', autocompleterId);\n if (!editor.inline) {\n cloneAutocompleterToEditorDoc();\n }\n } else {\n hideIfNecessary();\n }\n };\n const cloneAutocompleterToEditorDoc = () => {\n if (editor.dom.get(autocompleterId)) {\n editor.dom.remove(autocompleterId, false);\n }\n const docElm = editor.getDoc().documentElement;\n const selection = editor.selection.getNode();\n const newElm = deep(autocompleter.element);\n setAll(newElm, {\n border: '0',\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: '0',\n position: 'absolute',\n width: '1px',\n top: `${ selection.offsetTop }px`,\n left: `${ selection.offsetLeft }px`\n });\n editor.dom.add(docElm, newElm.dom);\n descendant(newElm, '[role=\"menu\"]').each(child => {\n remove$7(child, 'position');\n remove$7(child, 'max-height');\n });\n };\n editor.on('AutocompleterStart', ({lookupData}) => {\n activeState.set(true);\n processingAction.set(false);\n updateDisplay(lookupData);\n });\n editor.on('AutocompleterUpdate', ({lookupData}) => updateDisplay(lookupData));\n editor.on('AutocompleterUpdateActiveRange', ({range}) => activeRange.set(range));\n editor.on('AutocompleterEnd', () => {\n hideIfNecessary();\n activeState.set(false);\n processingAction.set(false);\n activeRange.clear();\n });\n const autocompleterUiApi = {\n cancelIfNecessary,\n isMenuOpen,\n isActive,\n isProcessingAction: processingAction.get,\n getMenu\n };\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n };\n const Autocompleter = { register: register$c };\n\n const closest = (scope, selector, isRoot) => closest$1(scope, selector, isRoot).isSome();\n\n const DelayedFunction = (fun, delay) => {\n let ref = null;\n const schedule = (...args) => {\n ref = setTimeout(() => {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n const cancel = () => {\n if (ref !== null) {\n clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel,\n schedule\n };\n };\n\n const SIGNIFICANT_MOVE = 5;\n const LONGPRESS_DELAY = 400;\n const getTouch = event => {\n const raw = event.raw;\n if (raw.touches === undefined || raw.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(raw.touches[0]);\n };\n 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 monitor = settings => {\n const startData = value$4();\n const longpressFired = Cell(false);\n const longpress$1 = DelayedFunction(event => {\n settings.triggerEvent(longpress(), event);\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n const handleTouchstart = event => {\n getTouch(event).each(touch => {\n longpress$1.cancel();\n const data = {\n x: touch.clientX,\n y: touch.clientY,\n target: event.target\n };\n longpress$1.schedule(event);\n longpressFired.set(false);\n startData.set(data);\n });\n return Optional.none();\n };\n const handleTouchmove = event => {\n longpress$1.cancel();\n getTouch(event).each(touch => {\n startData.on(data => {\n if (isFarEnough(touch, data)) {\n startData.clear();\n }\n });\n });\n return Optional.none();\n };\n const handleTouchend = event => {\n longpress$1.cancel();\n const isSame = data => eq(data.target, event.target);\n return startData.get().filter(isSame).map(_data => {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n const handlers = wrapAll([\n {\n key: touchstart(),\n value: handleTouchstart\n },\n {\n key: touchmove(),\n value: handleTouchmove\n },\n {\n key: touchend(),\n value: handleTouchend\n }\n ]);\n const fireIfReady = (event, type) => get$h(handlers, type).bind(handler => handler(event));\n return { fireIfReady };\n };\n\n const isDangerous = event => {\n const keyEv = event.raw;\n return keyEv.which === BACKSPACE[0] && !contains$2([\n 'input',\n 'textarea'\n ], name$3(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n };\n const setup$d = (container, rawSettings) => {\n const settings = {\n stopBackspace: true,\n ...rawSettings\n };\n const pointerEvents = [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'gesturestart',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mousemove',\n 'mouseout',\n 'click'\n ];\n const tapEvent = monitor(settings);\n const simpleEvents = map$2(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'transitioncancel',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), type => bind(container, type, event => {\n tapEvent.fireIfReady(event, type).each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n }));\n const pasteTimeout = value$4();\n const onPaste = bind(container, 'paste', event => {\n tapEvent.fireIfReady(event, 'paste').each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent('paste', event);\n if (stopped) {\n event.kill();\n }\n pasteTimeout.set(setTimeout(() => {\n settings.triggerEvent(postPaste(), event);\n }, 0));\n });\n const onKeydown = bind(container, 'keydown', event => {\n const stopped = settings.triggerEvent('keydown', event);\n if (stopped) {\n event.kill();\n } else if (settings.stopBackspace && isDangerous(event)) {\n event.prevent();\n }\n });\n const onFocusIn = bind(container, 'focusin', event => {\n const stopped = settings.triggerEvent('focusin', event);\n if (stopped) {\n event.kill();\n }\n });\n const focusoutTimeout = value$4();\n const onFocusOut = bind(container, 'focusout', event => {\n const stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(setTimeout(() => {\n settings.triggerEvent(postBlur(), event);\n }, 0));\n });\n const unbind = () => {\n each$1(simpleEvents, e => {\n e.unbind();\n });\n onKeydown.unbind();\n onFocusIn.unbind();\n onFocusOut.unbind();\n onPaste.unbind();\n pasteTimeout.on(clearTimeout);\n focusoutTimeout.on(clearTimeout);\n };\n return { unbind };\n };\n\n const derive = (rawEvent, rawTarget) => {\n const source = get$h(rawEvent, 'target').getOr(rawTarget);\n return Cell(source);\n };\n\n const fromSource = (event, source) => {\n const stopper = Cell(false);\n const cutter = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n const cut = () => {\n cutter.set(true);\n };\n return {\n stop,\n cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event,\n setSource: source.set,\n getSource: source.get\n };\n };\n const fromExternal = event => {\n const stopper = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n return {\n stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: never,\n event,\n setSource: die('Cannot set source of a broadcasted event'),\n getSource: die('Cannot get source of a broadcasted event')\n };\n };\n\n const adt$1 = Adt.generate([\n { stopped: [] },\n { resume: ['element'] },\n { complete: [] }\n ]);\n const doTriggerHandler = (lookup, eventType, rawEvent, target, source, logger) => {\n const handler = lookup(eventType, target);\n const simulatedEvent = fromSource(rawEvent, source);\n return handler.fold(() => {\n logger.logEventNoHandlers(eventType, target);\n return adt$1.complete();\n }, handlerInfo => {\n const descHandler = handlerInfo.descHandler;\n const eventHandler = getCurried(descHandler);\n eventHandler(simulatedEvent);\n if (simulatedEvent.isStopped()) {\n logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.stopped();\n } else if (simulatedEvent.isCut()) {\n logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n } else {\n return parent(handlerInfo.element).fold(() => {\n logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n }, parent => {\n logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.resume(parent);\n });\n }\n });\n };\n const doTriggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, source, logger) => doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, parent => doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger), never);\n const triggerHandler = (lookup, eventType, rawEvent, target, logger) => {\n const source = derive(rawEvent, target);\n return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n };\n const broadcast = (listeners, rawEvent, _logger) => {\n const simulatedEvent = fromExternal(rawEvent);\n each$1(listeners, listener => {\n const descHandler = listener.descHandler;\n const handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n const triggerUntilStopped = (lookup, eventType, rawEvent, logger) => triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n const triggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, logger) => {\n const source = derive(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n const eventHandler = (element, descHandler) => ({\n element,\n descHandler\n });\n const broadcastHandler = (id, handler) => ({\n id,\n descHandler: handler\n });\n const EventRegistry = () => {\n const registry = {};\n const registerId = (extraArgs, id, events) => {\n each(events, (v, k) => {\n const handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n const findHandler = (handlers, elem) => read(elem).bind(id => get$h(handlers, id)).map(descHandler => eventHandler(elem, descHandler));\n const filterByType = type => get$h(registry, type).map(handlers => mapToArray(handlers, (f, id) => broadcastHandler(id, f))).getOr([]);\n const find = (isAboveRoot, type, target) => get$h(registry, type).bind(handlers => closest$4(target, elem => findHandler(handlers, elem), isAboveRoot));\n const unregisterId = id => {\n each(registry, (handlersById, _eventName) => {\n if (has$2(handlersById, id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId,\n unregisterId,\n filterByType,\n find\n };\n };\n\n const Registry = () => {\n const events = EventRegistry();\n const components = {};\n const readOrTag = component => {\n const elem = component.element;\n return read(elem).getOrThunk(() => write('uid-', component.element));\n };\n const failOnDuplicate = (component, tagId) => {\n const conflict = components[tagId];\n if (conflict === component) {\n unregister(component);\n } else {\n throw new Error('The tagId \"' + tagId + '\" is already used by: ' + element(conflict.element) + '\\nCannot use it for: ' + element(component.element) + '\\n' + 'The conflicting element is' + (inBody(conflict.element) ? ' ' : ' not ') + 'already in the DOM');\n }\n };\n const register = component => {\n const tagId = readOrTag(component);\n if (hasNonNullableKey(components, tagId)) {\n failOnDuplicate(component, tagId);\n }\n const extraArgs = [component];\n events.registerId(extraArgs, tagId, component.events);\n components[tagId] = component;\n };\n const unregister = component => {\n read(component.element).each(tagId => {\n delete components[tagId];\n events.unregisterId(tagId);\n });\n };\n const filter = type => events.filterByType(type);\n const find = (isAboveRoot, type, target) => events.find(isAboveRoot, type, target);\n const getById = id => get$h(components, id);\n return {\n find,\n filter,\n register,\n unregister,\n getById\n };\n };\n\n const factory$j = detail => {\n const {attributes, ...domWithoutAttributes} = detail.dom;\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: {\n role: 'presentation',\n ...attributes\n },\n ...domWithoutAttributes\n },\n components: detail.components,\n behaviours: get$4(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n const Container = single({\n name: 'Container',\n factory: factory$j,\n configFields: [\n defaulted('components', []),\n field('containerBehaviours', []),\n defaulted('events', {}),\n defaulted('domModification', {}),\n defaulted('eventOrder', {})\n ]\n });\n\n const takeover = root => {\n const isAboveRoot = el => parent(root.element).fold(always, parent => eq(el, parent));\n const registry = Registry();\n const lookup = (eventName, target) => registry.find(isAboveRoot, eventName, target);\n const domEvents = setup$d(root.element, {\n triggerEvent: (eventName, event) => {\n return monitorEvent(eventName, event.target, logger => triggerUntilStopped(lookup, eventName, event, logger));\n }\n });\n const systemApi = {\n debugInfo: constant$1('real'),\n triggerEvent: (eventName, target, data) => {\n monitorEvent(eventName, target, logger => triggerOnUntilStopped(lookup, eventName, data, target, logger));\n },\n triggerFocus: (target, originator) => {\n read(target).fold(() => {\n focus$3(target);\n }, _alloyId => {\n monitorEvent(focus$4(), target, logger => {\n triggerHandler(lookup, focus$4(), {\n originator,\n kill: noop,\n prevent: noop,\n target\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: (comp, simulatedEvent) => {\n systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n },\n getByUid: uid => {\n return getByUid(uid);\n },\n getByDom: elem => {\n return getByDom(elem);\n },\n build: build$1,\n buildOrPatch: buildOrPatch,\n addToGui: c => {\n add(c);\n },\n removeFromGui: c => {\n remove(c);\n },\n addToWorld: c => {\n addToWorld(c);\n },\n removeFromWorld: c => {\n removeFromWorld(c);\n },\n broadcast: message => {\n broadcast$1(message);\n },\n broadcastOn: (channels, message) => {\n broadcastOn(channels, message);\n },\n broadcastEvent: (eventName, event) => {\n broadcastEvent(eventName, event);\n },\n isConnected: always\n };\n const addToWorld = component => {\n component.connect(systemApi);\n if (!isText(component.element)) {\n registry.register(component);\n each$1(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n }\n };\n const removeFromWorld = component => {\n if (!isText(component.element)) {\n each$1(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n const add = component => {\n attach(root, component);\n };\n const remove = component => {\n detach(component);\n };\n const destroy = () => {\n domEvents.unbind();\n remove$6(root.element);\n };\n const broadcastData = data => {\n const receivers = registry.filter(receive());\n each$1(receivers, receiver => {\n const descHandler = receiver.descHandler;\n const handler = getCurried(descHandler);\n handler(data);\n });\n };\n const broadcast$1 = message => {\n broadcastData({\n universal: true,\n data: message\n });\n };\n const broadcastOn = (channels, message) => {\n broadcastData({\n universal: false,\n channels,\n data: message\n });\n };\n const broadcastEvent = (eventName, event) => {\n const listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n const getByUid = uid => registry.getById(uid).fold(() => Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.')), Result.value);\n const getByDom = elem => {\n const uid = read(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root,\n element: root.element,\n destroy,\n add,\n remove,\n getByUid,\n getByDom,\n addToWorld,\n removeFromWorld,\n broadcast: broadcast$1,\n broadcastOn,\n broadcastEvent\n };\n };\n\n const renderBar = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-bar',\n 'tox-form__controls-h-stack'\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const schema$j = constant$1([\n defaulted('prefix', 'form-field'),\n field('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n const parts$d = constant$1([\n optional({\n schema: [required$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: spec => {\n const excludeFactory = exclude(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [required$1('factory')],\n name: 'field'\n })\n ]);\n\n const factory$i = (detail, components, _spec, _externals) => {\n const behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: container => {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: field => {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: (field, value) => {\n Composing.getCurrent(field).each(current => {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n const events = derive$2([runOnAttached((component, _simulatedEvent) => {\n const ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(field => {\n const id = generate$6(detail.prefix);\n ps.label().each(label => {\n set$9(label.element, 'for', id);\n set$9(field.element, 'id', id);\n });\n ps['aria-descriptor']().each(descriptor => {\n const descriptorId = generate$6(detail.prefix);\n set$9(descriptor.element, 'id', descriptorId);\n set$9(field.element, 'aria-describedby', descriptorId);\n });\n });\n })]);\n const apis = {\n getField: container => getPart(container, detail, 'field'),\n getLabel: container => getPart(container, detail, 'label')\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours,\n events,\n apis\n };\n };\n const FormField = composite({\n name: 'FormField',\n configFields: schema$j(),\n partFields: parts$d(),\n factory: factory$i,\n apis: {\n getField: (apis, comp) => apis.getField(comp),\n getLabel: (apis, comp) => apis.getLabel(comp)\n }\n });\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n const renderFormFieldWith = (pLabel, pField, extraClasses, extraBehaviours) => {\n const spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n const renderFormField = (pLabel, pField) => renderFormFieldWith(pLabel, pField, [], []);\n const renderFormFieldSpecWith = (pLabel, pField, extraClasses, extraBehaviours) => ({\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n });\n const renderFormFieldDom = () => renderFormFieldDomWith([]);\n const renderFormFieldDomWith = extraClasses => ({\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n });\n const renderLabel$3 = (label, providersBackstage) => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n\n const formChangeEvent = generate$6('form-component-change');\n const formInputEvent = generate$6('form-component-input');\n const formCloseEvent = generate$6('form-close');\n const formCancelEvent = generate$6('form-cancel');\n const formActionEvent = generate$6('form-action');\n const formSubmitEvent = generate$6('form-submit');\n const formBlockEvent = generate$6('form-block');\n const formUnblockEvent = generate$6('form-unblock');\n const formTabChangeEvent = generate$6('form-tabchange');\n const formResizeEvent = generate$6('form-resize');\n\n const renderCollection = (spec, providersBackstage, initialData) => {\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const icons = providersBackstage.icons();\n const getIcon = icon => {\n var _a;\n return (_a = icons[icon]) !== null && _a !== void 0 ? _a : icon;\n };\n const runOnItem = f => (comp, se) => {\n closest$1(se.event.target, '[data-collection-item-value]').each(target => {\n f(comp, se, target, get$g(target, 'data-collection-item-value'));\n });\n };\n const setContents = (comp, items) => {\n const disabled = providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled();\n const disabledClass = disabled ? ' tox-collection__item--state-disabled' : '';\n const htmlLines = map$2(items, item => {\n const itemText = global$5.translate(item.text);\n const textContent = spec.columns === 1 ? `
    ${ itemText }
    ` : '';\n const iconContent = `
    ${ getIcon(item.icon) }
    `;\n const mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n const ariaLabel = itemText.replace(/\\_| \\- |\\-/g, match => mapItemName[match]);\n return `
    ${ iconContent }${ textContent }
    `;\n });\n const chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n const html = map$2(chunks, ch => `
    ${ ch.join('') }
    `);\n set$6(comp.element, html.join(''));\n };\n const onClick = runOnItem((comp, se, tgt, itemValue) => {\n se.stop();\n if (!(providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled())) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }\n });\n const collectionEvents = [\n run$1(mouseover(), runOnItem((comp, se, tgt) => {\n focus$3(tgt, true);\n })),\n run$1(click(), onClick),\n run$1(tap(), onClick),\n run$1(focusin(), runOnItem((comp, se, tgt) => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$3(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run$1(focusout(), runOnItem(comp => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$3(currentActive, activeClass);\n blur$1(currentActive);\n });\n })),\n runOnExecute$1(runOnItem((comp, se, tgt, itemValue) => {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n const iterCollectionItems = (comp, applyAttributes) => map$2(descendants(comp.element, '.tox-collection__item'), applyAttributes);\n const pField = FormField.parts.field({\n dom: {\n tag: 'div',\n classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])\n },\n components: [],\n factory: { sketch: identity },\n behaviours: derive$1([\n Disabling.config({\n disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n iterCollectionItems(comp, childElm => {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$9(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: comp => {\n iterCollectionItems(comp, childElm => {\n remove$3(childElm, 'tox-collection__item--state-disabled');\n remove$8(childElm, 'aria-disabled');\n });\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Replacing.config({}),\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: '',\n onShow: comp => {\n descendant(comp.element, '.' + activeClass + '[data-mce-tooltip]').each(current => {\n getOpt(current, 'data-mce-tooltip').each(text => {\n Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text }));\n });\n });\n }\n }),\n mode: 'children-keyboard-focus',\n anchor: comp => ({\n type: 'node',\n node: descendant(comp.element, '.' + activeClass).orThunk(() => first$1('.tox-collection__item')),\n root: comp.element,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialData.getOr([])\n },\n onSetValue: (comp, items) => {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n }\n emit(comp, formResizeEvent);\n }\n }),\n Tabstopping.config({}),\n Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n config('collection-events', collectionEvents)\n ]),\n eventOrder: {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ],\n [focusin()]: [\n 'collection-events',\n 'tooltipping'\n ]\n }\n });\n const extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n const ariaElements = [\n 'input',\n 'textarea'\n ];\n const isAriaElement = elem => {\n const name = name$3(elem);\n return contains$2(ariaElements, name);\n };\n const markValid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n remove$3(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n const markInvalid = (component, invalidConfig, invalidState, text) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n const query = (component, invalidConfig, _invalidState) => invalidConfig.validator.fold(() => Future.pure(Result.value(true)), validatorInfo => validatorInfo.validate(component));\n const run = (component, invalidConfig, invalidState) => {\n invalidConfig.notify.each(notifyInfo => {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(valid => {\n if (component.getSystem().isConnected()) {\n return valid.fold(err => {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, v => {\n markValid(component, invalidConfig);\n return Result.value(v);\n });\n } else {\n return Result.error('No longer in system');\n }\n });\n };\n const isInvalid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n return has(elem, invalidConfig.invalidClass);\n };\n\n var InvalidateApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n markValid: markValid,\n markInvalid: markInvalid,\n query: query,\n run: run,\n isInvalid: isInvalid\n });\n\n const events$7 = (invalidConfig, invalidState) => invalidConfig.validator.map(validatorInfo => derive$2([run$1(validatorInfo.onEvent, component => {\n run(component, invalidConfig, invalidState).get(identity);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(component => {\n run(component, invalidConfig, invalidState).get(noop);\n })] : []))).getOr({});\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$7\n });\n\n var InvalidateSchema = [\n required$1('invalidClass'),\n defaulted('getRoot', Optional.none),\n optionObjOf('notify', [\n defaulted('aria', 'alert'),\n defaulted('getContainer', Optional.none),\n defaulted('validHtml', ''),\n onHandler('onValid'),\n onHandler('onInvalid'),\n onHandler('onValidate')\n ]),\n optionObjOf('validator', [\n required$1('validate'),\n defaulted('onEvent', 'input'),\n defaulted('validateOnLoad', true)\n ])\n ];\n\n const Invalidating = create$4({\n fields: InvalidateSchema,\n name: 'invalidating',\n active: ActiveInvalidate,\n apis: InvalidateApis,\n extra: {\n validation: validator => {\n return component => {\n const v = Representing.getValue(component);\n return Future.pure(validator(v));\n };\n }\n }\n });\n\n const exhibit$1 = () => nu$8({\n styles: {\n '-webkit-user-select': 'none',\n 'user-select': 'none',\n '-ms-user-select': 'none',\n '-moz-user-select': '-moz-none'\n },\n attributes: { unselectable: 'on' }\n });\n const events$6 = () => derive$2([abort(selectstart(), always)]);\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$6,\n exhibit: exhibit$1\n });\n\n const Unselecting = create$4({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n const renderPanelButton = (spec, sharedBackstage) => Dropdown.sketch({\n dom: spec.dom,\n components: spec.components,\n toggleClass: 'mce-active',\n dropdownBehaviours: derive$1([\n DisablingConfigs.button(() => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(comp, value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })))),\n parts: { menu: part(false, 1, spec.presets) }\n });\n\n const colorInputChangeEvent = generate$6('color-input-change');\n const colorSwatchChangeEvent = generate$6('color-swatch-change');\n const colorPickerCancelEvent = generate$6('color-picker-cancel');\n const renderColorInput = (spec, sharedBackstage, colorInputBackstage, initialData) => {\n const pField = FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n data: initialData,\n onSetValue: c => Invalidating.run(c).get(noop),\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: comp => parentElement(comp.element),\n notify: {\n onValid: comp => {\n const val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: input => {\n const inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n const span = SugarElement.fromTag('span');\n set$8(span, 'background-color', inputValue);\n const res = getRaw(span, 'background-color').fold(() => Result.error('blah'), _ => Result.value(inputValue));\n return Future.pure(res);\n }\n }\n }\n })\n ]),\n selectOnFocus: false\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, sharedBackstage.providers));\n const emitSwatchChange = (colorBit, value) => {\n emitWith(colorBit, colorSwatchChangeEvent, { value });\n };\n const onItemAction = (comp, value) => {\n memColorButton.getOpt(comp).each(colorBit => {\n if (value === 'custom') {\n colorInputBackstage.colorPicker(valueOpt => {\n valueOpt.fold(() => emit(colorBit, colorPickerCancelEvent), value => {\n emitSwatchChange(colorBit, value);\n addColor(spec.storageKey, value);\n });\n }, '#ffffff');\n } else if (value === 'remove') {\n emitSwatchChange(colorBit, '');\n } else {\n emitSwatchChange(colorBit, value);\n }\n });\n };\n const memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: () => [\n southwest$2,\n southeast$2,\n south$2\n ],\n onLtr: () => [\n southeast$2,\n southwest$2,\n south$2\n ]\n },\n components: [],\n fetch: getFetch$1(colorInputBackstage.getColors(spec.storageKey), spec.storageKey, colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(spec.storageKey),\n presets: 'color',\n onItemAction,\n context: spec.context\n }, sharedBackstage));\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: pLabel.toArray().concat([{\n dom: {\n tag: 'div',\n classes: ['tox-color-input']\n },\n components: [\n pField,\n memColorButton.asSpec()\n ]\n }]),\n fieldBehaviours: derive$1([config('form-field-events', [\n run$1(colorInputChangeEvent, (comp, se) => {\n memColorButton.getOpt(comp).each(colorButton => {\n set$8(colorButton.element, 'background-color', se.event.color);\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run$1(colorSwatchChangeEvent, (comp, se) => {\n FormField.getField(comp).each(field => {\n Representing.setValue(field, se.event.value);\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run$1(colorPickerCancelEvent, (comp, _se) => {\n FormField.getField(comp).each(_field => {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n const labelPart = optional({\n schema: [required$1('dom')],\n name: 'label'\n });\n const edgePart = name => optional({\n name: '' + name + '-edge',\n overrides: detail => {\n const action = detail.model.manager.edgeActions[name];\n return action.fold(() => ({}), a => ({\n events: derive$2([\n runActionExtra(touchstart(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousedown(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousemove(), (comp, se, det) => {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n }));\n }\n });\n const tlEdgePart = edgePart('top-left');\n const tedgePart = edgePart('top');\n const trEdgePart = edgePart('top-right');\n const redgePart = edgePart('right');\n const brEdgePart = edgePart('bottom-right');\n const bedgePart = edgePart('bottom');\n const blEdgePart = edgePart('bottom-left');\n const ledgePart = edgePart('left');\n const thumbPart = required({\n name: 'thumb',\n defaults: constant$1({ dom: { styles: { position: 'absolute' } } }),\n overrides: detail => {\n return {\n events: derive$2([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n const isShift = event => isShift$1(event.event);\n const spectrumPart = required({\n schema: [customField('mouseIsDown', () => Cell(false))],\n name: 'spectrum',\n overrides: detail => {\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const setValueFrom = (component, simulatedEvent) => model.getValueFromEvent(simulatedEvent).map(value => model.setValueFrom(component, detail, value));\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: (spectrum, event) => model.onLeft(spectrum, detail, isShift(event)),\n onRight: (spectrum, event) => model.onRight(spectrum, detail, isShift(event)),\n onUp: (spectrum, event) => model.onUp(spectrum, detail, isShift(event)),\n onDown: (spectrum, event) => model.onDown(spectrum, detail, isShift(event))\n }),\n Tabstopping.config({}),\n Focusing.config({})\n ]),\n events: derive$2([\n run$1(touchstart(), setValueFrom),\n run$1(touchmove(), setValueFrom),\n run$1(mousedown(), setValueFrom),\n run$1(mousemove(), (spectrum, se) => {\n if (detail.mouseIsDown.get()) {\n setValueFrom(spectrum, se);\n }\n })\n ])\n };\n }\n });\n var SliderParts = [\n labelPart,\n ledgePart,\n redgePart,\n tedgePart,\n bedgePart,\n tlEdgePart,\n trEdgePart,\n blEdgePart,\n brEdgePart,\n thumbPart,\n spectrumPart\n ];\n\n const _sliderChangeEvent = 'slider.change.value';\n const sliderChangeEvent = constant$1(_sliderChangeEvent);\n const isTouchEvent$2 = evt => evt.type.indexOf('touch') !== -1;\n const getEventSource = simulatedEvent => {\n const evt = simulatedEvent.event.raw;\n if (isTouchEvent$2(evt)) {\n const touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(t => SugarPosition(t.clientX, t.clientY)) : Optional.none();\n } else {\n const mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(me => SugarPosition(me.clientX, me.clientY)) : Optional.none();\n }\n };\n\n const t = 'top', r = 'right', b = 'bottom', l = 'left';\n const minX = detail => detail.model.minX;\n const minY = detail => detail.model.minY;\n const min1X = detail => detail.model.minX - 1;\n const min1Y = detail => detail.model.minY - 1;\n const maxX = detail => detail.model.maxX;\n const maxY = detail => detail.model.maxY;\n const max1X = detail => detail.model.maxX + 1;\n const max1Y = detail => detail.model.maxY + 1;\n const range = (detail, max, min) => max(detail) - min(detail);\n const xRange = detail => range(detail, maxX, minX);\n const yRange = detail => range(detail, maxY, minY);\n const halfX = detail => xRange(detail) / 2;\n const halfY = detail => yRange(detail) / 2;\n const step = (detail, useMultiplier) => useMultiplier ? detail.stepSize * detail.speedMultiplier : detail.stepSize;\n const snap = detail => detail.snapToGrid;\n const snapStart = detail => detail.snapStart;\n const rounded = detail => detail.rounded;\n const hasEdge = (detail, edgeName) => detail[edgeName + '-edge'] !== undefined;\n const hasLEdge = detail => hasEdge(detail, l);\n const hasREdge = detail => hasEdge(detail, r);\n const hasTEdge = detail => hasEdge(detail, t);\n const hasBEdge = detail => hasEdge(detail, b);\n const currentValue = detail => detail.model.value.get();\n\n const xyValue = (x, y) => ({\n x,\n y\n });\n const fireSliderChange$3 = (component, value) => {\n emitWith(component, sliderChangeEvent(), { value });\n };\n const setToTLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n const setToTEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1Y(detail));\n };\n const setToTEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n const setToTREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n const setToREdge = (edge, detail) => {\n fireSliderChange$3(edge, max1X(detail));\n };\n const setToREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail)));\n };\n const setToBREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n const setToBEdge = (edge, detail) => {\n fireSliderChange$3(edge, max1Y(detail));\n };\n const setToBEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n const setToBLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n const setToLEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1X(detail));\n };\n const setToLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), halfY(detail)));\n };\n\n const reduceBy = (value, min, max, step) => {\n if (value < min) {\n return value;\n } else if (value > max) {\n return max;\n } else if (value === min) {\n return min - 1;\n } else {\n return Math.max(min, value - step);\n }\n };\n const increaseBy = (value, min, max, step) => {\n if (value > max) {\n return value;\n } else if (value < min) {\n return min;\n } else if (value === max) {\n return max + 1;\n } else {\n return Math.min(max, value + step);\n }\n };\n const capValue = (value, min, max) => Math.max(min, Math.min(max, value));\n const snapValueOf = (value, min, max, step, snapStart) => snapStart.fold(() => {\n const initValue = value - min;\n const extraValue = Math.round(initValue / step) * step;\n return capValue(min + extraValue, min - 1, max + 1);\n }, start => {\n const remainder = (value - start) % step;\n const adjustment = Math.round(remainder / step);\n const rawSteps = Math.floor((value - start) / step);\n const maxSteps = Math.floor((max - start) / step);\n const numSteps = Math.min(maxSteps, rawSteps + adjustment);\n const r = start + numSteps * step;\n return Math.max(start, r);\n });\n const findOffsetOf = (value, min, max) => Math.min(max, Math.max(value, min)) - min;\n const findValueOf = args => {\n const {min, max, range, value, step, snap, snapStart, rounded, hasMinEdge, hasMaxEdge, minBound, maxBound, screenRange} = args;\n const capMin = hasMinEdge ? min - 1 : min;\n const capMax = hasMaxEdge ? max + 1 : max;\n if (value < minBound) {\n return capMin;\n } else if (value > maxBound) {\n return capMax;\n } else {\n const offset = findOffsetOf(value, minBound, maxBound);\n const newValue = capValue(offset / screenRange * range + min, capMin, capMax);\n if (snap && newValue >= min && newValue <= max) {\n return snapValueOf(newValue, min, max, step, snapStart);\n } else if (rounded) {\n return Math.round(newValue);\n } else {\n return newValue;\n }\n }\n };\n const findOffsetOfValue$2 = args => {\n const {min, max, range, value, hasMinEdge, hasMaxEdge, maxBound, maxOffset, centerMinEdge, centerMaxEdge} = args;\n if (value < min) {\n return hasMinEdge ? 0 : centerMinEdge;\n } else if (value > max) {\n return hasMaxEdge ? maxBound : centerMaxEdge;\n } else {\n return (value - min) / range * maxOffset;\n }\n };\n\n const top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n const getBounds = component => component.element.dom.getBoundingClientRect();\n const getBoundsProperty = (bounds, property) => bounds[property];\n const getMinXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, left);\n };\n const getMaxXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, right);\n };\n const getMinYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, top);\n };\n const getMaxYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, bottom);\n };\n const getXScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, width);\n };\n const getYScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, height);\n };\n const getCenterOffsetOf = (componentMinEdge, componentMaxEdge, spectrumMinEdge) => (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n const getXCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, left);\n const componentMaxEdge = getBoundsProperty(componentBounds, right);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n const getYCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, top);\n const componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n\n const fireSliderChange$2 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset$1 = (spectrum, detail, left) => {\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: left,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n maxBound: getMaxXBounds(spectrum),\n screenRange: getXScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$2 = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value);\n const sliderVal = xValue;\n fireSliderChange$2(spectrum, sliderVal);\n return xValue;\n };\n const setToMin$2 = (spectrum, detail) => {\n const min = minX(detail);\n fireSliderChange$2(spectrum, min);\n };\n const setToMax$2 = (spectrum, detail) => {\n const max = maxX(detail);\n fireSliderChange$2(spectrum, max);\n };\n const moveBy$2 = (direction, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = f(currentValue(detail), minX(detail), maxX(detail), step(detail, useMultiplier));\n fireSliderChange$2(spectrum, xValue);\n return Optional.some(xValue);\n };\n const handleMovement$2 = direction => (spectrum, detail, useMultiplier) => moveBy$2(direction, spectrum, detail, useMultiplier).map(always);\n const getValueFromEvent$2 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => p.left);\n };\n const findOffsetOfValue$1 = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getXScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue$1 = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n };\n const setPositionFromValue$2 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const thumbRadius = get$d(thumb.element) / 2;\n set$8(thumb.element, 'left', pos - thumbRadius + 'px');\n };\n const onLeft$2 = handleMovement$2(-1);\n const onRight$2 = handleMovement$2(1);\n const onUp$2 = Optional.none;\n const onDown$2 = Optional.none;\n const edgeActions$2 = {\n 'top-left': Optional.none(),\n 'top': Optional.none(),\n 'top-right': Optional.none(),\n 'right': Optional.some(setToREdge),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.none(),\n 'bottom-left': Optional.none(),\n 'left': Optional.some(setToLEdge)\n };\n\n var HorizontalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$2,\n setToMin: setToMin$2,\n setToMax: setToMax$2,\n findValueOfOffset: findValueOfOffset$1,\n getValueFromEvent: getValueFromEvent$2,\n findPositionOfValue: findPositionOfValue$1,\n setPositionFromValue: setPositionFromValue$2,\n onLeft: onLeft$2,\n onRight: onRight$2,\n onUp: onUp$2,\n onDown: onDown$2,\n edgeActions: edgeActions$2\n });\n\n const fireSliderChange$1 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset = (spectrum, detail, top) => {\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: top,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n maxBound: getMaxYBounds(spectrum),\n screenRange: getYScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$1 = (spectrum, detail, value) => {\n const yValue = findValueOfOffset(spectrum, detail, value);\n const sliderVal = yValue;\n fireSliderChange$1(spectrum, sliderVal);\n return yValue;\n };\n const setToMin$1 = (spectrum, detail) => {\n const min = minY(detail);\n fireSliderChange$1(spectrum, min);\n };\n const setToMax$1 = (spectrum, detail) => {\n const max = maxY(detail);\n fireSliderChange$1(spectrum, max);\n };\n const moveBy$1 = (direction, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const yValue = f(currentValue(detail), minY(detail), maxY(detail), step(detail, useMultiplier));\n fireSliderChange$1(spectrum, yValue);\n return Optional.some(yValue);\n };\n const handleMovement$1 = direction => (spectrum, detail, useMultiplier) => moveBy$1(direction, spectrum, detail, useMultiplier).map(always);\n const getValueFromEvent$1 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => {\n return p.top;\n });\n };\n const findOffsetOfValue = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getYScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue(spectrum, detail, value, minEdge, maxEdge);\n return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n };\n const setPositionFromValue$1 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue(slider, edges.getSpectrum(slider), value, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbRadius = get$e(thumb.element) / 2;\n set$8(thumb.element, 'top', pos - thumbRadius + 'px');\n };\n const onLeft$1 = Optional.none;\n const onRight$1 = Optional.none;\n const onUp$1 = handleMovement$1(-1);\n const onDown$1 = handleMovement$1(1);\n const edgeActions$1 = {\n 'top-left': Optional.none(),\n 'top': Optional.some(setToTEdge),\n 'top-right': Optional.none(),\n 'right': Optional.none(),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.some(setToBEdge),\n 'bottom-left': Optional.none(),\n 'left': Optional.none()\n };\n\n var VerticalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$1,\n setToMin: setToMin$1,\n setToMax: setToMax$1,\n findValueOfOffset: findValueOfOffset,\n getValueFromEvent: getValueFromEvent$1,\n findPositionOfValue: findPositionOfValue,\n setPositionFromValue: setPositionFromValue$1,\n onLeft: onLeft$1,\n onRight: onRight$1,\n onUp: onUp$1,\n onDown: onDown$1,\n edgeActions: edgeActions$1\n });\n\n const fireSliderChange = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const sliderValue = (x, y) => ({\n x,\n y\n });\n const setValueFrom = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value.left);\n const yValue = findValueOfOffset(spectrum, detail, value.top);\n const val = sliderValue(xValue, yValue);\n fireSliderChange(spectrum, val);\n return val;\n };\n const moveBy = (direction, isVerticalMovement, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = isVerticalMovement ? currentValue(detail).x : f(currentValue(detail).x, minX(detail), maxX(detail), step(detail, useMultiplier));\n const yValue = !isVerticalMovement ? currentValue(detail).y : f(currentValue(detail).y, minY(detail), maxY(detail), step(detail, useMultiplier));\n fireSliderChange(spectrum, sliderValue(xValue, yValue));\n return Optional.some(xValue);\n };\n const handleMovement = (direction, isVerticalMovement) => (spectrum, detail, useMultiplier) => moveBy(direction, isVerticalMovement, spectrum, detail, useMultiplier).map(always);\n const setToMin = (spectrum, detail) => {\n const mX = minX(detail);\n const mY = minY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const setToMax = (spectrum, detail) => {\n const mX = maxX(detail);\n const mY = maxY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const getValueFromEvent = simulatedEvent => getEventSource(simulatedEvent);\n const setPositionFromValue = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbXRadius = get$d(thumb.element) / 2;\n const thumbYRadius = get$e(thumb.element) / 2;\n set$8(thumb.element, 'left', xPos - thumbXRadius + 'px');\n set$8(thumb.element, 'top', yPos - thumbYRadius + 'px');\n };\n const onLeft = handleMovement(-1, false);\n const onRight = handleMovement(1, false);\n const onUp = handleMovement(-1, true);\n const onDown = handleMovement(1, true);\n const edgeActions = {\n 'top-left': Optional.some(setToTLEdgeXY),\n 'top': Optional.some(setToTEdgeXY),\n 'top-right': Optional.some(setToTREdgeXY),\n 'right': Optional.some(setToREdgeXY),\n 'bottom-right': Optional.some(setToBREdgeXY),\n 'bottom': Optional.some(setToBEdgeXY),\n 'bottom-left': Optional.some(setToBLEdgeXY),\n 'left': Optional.some(setToLEdgeXY)\n };\n\n var TwoDModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom,\n setToMin: setToMin,\n setToMax: setToMax,\n getValueFromEvent: getValueFromEvent,\n setPositionFromValue: setPositionFromValue,\n onLeft: onLeft,\n onRight: onRight,\n onUp: onUp,\n onDown: onDown,\n edgeActions: edgeActions\n });\n\n const SliderSchema = [\n defaulted('stepSize', 1),\n defaulted('speedMultiplier', 10),\n defaulted('onChange', noop),\n defaulted('onChoose', noop),\n defaulted('onInit', noop),\n defaulted('onDragStart', noop),\n defaulted('onDragEnd', noop),\n defaulted('snapToGrid', false),\n defaulted('rounded', true),\n option$3('snapStart'),\n requiredOf('model', choose$1('mode', {\n x: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n customField('value', spec => Cell(spec.mode.minX)),\n required$1('getInitialValue'),\n output$1('manager', HorizontalModel)\n ],\n y: [\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell(spec.mode.minY)),\n required$1('getInitialValue'),\n output$1('manager', VerticalModel)\n ],\n xy: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell({\n x: spec.mode.minX,\n y: spec.mode.minY\n })),\n required$1('getInitialValue'),\n output$1('manager', TwoDModel)\n ]\n })),\n field('sliderBehaviours', [\n Keying,\n Representing\n ]),\n customField('mouseIsDown', () => Cell(false))\n ];\n\n const sketch$2 = (detail, components, _spec, _externals) => {\n const getThumb = component => getPartOrDie(component, detail, 'thumb');\n const getSpectrum = component => getPartOrDie(component, detail, 'spectrum');\n const getLeftEdge = component => getPart(component, detail, 'left-edge');\n const getRightEdge = component => getPart(component, detail, 'right-edge');\n const getTopEdge = component => getPart(component, detail, 'top-edge');\n const getBottomEdge = component => getPart(component, detail, 'bottom-edge');\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const refresh = (slider, thumb) => {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge,\n getRightEdge,\n getTopEdge,\n getBottomEdge,\n getSpectrum\n });\n };\n const setValue = (slider, newValue) => {\n modelDetail.value.set(newValue);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n };\n const changeValue = (slider, newValue) => {\n setValue(slider, newValue);\n const thumb = getThumb(slider);\n detail.onChange(slider, thumb, newValue);\n return Optional.some(true);\n };\n const resetToMin = slider => {\n model.setToMin(slider, detail);\n };\n const resetToMax = slider => {\n model.setToMax(slider, detail);\n };\n const choose = slider => {\n const fireOnChoose = () => {\n getPart(slider, detail, 'thumb').each(thumb => {\n const value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n const wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n const onDragStart = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n const onDragEnd = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.onDragEnd(slider, getThumb(slider));\n choose(slider);\n };\n const focusWidget = component => {\n getPart(component, detail, 'spectrum').map(Keying.focusIn);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: focusWidget\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: _ => {\n return modelDetail.value.get();\n },\n setValue\n }\n }),\n Receiving.config({ channels: { [mouseReleased()]: { onReceive: choose } } })\n ]),\n events: derive$2([\n run$1(sliderChangeEvent(), (slider, simulatedEvent) => {\n changeValue(slider, simulatedEvent.event.value);\n }),\n runOnAttached((slider, _simulatedEvent) => {\n const getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n const spectrum = getSpectrum(slider);\n detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n }),\n run$1(touchstart(), onDragStart),\n run$1(touchend(), onDragEnd),\n run$1(mousedown(), (component, event) => {\n focusWidget(component);\n onDragStart(component, event);\n }),\n run$1(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin,\n resetToMax,\n setValue,\n refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n const Slider = composite({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch$2,\n apis: {\n setValue: (apis, slider, value) => {\n apis.setValue(slider, value);\n },\n resetToMin: (apis, slider) => {\n apis.resetToMin(slider);\n },\n resetToMax: (apis, slider) => {\n apis.resetToMax(slider);\n },\n refresh: (apis, slider) => {\n apis.refresh(slider);\n }\n }\n });\n\n const fieldsUpdate = generate$6('rgb-hex-update');\n const sliderUpdate = generate$6('slider-update');\n const paletteUpdate = generate$6('palette-update');\n\n const sliderFactory = (translate, getClass) => {\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-thumb')],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider')],\n attributes: {\n 'role': 'slider',\n 'aria-valuemin': 0,\n 'aria-valuemax': 360,\n 'aria-valuenow': 120\n }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant$1(0)\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: (slider, _thumb, value) => {\n set$9(slider.element, 'aria-valuenow', Math.floor(360 - value * 3.6));\n emitWith(slider, sliderUpdate, { value });\n }\n });\n };\n\n const owner$1 = 'form';\n const schema$i = [field('formBehaviours', [Representing])];\n const getPartName$1 = name => '';\n const sketch$1 = fSpec => {\n const parts = (() => {\n const record = [];\n const field = (name, config) => {\n record.push(name);\n return generateOne$1(owner$1, getPartName$1(name), config);\n };\n return {\n field,\n record: constant$1(record)\n };\n })();\n const spec = fSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName$1(n)\n }));\n return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n };\n const toResult = (o, e) => o.fold(() => Result.error(e), Result.value);\n const make$4 = (detail, components) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: form => {\n const resPs = getAllParts(form, detail);\n return map$1(resPs, (resPThunk, pName) => resPThunk().bind(v => {\n const opt = Composing.getCurrent(v);\n return toResult(opt, new Error(`Cannot find a current component to extract the value from for form part '${ pName }': ` + element(v.element)));\n }).map(Representing.getValue));\n },\n setValue: (form, values) => {\n each(values, (newValue, key) => {\n getPart(form, detail, key).each(wrapper => {\n Composing.getCurrent(wrapper).each(field => {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: (form, key) => {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n });\n const Form = {\n getField: makeApi((apis, component, key) => apis.getField(component, key)),\n sketch: sketch$1\n };\n\n const validInput = generate$6('valid-input');\n const invalidInput = generate$6('invalid-input');\n const validatingInput = generate$6('validating-input');\n const translatePrefix = 'colorcustom.rgb.';\n const uninitiatedTooltipApi = {\n isEnabled: always,\n setEnabled: noop,\n immediatelyShow: noop,\n immediatelyHide: noop\n };\n const rgbFormFactory = (translate, getClass, onValidHexx, onInvalidHexx, tooltipGetConfig, makeIcon) => {\n const setTooltipEnabled = (enabled, tooltipApi) => {\n const api = tooltipApi.get();\n if (enabled === api.isEnabled()) {\n return;\n }\n api.setEnabled(enabled);\n if (enabled) {\n api.immediatelyShow();\n } else {\n api.immediatelyHide();\n }\n };\n const invalidation = (label, isValid, tooltipApi) => Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: comp => {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: comp => {\n setTooltipEnabled(false, tooltipApi);\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: comp => {\n setTooltipEnabled(true, tooltipApi);\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: comp => {\n const value = Representing.getValue(comp);\n const res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n const renderTextField = (isValid, name, label, description, data) => {\n const tooltipApi = Cell(uninitiatedTooltipApi);\n const helptext = translate(translatePrefix + 'range');\n const pLabel = FormField.parts.label({\n dom: { tag: 'label' },\n components: [text$2(label)]\n });\n const pField = FormField.parts.field({\n data,\n factory: Input,\n inputAttributes: {\n 'type': 'text',\n 'aria-label': description,\n ...name === 'hex' ? { 'aria-live': 'polite' } : {}\n },\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid, tooltipApi),\n Tabstopping.config({}),\n Tooltipping.config({\n ...tooltipGetConfig({\n tooltipText: '',\n onSetup: comp => {\n tooltipApi.set({\n isEnabled: () => {\n return Tooltipping.isEnabled(comp);\n },\n setEnabled: enabled => {\n return Tooltipping.setEnabled(comp, enabled);\n },\n immediatelyShow: () => {\n return Tooltipping.immediateOpenClose(comp, true);\n },\n immediatelyHide: () => {\n return Tooltipping.immediateOpenClose(comp, false);\n }\n });\n Tooltipping.setEnabled(comp, false);\n },\n onShow: (component, _tooltip) => {\n Tooltipping.setComponents(component, [{\n dom: {\n tag: 'p',\n classes: [getClass('rgb-warning-note')]\n },\n components: [text$2(translate(name === 'hex' ? 'colorcustom.rgb.invalidHex' : 'colorcustom.rgb.invalid'))]\n }]);\n }\n })\n })\n ]),\n onSetValue: input => {\n if (Invalidating.isInvalid(input)) {\n const run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n const errorId = generate$6('aria-invalid');\n const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n const memStatus = record({\n dom: {\n tag: 'div',\n classes: [getClass('invalid-icon')]\n },\n components: [memInvalidIcon.asSpec()]\n });\n const comps = [\n pLabel,\n pField,\n memStatus.asSpec()\n ];\n const concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ text: helptext })] : [];\n const components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('rgb-container')]\n },\n components\n };\n };\n const copyRgbToHex = (form, rgba) => {\n const hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(hexField => {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value });\n }\n });\n return hex;\n };\n const copyRgbToForm = (form, rgb) => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n Representing.setValue(form, {\n red,\n green,\n blue\n });\n };\n const memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n const updatePreview = (anyInSystem, hex) => {\n memPreview.getOpt(anyInSystem).each(preview => {\n set$8(preview.element, 'background-color', '#' + hex.value);\n });\n };\n const factory = () => {\n const state = {\n red: Cell(Optional.some(255)),\n green: Cell(Optional.some(255)),\n blue: Cell(Optional.some(255)),\n hex: Cell(Optional.some('ffffff'))\n };\n const copyHexToRgb = (form, hex) => {\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n const get = prop => state[prop].get();\n const set = (prop, value) => {\n state[prop].set(value);\n };\n const getValueRgb = () => get('red').bind(red => get('green').bind(green => get('blue').map(blue => rgbaColour(red, green, blue, 1))));\n const setValueRgb = rgb => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n set('red', Optional.some(red));\n set('green', Optional.some(green));\n set('blue', Optional.some(blue));\n };\n const onInvalidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (data.type !== 'hex') {\n set(data.type, Optional.none());\n } else {\n onInvalidHexx(form);\n }\n };\n const onValidHex = (form, value) => {\n onValidHexx(form);\n const hex = hexColour(value);\n set('hex', Optional.some(hex.value));\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n };\n const onValidRgb = (form, prop, value) => {\n const val = parseInt(value, 10);\n set(prop, Optional.some(val));\n getValueRgb().each(rgb => {\n const hex = copyRgbToHex(form, rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n });\n };\n const isHexInputEvent = data => data.type === 'hex';\n const onValidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value);\n } else {\n onValidRgb(form, data.type, data.value);\n }\n };\n const formPartStrings = key => ({\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n });\n const redStrings = formPartStrings('red');\n const greenStrings = formPartStrings('green');\n const blueStrings = formPartStrings('blue');\n const hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(parts => ({\n dom: {\n tag: 'form',\n classes: [getClass('rgb-form')],\n attributes: { 'aria-label': translate('aria.color.picker') }\n },\n components: [\n parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n memPreview.asSpec()\n ],\n formBehaviours: derive$1([\n Invalidating.config({ invalidClass: getClass('form-invalid') }),\n config('rgb-form-events', [\n run$1(validInput, onValidInput),\n run$1(invalidInput, onInvalidInput),\n run$1(validatingInput, onInvalidInput)\n ])\n ])\n })), {\n apis: {\n updateHex: (form, hex) => {\n Representing.setValue(form, { hex: hex.value });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n const rgbFormSketcher = single({\n factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: (apis, form, hex) => {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n const paletteFactory = (translate, getClass) => {\n const spectrumPart = Slider.parts.spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n const thumbPart = Slider.parts.thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: `
    `\n }\n });\n const setColour = (canvas, rgba) => {\n const {width, height} = canvas;\n const ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n const grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = grdWhite;\n ctx.fillRect(0, 0, width, height);\n const grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n ctx.fillStyle = grdBlack;\n ctx.fillRect(0, 0, width, height);\n };\n const setPaletteHue = (slider, hue) => {\n const canvas = slider.components()[0].element.dom;\n const hsv = hsvColour(hue, 100, 100);\n const rgba = fromHsv(hsv);\n setColour(canvas, toString(rgba));\n };\n const setPaletteThumb = (slider, hex) => {\n const hsv = fromRgb(fromHex(hex));\n Slider.setValue(slider, {\n x: hsv.saturation,\n y: 100 - hsv.value\n });\n set$9(slider.element, 'aria-valuetext', translate([\n 'Saturation {0}%, Brightness {1}%',\n hsv.saturation,\n hsv.value\n ]));\n };\n const factory = _detail => {\n const getInitialValue = constant$1({\n x: 0,\n y: 0\n });\n const onChange = (slider, _thumb, value) => {\n if (!isNumber(value)) {\n set$9(slider.element, 'aria-valuetext', translate([\n 'Saturation {0}%, Brightness {1}%',\n Math.floor(value.x),\n Math.floor(100 - value.y)\n ]));\n }\n emitWith(slider, paletteUpdate, { value });\n };\n const onInit = (_slider, _thumb, spectrum, _value) => {\n setColour(spectrum.element.dom, toString(red));\n };\n const sliderBehaviours = derive$1([\n Composing.config({ find: Optional.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: {\n 'role': 'slider',\n 'aria-valuetext': translate([\n 'Saturation {0}%, Brightness {1}%',\n 0,\n 0\n ])\n },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange,\n onInit,\n sliderBehaviours\n });\n };\n const saturationBrightnessPaletteSketcher = single({\n factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setHue: (_apis, slider, hue) => {\n setPaletteHue(slider, hue);\n },\n setThumb: (_apis, slider, hex) => {\n setPaletteThumb(slider, hex);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n const makeFactory = (translate, getClass, tooltipConfig, makeIcon) => {\n const factory = detail => {\n const rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex, tooltipConfig, makeIcon);\n const sbPalette = paletteFactory(translate, getClass);\n const hueSliderToDegrees = hue => (100 - hue) / 100 * 360;\n const hueDegreesToSlider = hue => 100 - hue / 360 * 100;\n const state = {\n paletteRgba: Cell(red),\n paletteHue: Cell(0)\n };\n const memSlider = record(sliderFactory(translate, getClass));\n const memPalette = record(sbPalette.sketch({}));\n const memRgb = record(rgbForm.sketch({}));\n const updatePalette = (anyInSystem, _hex, hue) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setHue(palette, hue);\n });\n };\n const updateFields = (anyInSystem, hex) => {\n memRgb.getOpt(anyInSystem).each(form => {\n rgbForm.updateHex(form, hex);\n });\n };\n const updateSlider = (anyInSystem, _hex, hue) => {\n memSlider.getOpt(anyInSystem).each(slider => {\n Slider.setValue(slider, hueDegreesToSlider(hue));\n });\n };\n const updatePaletteThumb = (anyInSystem, hex) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setThumb(palette, hex);\n });\n };\n const updateState = (hex, hue) => {\n const rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n state.paletteHue.set(hue);\n };\n const runUpdates = (anyInSystem, hex, hue, updates) => {\n updateState(hex, hue);\n each$1(updates, update => {\n update(anyInSystem, hex, hue);\n });\n };\n const onPaletteUpdate = () => {\n const updates = [updateFields];\n return (form, simulatedEvent) => {\n const value = simulatedEvent.event.value;\n const oldHue = state.paletteHue.get();\n const newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, oldHue, updates);\n };\n };\n const onSliderUpdate = () => {\n const updates = [\n updatePalette,\n updateFields\n ];\n return (form, simulatedEvent) => {\n const hue = hueSliderToDegrees(simulatedEvent.event.value);\n const oldRgb = state.paletteRgba.get();\n const oldHsv = fromRgb(oldRgb);\n const newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, hue, updates);\n };\n };\n const onFieldsUpdate = () => {\n const updates = [\n updatePalette,\n updateSlider,\n updatePaletteThumb\n ];\n return (form, simulatedEvent) => {\n const hex = simulatedEvent.event.hex;\n const hsv = hexToHsv(hex);\n runUpdates(form, hex, hsv.hue, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n memSlider.asSpec(),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run$1(fieldsUpdate, onFieldsUpdate()),\n run$1(paletteUpdate, onPaletteUpdate()),\n run$1(sliderUpdate, onSliderUpdate())\n ]),\n Composing.config({ find: comp => memRgb.getOpt(comp) }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n const colourPickerSketcher = single({\n name: 'ColourPicker',\n configFields: [\n required$1('dom'),\n defaulted('onValidHex', noop),\n defaulted('onInvalidHex', noop)\n ],\n factory\n });\n return colourPickerSketcher;\n };\n\n const self = () => Composing.config({ find: Optional.some });\n const memento$1 = mem => Composing.config({ find: mem.getOpt });\n const childAt = index => Composing.config({ find: comp => child$2(comp.element, index).bind(element => comp.getSystem().getByDom(element).toOptional()) });\n const ComposingConfigs = {\n self,\n memento: memento$1,\n childAt\n };\n\n const processors = objOf([\n defaulted('preprocess', identity),\n defaulted('postprocess', identity)\n ]);\n const memento = (mem, rawProcessors) => {\n const ps = asRawOrDie$1('RepresentingConfigs.memento processors', processors, rawProcessors);\n return Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const other = mem.get(comp);\n const rawValue = Representing.getValue(other);\n return ps.postprocess(rawValue);\n },\n setValue: (comp, rawValue) => {\n const newValue = ps.preprocess(rawValue);\n const other = mem.get(comp);\n Representing.setValue(other, newValue);\n }\n }\n });\n };\n const withComp = (optInitialValue, getter, setter) => Representing.config({\n store: {\n mode: 'manual',\n ...optInitialValue.map(initialValue => ({ initialValue })).getOr({}),\n getValue: getter,\n setValue: setter\n }\n });\n const withElement = (initialValue, getter, setter) => withComp(initialValue, c => getter(c.element), (c, v) => setter(c.element, v));\n const domHtml = optInitialValue => withElement(optInitialValue, get$8, set$6);\n const memory = initialValue => Representing.config({\n store: {\n mode: 'memory',\n initialValue\n }\n });\n\n const english = {\n 'colorcustom.rgb.red.label': 'R',\n 'colorcustom.rgb.red.description': 'Red channel',\n 'colorcustom.rgb.green.label': 'G',\n 'colorcustom.rgb.green.description': 'Green channel',\n 'colorcustom.rgb.blue.label': 'B',\n 'colorcustom.rgb.blue.description': 'Blue channel',\n 'colorcustom.rgb.hex.label': '#',\n 'colorcustom.rgb.hex.description': 'Hex color code',\n 'colorcustom.rgb.range': 'Range 0 to 255',\n 'colorcustom.rgb.invalid': 'Numbers only, 0 to 255',\n 'colorcustom.rgb.invalidHex': 'Hexadecimal only, 000000 to FFFFFF',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n const translate$1 = providerBackstage => key => {\n if (isString(key)) {\n return providerBackstage.translate(english[key]);\n } else {\n return providerBackstage.translate(key);\n }\n };\n const renderColorPicker = (_spec, providerBackstage, initialData) => {\n const getClass = key => 'tox-' + key;\n const renderIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: {\n 'title': providerBackstage.translate(label),\n 'aria-live': 'polite',\n ...errId.fold(() => ({}), id => ({ id }))\n }\n }, providerBackstage.icons);\n const colourPickerFactory = makeFactory(translate$1(providerBackstage), getClass, providerBackstage.tooltips.getConfig, renderIcon);\n const onValidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n const onInvalidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n const memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex,\n onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n withComp(initialData, comp => {\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n const optHex = optRgbForm.bind(rgbForm => {\n const formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(hex => '#' + removeLeading(hex, '#')).getOr('');\n }, (comp, newValue) => {\n const pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n const valOpt = Optional.from(pattern.exec(newValue)).bind(matches => get$i(matches, 1));\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(() => {\n console.log('Can not find form');\n }, rgbForm => {\n Representing.setValue(rgbForm, { hex: valOpt.getOr('') });\n Form.getField(rgbForm, 'hex').each(hexField => {\n emit(hexField, input());\n });\n });\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n const isOldCustomEditor = spec => has$2(spec, 'init');\n const renderCustomEditor = spec => {\n const editorApi = value$4();\n const memReplaced = record({ dom: { tag: spec.tag } });\n const initialValue = value$4();\n const focusBehaviour = !isOldCustomEditor(spec) && spec.onFocus.isSome() ? [\n Focusing.config({\n onFocus: comp => {\n spec.onFocus.each(onFocusFn => {\n onFocusFn(comp.element.dom);\n });\n }\n }),\n Tabstopping.config({})\n ] : [];\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('custom-editor-events', [runOnAttached(component => {\n memReplaced.getOpt(component).each(ta => {\n (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$2.load(spec.scriptId, spec.scriptUrl).then(init => init(ta.element.dom, spec.settings))).then(ea => {\n initialValue.on(cvalue => {\n ea.setValue(cvalue);\n });\n initialValue.clear();\n editorApi.set(ea);\n });\n });\n })]),\n withComp(Optional.none(), () => editorApi.get().fold(() => initialValue.get().getOr(''), ed => ed.getValue()), (_component, value) => {\n editorApi.get().fold(() => initialValue.set(value), ed => ed.setValue(value));\n }),\n ComposingConfigs.self()\n ].concat(focusBehaviour)),\n components: [memReplaced.asSpec()]\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const browseFilesEvent = generate$6('browse.files.event');\n const filterByExtension = (files, providersBackstage) => {\n const allowedImageFileTypes = global$1.explode(providersBackstage.getOption('images_file_types'));\n const isFileInAllowedTypes = file => exists(allowedImageFileTypes, type => endsWith(file.name.toLowerCase(), `.${ type.toLowerCase() }`));\n return filter$2(from(files), isFileInAllowedTypes);\n };\n const renderDropZone = (spec, providersBackstage, initialData) => {\n const stopper = (_, se) => {\n se.stop();\n };\n const sequence = actions => (comp, se) => {\n each$1(actions, a => {\n a(comp, se);\n });\n };\n const onDrop = (comp, se) => {\n var _a;\n if (!Disabling.isDisabled(comp)) {\n const transferEvent = se.event.raw;\n emitWith(comp, browseFilesEvent, { files: (_a = transferEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.files });\n }\n };\n const onSelect = (component, simulatedEvent) => {\n const input = simulatedEvent.event.raw.target;\n emitWith(component, browseFilesEvent, { files: input.files });\n };\n const handleFiles = (component, files) => {\n if (files) {\n Representing.setValue(component, filterByExtension(files, providersBackstage));\n emitWith(component, formChangeEvent, { name: spec.name });\n }\n };\n const memInput = record({\n dom: {\n tag: 'input',\n attributes: {\n type: 'file',\n accept: 'image/*'\n },\n styles: { display: 'none' }\n },\n behaviours: derive$1([config('input-file-events', [\n cutter(click()),\n cutter(tap())\n ])])\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n factory: Button,\n dom: {\n tag: 'button',\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [\n text$2(providersBackstage.translate('Browse for an image')),\n memInput.asSpec()\n ],\n action: comp => {\n const inputComp = memInput.get(comp);\n inputComp.element.dom.click();\n },\n buttonBehaviours: derive$1([\n ComposingConfigs.self(),\n memory(initialData.getOr([])),\n Tabstopping.config({}),\n DisablingConfigs.button(() => providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ])\n });\n const wrapper = {\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n Disabling.config({ disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Toggling.config({\n toggleClass: 'dragenter',\n toggleOnExecute: false\n }),\n config('dropzone-events', [\n run$1('dragenter', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragleave', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragover', stopper),\n run$1('drop', sequence([\n stopper,\n onDrop\n ])),\n run$1(change(), onSelect)\n ])\n ]),\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dropzone'],\n styles: {}\n },\n components: [\n {\n dom: { tag: 'p' },\n components: [text$2(providersBackstage.translate('Drop an image here'))]\n },\n pField\n ]\n }]\n };\n return renderFormFieldWith(pLabel, wrapper, ['tox-form__group--stretched'], [config('handle-files', [run$1(browseFilesEvent, (comp, se) => {\n FormField.getField(comp).each(field => {\n handleFiles(field, se.event.files);\n });\n })])]);\n };\n\n const renderGrid = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-form__grid',\n `tox-form__grid--${ spec.columns }col`\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const adaptable = (fn, rate) => {\n let timer = null;\n let args = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n args = null;\n }\n };\n const throttle = (...newArgs) => {\n args = newArgs;\n if (isNull(timer)) {\n timer = setTimeout(() => {\n const tempArgs = args;\n timer = null;\n args = null;\n fn.apply(null, tempArgs);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const first = (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 = (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 beforeObject = generate$6('alloy-fake-before-tabstop');\n const afterObject = generate$6('alloy-fake-after-tabstop');\n const craftWithClasses = classes => {\n return {\n dom: {\n tag: 'div',\n styles: {\n width: '1px',\n height: '1px',\n outline: 'none'\n },\n attributes: { tabindex: '0' },\n classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n const craft = (containerClasses, spec) => {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-navobj',\n ...containerClasses.getOr([])\n ]\n },\n components: [\n craftWithClasses([beforeObject]),\n spec,\n craftWithClasses([afterObject])\n ],\n behaviours: derive$1([ComposingConfigs.childAt(1)])\n };\n };\n const triggerTab = (placeholder, shiftKey) => {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey\n }\n });\n };\n const onFocus = (container, targetComp) => {\n const target = targetComp.element;\n if (has(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n const isPseudoStop = element => {\n return closest(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), never);\n };\n\n const dialogChannel = generate$6('update-dialog');\n const titleChannel = generate$6('update-title');\n const bodyChannel = generate$6('update-body');\n const footerChannel = generate$6('update-footer');\n const bodySendMessageChannel = generate$6('body-send-message');\n const dialogFocusShiftedChannel = generate$6('dialog-focus-shifted');\n\n const browser = detect$1().browser;\n const isSafari = browser.isSafari();\n const isFirefox = browser.isFirefox();\n const isSafariOrFirefox = isSafari || isFirefox;\n const isChromium = browser.isChromium();\n const isElementScrollAtBottom = ({scrollTop, scrollHeight, clientHeight}) => Math.ceil(scrollTop) + clientHeight >= scrollHeight;\n const scrollToY = (win, y) => win.scrollTo(0, y === 'bottom' ? 99999999 : y);\n const getScrollingElement = (doc, html) => {\n const body = doc.body;\n return Optional.from(!/^ 1)) ? body : doc.documentElement);\n };\n const writeValue = (iframeElement, html, fallbackFn) => {\n const iframe = iframeElement.dom;\n Optional.from(iframe.contentDocument).fold(fallbackFn, doc => {\n let lastScrollTop = 0;\n const isScrollAtBottom = getScrollingElement(doc, html).map(el => {\n lastScrollTop = el.scrollTop;\n return el;\n }).forall(isElementScrollAtBottom);\n const scrollAfterWrite = () => {\n const win = iframe.contentWindow;\n if (isNonNullable(win)) {\n if (isScrollAtBottom) {\n scrollToY(win, 'bottom');\n } else if (!isScrollAtBottom && isSafariOrFirefox && lastScrollTop !== 0) {\n scrollToY(win, lastScrollTop);\n }\n }\n };\n if (isSafari) {\n iframe.addEventListener('load', scrollAfterWrite, { once: true });\n }\n doc.open();\n doc.write(html);\n doc.close();\n if (!isSafari) {\n scrollAfterWrite();\n }\n });\n };\n const throttleInterval = someIf(isSafariOrFirefox, isSafari ? 500 : 200);\n const writeValueThrottler = throttleInterval.map(interval => adaptable(writeValue, interval));\n const getDynamicSource = (initialData, stream) => {\n const cachedValue = Cell(initialData.getOr(''));\n return {\n getValue: _frameComponent => cachedValue.get(),\n setValue: (frameComponent, html) => {\n if (cachedValue.get() !== html) {\n const iframeElement = frameComponent.element;\n const setSrcdocValue = () => set$9(iframeElement, 'srcdoc', html);\n if (stream) {\n writeValueThrottler.fold(constant$1(writeValue), throttler => throttler.throttle)(iframeElement, html, setSrcdocValue);\n } else {\n setSrcdocValue();\n }\n }\n cachedValue.set(html);\n }\n };\n };\n const renderIFrame = (spec, providersBackstage, initialData) => {\n const baseClass = 'tox-dialog__iframe';\n const opaqueClass = spec.transparent ? [] : [`${ baseClass }--opaque`];\n const containerBorderedClass = spec.border ? [`tox-navobj-bordered`] : [];\n const attributes = {\n ...spec.label.map(title => ({ title })).getOr({}),\n ...initialData.map(html => ({ srcdoc: html })).getOr({}),\n ...spec.sandboxed ? { sandbox: 'allow-scripts allow-same-origin' } : {}\n };\n const sourcing = getDynamicSource(initialData, spec.streamContent);\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const factory = newSpec => craft(Optional.from(containerBorderedClass), {\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes,\n classes: [\n baseClass,\n ...opaqueClass\n ]\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n withComp(initialData, sourcing.getValue, sourcing.setValue),\n Receiving.config({\n channels: {\n [dialogFocusShiftedChannel]: {\n onReceive: (comp, message) => {\n message.newFocus.each(newFocus => {\n parentElement(comp.element).each(parent => {\n const f = eq(comp.element, newFocus) ? add$2 : remove$3;\n f(parent, 'tox-navobj-bordered-focus');\n });\n });\n }\n }\n }\n })\n ])\n });\n const pField = FormField.parts.field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n const image = image => new Promise((resolve, reject) => {\n const loaded = () => {\n destroy();\n resolve(image);\n };\n const listeners = [\n bind(image, 'load', loaded),\n bind(image, 'error', () => {\n destroy();\n reject('Unable to load data from image: ' + image.dom.src);\n })\n ];\n const destroy = () => each$1(listeners, l => l.unbind());\n if (image.dom.complete) {\n loaded();\n }\n });\n\n const calculateImagePosition = (panelWidth, panelHeight, imageWidth, imageHeight, zoom) => {\n const width = imageWidth * zoom;\n const height = imageHeight * zoom;\n const left = Math.max(0, panelWidth / 2 - width / 2);\n const top = Math.max(0, panelHeight / 2 - height / 2);\n return {\n left: left.toString() + 'px',\n top: top.toString() + 'px',\n width: width.toString() + 'px',\n height: height.toString() + 'px'\n };\n };\n const zoomToFit = (panel, width, height) => {\n const panelW = get$d(panel);\n const panelH = get$e(panel);\n return Math.min(panelW / width, panelH / height, 1);\n };\n const renderImagePreview = (spec, initialData) => {\n const cachedData = Cell(initialData.getOr({ url: '' }));\n const memImage = record({\n dom: {\n tag: 'img',\n classes: ['tox-imagepreview__image'],\n attributes: initialData.map(data => ({ src: data.url })).getOr({})\n }\n });\n const memContainer = record({\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview__container'],\n attributes: { role: 'presentation' }\n },\n components: [memImage.asSpec()]\n });\n const setValue = (frameComponent, data) => {\n const translatedData = { url: data.url };\n data.zoom.each(z => translatedData.zoom = z);\n data.cachedWidth.each(z => translatedData.cachedWidth = z);\n data.cachedHeight.each(z => translatedData.cachedHeight = z);\n cachedData.set(translatedData);\n const applyFramePositioning = () => {\n const {cachedWidth, cachedHeight, zoom} = translatedData;\n if (!isUndefined(cachedWidth) && !isUndefined(cachedHeight)) {\n if (isUndefined(zoom)) {\n const z = zoomToFit(frameComponent.element, cachedWidth, cachedHeight);\n translatedData.zoom = z;\n }\n const position = calculateImagePosition(get$d(frameComponent.element), get$e(frameComponent.element), cachedWidth, cachedHeight, translatedData.zoom);\n memContainer.getOpt(frameComponent).each(container => {\n setAll(container.element, position);\n });\n }\n };\n memImage.getOpt(frameComponent).each(imageComponent => {\n const img = imageComponent.element;\n if (data.url !== get$g(img, 'src')) {\n set$9(img, 'src', data.url);\n remove$3(frameComponent.element, 'tox-imagepreview__loaded');\n }\n applyFramePositioning();\n image(img).then(img => {\n if (frameComponent.getSystem().isConnected()) {\n add$2(frameComponent.element, 'tox-imagepreview__loaded');\n translatedData.cachedWidth = img.dom.naturalWidth;\n translatedData.cachedHeight = img.dom.naturalHeight;\n applyFramePositioning();\n }\n });\n });\n };\n const styles = {};\n spec.height.each(h => styles.height = h);\n const fakeValidatedData = initialData.map(d => ({\n url: d.url,\n zoom: Optional.from(d.zoom),\n cachedWidth: Optional.from(d.cachedWidth),\n cachedHeight: Optional.from(d.cachedHeight)\n }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview'],\n styles,\n attributes: { role: 'presentation' }\n },\n components: [memContainer.asSpec()],\n behaviours: derive$1([\n ComposingConfigs.self(),\n withComp(fakeValidatedData, () => cachedData.get(), setValue)\n ])\n };\n };\n\n const renderLabel$2 = (spec, backstageShared, getCompByName) => {\n const baseClass = 'tox-label';\n const centerClass = spec.align === 'center' ? [`${ baseClass }--center`] : [];\n const endClass = spec.align === 'end' ? [`${ baseClass }--end`] : [];\n const label = record({\n dom: {\n tag: 'label',\n classes: [\n baseClass,\n ...centerClass,\n ...endClass\n ]\n },\n components: [text$2(backstageShared.providers.translate(spec.label))]\n });\n const comps = map$2(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [\n label.asSpec(),\n ...comps\n ],\n behaviours: derive$1([\n ComposingConfigs.self(),\n Replacing.config({}),\n domHtml(Optional.none()),\n Keying.config({ mode: 'acyclic' }),\n config('label', [runOnAttached(comp => {\n spec.for.each(name => {\n getCompByName(name).each(target => {\n label.getOpt(comp).each(labelComp => {\n var _a;\n const id = (_a = get$g(target.element, 'id')) !== null && _a !== void 0 ? _a : generate$6('form-field');\n set$9(target.element, 'id', id);\n set$9(labelComp.element, 'for', id);\n });\n });\n });\n })])\n ])\n };\n };\n\n const internalToolbarButtonExecute = generate$6('toolbar.button.execute');\n const onToolbarButtonExecute = info => runOnExecute$1((comp, _simulatedEvent) => {\n runWithApi(info, comp)(itemApi => {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n const commonButtonDisplayEvent = generate$6('common-button-display-events');\n const toolbarButtonEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events',\n 'tooltipping'\n ],\n [attachedToDom()]: [\n 'toolbar-button-events',\n commonButtonDisplayEvent\n ],\n [detachedFromDom()]: [\n 'toolbar-button-events',\n 'dropdown-events',\n 'tooltipping'\n ],\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n commonButtonDisplayEvent\n ]\n };\n\n const forceInitialSize = comp => set$8(comp.element, 'width', get$f(comp.element, 'width'));\n\n const renderIcon$1 = (iconName, iconsProvider, behaviours) => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ],\n behaviours\n }, iconsProvider);\n const renderIconFromPack$1 = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, []);\n const renderReplaceableIconFromPack = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, [Replacing.config({})]);\n const renderLabel$1 = (text, prefix, providersBackstage) => ({\n dom: {\n tag: 'span',\n classes: [`${ prefix }__select-label`]\n },\n components: [text$2(providersBackstage.translate(text))],\n behaviours: derive$1([Replacing.config({})])\n });\n\n const updateMenuText = generate$6('update-menu-text');\n const updateMenuIcon = generate$6('update-menu-icon');\n const renderCommonDropdown = (spec, prefix, sharedBackstage, btnName) => {\n const editorOffCell = Cell(noop);\n const optMemDisplayText = spec.text.map(text => record(renderLabel$1(text, prefix, sharedBackstage.providers)));\n const optMemDisplayIcon = spec.icon.map(iconName => record(renderReplaceableIconFromPack(iconName, sharedBackstage.providers.icons)));\n const onLeftOrRightInMenu = (comp, se) => {\n const dropdown = Representing.getValue(comp);\n Focusing.focus(dropdown);\n emitWith(dropdown, 'keydown', { raw: se.event.raw });\n Dropdown.close(dropdown);\n return Optional.some(true);\n };\n const role = spec.role.fold(() => ({}), role => ({ role }));\n const listRole = Optional.from(spec.listRole).map(listRole => ({ listRole })).getOr({});\n const ariaLabelAttribute = spec.ariaLabel.fold(() => ({}), ariaLabel => {\n const translatedAriaLabel = sharedBackstage.providers.translate(ariaLabel);\n return { 'aria-label': translatedAriaLabel };\n });\n const iconSpec = render$3('chevron-down', {\n tag: 'div',\n classes: [`${ prefix }__select-chevron`]\n }, sharedBackstage.providers.icons);\n const fixWidthBehaviourName = generate$6('common-button-display-events');\n const customEventsName = 'dropdown-events';\n const memDropdown = record(Dropdown.sketch({\n ...spec.uid ? { uid: spec.uid } : {},\n ...role,\n ...listRole,\n dom: {\n tag: 'button',\n classes: [\n prefix,\n `${ prefix }--select`\n ].concat(map$2(spec.classes, c => `${ prefix }--${ c }`)),\n attributes: {\n ...ariaLabelAttribute,\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(mem => mem.asSpec()),\n optMemDisplayText.map(mem => mem.asSpec()),\n Optional.some(iconSpec)\n ]),\n matchWidth: true,\n useMinWidth: true,\n onOpen: (anchor, dropdownComp, tmenuComp) => {\n if (spec.searchable) {\n focusSearchField(tmenuComp);\n }\n },\n dropdownBehaviours: derive$1([\n ...spec.dropdownBehaviours,\n DisablingConfigs.button(() => spec.disabled || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n Replacing.config({}),\n ...spec.tooltip.map(t => Tooltipping.config(sharedBackstage.providers.tooltips.getConfig({ tooltipText: sharedBackstage.providers.translate(t) }))).toArray(),\n config(customEventsName, [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config(fixWidthBehaviourName, [runOnAttached((comp, _se) => {\n if (spec.listRole !== 'listbox') {\n forceInitialSize(comp);\n }\n })]),\n config('update-dropdown-width-variable', [run$1(windowResize(), (comp, _se) => Dropdown.close(comp))]),\n config('menubutton-update-display-text', [\n run$1(updateMenuText, (comp, se) => {\n optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n Replacing.set(displayText, [text$2(sharedBackstage.providers.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, (comp, se) => {\n optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n });\n })\n ])\n ]),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ],\n [attachedToDom()]: [\n 'toolbar-button-events',\n Tooltipping.name(),\n customEventsName,\n fixWidthBehaviourName\n ]\n }),\n sandboxBehaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n }),\n config('dropdown-sandbox-events', [\n run$1(refetchTriggerEvent, (originalSandboxComp, se) => {\n handleRefetchTrigger(originalSandboxComp);\n se.stop();\n }),\n run$1(redirectMenuItemInteractionEvent, (sandboxComp, se) => {\n handleRedirectToMenuItem(sandboxComp, se);\n se.stop();\n })\n ])\n ]),\n lazySink: sharedBackstage.getSink,\n toggleClass: `${ prefix }--active`,\n parts: {\n menu: {\n ...part(false, spec.columns, spec.presets),\n fakeFocus: spec.searchable,\n ...spec.listRole === 'listbox' ? {} : {\n onHighlightItem: updateAriaOnHighlight,\n onCollapseMenu: (tmenuComp, itemCompCausingCollapse, nowActiveMenuComp) => {\n Highlighting.getHighlighted(nowActiveMenuComp).each(itemComp => {\n updateAriaOnHighlight(tmenuComp, nowActiveMenuComp, itemComp);\n });\n },\n onDehighlightItem: updateAriaOnDehighlight\n }\n }\n },\n getAnchorOverrides: () => {\n return {\n maxHeightFunction: (element, available) => {\n anchored()(element, available - 10);\n }\n };\n },\n fetch: comp => Future.nu(curry(spec.fetch, comp))\n }));\n return memDropdown.asSpec();\n };\n\n const isMenuItemReference = item => isString(item);\n const isSeparator$2 = item => item.type === 'separator';\n const isExpandingMenuItem = item => has$2(item, 'getSubmenuItems');\n const separator$2 = { type: 'separator' };\n const unwrapReferences = (items, menuItems) => {\n const realItems = foldl(items, (acc, item) => {\n if (isMenuItemReference(item)) {\n if (item === '') {\n return acc;\n } else if (item === '|') {\n return acc.length > 0 && !isSeparator$2(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc;\n } else if (has$2(menuItems, item.toLowerCase())) {\n return acc.concat([menuItems[item.toLowerCase()]]);\n } else {\n return acc;\n }\n } else {\n return acc.concat([item]);\n }\n }, []);\n if (realItems.length > 0 && isSeparator$2(realItems[realItems.length - 1])) {\n realItems.pop();\n }\n return realItems;\n };\n const getFromExpandingItem = (item, menuItems) => {\n const submenuItems = item.getSubmenuItems();\n const rest = expand(submenuItems, menuItems);\n const newMenus = deepMerge(rest.menus, { [item.value]: rest.items });\n const newExpansions = deepMerge(rest.expansions, { [item.value]: item.value });\n return {\n item,\n menus: newMenus,\n expansions: newExpansions\n };\n };\n const generateValueIfRequired = item => {\n const itemValue = get$h(item, 'value').getOrThunk(() => generate$6('generated-menu-item'));\n return deepMerge({ value: itemValue }, item);\n };\n const expand = (items, menuItems) => {\n const realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n return foldr(realItems, (acc, item) => {\n if (isExpandingMenuItem(item)) {\n const itemWithValue = generateValueIfRequired(item);\n const newData = getFromExpandingItem(itemWithValue, menuItems);\n return {\n menus: deepMerge(acc.menus, newData.menus),\n items: [\n newData.item,\n ...acc.items\n ],\n expansions: deepMerge(acc.expansions, newData.expansions)\n };\n } else {\n return {\n ...acc,\n items: [\n item,\n ...acc.items\n ]\n };\n }\n }, {\n menus: {},\n expansions: {},\n items: []\n });\n };\n\n const getSearchModeForField = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), searchSettings => ({\n searchMode: 'search-with-field',\n placeholder: searchSettings.placeholder\n }));\n };\n const getSearchModeForResults = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), _ => ({ searchMode: 'search-with-results' }));\n };\n const build = (items, itemResponse, backstage, settings) => {\n const primary = generate$6('primary-menu');\n const data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Optional.none();\n }\n const mainMenuSearchMode = getSearchModeForField(settings);\n const mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, settings.isHorizontalMenu, mainMenuSearchMode);\n const submenuSearchMode = getSearchModeForResults(settings);\n const submenus = map$1(data.menus, (menuItems, menuName) => createPartialMenu(menuName, menuItems, itemResponse, backstage, false, submenuSearchMode));\n const menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n const isSingleListItem = item => !has$2(item, 'items');\n const dataAttribute = 'data-value';\n const fetchItems = (dropdownComp, name, items, selectedValue, hasNestedItems) => map$2(items, item => {\n if (!isSingleListItem(item)) {\n return {\n type: 'nestedmenuitem',\n text: item.text,\n getSubmenuItems: () => fetchItems(dropdownComp, name, item.items, selectedValue, hasNestedItems)\n };\n } else {\n return {\n type: 'togglemenuitem',\n ...hasNestedItems ? {} : { role: 'option' },\n text: item.text,\n value: item.value,\n active: item.value === selectedValue,\n onAction: () => {\n Representing.setValue(dropdownComp, item.value);\n emitWith(dropdownComp, formChangeEvent, { name });\n Focusing.focus(dropdownComp);\n }\n };\n }\n });\n const findItemByValue = (items, value) => findMap(items, item => {\n if (!isSingleListItem(item)) {\n return findItemByValue(item.items, value);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const renderListBox = (spec, backstage, initialData) => {\n const hasNestedItems = exists(spec.items, item => !isSingleListItem(item));\n const providersBackstage = backstage.shared.providers;\n const initialItem = initialData.bind(value => findItemByValue(spec.items, value)).orThunk(() => head(spec.items).filter(isSingleListItem));\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n factory: {\n sketch: sketchSpec => renderCommonDropdown({\n context: spec.context,\n uid: sketchSpec.uid,\n text: initialItem.map(item => item.text),\n icon: Optional.none(),\n tooltip: Optional.none(),\n role: someIf(!hasNestedItems, 'combobox'),\n ...hasNestedItems ? {} : { listRole: 'listbox' },\n ariaLabel: spec.label,\n fetch: (comp, callback) => {\n const items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp), hasNestedItems);\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n }));\n },\n onSetup: constant$1(noop),\n getApi: constant$1({}),\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [\n Tabstopping.config({}),\n withComp(initialItem.map(item => item.value), comp => get$g(comp.element, dataAttribute), (comp, data) => {\n findItemByValue(spec.items, data).each(item => {\n set$9(comp.element, dataAttribute, item.value);\n emitWith(comp, updateMenuText, { text: item.text });\n });\n })\n ]\n }, 'tox-listbox', backstage.shared)\n }\n });\n const listBoxWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-listboxfield']\n },\n components: [pField]\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [listBoxWrap]\n ]),\n fieldBehaviours: derive$1([Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n const renderPanel = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map$2(spec.items, backstage.shared.interpreter)\n });\n\n const factory$h = (detail, _spec) => {\n const options = map$2(detail.options, option => ({\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n }));\n const initialValues = detail.data.map(v => wrap$1('initialValue', v)).getOr({});\n return {\n uid: detail.uid,\n dom: {\n tag: 'select',\n classes: detail.selectClasses,\n attributes: detail.selectAttributes\n },\n components: options,\n behaviours: augment(detail.selectBehaviours, [\n Focusing.config({}),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: select => {\n return get$7(select.element);\n },\n setValue: (select, newValue) => {\n const firstOption = head(detail.options);\n const found = find$5(detail.options, opt => opt.value === newValue);\n if (found.isSome()) {\n set$5(select.element, newValue);\n } else if (select.element.dom.selectedIndex === -1 && newValue === '') {\n firstOption.each(value => set$5(select.element, value.value));\n }\n },\n ...initialValues\n }\n })\n ])\n };\n };\n const HtmlSelect = single({\n name: 'HtmlSelect',\n configFields: [\n required$1('options'),\n field('selectBehaviours', [\n Focusing,\n Representing\n ]),\n defaulted('selectClasses', []),\n defaulted('selectAttributes', {}),\n option$3('data')\n ],\n factory: factory$h\n });\n\n const renderSelectBox = (spec, providersBackstage, initialData) => {\n const translatedOptions = map$2(spec.items, item => ({\n text: providersBackstage.translate(item.text),\n value: item.value\n }));\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n ...initialData.map(data => ({ data })).getOr({}),\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n Tabstopping.config({}),\n config('selectbox-change', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const chevron = spec.size > 1 ? Optional.none() : Optional.some(render$3('chevron-down', {\n tag: 'div',\n classes: ['tox-selectfield__icon-js']\n }, providersBackstage.icons));\n const selectWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-selectfield']\n },\n components: flatten([\n [pField],\n chevron.toArray()\n ])\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [selectWrap]\n ]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ])\n });\n };\n\n const schema$h = constant$1([\n defaulted('field1Name', 'field1'),\n defaulted('field2Name', 'field2'),\n onStrictHandler('onLockedChange'),\n markers$1(['lockClass']),\n defaulted('locked', false),\n SketchBehaviours.field('coupledFieldBehaviours', [\n Composing,\n Representing\n ]),\n defaultedFunction('onInput', noop)\n ]);\n const getField = (comp, detail, partName) => getPart(comp, detail, partName).bind(Composing.getCurrent);\n const coupledPart = (selfName, otherName) => required({\n factory: FormField,\n name: selfName,\n overrides: detail => {\n return {\n fieldBehaviours: derive$1([config('coupled-input-behaviour', [run$1(input(), me => {\n getField(me, detail, otherName).each(other => {\n getPart(me, detail, 'lock').each(lock => {\n if (Toggling.isOn(lock)) {\n detail.onLockedChange(me, other, lock);\n }\n detail.onInput(me);\n });\n });\n })])])\n };\n }\n });\n const parts$c = constant$1([\n coupledPart('field1', 'field2'),\n coupledPart('field2', 'field1'),\n required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'lock',\n overrides: detail => {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n selected: detail.locked,\n toggleClass: detail.markers.lockClass,\n aria: { mode: 'pressed' }\n })])\n };\n }\n })\n ]);\n\n const factory$g = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Optional.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return {\n [detail.field1Name]: Representing.getValue(parts.field1()),\n [detail.field2Name]: Representing.getValue(parts.field2())\n };\n },\n setValue: (comp, value) => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n if (hasNonNullableKey(value, detail.field1Name)) {\n Representing.setValue(parts.field1(), value[detail.field1Name]);\n }\n if (hasNonNullableKey(value, detail.field2Name)) {\n Representing.setValue(parts.field2(), value[detail.field2Name]);\n }\n }\n }\n })\n ]),\n apis: {\n getField1: component => getPart(component, detail, 'field1'),\n getField2: component => getPart(component, detail, 'field2'),\n getLock: component => getPart(component, detail, 'lock')\n }\n });\n const FormCoupledInputs = composite({\n name: 'FormCoupledInputs',\n configFields: schema$h(),\n partFields: parts$c(),\n factory: factory$g,\n apis: {\n getField1: (apis, component) => apis.getField1(component),\n getField2: (apis, component) => apis.getField2(component),\n getLock: (apis, component) => apis.getLock(component)\n }\n });\n\n const formatSize = size => {\n const unitDec = {\n '': 0,\n 'px': 0,\n 'pt': 1,\n 'mm': 1,\n 'pc': 2,\n 'ex': 2,\n 'em': 2,\n 'ch': 2,\n 'rem': 2,\n 'cm': 3,\n 'in': 4,\n '%': 4\n };\n const maxDecimal = unit => unit in unitDec ? unitDec[unit] : 1;\n let numText = size.value.toFixed(maxDecimal(size.unit));\n if (numText.indexOf('.') !== -1) {\n numText = numText.replace(/\\.?0*$/, '');\n }\n return numText + size.unit;\n };\n const parseSize = sizeText => {\n const numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n const match = numPattern.exec(sizeText);\n if (match !== null) {\n const value = parseFloat(match[1]);\n const unit = match[2];\n return Result.value({\n value,\n unit\n });\n } else {\n return Result.error(sizeText);\n }\n };\n const convertUnit = (size, unit) => {\n const inInch = {\n '': 96,\n 'px': 96,\n 'pt': 72,\n 'cm': 2.54,\n 'pc': 12,\n 'mm': 25.4,\n 'in': 1\n };\n const supported = u => has$2(inInch, u);\n if (size.unit === unit) {\n return Optional.some(size.value);\n } else if (supported(size.unit) && supported(unit)) {\n if (inInch[size.unit] === inInch[unit]) {\n return Optional.some(size.value);\n } else {\n return Optional.some(size.value / inInch[size.unit] * inInch[unit]);\n }\n } else {\n return Optional.none();\n }\n };\n const noSizeConversion = _input => Optional.none();\n const ratioSizeConversion = (scale, unit) => size => convertUnit(size, unit).map(value => ({\n value: value * scale,\n unit\n }));\n const makeRatioConverter = (currentFieldText, otherFieldText) => {\n const cValue = parseSize(currentFieldText).toOptional();\n const oValue = parseSize(otherFieldText).toOptional();\n return lift2(cValue, oValue, (cSize, oSize) => convertUnit(cSize, oSize.unit).map(val => oSize.value / val).map(r => ratioSizeConversion(r, oSize.unit)).getOr(noSizeConversion)).getOr(noSizeConversion);\n };\n\n const renderSizeInput = (spec, providersBackstage) => {\n let converter = noSizeConversion;\n const ratioEvent = generate$6('ratio-event');\n const makeIcon = iconName => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n const disabled = () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable;\n const toggleOnReceive$1 = toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context));\n const label = spec.label.getOr('Constrain proportions');\n const translatedLabel = providersBackstage.translate(label);\n const pLock = FormCoupledInputs.parts.lock({\n dom: {\n tag: 'button',\n classes: [\n 'tox-lock',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: {\n 'aria-label': translatedLabel,\n 'data-mce-name': label\n }\n },\n components: [\n makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({ disabled }),\n toggleOnReceive$1,\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: translatedLabel }))\n ])\n });\n const formGroup = components => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components\n });\n const getFieldPart = isField1 => FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({ disabled }),\n toggleOnReceive$1,\n Tabstopping.config({}),\n config('size-input-events', [\n run$1(focusin(), (component, _simulatedEvent) => {\n emitWith(component, ratioEvent, { isField1 });\n }),\n run$1(change(), (component, _simulatedEvent) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n const getLabel = label => ({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n const widthField = FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width')),\n getFieldPart(true)\n ]));\n const heightField = FormCoupledInputs.parts.field2(formGroup([\n FormField.parts.label(getLabel('Height')),\n getFieldPart(false)\n ]));\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(nbsp),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: (current, other, _lock) => {\n parseSize(Representing.getValue(current)).each(size => {\n converter(size).each(newSize => {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled,\n onDisabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('mode:design')),\n config('size-input-events2', [run$1(ratioEvent, (component, simulatedEvent) => {\n const isField1 = simulatedEvent.event.isField1;\n const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n const value1 = optCurrent.map(Representing.getValue).getOr('');\n const value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n const renderSlider = (spec, providerBackstage, initialData) => {\n const labelPart = Slider.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providerBackstage.translate(spec.label))]\n });\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: ['tox-slider__rail'],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: ['tox-slider__handle'],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-slider'],\n attributes: { role: 'presentation' }\n },\n model: {\n mode: 'x',\n minX: spec.min,\n maxX: spec.max,\n getInitialValue: constant$1(initialData.getOrThunk(() => (Math.abs(spec.max) - Math.abs(spec.min)) / 2))\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([\n ComposingConfigs.self(),\n Focusing.config({})\n ]),\n onChoose: (component, thumb, value) => {\n emitWith(component, formChangeEvent, {\n name: spec.name,\n value\n });\n },\n onChange: (component, thumb, value) => {\n emitWith(component, formChangeEvent, {\n name: spec.name,\n value\n });\n }\n });\n };\n\n const renderTable = (spec, providersBackstage) => {\n const renderTh = text => ({\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderHeader = header => ({\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map$2(header, renderTh)\n }]\n });\n const renderTd = text => ({\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderTr = row => ({\n dom: { tag: 'tr' },\n components: map$2(row, renderTd)\n });\n const renderRows = rows => ({\n dom: { tag: 'tbody' },\n components: map$2(rows, renderTr)\n });\n return {\n dom: {\n tag: 'table',\n classes: ['tox-dialog__table']\n },\n components: [\n renderHeader(spec.header),\n renderRows(spec.cells)\n ],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n\n const renderTextField = (spec, providersBackstage) => {\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const baseInputBehaviours = [\n Disabling.config({ disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: comp => {\n emit(comp, formSubmitEvent);\n return Optional.some(true);\n }\n }),\n config('textfield-change', [\n run$1(input(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run$1(postPaste(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ]),\n Tabstopping.config({})\n ];\n const validatingBehaviours = spec.validation.map(vl => Invalidating.config({\n getRoot: input => {\n return parentElement(input.element);\n },\n invalidClass: 'tox-invalid',\n validator: {\n validate: input => {\n const v = Representing.getValue(input);\n const result = vl.validator(v);\n return Future.pure(result === true ? Result.value(v) : Result.error(result));\n },\n validateOnLoad: vl.validateOnLoad\n }\n })).toArray();\n const placeholder = spec.placeholder.fold(constant$1({}), p => ({ placeholder: providersBackstage.translate(p) }));\n const inputMode = spec.inputMode.fold(constant$1({}), mode => ({ inputmode: mode }));\n const inputAttributes = {\n ...placeholder,\n ...inputMode,\n 'data-mce-name': spec.name\n };\n const pField = FormField.parts.field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n ...spec.data.map(data => ({ data })).getOr({}),\n inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n const pTextField = spec.multiline ? {\n dom: {\n tag: 'div',\n classes: ['tox-textarea-wrap']\n },\n components: [pField]\n } : pField;\n const extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n const extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n const extraBehaviours = [\n Disabling.config({\n disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ];\n return renderFormFieldWith(pLabel, pTextField, extraClasses2, extraBehaviours);\n };\n const renderInput = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: false,\n label: spec.label,\n inputMode: spec.inputMode,\n placeholder: spec.placeholder,\n flex: false,\n disabled: !spec.enabled,\n classname: 'tox-textfield',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData,\n context: spec.context\n }, providersBackstage);\n const renderTextarea = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: true,\n label: spec.label,\n inputMode: Optional.none(),\n placeholder: spec.placeholder,\n flex: true,\n disabled: !spec.enabled,\n classname: 'tox-textarea',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData,\n context: spec.context\n }, providersBackstage);\n\n const getAnimationRoot = (component, slideConfig) => slideConfig.getAnimationRoot.fold(() => component.element, get => get(component));\n\n const getDimensionProperty = slideConfig => slideConfig.dimension.property;\n const getDimension = (slideConfig, elem) => slideConfig.dimension.getDimension(elem);\n const disableTransitions = (component, slideConfig) => {\n const root = getAnimationRoot(component, slideConfig);\n remove$2(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n const setShrunk = (component, slideConfig) => {\n remove$3(component.element, slideConfig.openClass);\n add$2(component.element, slideConfig.closedClass);\n set$8(component.element, getDimensionProperty(slideConfig), '0px');\n reflow(component.element);\n };\n const setGrown = (component, slideConfig) => {\n remove$3(component.element, slideConfig.closedClass);\n add$2(component.element, slideConfig.openClass);\n remove$7(component.element, getDimensionProperty(slideConfig));\n };\n const doImmediateShrink = (component, slideConfig, slideState, _calculatedSize) => {\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n slideConfig.onShrunk(component);\n };\n const doStartShrink = (component, slideConfig, slideState, calculatedSize) => {\n const size = calculatedSize.getOrThunk(() => getDimension(slideConfig, component.element));\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), size);\n reflow(component.element);\n const root = getAnimationRoot(component, slideConfig);\n remove$3(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n const doStartSmartShrink = (component, slideConfig, slideState) => {\n const size = getDimension(slideConfig, component.element);\n const shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Optional.some(size));\n };\n const doStartGrow = (component, slideConfig, slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n const wasShrinking = has(root, slideConfig.shrinkingClass);\n const beforeSize = getDimension(slideConfig, component.element);\n setGrown(component, slideConfig);\n const fullSize = getDimension(slideConfig, component.element);\n const startPartialGrow = () => {\n set$8(component.element, getDimensionProperty(slideConfig), beforeSize);\n reflow(component.element);\n };\n const startCompleteGrow = () => {\n setShrunk(component, slideConfig);\n };\n const setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n setStartSize();\n remove$3(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n const refresh$3 = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n remove$7(component.element, getDimensionProperty(slideConfig));\n const fullSize = getDimension(slideConfig, component.element);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n }\n };\n const grow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n doStartGrow(component, slideConfig, slideState);\n }\n };\n const shrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doStartSmartShrink(component, slideConfig, slideState);\n }\n };\n const immediateShrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doImmediateShrink(component, slideConfig, slideState);\n }\n };\n const hasGrown = (component, slideConfig, slideState) => slideState.isExpanded();\n const hasShrunk = (component, slideConfig, slideState) => slideState.isCollapsed();\n const isGrowing = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.growingClass) === true;\n };\n const isShrinking = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.shrinkingClass) === true;\n };\n const isTransitioning = (component, slideConfig, slideState) => isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n const toggleGrow = (component, slideConfig, slideState) => {\n const f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\n };\n const immediateGrow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n slideConfig.onGrown(component);\n }\n };\n\n var SlidingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$3,\n grow: grow,\n shrink: shrink,\n immediateShrink: immediateShrink,\n hasGrown: hasGrown,\n hasShrunk: hasShrunk,\n isGrowing: isGrowing,\n isShrinking: isShrinking,\n isTransitioning: isTransitioning,\n toggleGrow: toggleGrow,\n disableTransitions: disableTransitions,\n immediateGrow: immediateGrow\n });\n\n const exhibit = (base, slideConfig, _slideState) => {\n const expanded = slideConfig.expanded;\n return expanded ? nu$8({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$8({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n const events$5 = (slideConfig, slideState) => derive$2([runOnSource(transitionend(), (component, simulatedEvent) => {\n const raw = simulatedEvent.event.raw;\n if (raw.propertyName === slideConfig.dimension.property) {\n disableTransitions(component, slideConfig);\n if (slideState.isExpanded()) {\n remove$7(component.element, slideConfig.dimension.property);\n }\n const notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit,\n events: events$5\n });\n\n var SlidingSchema = [\n required$1('closedClass'),\n required$1('openClass'),\n required$1('shrinkingClass'),\n required$1('growingClass'),\n option$3('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted('expanded', false),\n requiredOf('dimension', choose$1('property', {\n width: [\n output$1('property', 'width'),\n output$1('getDimension', elem => get$d(elem) + 'px')\n ],\n height: [\n output$1('property', 'height'),\n output$1('getDimension', elem => get$e(elem) + 'px')\n ]\n }))\n ];\n\n const init$8 = spec => {\n const state = Cell(spec.expanded);\n const readState = () => 'expanded: ' + state.get();\n return nu$7({\n isExpanded: () => state.get() === true,\n isCollapsed: () => state.get() === false,\n setCollapsed: curry(state.set, false),\n setExpanded: curry(state.set, true),\n readState\n });\n };\n\n var SlidingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$8\n });\n\n const Sliding = create$4({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n const getMenuButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setActive: state => {\n const elm = component.element;\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$9(elm, 'aria-pressed', true);\n } else {\n remove$3(elm, 'tox-tbtn--enabled');\n remove$8(elm, 'aria-pressed');\n }\n },\n isActive: () => has(component.element, 'tox-tbtn--enabled'),\n setText: text => {\n emitWith(component, updateMenuText, { text });\n },\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const renderMenuButton = (spec, prefix, backstage, role, tabstopping = true, btnName) => {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n ariaLabel: spec.tooltip,\n searchable: spec.search.isSome(),\n role,\n fetch: (dropdownComp, callback) => {\n const fetchContext = { pattern: spec.search.isSome() ? getSearchPattern(dropdownComp) : '' };\n spec.fetch(items => {\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: spec.search\n }));\n }, fetchContext, getMenuButtonApi(dropdownComp));\n },\n onSetup: spec.onSetup,\n getApi: getMenuButtonApi,\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [...tabstopping ? [Tabstopping.config({})] : []],\n context: spec.context\n }, prefix, backstage.shared, btnName);\n };\n const getFetch = (items, getButton, backstage) => {\n const getMenuItemAction = item => api => {\n const newValue = !api.isActive();\n api.setActive(newValue);\n item.storage.set(newValue);\n backstage.shared.getSink().each(sink => {\n getButton().getOpt(sink).each(orig => {\n focus$3(orig.element);\n emitWith(orig, formActionEvent, {\n name: item.name,\n value: item.storage.get()\n });\n });\n });\n };\n const getMenuItemSetup = item => api => {\n api.setActive(item.storage.get());\n };\n return success => {\n success(map$2(items, item => {\n const text = item.text.fold(() => ({}), text => ({ text }));\n return {\n type: item.type,\n active: false,\n ...text,\n context: item.context,\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n };\n }));\n };\n };\n\n const renderLabel = text => ({\n dom: {\n tag: 'span',\n classes: ['tox-tree__label'],\n attributes: { 'aria-label': text }\n },\n components: [text$2(text)]\n });\n const renderCustomStateIcon = (container, components, backstage) => {\n container.customStateIcon.each(icon => components.push(renderIcon(icon, backstage.shared.providers.icons, container.customStateIconTooltip.fold(() => [], tooltip => [Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: tooltip }))]), ['tox-icon-custom-state'])));\n };\n const leafLabelEventsId = generate$6('leaf-label-event-id');\n const renderLeafLabel = ({leaf, onLeafAction, visible, treeId, selectedId, backstage}) => {\n const internalMenuButton = leaf.menu.map(btn => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none(), visible));\n const components = [renderLabel(leaf.title)];\n renderCustomStateIcon(leaf, components, backstage);\n internalMenuButton.each(btn => components.push(btn));\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-tree--leaf__label',\n 'tox-trbtn'\n ].concat(visible ? ['tox-tree--leaf__label--visible'] : [])\n },\n components,\n role: 'treeitem',\n action: button => {\n onLeafAction(leaf.id);\n button.getSystem().broadcastOn([`update-active-item-${ treeId }`], { value: leaf.id });\n },\n eventOrder: {\n [keydown()]: [\n leafLabelEventsId,\n 'keying'\n ]\n },\n buttonBehaviours: derive$1([\n ...visible ? [Tabstopping.config({})] : [],\n Toggling.config({\n toggleClass: 'tox-trbtn--enabled',\n toggleOnExecute: false,\n aria: { mode: 'selected' }\n }),\n Receiving.config({\n channels: {\n [`update-active-item-${ treeId }`]: {\n onReceive: (comp, message) => {\n (message.value === leaf.id ? Toggling.on : Toggling.off)(comp);\n }\n }\n }\n }),\n config(leafLabelEventsId, [\n runOnAttached((comp, _se) => {\n selectedId.each(id => {\n const toggle = id === leaf.id ? Toggling.on : Toggling.off;\n toggle(comp);\n });\n }),\n run$1(keydown(), (comp, se) => {\n const isLeftArrowKey = se.event.raw.code === 'ArrowLeft';\n const isRightArrowKey = se.event.raw.code === 'ArrowRight';\n if (isLeftArrowKey) {\n ancestor(comp.element, '.tox-tree--directory').each(dirElement => {\n comp.getSystem().getByDom(dirElement).each(dirComp => {\n child(dirElement, '.tox-tree--directory__label').each(dirLabelElement => {\n dirComp.getSystem().getByDom(dirLabelElement).each(Focusing.focus);\n });\n });\n });\n se.stop();\n } else if (isRightArrowKey) {\n se.stop();\n }\n })\n ])\n ])\n });\n };\n const renderIcon = (iconName, iconsProvider, behaviours, extraClasses, extraAttributes) => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-tree__icon-wrap',\n 'tox-icon'\n ].concat(extraClasses || []),\n behaviours,\n attributes: extraAttributes\n }, iconsProvider);\n const renderIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, []);\n const directoryLabelEventsId = generate$6('directory-label-event-id');\n const renderDirectoryLabel = ({directory, visible, noChildren, backstage}) => {\n const internalMenuButton = directory.menu.map(btn => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none()));\n const components = [\n {\n dom: {\n tag: 'div',\n classes: ['tox-chevron']\n },\n components: [renderIconFromPack('chevron-right', backstage.shared.providers.icons)]\n },\n renderLabel(directory.title)\n ];\n renderCustomStateIcon(directory, components, backstage);\n internalMenuButton.each(btn => {\n components.push(btn);\n });\n const toggleExpandChildren = button => {\n ancestor(button.element, '.tox-tree--directory').each(directoryEle => {\n button.getSystem().getByDom(directoryEle).each(directoryComp => {\n const willExpand = !Toggling.isOn(directoryComp);\n Toggling.toggle(directoryComp);\n emitWith(button, 'expand-tree-node', {\n expanded: willExpand,\n node: directory.id\n });\n });\n });\n };\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-tree--directory__label',\n 'tox-trbtn'\n ].concat(visible ? ['tox-tree--directory__label--visible'] : [])\n },\n components,\n action: toggleExpandChildren,\n eventOrder: {\n [keydown()]: [\n directoryLabelEventsId,\n 'keying'\n ]\n },\n buttonBehaviours: derive$1([\n ...visible ? [Tabstopping.config({})] : [],\n config(directoryLabelEventsId, [run$1(keydown(), (comp, se) => {\n const isRightArrowKey = se.event.raw.code === 'ArrowRight';\n const isLeftArrowKey = se.event.raw.code === 'ArrowLeft';\n if (isRightArrowKey && noChildren) {\n se.stop();\n }\n if (isRightArrowKey || isLeftArrowKey) {\n ancestor(comp.element, '.tox-tree--directory').each(directoryEle => {\n comp.getSystem().getByDom(directoryEle).each(directoryComp => {\n if (!Toggling.isOn(directoryComp) && isRightArrowKey || Toggling.isOn(directoryComp) && isLeftArrowKey) {\n toggleExpandChildren(comp);\n se.stop();\n } else if (isLeftArrowKey && !Toggling.isOn(directoryComp)) {\n ancestor(directoryComp.element, '.tox-tree--directory').each(parentDirElement => {\n child(parentDirElement, '.tox-tree--directory__label').each(parentDirLabelElement => {\n directoryComp.getSystem().getByDom(parentDirLabelElement).each(Focusing.focus);\n });\n });\n se.stop();\n }\n });\n });\n }\n })])\n ])\n });\n };\n const renderDirectoryChildren = ({children, onLeafAction, visible, treeId, expandedIds, selectedId, backstage}) => {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree--directory__children']\n },\n components: children.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n expandedIds,\n selectedId,\n onLeafAction,\n labelTabstopping: visible,\n treeId,\n backstage\n });\n }),\n behaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: 'tox-tree--directory__children--closed',\n openClass: 'tox-tree--directory__children--open',\n growingClass: 'tox-tree--directory__children--growing',\n shrinkingClass: 'tox-tree--directory__children--shrinking',\n expanded: visible\n }),\n Replacing.config({})\n ])\n };\n };\n const directoryEventsId = generate$6('directory-event-id');\n const renderDirectory = ({directory, onLeafAction, labelTabstopping, treeId, backstage, expandedIds, selectedId}) => {\n const {children} = directory;\n const expandedIdsCell = Cell(expandedIds);\n const computedChildrenComponents = visible => children.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n expandedIds: expandedIdsCell.get(),\n selectedId,\n onLeafAction,\n labelTabstopping: visible,\n treeId,\n backstage\n });\n });\n const childrenVisible = expandedIds.includes(directory.id);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree--directory'],\n attributes: { role: 'treeitem' }\n },\n components: [\n renderDirectoryLabel({\n directory,\n visible: labelTabstopping,\n noChildren: directory.children.length === 0,\n backstage\n }),\n renderDirectoryChildren({\n children,\n expandedIds,\n selectedId,\n onLeafAction,\n visible: childrenVisible,\n treeId,\n backstage\n })\n ],\n behaviours: derive$1([\n config(directoryEventsId, [\n runOnAttached((comp, _se) => {\n Toggling.set(comp, childrenVisible);\n }),\n run$1('expand-tree-node', (_cmp, se) => {\n const {expanded, node} = se.event;\n expandedIdsCell.set(expanded ? [\n ...expandedIdsCell.get(),\n node\n ] : expandedIdsCell.get().filter(id => id !== node));\n })\n ]),\n Toggling.config({\n ...directory.children.length > 0 ? { aria: { mode: 'expanded' } } : {},\n toggleClass: 'tox-tree--directory--expanded',\n onToggled: (comp, childrenVisible) => {\n const childrenComp = comp.components()[1];\n const newChildren = computedChildrenComponents(childrenVisible);\n if (childrenVisible) {\n Sliding.grow(childrenComp);\n } else {\n Sliding.shrink(childrenComp);\n }\n Replacing.set(childrenComp, newChildren);\n }\n })\n ])\n };\n };\n const treeEventsId = generate$6('tree-event-id');\n const renderTree = (spec, backstage) => {\n const onLeafAction = spec.onLeafAction.getOr(noop);\n const onToggleExpand = spec.onToggleExpand.getOr(noop);\n const defaultExpandedIds = spec.defaultExpandedIds;\n const expandedIds = Cell(defaultExpandedIds);\n const selectedIdCell = Cell(spec.defaultSelectedId);\n const treeId = generate$6('tree-id');\n const children = (selectedId, expandedIds) => spec.items.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible: true,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n selectedId,\n onLeafAction,\n expandedIds,\n labelTabstopping: true,\n treeId,\n backstage\n });\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree'],\n attributes: { role: 'tree' }\n },\n components: children(selectedIdCell.get(), expandedIds.get()),\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: '.tox-tree--leaf__label--visible, .tox-tree--directory__label--visible',\n cycles: false\n }),\n config(treeEventsId, [run$1('expand-tree-node', (_cmp, se) => {\n const {expanded, node} = se.event;\n expandedIds.set(expanded ? [\n ...expandedIds.get(),\n node\n ] : expandedIds.get().filter(id => id !== node));\n onToggleExpand(expandedIds.get(), {\n expanded,\n node\n });\n })]),\n Receiving.config({\n channels: {\n [`update-active-item-${ treeId }`]: {\n onReceive: (comp, message) => {\n selectedIdCell.set(Optional.some(message.value));\n Replacing.set(comp, children(Optional.some(message.value), expandedIds.get()));\n }\n }\n }\n }),\n Replacing.config({})\n ])\n };\n };\n\n const events$4 = (streamConfig, streamState) => {\n const streams = streamConfig.stream.streams;\n const processor = streams.setup(streamConfig, streamState);\n return derive$2([\n run$1(streamConfig.event, processor),\n runOnDetached(() => streamState.cancel())\n ].concat(streamConfig.cancelEvent.map(e => [run$1(e, () => streamState.cancel())]).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$4\n });\n\n const throttle = _config => {\n const state = Cell(null);\n const readState = () => ({ timer: state.get() !== null ? 'set' : 'unset' });\n const setTimer = t => {\n state.set(t);\n };\n const cancel = () => {\n const t = state.get();\n if (t !== null) {\n t.cancel();\n }\n };\n return nu$7({\n readState,\n setTimer,\n cancel\n });\n };\n const init$7 = spec => spec.stream.streams.state(spec);\n\n var StreamingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n throttle: throttle,\n init: init$7\n });\n\n const setup$c = (streamInfo, streamState) => {\n const sInfo = streamInfo.stream;\n const throttler = last(streamInfo.onStream, sInfo.delay);\n streamState.setTimer(throttler);\n return (component, simulatedEvent) => {\n throttler.throttle(component, simulatedEvent);\n if (sInfo.stopEvent) {\n simulatedEvent.stop();\n }\n };\n };\n var StreamingSchema = [\n requiredOf('stream', choose$1('mode', {\n throttle: [\n required$1('delay'),\n defaulted('stopEvent', true),\n output$1('streams', {\n setup: setup$c,\n state: throttle\n })\n ]\n })),\n defaulted('event', 'input'),\n option$3('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n const Streaming = create$4({\n fields: StreamingSchema,\n name: 'streaming',\n active: ActiveStreaming,\n state: StreamingState\n });\n\n const setValueFromItem = (model, input, item) => {\n const itemData = Representing.getValue(item);\n Representing.setValue(input, itemData);\n setCursorAtEnd(input);\n };\n const setSelectionOn = (input, f) => {\n const el = input.element;\n const value = get$7(el);\n const node = el.dom;\n if (get$g(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n const setCursorAtEnd = input => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(value.length, value.length));\n };\n const setSelectionToEnd = (input, startOffset) => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(startOffset, value.length));\n };\n const attemptSelectOver = (model, input, item) => {\n if (!model.selectsOver) {\n return Optional.none();\n } else {\n const currentValue = Representing.getValue(input);\n const inputDisplay = model.getDisplayText(currentValue);\n const itemValue = Representing.getValue(item);\n const itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay) === 0 ? Optional.some(() => {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay.length);\n }) : Optional.none();\n }\n };\n\n const itemExecute = constant$1('alloy.typeahead.itemexecute');\n\n const make$3 = (detail, components, spec, externals) => {\n const navigateList = (comp, simulatedEvent, highlighter) => {\n detail.previewing.set(false);\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Composing.getCurrent(sandbox).each(menu => {\n Highlighting.getHighlighted(menu).fold(() => {\n highlighter(menu);\n }, () => {\n dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent);\n });\n });\n } else {\n const onOpenSync = sandbox => {\n Composing.getCurrent(sandbox).each(highlighter);\n };\n open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n };\n const focusBehaviours$1 = focusBehaviours(detail);\n const mapFetch = comp => tdata => tdata.map(data => {\n const menus = values(data.menus);\n const items = bind$3(menus, menu => filter$2(menu.items, item => item.type === 'item'));\n const repState = Representing.getState(comp);\n repState.update(map$2(items, item => item.data));\n return data;\n });\n const getActiveMenu = sandboxComp => Composing.getCurrent(sandboxComp);\n const typeaheadCustomEvents = 'typeaheadevents';\n const behaviours = [\n Focusing.config({}),\n Representing.config({\n onSetValue: detail.onSetValue,\n store: {\n mode: 'dataset',\n getDataKey: comp => get$7(comp.element),\n getFallbackEntry: itemString => ({\n value: itemString,\n meta: {}\n }),\n setValue: (comp, data) => {\n set$5(comp.element, detail.model.getDisplayText(data));\n },\n ...detail.initialData.map(d => wrap$1('initialValue', d)).getOr({})\n }\n }),\n Streaming.config({\n stream: {\n mode: 'throttle',\n delay: detail.responseTime,\n stopEvent: false\n },\n onStream: (component, _simulatedEvent) => {\n const sandbox = Coupling.getCoupled(component, 'sandbox');\n const focusInInput = Focusing.isFocused(component);\n if (focusInInput) {\n if (get$7(component.element).length >= detail.minChars) {\n const previousValue = getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu).map(Representing.getValue));\n detail.previewing.set(true);\n const onOpenSync = _sandbox => {\n getActiveMenu(sandbox).each(activeMenu => {\n previousValue.fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(activeMenu);\n }\n }, pv => {\n Highlighting.highlightBy(activeMenu, item => {\n const itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(activeMenu).orThunk(() => {\n Highlighting.highlightFirst(activeMenu);\n return Optional.none();\n });\n });\n });\n };\n open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightJustMenu).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Optional.some(true);\n },\n onEscape: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n return Optional.none();\n },\n onUp: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Optional.some(true);\n },\n onEnter: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n const sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu)).map(item => {\n emitWith(comp, itemExecute(), { item });\n return true;\n });\n } else {\n const currentValue = Representing.getValue(comp);\n emit(comp, typeaheadCancel());\n detail.onExecute(sandbox, comp, currentValue);\n if (sandboxIsOpen) {\n Sandboxing.close(sandbox);\n }\n return Optional.some(true);\n }\n }\n }),\n Toggling.config({\n toggleClass: detail.markers.openClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => {\n detail.lazyTypeaheadComp.get().each(input => remove$8(input.element, 'aria-activedescendant'));\n Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n config(typeaheadCustomEvents, [\n runOnAttached(typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.some(typeaheadComp));\n }),\n runOnDetached(_typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.none());\n }),\n runOnExecute$1(comp => {\n const onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }),\n run$1(itemExecute(), (comp, se) => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n setValueFromItem(detail.model, comp, se.event.item);\n emit(comp, typeaheadCancel());\n detail.onItemExecute(comp, sandbox, se.event.item, Representing.getValue(comp));\n Sandboxing.close(sandbox);\n setCursorAtEnd(comp);\n })\n ].concat(detail.dismissOnBlur ? [run$1(postBlur(), typeahead => {\n const sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n if (search(sandbox.element).isNone()) {\n Sandboxing.close(sandbox);\n }\n })] : []))\n ];\n const eventOrder = {\n [detachedFromDom()]: [\n Representing.name(),\n Streaming.name(),\n typeaheadCustomEvents\n ],\n ...detail.eventOrder\n };\n return {\n uid: detail.uid,\n dom: dom(deepMerge(detail, {\n inputAttributes: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'true'\n }\n })),\n behaviours: {\n ...focusBehaviours$1,\n ...augment(detail.typeaheadBehaviours, behaviours)\n },\n eventOrder\n };\n };\n\n const schema$g = constant$1([\n option$3('lazySink'),\n required$1('fetch'),\n defaulted('minChars', 5),\n defaulted('responseTime', 1000),\n onHandler('onOpen'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n defaulted('layouts', Optional.none()),\n defaulted('eventOrder', {}),\n defaultedObjOf('model', {}, [\n defaulted('getDisplayText', itemData => itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value),\n defaulted('selectsOver', true),\n defaulted('populateFromBrowse', true)\n ]),\n onHandler('onSetValue'),\n onKeyboardHandler('onExecute'),\n onHandler('onItemExecute'),\n defaulted('inputClasses', []),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('matchWidth', true),\n defaulted('useMinWidth', false),\n defaulted('dismissOnBlur', true),\n markers$1(['openClass']),\n option$3('initialData'),\n option$3('listRole'),\n field('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n customField('lazyTypeaheadComp', () => Cell(Optional.none)),\n customField('previewing', () => Cell(true))\n ].concat(schema$l()).concat(sandboxFields()));\n const parts$b = constant$1([external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: detail => {\n return {\n fakeFocus: true,\n onHighlightItem: (_tmenu, menu, item) => {\n if (!detail.previewing.get()) {\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n getOpt(item.element, 'id').each(id => set$9(input.element, 'aria-activedescendant', id));\n });\n } else {\n detail.lazyTypeaheadComp.get().each(input => {\n attemptSelectOver(detail.model, input, item).fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.dehighlight(menu, item);\n detail.previewing.set(true);\n } else {\n detail.previewing.set(false);\n }\n }, selectOverTextInInput => {\n selectOverTextInInput();\n detail.previewing.set(false);\n });\n });\n }\n },\n onExecute: (_menu, item) => {\n return detail.lazyTypeaheadComp.get().map(typeahead => {\n emitWith(typeahead, itemExecute(), { item });\n return true;\n });\n },\n onHover: (menu, item) => {\n detail.previewing.set(false);\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n const Typeahead = composite({\n name: 'Typeahead',\n configFields: schema$g(),\n partFields: parts$b(),\n factory: make$3\n });\n\n const wrap = delegate => {\n const toCached = () => {\n return wrap(delegate.toCached());\n };\n const bindFuture = f => {\n return wrap(delegate.bind(resA => resA.fold(err => Future.pure(Result.error(err)), a => f(a))));\n };\n const bindResult = f => {\n return wrap(delegate.map(resA => resA.bind(f)));\n };\n const mapResult = f => {\n return wrap(delegate.map(resA => resA.map(f)));\n };\n const mapError = f => {\n return wrap(delegate.map(resA => resA.mapError(f)));\n };\n const foldResult = (whenError, whenValue) => {\n return delegate.map(res => res.fold(whenError, whenValue));\n };\n const withTimeout = (timeout, errorThunk) => {\n return wrap(Future.nu(callback => {\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(result => {\n if (!timedOut) {\n clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return {\n ...delegate,\n toCached,\n bindFuture,\n bindResult,\n mapResult,\n mapError,\n foldResult,\n withTimeout\n };\n };\n const nu$1 = worker => {\n return wrap(Future.nu(worker));\n };\n const value = value => {\n return wrap(Future.pure(Result.value(value)));\n };\n const error = error => {\n return wrap(Future.pure(Result.error(error)));\n };\n const fromResult = result => {\n return wrap(Future.pure(result));\n };\n const fromFuture = future => {\n return wrap(future.map(Result.value));\n };\n const fromPromise = promise => {\n return nu$1(completer => {\n promise.then(value => {\n completer(Result.value(value));\n }, error => {\n completer(Result.error(error));\n });\n });\n };\n const FutureResult = {\n nu: nu$1,\n wrap,\n pure: value,\n value,\n error,\n fromResult,\n fromFuture,\n fromPromise\n };\n\n const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom, components, tooltip, providersBackstage) => {\n const action = actionOpt.fold(() => ({}), action => ({ action }));\n const common = {\n buttonBehaviours: derive$1([\n DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n ...tooltip.map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) }))).toArray(),\n config('button press', [preventDefault('click')])\n ].concat(extraBehaviours)),\n eventOrder: {\n click: [\n 'button press',\n 'alloy.base.behaviour'\n ],\n mousedown: [\n 'button press',\n 'alloy.base.behaviour'\n ]\n },\n ...action\n };\n const domFinal = deepMerge(common, { dom });\n return deepMerge(domFinal, { components });\n };\n const renderIconButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], btnName) => {\n const tooltipAttributes = spec.tooltip.map(tooltip => ({ 'aria-label': providersBackstage.translate(tooltip) })).getOr({});\n const dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: {\n ...tooltipAttributes,\n 'data-mce-name': btnName\n }\n };\n const icon = spec.icon.map(iconName => renderIconFromPack$1(iconName, providersBackstage.icons));\n const components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, spec.tooltip, providersBackstage);\n };\n const calculateClassesFromButtonType = buttonType => {\n switch (buttonType) {\n case 'primary':\n return ['tox-button'];\n case 'toolbar':\n return ['tox-tbtn'];\n case 'secondary':\n default:\n return [\n 'tox-button',\n 'tox-button--secondary'\n ];\n }\n };\n const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const translatedText = providersBackstage.translate(spec.text);\n const icon = spec.icon.map(iconName => renderIconFromPack$1(iconName, providersBackstage.icons));\n const components = [icon.getOrThunk(() => text$2(translatedText))];\n const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? 'secondary' : 'primary');\n const baseClasses = calculateClassesFromButtonType(buttonType);\n const classes = [\n ...baseClasses,\n ...icon.isSome() ? ['tox-button--icon'] : [],\n ...spec.borderless ? ['tox-button--naked'] : [],\n ...extraClasses\n ];\n const dom = {\n tag: 'button',\n classes,\n attributes: {\n 'aria-label': translatedText,\n 'data-mce-name': spec.text\n }\n };\n const optTooltip = spec.icon.map(constant$1(translatedText));\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, optTooltip, providersBackstage);\n };\n const renderButton$1 = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n const getAction = (name, buttonType) => comp => {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name,\n value: {}\n });\n } else if (buttonType === 'submit') {\n emit(comp, formSubmitEvent);\n } else if (buttonType === 'cancel') {\n emit(comp, formCancelEvent);\n } else {\n console.error('Unknown button type: ', buttonType);\n }\n };\n const isMenuFooterButtonSpec = (spec, buttonType) => buttonType === 'menu';\n const isNormalFooterButtonSpec = (spec, buttonType) => buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n const isToggleButtonSpec = (spec, buttonType) => buttonType === 'togglebutton';\n const renderToggleButton = (spec, providers, btnName) => {\n var _a, _b;\n const optMemIcon = spec.icon.map(memIcon => renderReplaceableIconFromPack(memIcon, providers.icons)).map(record);\n const action = comp => {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: {\n setIcon: newIcon => {\n optMemIcon.map(memIcon => memIcon.getOpt(comp).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(newIcon, providers.icons)]);\n }));\n }\n }\n });\n };\n const buttonType = spec.buttonType.getOr(!spec.primary ? 'secondary' : 'primary');\n const buttonSpec = {\n ...spec,\n name: (_a = spec.name) !== null && _a !== void 0 ? _a : '',\n primary: buttonType === 'primary',\n tooltip: spec.tooltip,\n enabled: (_b = spec.enabled) !== null && _b !== void 0 ? _b : false,\n borderless: false\n };\n const tooltipAttributes = buttonSpec.tooltip.or(spec.text).map(tooltip => ({ 'aria-label': providers.translate(tooltip) })).getOr({});\n const buttonTypeClasses = calculateClassesFromButtonType(buttonType !== null && buttonType !== void 0 ? buttonType : 'secondary');\n const showIconAndText = spec.icon.isSome() && spec.text.isSome();\n const dom = {\n tag: 'button',\n classes: [\n ...buttonTypeClasses.concat(spec.icon.isSome() ? ['tox-button--icon'] : []),\n ...spec.active ? ['tox-button--enabled'] : [],\n ...showIconAndText ? ['tox-button--icon-and-text'] : []\n ],\n attributes: {\n ...tooltipAttributes,\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n };\n const extraBehaviours = [];\n const translatedText = providers.translate(spec.text.getOr(''));\n const translatedTextComponed = text$2(translatedText);\n const iconComp = componentRenderPipeline([optMemIcon.map(memIcon => memIcon.asSpec())]);\n const components = [\n ...iconComp,\n ...spec.text.isSome() ? [translatedTextComponed] : []\n ];\n const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers);\n return Button.sketch(iconButtonSpec);\n };\n const renderFooterButton = (spec, buttonType, backstage) => {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n const getButton = () => memButton;\n const menuButtonSpec = spec;\n const fixedSpec = {\n ...spec,\n type: 'menubutton',\n search: Optional.none(),\n onSetup: api => {\n api.setEnabled(spec.enabled);\n return noop;\n },\n fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n };\n const memButton = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none(), true, spec.text.or(spec.tooltip).getOrUndefined()));\n return memButton.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n const action = getAction(spec.name, buttonType);\n const buttonSpec = {\n ...spec,\n context: buttonType === 'cancel' ? 'any' : spec.context,\n borderless: false\n };\n return renderButton$1(buttonSpec, action, backstage.shared.providers, []);\n } else if (isToggleButtonSpec(spec, buttonType)) {\n return renderToggleButton(spec, backstage.shared.providers, spec.text.or(spec.tooltip).getOrUndefined());\n } else {\n console.error('Unknown footer button type: ', buttonType);\n throw new Error('Unknown footer button type');\n }\n };\n const renderDialogButton = (spec, providersBackstage) => {\n const action = getAction(spec.name, 'custom');\n return renderFormField(Optional.none(), FormField.parts.field({\n factory: Button,\n ...renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n memory(''),\n ComposingConfigs.self()\n ])\n }));\n };\n\n const separator$1 = { type: 'separator' };\n const toMenuItem = target => ({\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: noop\n });\n const staticMenuItem = (title, url) => ({\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: noop\n });\n const toMenuItems = targets => map$2(targets, toMenuItem);\n const filterLinkTargets = (type, targets) => filter$2(targets, target => target.type === type);\n const filteredTargets = (type, targets) => toMenuItems(filterLinkTargets(type, targets));\n const headerTargets = linkInfo => filteredTargets('header', linkInfo.targets);\n const anchorTargets = linkInfo => filteredTargets('anchor', linkInfo.targets);\n const anchorTargetTop = linkInfo => Optional.from(linkInfo.anchorTop).map(url => staticMenuItem('', url)).toArray();\n const anchorTargetBottom = linkInfo => Optional.from(linkInfo.anchorBottom).map(url => staticMenuItem('', url)).toArray();\n const historyTargets = history => map$2(history, url => staticMenuItem(url, url));\n const joinMenuLists = items => {\n return foldl(items, (a, b) => {\n const bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator$1, b);\n }, []);\n };\n const filterByQuery = (term, menuItems) => {\n const lowerCaseTerm = term.toLowerCase();\n return filter$2(menuItems, item => {\n var _a;\n const text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n const value = (_a = item.value) !== null && _a !== void 0 ? _a : '';\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n const getItems = (fileType, input, urlBackstage) => {\n var _a, _b;\n const urlInputValue = Representing.getValue(input);\n const term = (_b = (_a = urlInputValue === null || urlInputValue === void 0 ? void 0 : urlInputValue.meta) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : urlInputValue.value;\n const info = urlBackstage.getLinkInformation();\n return info.fold(() => [], linkInfo => {\n const history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n return fileType === 'file' ? joinMenuLists([\n history,\n filterByQuery(term, headerTargets(linkInfo)),\n filterByQuery(term, flatten([\n anchorTargetTop(linkInfo),\n anchorTargets(linkInfo),\n anchorTargetBottom(linkInfo)\n ]))\n ]) : history;\n });\n };\n const errorId = generate$6('aria-invalid');\n const renderUrlInput = (spec, backstage, urlBackstage, initialData) => {\n const providersBackstage = backstage.shared.providers;\n const updateHistory = component => {\n const urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n const typeaheadSpec = {\n ...initialData.map(initialData => ({ initialData })).getOr({}),\n dismissOnBlur: true,\n inputClasses: ['tox-textfield'],\n sandboxClasses: ['tox-dialog__popups'],\n inputAttributes: {\n 'aria-errormessage': errorId,\n 'type': 'url'\n },\n minChars: 0,\n responseTime: 0,\n fetch: input => {\n const items = getItems(spec.filetype, input, urlBackstage);\n const tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n return Future.pure(tdata);\n },\n getHotspot: comp => memUrlBox.getOpt(comp),\n onSetValue: (comp, _newValue) => {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1([\n ...urlBackstage.getValidationHandler().map(handler => Invalidating.config({\n getRoot: comp => parentElement(comp.element),\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: (comp, err) => {\n memInvalidIcon.getOpt(comp).each(invalidComp => {\n set$9(invalidComp.element, 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: input => {\n const urlEntry = Representing.getValue(input);\n return FutureResult.nu(completer => {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, validation => {\n if (validation.status === 'invalid') {\n const err = Result.error(validation.message);\n completer(err);\n } else {\n const val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n })).toArray(),\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n Tabstopping.config({}),\n config('urlinput-events', [\n run$1(input(), comp => {\n const currentValue = get$7(comp.element);\n const trimmedValue = currentValue.trim();\n if (trimmedValue !== currentValue) {\n set$5(comp.element, trimmedValue);\n }\n if (spec.filetype === 'file') {\n emitWith(comp, formChangeEvent, { name: spec.name });\n }\n }),\n run$1(change(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run$1(postPaste(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ])\n ]),\n eventOrder: {\n [input()]: [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ]\n },\n model: {\n getDisplayText: itemData => itemData.value,\n selectsOver: false,\n populateFromBrowse: false\n },\n markers: { openClass: 'tox-textfield--popup-open' },\n lazySink: backstage.shared.getSink,\n parts: { menu: part(false, 1, 'normal') },\n onExecute: (_menu, component, _entry) => {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: (typeahead, _sandbox, _item, _value) => {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n };\n const pField = FormField.parts.field({\n ...typeaheadSpec,\n factory: Typeahead\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const makeIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: {\n 'title': providersBackstage.translate(label),\n 'aria-live': 'polite',\n ...errId.fold(() => ({}), id => ({ id }))\n }\n }, providersBackstage.icons);\n const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n const memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n const optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n const browseUrlEvent = generate$6('browser.url.event');\n const memUrlBox = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap']\n },\n components: [\n pField,\n memStatus.asSpec()\n ],\n behaviours: derive$1([Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable })])\n });\n const memUrlPickerButton = record(renderButton$1({\n context: spec.context,\n name: spec.name,\n icon: Optional.some('browse'),\n text: spec.picker_text.or(spec.label).getOr(''),\n enabled: spec.enabled,\n primary: false,\n buttonType: Optional.none(),\n borderless: true\n }, component => emit(component, browseUrlEvent), providersBackstage, [], ['tox-browse-url']));\n const controlHWrapper = () => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(() => memUrlPickerButton.asSpec()).toArray()\n ])\n });\n const openUrlPicker = comp => {\n Composing.getCurrent(comp).each(field => {\n const componentData = Representing.getValue(field);\n const urlData = {\n fieldname: spec.name,\n ...componentData\n };\n optUrlPicker.each(picker => {\n picker(urlData).get(chosenData => {\n Representing.setValue(field, chosenData);\n emitWith(comp, formChangeEvent, { name: spec.name });\n });\n });\n });\n };\n return FormField.sketch({\n dom: renderFormFieldDom(),\n components: pLabel.toArray().concat([controlHWrapper()]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n config('url-input-events', [run$1(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n const renderAlertBanner = (spec, providersBackstage) => {\n const icon = get$3(spec.icon, providersBackstage.icons);\n return Container.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ spec.level }`\n ]\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon'],\n innerHtml: !spec.url ? icon : undefined\n },\n components: spec.url ? [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n innerHtml: icon,\n attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n },\n action: comp => emitWith(comp, formActionEvent, {\n name: 'alert-banner',\n value: spec.url\n }),\n buttonBehaviours: derive$1([addFocusableBehaviour()])\n })] : undefined\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body'],\n innerHtml: providersBackstage.translate(spec.text)\n }\n }\n ]\n });\n };\n\n const set$1 = (element, status) => {\n element.dom.checked = status;\n };\n const get$2 = element => element.dom.checked;\n\n const renderCheckbox = (spec, providerBackstage, initialData) => {\n const toggleCheckboxHandler = comp => {\n comp.element.dom.click();\n return Optional.some(true);\n };\n const pField = FormField.parts.field({\n factory: { sketch: identity },\n dom: {\n tag: 'input',\n classes: ['tox-checkbox__input'],\n attributes: { type: 'checkbox' }\n },\n behaviours: derive$1([\n ComposingConfigs.self(),\n Disabling.config({\n disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: component => {\n parentElement(component.element).each(element => add$2(element, 'tox-checkbox--disabled'));\n },\n onEnabled: component => {\n parentElement(component.element).each(element => remove$3(element, 'tox-checkbox--disabled'));\n }\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n withElement(initialData, get$2, set$1),\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const pLabel = FormField.parts.label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label']\n },\n components: [text$2(providerBackstage.translate(spec.label))],\n behaviours: derive$1([Unselecting.config({})])\n });\n const makeIcon = className => {\n const iconName = className === 'checked' ? 'selected' : 'unselected';\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ]\n }, providerBackstage.icons);\n };\n const memIcons = record({\n dom: {\n tag: 'div',\n classes: ['tox-checkbox__icons']\n },\n components: [\n makeIcon('checked'),\n makeIcon('unchecked')\n ]\n });\n return FormField.sketch({\n dom: {\n tag: 'label',\n classes: ['tox-checkbox']\n },\n components: [\n pField,\n memIcons.asSpec(),\n pLabel\n ],\n fieldBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providerBackstage.checkUiComponentContext(spec.context))\n ])\n });\n };\n\n const renderHtmlPanel = (spec, providersBackstage) => {\n const classes = [\n 'tox-form__group',\n ...spec.stretched ? ['tox-form__group--stretched'] : []\n ];\n const init = config('htmlpanel', [runOnAttached(comp => {\n spec.onInit(comp.element.dom);\n })]);\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes,\n innerHtml: spec.html\n },\n containerBehaviours: derive$1([\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: '',\n onShow: comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').orThunk(() => search(comp.element)).each(current => {\n getOpt(current, 'data-mce-tooltip').each(text => {\n Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text }));\n });\n });\n }\n }),\n mode: 'children-normal',\n anchor: comp => ({\n type: 'node',\n node: descendant(comp.element, '[data-mce-tooltip]:hover').orThunk(() => search(comp.element).filter(current => getOpt(current, 'data-mce-tooltip').isSome())),\n root: comp.element,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })\n }),\n init\n ])\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes,\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n init\n ])\n });\n }\n };\n\n const make$2 = render => {\n return (parts, spec, dialogData, backstage, getCompByName) => get$h(spec, 'name').fold(() => render(spec, backstage, Optional.none(), getCompByName), fieldName => parts.field(fieldName, render(spec, backstage, get$h(dialogData, fieldName), getCompByName)));\n };\n const makeIframe = render => (parts, spec, dialogData, backstage, getCompByName) => {\n const iframeSpec = deepMerge(spec, { source: 'dynamic' });\n return make$2(render)(parts, iframeSpec, dialogData, backstage, getCompByName);\n };\n const factories = {\n bar: make$2((spec, backstage) => renderBar(spec, backstage.shared)),\n collection: make$2((spec, backstage, data) => renderCollection(spec, backstage.shared.providers, data)),\n alertbanner: make$2((spec, backstage) => renderAlertBanner(spec, backstage.shared.providers)),\n input: make$2((spec, backstage, data) => renderInput(spec, backstage.shared.providers, data)),\n textarea: make$2((spec, backstage, data) => renderTextarea(spec, backstage.shared.providers, data)),\n label: make$2((spec, backstage, _data, getCompByName) => renderLabel$2(spec, backstage.shared, getCompByName)),\n iframe: makeIframe((spec, backstage, data) => renderIFrame(spec, backstage.shared.providers, data)),\n button: make$2((spec, backstage) => renderDialogButton(spec, backstage.shared.providers)),\n checkbox: make$2((spec, backstage, data) => renderCheckbox(spec, backstage.shared.providers, data)),\n colorinput: make$2((spec, backstage, data) => renderColorInput(spec, backstage.shared, backstage.colorinput, data)),\n colorpicker: make$2((spec, backstage, data) => renderColorPicker(spec, backstage.shared.providers, data)),\n dropzone: make$2((spec, backstage, data) => renderDropZone(spec, backstage.shared.providers, data)),\n grid: make$2((spec, backstage) => renderGrid(spec, backstage.shared)),\n listbox: make$2((spec, backstage, data) => renderListBox(spec, backstage, data)),\n selectbox: make$2((spec, backstage, data) => renderSelectBox(spec, backstage.shared.providers, data)),\n sizeinput: make$2((spec, backstage) => renderSizeInput(spec, backstage.shared.providers)),\n slider: make$2((spec, backstage, data) => renderSlider(spec, backstage.shared.providers, data)),\n urlinput: make$2((spec, backstage, data) => renderUrlInput(spec, backstage, backstage.urlinput, data)),\n customeditor: make$2(renderCustomEditor),\n htmlpanel: make$2((spec, backstage) => renderHtmlPanel(spec, backstage.shared.providers)),\n imagepreview: make$2((spec, _, data) => renderImagePreview(spec, data)),\n table: make$2((spec, backstage) => renderTable(spec, backstage.shared.providers)),\n tree: make$2((spec, backstage) => renderTree(spec, backstage)),\n panel: make$2((spec, backstage) => renderPanel(spec, backstage))\n };\n const noFormParts = {\n field: (_name, spec) => spec,\n record: constant$1([])\n };\n const interpretInForm = (parts, spec, dialogData, oldBackstage, getCompByName) => {\n const newBackstage = deepMerge(oldBackstage, { shared: { interpreter: childSpec => interpretParts(parts, childSpec, dialogData, newBackstage, getCompByName) } });\n return interpretParts(parts, spec, dialogData, newBackstage, getCompByName);\n };\n const interpretParts = (parts, spec, dialogData, backstage, getCompByName) => get$h(factories, spec.type).fold(() => {\n console.error(`Unknown factory type \"${ spec.type }\", defaulting to container: `, spec);\n return spec;\n }, factory => factory(parts, spec, dialogData, backstage, getCompByName));\n const interpretWithoutForm = (spec, dialogData, backstage, getCompByName) => interpretParts(noFormParts, spec, dialogData, backstage, getCompByName);\n\n const labelPrefix = 'layout-inset';\n const westEdgeX = anchor => anchor.x;\n const middleX = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const eastEdgeX = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY = anchor => anchor.y;\n const southY = (anchor, element) => anchor.y + anchor.height - element.height;\n const centreY = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const southwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), southY(anchor, element), bubbles.insetSouthwest(), northwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), labelPrefix);\n const southeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), southY(anchor, element), bubbles.insetSoutheast(), northeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), labelPrefix);\n const northwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), northY(anchor), bubbles.insetNorthwest(), southwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), labelPrefix);\n const northeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), northY(anchor), bubbles.insetNortheast(), southeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), labelPrefix);\n const north = (anchor, element, bubbles) => nu$6(middleX(anchor, element), northY(anchor), bubbles.insetNorth(), south$3(), 'north', boundsRestriction(anchor, { top: 2 }), labelPrefix);\n const south = (anchor, element, bubbles) => nu$6(middleX(anchor, element), southY(anchor, element), bubbles.insetSouth(), north$3(), 'south', boundsRestriction(anchor, { bottom: 3 }), labelPrefix);\n const east = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), 'east', boundsRestriction(anchor, { right: 0 }), labelPrefix);\n const west = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), 'west', boundsRestriction(anchor, { left: 1 }), labelPrefix);\n const lookupPreserveLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return north;\n case 'northeast':\n return northeast;\n case 'northwest':\n return northwest;\n case 'south':\n return south;\n case 'southeast':\n return southeast;\n case 'southwest':\n return southwest;\n case 'east':\n return east;\n case 'west':\n return west;\n }\n };\n const preserve = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n const lookupFlippedLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return south;\n case 'northeast':\n return southeast;\n case 'northwest':\n return southwest;\n case 'south':\n return north;\n case 'southeast':\n return northeast;\n case 'southwest':\n return northwest;\n case 'east':\n return west;\n case 'west':\n return east;\n }\n };\n const flip = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n\n const bubbleAlignments$2 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: [],\n alignRight: [],\n right: [],\n left: [],\n bottom: [],\n top: []\n };\n const getInlineDialogAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const bubbleSize = 12;\n const overrides = { maxHeightFunction: expandable$1() };\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [northeast],\n onLtr: () => [northwest]\n },\n overrides\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: nu$5(-bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [\n southeast$2,\n southwest$2,\n south$2\n ],\n onLtr: () => [\n southwest$2,\n southeast$2,\n south$2\n ]\n },\n overrides\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getInlineBottomDialogAnchor = (inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor) => {\n const bubbleSize = 12;\n const overrides = { maxHeightFunction: expandable$1() };\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [north],\n onLtr: () => [north]\n },\n overrides\n });\n const standardAnchor = () => inline ? {\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(0, -getOuter$2(contentAreaElement()), bubbleAlignments$2),\n layouts: {\n onRtl: () => [north$2],\n onLtr: () => [north$2]\n },\n overrides\n } : {\n type: 'hotspot',\n hotspot: lazyBottomAnchorBar(),\n bubble: nu$5(0, 0, bubbleAlignments$2),\n layouts: {\n onRtl: () => [north$2],\n onLtr: () => [north$2]\n },\n overrides\n };\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getBannerAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n layouts: {\n onRtl: () => [north],\n onLtr: () => [north]\n }\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: () => [south$2],\n onLtr: () => [south$2]\n }\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getCursorAnchor = (editor, bodyElement) => () => ({\n type: 'selection',\n root: bodyElement(),\n getSelection: () => {\n const rng = editor.selection.getRng();\n const selectedCells = editor.model.table.getSelectedCells();\n if (selectedCells.length > 1) {\n const firstCell = selectedCells[0];\n const lastCell = selectedCells[selectedCells.length - 1];\n const selectionTableCellRange = {\n firstCell: SugarElement.fromDom(firstCell),\n lastCell: SugarElement.fromDom(lastCell)\n };\n return Optional.some(selectionTableCellRange);\n }\n return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n }\n });\n const getNodeAnchor$1 = bodyElement => element => ({\n type: 'node',\n root: bodyElement(),\n node: element\n });\n const getAnchors = (editor, lazyAnchorbar, lazyBottomAnchorBar, isToolbarTop) => {\n const useFixedToolbarContainer = useFixedContainer(editor);\n const bodyElement = () => SugarElement.fromDom(editor.getBody());\n const contentAreaElement = () => SugarElement.fromDom(editor.getContentAreaContainer());\n const lazyUseEditableAreaAnchor = () => useFixedToolbarContainer || !isToolbarTop();\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n inlineBottomDialog: getInlineBottomDialogAnchor(editor.inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor$1(bodyElement)\n };\n };\n\n const colorPicker = editor => (callback, value) => {\n const dialog = colorPickerDialog(editor);\n dialog(callback, value);\n };\n const hasCustomColors = editor => () => hasCustomColors$1(editor);\n const getColors = editor => id => getColors$2(editor, id);\n const getColorCols = editor => id => getColorCols$1(editor, id);\n const ColorInputBackstage = editor => ({\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors(editor),\n getColors: getColors(editor),\n getColorCols: getColorCols(editor)\n });\n\n const isDraggableModal = editor => () => isDraggableModal$1(editor);\n const DialogBackstage = editor => ({ isDraggableModal: isDraggableModal(editor) });\n\n const HeaderBackstage = editor => {\n const mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n return {\n isPositionedAtTop: () => mode.get() === 'top',\n getDockingMode: mode.get,\n setDockingMode: mode.set\n };\n };\n\n const isNestedFormat = format => hasNonNullableKey(format, 'items');\n const isFormatReference = format => hasNonNullableKey(format, 'format');\n const defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Align',\n items: [\n {\n title: 'Left',\n format: 'alignleft'\n },\n {\n title: 'Center',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n format: 'alignright'\n },\n {\n title: 'Justify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n const isNestedFormats = format => has$2(format, 'items');\n const isBlockFormat = format => has$2(format, 'block');\n const isInlineFormat = format => has$2(format, 'inline');\n const isSelectorFormat = format => has$2(format, 'selector');\n const mapFormats = userFormats => foldl(userFormats, (acc, fmt) => {\n if (isNestedFormats(fmt)) {\n const result = mapFormats(fmt.items);\n return {\n customFormats: acc.customFormats.concat(result.customFormats),\n formats: acc.formats.concat([{\n title: fmt.title,\n items: result.formats\n }])\n };\n } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n const formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n const formatNameWithPrefix = `custom-${ formatName }`;\n return {\n customFormats: acc.customFormats.concat([{\n name: formatNameWithPrefix,\n format: fmt\n }]),\n formats: acc.formats.concat([{\n title: fmt.title,\n format: formatNameWithPrefix,\n icon: fmt.icon\n }])\n };\n } else {\n return {\n ...acc,\n formats: acc.formats.concat(fmt)\n };\n }\n }, {\n customFormats: [],\n formats: []\n });\n const registerCustomFormats = (editor, userFormats) => {\n const result = mapFormats(userFormats);\n const registerFormats = customFormats => {\n each$1(customFormats, fmt => {\n if (!editor.formatter.has(fmt.name)) {\n editor.formatter.register(fmt.name, fmt.format);\n }\n });\n };\n if (editor.formatter) {\n registerFormats(result.customFormats);\n } else {\n editor.on('init', () => {\n registerFormats(result.customFormats);\n });\n }\n return result.formats;\n };\n const getStyleFormats = editor => getUserStyleFormats(editor).map(userFormats => {\n const registeredUserFormats = registerCustomFormats(editor, userFormats);\n return shouldMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n }).getOr(defaultStyleFormats);\n\n const isSeparator$1 = format => {\n const keys$1 = keys(format);\n return keys$1.length === 1 && contains$2(keys$1, 'title');\n };\n const processBasic = (item, isSelectedFor, getPreviewFor) => ({\n ...item,\n type: 'formatter',\n isSelected: isSelectedFor(item.format),\n getStylePreview: getPreviewFor(item.format)\n });\n const register$b = (editor, formats, isSelectedFor, getPreviewFor) => {\n const enrichSupported = item => processBasic(item, isSelectedFor, getPreviewFor);\n const enrichMenu = item => {\n const newItems = doEnrich(item.items);\n return {\n ...item,\n type: 'submenu',\n getStyleItems: constant$1(newItems)\n };\n };\n const enrichCustom = item => {\n const formatName = isString(item.name) ? item.name : generate$6(item.title);\n const formatNameWithPrefix = `custom-${ formatName }`;\n const newItem = {\n ...item,\n type: 'formatter',\n format: formatNameWithPrefix,\n isSelected: isSelectedFor(formatNameWithPrefix),\n getStylePreview: getPreviewFor(formatNameWithPrefix)\n };\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n const doEnrich = items => map$2(items, item => {\n if (isNestedFormat(item)) {\n return enrichMenu(item);\n } else if (isFormatReference(item)) {\n return enrichSupported(item);\n } else if (isSeparator$1(item)) {\n return {\n ...item,\n type: 'separator'\n };\n } else {\n return enrichCustom(item);\n }\n });\n return doEnrich(formats);\n };\n\n const init$6 = editor => {\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const settingsFormats = Cell([]);\n const eventsFormats = Cell([]);\n const replaceSettings = Cell(false);\n editor.on('PreInit', _e => {\n const formats = getStyleFormats(editor);\n const enriched = register$b(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n });\n editor.on('addStyleModifications', e => {\n const modifications = register$b(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n });\n const getData = () => {\n const fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n const fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return { getData };\n };\n\n const TooltipsBackstage = getSink => {\n const tooltipDelay = 300;\n const intervalDelay = tooltipDelay * 0.2;\n let numActiveTooltips = 0;\n const alreadyShowingTooltips = () => numActiveTooltips > 0;\n const getComponents = spec => {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-tooltip__body']\n },\n components: [text$2(spec.tooltipText)]\n }];\n };\n const getConfig = spec => {\n return {\n delayForShow: () => alreadyShowingTooltips() ? intervalDelay : tooltipDelay,\n delayForHide: constant$1(tooltipDelay),\n exclusive: true,\n lazySink: getSink,\n tooltipDom: {\n tag: 'div',\n classes: [\n 'tox-tooltip',\n 'tox-tooltip--up'\n ]\n },\n tooltipComponents: getComponents(spec),\n onShow: (comp, tooltip) => {\n numActiveTooltips++;\n if (spec.onShow) {\n spec.onShow(comp, tooltip);\n }\n },\n onHide: (comp, tooltip) => {\n numActiveTooltips--;\n if (spec.onHide) {\n spec.onHide(comp, tooltip);\n }\n },\n onSetup: spec.onSetup\n };\n };\n return {\n getConfig,\n getComponents\n };\n };\n\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const trim = global$1.trim;\n const hasContentEditableState = value => {\n return node => {\n if (isElement(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n const isContentEditableTrue = hasContentEditableState('true');\n const isContentEditableFalse = hasContentEditableState('false');\n const create = (type, title, url, level, attach) => ({\n type,\n title,\n url,\n level,\n attach\n });\n const isChildOfContentEditableTrue = node => {\n let tempNode = node;\n while (tempNode = tempNode.parentNode) {\n const value = tempNode.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(tempNode);\n }\n }\n return false;\n };\n const select = (selector, root) => {\n return map$2(descendants(SugarElement.fromDom(root), selector), element => {\n return element.dom;\n });\n };\n const getElementText = elm => {\n return elm.innerText || elm.textContent;\n };\n const getOrGenerateId = elm => {\n return elm.id ? elm.id : generate$6('h');\n };\n const isAnchor = elm => {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\n };\n const isValidAnchor = elm => {\n return isAnchor(elm) && isEditable(elm);\n };\n const isHeader = elm => {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n const isEditable = elm => {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n const isValidHeader = elm => {\n return isHeader(elm) && isEditable(elm);\n };\n const getLevel = elm => {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n const headerTarget = elm => {\n var _a;\n const headerId = getOrGenerateId(elm);\n const attach = () => {\n elm.id = headerId;\n };\n return create('header', (_a = getElementText(elm)) !== null && _a !== void 0 ? _a : '', '#' + headerId, getLevel(elm), attach);\n };\n const anchorTarget = elm => {\n const anchorId = elm.id || elm.name;\n const anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n const getHeaderTargets = elms => {\n return map$2(filter$2(elms, isValidHeader), headerTarget);\n };\n const getAnchorTargets = elms => {\n return map$2(filter$2(elms, isValidAnchor), anchorTarget);\n };\n const getTargetElements = elm => {\n const elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n const hasTitle = target => {\n return trim(target.title).length > 0;\n };\n const find = elm => {\n const elms = getTargetElements(elm);\n return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n const LinkTargets = { find };\n\n const STORAGE_KEY = 'tinymce-url-history';\n const HISTORY_LENGTH = 5;\n const isHttpUrl = url => isString(url) && /^https?/.test(url);\n const isArrayOfUrl = a => isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n const isRecordOfUrlArray = r => isObject(r) && find$4(r, value => !isArrayOfUrl(value)).isNone();\n const getAllHistory = () => {\n const unparsedHistory = global$4.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n let history;\n try {\n history = JSON.parse(unparsedHistory);\n } catch (e) {\n if (e instanceof SyntaxError) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n return {};\n }\n throw e;\n }\n if (!isRecordOfUrlArray(history)) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);\n return {};\n }\n return history;\n };\n const setAllHistory = history => {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n global$4.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n const getHistory = fileType => {\n const history = getAllHistory();\n return get$h(history, fileType).getOr([]);\n };\n const addToHistory = (url, fileType) => {\n if (!isHttpUrl(url)) {\n return;\n }\n const history = getAllHistory();\n const items = get$h(history, fileType).getOr([]);\n const itemsWithoutUrl = filter$2(items, item => item !== url);\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n const isTruthy = value => !!value;\n const makeMap = value => map$1(global$1.makeMap(value, /[, ]/), isTruthy);\n const getPicker = editor => Optional.from(getFilePickerCallback(editor));\n const getPickerTypes = editor => {\n const optFileTypes = Optional.from(getFilePickerTypes(editor)).filter(isTruthy).map(makeMap);\n return getPicker(editor).fold(never, _picker => optFileTypes.fold(always, types => keys(types).length > 0 ? types : false));\n };\n const getPickerSetting = (editor, filetype) => {\n const pickerTypes = getPickerTypes(editor);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(editor) : Optional.none();\n } else {\n return pickerTypes[filetype] ? getPicker(editor) : Optional.none();\n }\n };\n const getUrlPicker = (editor, filetype) => getPickerSetting(editor, filetype).map(picker => entry => Future.nu(completer => {\n const handler = (value, meta) => {\n if (!isString(value)) {\n throw new Error('Expected value to be string');\n }\n if (meta !== undefined && !isObject(meta)) {\n throw new Error('Expected meta to be a object');\n }\n const r = {\n value,\n meta\n };\n completer(r);\n };\n const meta = {\n filetype,\n fieldname: entry.fieldname,\n ...Optional.from(entry.meta).getOr({})\n };\n picker.call(editor, handler, entry.value, meta);\n }));\n const getTextSetting = value => Optional.from(value).filter(isString).getOrUndefined();\n const getLinkInformation = editor => {\n if (!useTypeaheadUrls(editor)) {\n return Optional.none();\n }\n return Optional.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(getAnchorTop(editor)),\n anchorBottom: getTextSetting(getAnchorBottom(editor))\n });\n };\n const getValidationHandler = editor => Optional.from(getFilePickerValidatorHandler(editor));\n const UrlInputBackstage = editor => ({\n getHistory,\n addToHistory,\n getLinkInformation: () => getLinkInformation(editor),\n getValidationHandler: () => getValidationHandler(editor),\n getUrlPicker: filetype => getUrlPicker(editor, filetype)\n });\n\n const init$5 = (lazySinks, editor, lazyAnchorbar, lazyBottomAnchorBar) => {\n const contextMenuState = Cell(false);\n const toolbar = HeaderBackstage(editor);\n const providers = {\n icons: () => editor.ui.registry.getAll().icons,\n menuItems: () => editor.ui.registry.getAll().menuItems,\n translate: global$5.translate,\n isDisabled: () => !editor.ui.isEnabled(),\n getOption: editor.options.get,\n tooltips: TooltipsBackstage(lazySinks.dialog),\n checkUiComponentContext: specContext => {\n if (isDisabled(editor)) {\n return {\n contextType: 'disabled',\n shouldDisable: true\n };\n }\n const [key, value = ''] = specContext.split(':');\n const contexts = editor.ui.registry.getAll().contexts;\n const enabledInContext = get$h(contexts, key).fold(() => get$h(contexts, 'mode').map(pred => pred('design')).getOr(false), pred => value.charAt(0) === '!' ? !pred(value.slice(1)) : pred(value));\n return {\n contextType: key,\n shouldDisable: !enabledInContext\n };\n }\n };\n const urlinput = UrlInputBackstage(editor);\n const styles = init$6(editor);\n const colorinput = ColorInputBackstage(editor);\n const dialogSettings = DialogBackstage(editor);\n const isContextMenuOpen = () => contextMenuState.get();\n const setContextMenuState = state => contextMenuState.set(state);\n const commonBackstage = {\n shared: {\n providers,\n anchors: getAnchors(editor, lazyAnchorbar, lazyBottomAnchorBar, toolbar.isPositionedAtTop),\n header: toolbar\n },\n urlinput,\n styles,\n colorinput,\n dialog: dialogSettings,\n isContextMenuOpen,\n setContextMenuState\n };\n const getCompByName = _name => Optional.none();\n const popupBackstage = {\n ...commonBackstage,\n shared: {\n ...commonBackstage.shared,\n interpreter: s => interpretWithoutForm(s, {}, popupBackstage, getCompByName),\n getSink: lazySinks.popup\n }\n };\n const dialogBackstage = {\n ...commonBackstage,\n shared: {\n ...commonBackstage.shared,\n interpreter: s => interpretWithoutForm(s, {}, dialogBackstage, getCompByName),\n getSink: lazySinks.dialog\n }\n };\n return {\n popup: popupBackstage,\n dialog: dialogBackstage\n };\n };\n\n const setup$b = (editor, mothership, uiMotherships) => {\n const broadcastEvent = (name, evt) => {\n each$1([\n mothership,\n ...uiMotherships\n ], m => {\n m.broadcastEvent(name, evt);\n });\n };\n const broadcastOn = (channel, message) => {\n each$1([\n mothership,\n ...uiMotherships\n ], m => {\n m.broadcastOn([channel], message);\n });\n };\n const fireDismissPopups = evt => broadcastOn(dismissPopups(), { target: evt.target });\n const doc = getDocument();\n const onTouchstart = bind(doc, 'touchstart', fireDismissPopups);\n const onTouchmove = bind(doc, 'touchmove', evt => broadcastEvent(documentTouchmove(), evt));\n const onTouchend = bind(doc, 'touchend', evt => broadcastEvent(documentTouchend(), evt));\n const onMousedown = bind(doc, 'mousedown', fireDismissPopups);\n const onMouseup = bind(doc, 'mouseup', evt => {\n if (evt.raw.button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target });\n }\n });\n const onContentClick = raw => broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n const onContentMouseup = raw => {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n }\n };\n const onContentMousedown = () => {\n each$1(editor.editorManager.get(), loopEditor => {\n if (editor !== loopEditor) {\n loopEditor.dispatch('DismissPopups', { relatedTarget: editor });\n }\n });\n };\n const onWindowScroll = evt => broadcastEvent(windowScroll(), fromRawEvent(evt));\n const onWindowResize = evt => {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent(evt));\n };\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n const onElementScroll = capture(dos, 'scroll', evt => {\n requestAnimationFrame(() => {\n const c = editor.getContainer();\n if (c !== undefined && c !== null) {\n const optScrollingContext = detectWhenSplitUiMode(editor, mothership.element);\n const scrollers = optScrollingContext.map(sc => [\n sc.element,\n ...sc.others\n ]).getOr([]);\n if (exists(scrollers, s => eq(s, evt.target))) {\n editor.dispatch('ElementScroll', { target: evt.target.dom });\n broadcastEvent(externalElementScroll(), evt);\n }\n }\n });\n });\n const onEditorResize = () => broadcastOn(repositionPopups(), {});\n const onEditorProgress = evt => {\n if (evt.state) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n }\n };\n const onDismissPopups = event => {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n };\n const onFocusIn = event => editor.dispatch('focusin', event);\n const onFocusOut = event => editor.dispatch('focusout', event);\n editor.on('PostRender', () => {\n editor.on('click', onContentClick);\n editor.on('tap', onContentClick);\n editor.on('mouseup', onContentMouseup);\n editor.on('mousedown', onContentMousedown);\n editor.on('ScrollWindow', onWindowScroll);\n editor.on('ResizeWindow', onWindowResize);\n editor.on('ResizeEditor', onEditorResize);\n editor.on('AfterProgressState', onEditorProgress);\n editor.on('DismissPopups', onDismissPopups);\n each$1([\n mothership,\n ...uiMotherships\n ], gui => {\n gui.element.dom.addEventListener('focusin', onFocusIn);\n gui.element.dom.addEventListener('focusout', onFocusOut);\n });\n });\n editor.on('remove', () => {\n editor.off('click', onContentClick);\n editor.off('tap', onContentClick);\n editor.off('mouseup', onContentMouseup);\n editor.off('mousedown', onContentMousedown);\n editor.off('ScrollWindow', onWindowScroll);\n editor.off('ResizeWindow', onWindowResize);\n editor.off('ResizeEditor', onEditorResize);\n editor.off('AfterProgressState', onEditorProgress);\n editor.off('DismissPopups', onDismissPopups);\n each$1([\n mothership,\n ...uiMotherships\n ], gui => {\n gui.element.dom.removeEventListener('focusin', onFocusIn);\n gui.element.dom.removeEventListener('focusout', onFocusOut);\n });\n onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n onElementScroll.unbind();\n });\n editor.on('detach', () => {\n each$1([\n mothership,\n ...uiMotherships\n ], detachSystem);\n each$1([\n mothership,\n ...uiMotherships\n ], m => m.destroy());\n });\n };\n\n const parts$a = AlloyParts;\n const partType = PartType;\n\n const schema$f = constant$1([\n defaulted('shell', false),\n required$1('makeItem'),\n defaulted('setupItem', noop),\n SketchBehaviours.field('listBehaviours', [Replacing])\n ]);\n const customListDetail = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const itemsPart = optional({\n name: 'items',\n overrides: customListDetail\n });\n const parts$9 = constant$1([itemsPart]);\n const name = constant$1('CustomList');\n\n const factory$f = (detail, components, _spec, _external) => {\n const setItems = (list, items) => {\n getListContainer(list).fold(() => {\n console.error('Custom List was defined to not be a shell, but no item container was specified in components');\n throw new Error('Custom List was defined to not be a shell, but no item container was specified in components');\n }, container => {\n const itemComps = Replacing.contents(container);\n const numListsRequired = items.length;\n const numListsToAdd = numListsRequired - itemComps.length;\n const itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, () => detail.makeItem()) : [];\n const itemsToRemove = itemComps.slice(numListsRequired);\n each$1(itemsToRemove, item => Replacing.remove(container, item));\n each$1(itemsToAdd, item => Replacing.append(container, item));\n const builtLists = Replacing.contents(container);\n each$1(builtLists, (item, i) => {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n const getListContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems }\n };\n };\n const CustomList = composite({\n name: name(),\n configFields: schema$f(),\n partFields: parts$9(),\n factory: factory$f,\n apis: {\n setItems: (apis, list, items) => {\n apis.setItems(list, items);\n }\n }\n });\n\n const schema$e = constant$1([\n required$1('dom'),\n defaulted('shell', true),\n field('toolbarBehaviours', [Replacing])\n ]);\n const enhanceGroups = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const parts$8 = constant$1([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n const factory$e = (detail, components, _spec, _externals) => {\n const setGroups = (toolbar, groups) => {\n getGroupContainer(toolbar).fold(() => {\n console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n }, container => {\n Replacing.set(container, groups);\n });\n };\n const getGroupContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n apis: {\n setGroups,\n refresh: noop\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const Toolbar = composite({\n name: 'Toolbar',\n configFields: schema$e(),\n partFields: parts$8(),\n factory: factory$e,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n const setup$a = noop;\n const isDocked$1 = never;\n const getBehaviours$1 = constant$1([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$a,\n isDocked: isDocked$1,\n getBehaviours: getBehaviours$1\n });\n\n const toolbarHeightChange = constant$1(generate$6('toolbar-height-change'));\n\n const visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n const editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n const editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n const scrollFromBehindHeader = (e, containerHeader) => {\n const doc = owner$4(containerHeader);\n const win = defaultView(containerHeader);\n const viewHeight = win.dom.innerHeight;\n const scrollPos = get$c(doc);\n const markerElement = SugarElement.fromDom(e.elm);\n const markerPos = absolute$2(markerElement);\n const markerHeight = get$e(markerElement);\n const markerTop = markerPos.y;\n const markerBottom = markerTop + markerHeight;\n const editorHeaderPos = absolute$3(containerHeader);\n const editorHeaderHeight = get$e(containerHeader);\n const editorHeaderTop = editorHeaderPos.top;\n const editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n const editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n const editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top + viewHeight)) < 2;\n if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) {\n to(scrollPos.left, markerTop - editorHeaderHeight, doc);\n } else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) {\n const y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n to(scrollPos.left, y, doc);\n }\n };\n const isDockedMode = (header, mode) => contains$2(Docking.getModes(header), mode);\n const updateIframeContentFlow = header => {\n const getOccupiedHeight = elm => getOuter$2(elm) + (parseInt(get$f(elm, 'margin-top'), 10) || 0) + (parseInt(get$f(elm, 'margin-bottom'), 10) || 0);\n const elm = header.element;\n parentElement(elm).each(parentElem => {\n const padding = 'padding-' + Docking.getModes(header)[0];\n if (Docking.isDocked(header)) {\n const parentWidth = get$d(parentElem);\n set$8(elm, 'width', parentWidth + 'px');\n set$8(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$7(elm, 'width');\n remove$7(parentElem, padding);\n }\n });\n };\n const updateSinkVisibility = (sinkElem, visible) => {\n if (visible) {\n remove$3(sinkElem, visibility.fadeOutClass);\n add$1(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$3(sinkElem, visibility.fadeInClass);\n add$1(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n const updateEditorClasses = (editor, docked) => {\n const editorContainer = SugarElement.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$3(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$3(editorContainer, editorStickyOnClass);\n }\n };\n const restoreFocus = (headerElem, focusedElem) => {\n const ownerDoc = owner$4(focusedElem);\n active$1(ownerDoc).filter(activeElm => !eq(focusedElem, activeElm)).filter(activeElm => eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm)).each(() => focus$3(focusedElem));\n };\n const findFocusedElem = (rootElm, lazySink) => search(rootElm).orThunk(() => lazySink().toOptional().bind(sink => search(sink.element)));\n const setup$9 = (editor, sharedBackstage, lazyHeader) => {\n if (!editor.inline) {\n if (!sharedBackstage.header.isPositionedAtTop()) {\n editor.on('ResizeEditor', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', () => {\n lazyHeader().each(updateIframeContentFlow);\n });\n editor.on('SkinLoaded', () => {\n lazyHeader().each(comp => {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', e => {\n lazyHeader().each(header => {\n Docking.refresh(header);\n const headerElem = header.element;\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', () => {\n updateEditorClasses(editor, false);\n });\n };\n const isDocked = lazyHeader => lazyHeader().map(Docking.isDocked).getOr(false);\n const getIframeBehaviours = () => [Receiving.config({ channels: { [toolbarHeightChange()]: { onReceive: updateIframeContentFlow } } })];\n const getBehaviours = (editor, sharedBackstage) => {\n const focusedElm = value$4();\n const lazySink = sharedBackstage.getSink;\n const runOnSinkElement = f => {\n lazySink().each(sink => f(sink.element));\n };\n const onDockingSwitch = comp => {\n if (!editor.inline) {\n updateIframeContentFlow(comp);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(sink => sink.getSystem().broadcastOn([repositionPopups()], {}));\n };\n const additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n return [\n Focusing.config({}),\n Docking.config({\n contextual: {\n lazyContext: comp => {\n const headerHeight = getOuter$2(comp.element);\n const container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n return Optional.from(container).map(c => {\n const box = box$1(SugarElement.fromDom(c));\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.fold(() => {\n const boxHeight = box.height - headerHeight;\n const topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n return bounds(box.x, topBound, box.width, boxHeight);\n }, scrollEnv => {\n const constrainedBounds = constrain(box, getBoundsFrom(scrollEnv));\n const constrainedBoundsY = isDockedMode(comp, 'top') ? constrainedBounds.y : constrainedBounds.y + headerHeight;\n return bounds(constrainedBounds.x, constrainedBoundsY, constrainedBounds.width, constrainedBounds.height - headerHeight);\n });\n });\n },\n onShow: () => {\n runOnSinkElement(elem => updateSinkVisibility(elem, true));\n },\n onShown: comp => {\n runOnSinkElement(elem => remove$2(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]));\n focusedElm.get().each(elem => {\n restoreFocus(comp.element, elem);\n focusedElm.clear();\n });\n },\n onHide: comp => {\n findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n runOnSinkElement(elem => updateSinkVisibility(elem, false));\n },\n onHidden: () => {\n runOnSinkElement(elem => remove$2(elem, [visibility.transitionClass]));\n },\n ...visibility\n },\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.fold(() => {\n const boundsWithoutOffset = win();\n const offset = getStickyToolbarOffset(editor);\n const top = boundsWithoutOffset.y + (isDockedMode(comp, 'top') && !isFullscreen(editor) ? offset : 0);\n const height = boundsWithoutOffset.height - (isDockedMode(comp, 'bottom') ? offset : 0);\n return {\n bounds: bounds(boundsWithoutOffset.x, top, boundsWithoutOffset.width, height),\n optScrollEnv: Optional.none()\n };\n }, sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n });\n },\n modes: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n }),\n ...additionalBehaviours\n ];\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$9,\n isDocked: isDocked,\n getBehaviours: getBehaviours\n });\n\n const renderHeader = spec => {\n const editor = spec.editor;\n const getBehaviours$2 = spec.sticky ? getBehaviours : getBehaviours$1;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours$2(editor, spec.sharedBackstage))\n };\n };\n\n const groupToolbarButtonSchema = objOf([\n type,\n requiredOf('items', oneOf([\n arrOfObj([\n name$1,\n requiredArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n const createGroupToolbarButton = spec => asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n\n const baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n defaultedOf('search', false, oneOf([\n boolean,\n objOf([optionString('placeholder')])\n ], x => {\n if (isBoolean(x)) {\n return x ? Optional.some({ placeholder: Optional.none() }) : Optional.none();\n } else {\n return Optional.some(x);\n }\n })),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', () => noop),\n defaultedString('context', 'mode:design')\n ];\n\n const MenuButtonSchema = objOf([\n type,\n ...baseMenuButtonFields\n ]);\n const createMenuButton = spec => asRaw('menubutton', MenuButtonSchema, spec);\n\n const splitButtonSchema = objOf([\n type,\n optionalTooltip,\n optionalIcon,\n optionalText,\n optionalSelect,\n fetch$1,\n onSetup,\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaultedColumns(1),\n onAction,\n onItemAction,\n defaultedString('context', 'mode:design')\n ]);\n const createSplitButton = spec => asRaw('SplitButton', splitButtonSchema, spec);\n\n const factory$d = (detail, spec) => {\n const setMenus = (comp, menus) => {\n const newMenus = map$2(menus, m => {\n const buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: callback => {\n callback(m.getItems());\n },\n context: 'any'\n };\n const internal = createMenuButton(buttonSpec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n const apis = {\n focus: Keying.focusIn,\n setMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n config('menubar-events', [\n runOnAttached(component => {\n detail.onSetup(component);\n }),\n run$1(mouseover(), (comp, se) => {\n descendant(comp.element, '.' + 'tox-mbtn--active').each(activeButton => {\n closest$1(se.event.target, '.' + 'tox-mbtn').each(hoveredButton => {\n if (!eq(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(activeComp => {\n comp.getSystem().getByDom(hoveredButton).each(hoveredComp => {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run$1(focusShifted(), (comp, se) => {\n se.event.prevFocus.bind(prev => comp.getSystem().getByDom(prev).toOptional()).each(prev => {\n se.event.newFocus.bind(nu => comp.getSystem().getByDom(nu).toOptional()).each(nu => {\n if (Dropdown.isOpen(prev)) {\n Dropdown.expand(nu);\n Dropdown.close(prev);\n }\n });\n });\n })\n ]),\n Keying.config({\n mode: 'flow',\n selector: '.' + 'tox-mbtn',\n onEscape: comp => {\n detail.onEscape(comp);\n return Optional.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single({\n factory: factory$d,\n name: 'silver.Menubar',\n configFields: [\n required$1('dom'),\n required$1('uid'),\n required$1('onEscape'),\n required$1('backstage'),\n defaulted('onSetup', noop)\n ],\n apis: {\n focus: (apis, comp) => {\n apis.focus(comp);\n },\n setMenus: (apis, comp, menus) => {\n apis.setMenus(comp, menus);\n }\n }\n });\n\n const promotionMessage = '\\u26A1\\ufe0fUpgrade';\n const promotionLink = 'https://www.tiny.cloud/tinymce-self-hosted-premium-features/?utm_campaign=self_hosted_upgrade_promo&utm_source=tiny&utm_medium=referral';\n const renderPromotion = spec => {\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: [{\n dom: {\n tag: 'a',\n attributes: {\n 'href': promotionLink,\n 'rel': 'noopener',\n 'target': '_blank',\n 'aria-hidden': 'true'\n },\n classes: ['tox-promotion-link'],\n innerHtml: promotionMessage\n }\n }]\n };\n };\n\n const owner = 'container';\n const schema$d = [field('slotBehaviours', [])];\n const getPartName = name => '';\n const sketch = sSpec => {\n const parts = (() => {\n const record = [];\n const slot = (name, config) => {\n record.push(name);\n return generateOne$1(owner, getPartName(name), config);\n };\n return {\n slot,\n record: constant$1(record)\n };\n })();\n const spec = sSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName(n)\n }));\n return composite$1(owner, schema$d, fieldParts, make$1, spec);\n };\n const make$1 = (detail, components) => {\n const getSlotNames = _ => getAllPartNames(detail);\n const getSlot = (container, key) => getPart(container, detail, key);\n const onSlot = (f, def) => (container, key) => getPart(container, detail, key).map(slot => f(slot, key)).getOr(def);\n const onSlots = f => (container, keys) => {\n each$1(keys, key => f(container, key));\n };\n const doShowing = (comp, _key) => get$g(comp.element, 'aria-hidden') !== 'true';\n const doShow = (comp, key) => {\n if (!doShowing(comp)) {\n const element = comp.element;\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: true\n });\n }\n };\n const doHide = (comp, key) => {\n if (doShowing(comp)) {\n const element = comp.element;\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: false\n });\n }\n };\n const isShowing = onSlot(doShowing, false);\n const hideSlot = onSlot(doHide);\n const hideSlots = onSlots(hideSlot);\n const hideAllSlots = container => hideSlots(container, getSlotNames());\n const showSlot = onSlot(doShow);\n const apis = {\n getSlotNames,\n getSlot,\n isShowing,\n hideSlot,\n hideAllSlots,\n showSlot\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: get$4(detail.slotBehaviours),\n apis\n };\n };\n const slotApis = map$1({\n getSlotNames: (apis, c) => apis.getSlotNames(c),\n getSlot: (apis, c, key) => apis.getSlot(c, key),\n isShowing: (apis, c, key) => apis.isShowing(c, key),\n hideSlot: (apis, c, key) => apis.hideSlot(c, key),\n hideAllSlots: (apis, c) => apis.hideAllSlots(c),\n showSlot: (apis, c, key) => apis.showSlot(c, key)\n }, value => makeApi(value));\n const SlotContainer = {\n ...slotApis,\n ...{ sketch }\n };\n\n const sidebarSchema = objOf([\n optionalIcon,\n optionalTooltip,\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n onSetup\n ]);\n const createSidebar = spec => asRaw('sidebar', sidebarSchema, spec);\n\n const setup$8 = editor => {\n const {sidebars} = editor.ui.registry.getAll();\n each$1(keys(sidebars), name => {\n const spec = sidebars[name];\n const isActive = () => is$1(Optional.from(editor.queryCommandValue('ToggleSidebar')), name);\n editor.ui.registry.addToggleButton(name, {\n icon: spec.icon,\n tooltip: spec.tooltip,\n onAction: buttonApi => {\n editor.execCommand('ToggleSidebar', false, name);\n buttonApi.setActive(isActive());\n },\n onSetup: buttonApi => {\n buttonApi.setActive(isActive());\n const handleToggle = () => buttonApi.setActive(isActive());\n editor.on('ToggleSidebar', handleToggle);\n return () => {\n editor.off('ToggleSidebar', handleToggle);\n };\n },\n context: 'any'\n });\n });\n };\n const getApi = comp => ({ element: () => comp.element.dom });\n const makePanels = (parts, panelConfigs) => {\n const specs = map$2(keys(panelConfigs), name => {\n const spec = panelConfigs[name];\n const bridged = getOrDie(createSidebar(spec));\n return {\n name,\n getApi,\n onSetup: bridged.onSetup,\n onShow: bridged.onShow,\n onHide: bridged.onHide\n };\n });\n return map$2(specs, spec => {\n const editorOffCell = Cell(noop);\n return parts.slot(spec.name, {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane']\n },\n behaviours: SimpleBehaviours.unnamedEvents([\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell),\n run$1(slotVisibility(), (sidepanel, se) => {\n const data = se.event;\n const optSidePanelSpec = find$5(specs, config => config.name === data.name);\n optSidePanelSpec.each(sidePanelSpec => {\n const handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n handler(sidePanelSpec.getApi(sidepanel));\n });\n })\n ])\n });\n });\n };\n const makeSidebar = panelConfigs => SlotContainer.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane-container']\n },\n components: makePanels(parts, panelConfigs),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n }));\n const setSidebar = (sidebar, panelConfigs, showSidebar) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n Replacing.set(slider, [makeSidebar(panelConfigs)]);\n const configKey = showSidebar === null || showSidebar === void 0 ? void 0 : showSidebar.toLowerCase();\n if (isString(configKey) && has$2(panelConfigs, configKey)) {\n Composing.getCurrent(slider).each(slotContainer => {\n SlotContainer.showSlot(slotContainer, configKey);\n Sliding.immediateGrow(slider);\n remove$7(slider.element, 'width');\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n });\n }\n });\n };\n const updateSidebarRoleOnToggle = (sidebar, sidebarState) => {\n set$9(sidebar, 'role', sidebarState);\n };\n const toggleSidebar = (sidebar, name) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(slotContainer => {\n if (Sliding.hasGrown(slider)) {\n if (SlotContainer.isShowing(slotContainer, name)) {\n Sliding.shrink(slider);\n updateSidebarRoleOnToggle(sidebar.element, 'presentation');\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n }\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n Sliding.grow(slider);\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n }\n });\n });\n };\n const whichSidebar = sidebar => {\n const optSlider = Composing.getCurrent(sidebar);\n return optSlider.bind(slider => {\n const sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n if (sidebarOpen) {\n const optSlotContainer = Composing.getCurrent(slider);\n return optSlotContainer.bind(slotContainer => find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name)));\n } else {\n return Optional.none();\n }\n });\n };\n const fixSize = generate$6('FixSizeEvent');\n const autoSize = generate$6('AutoSizeEvent');\n const renderSidebar = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-sidebar'],\n attributes: { role: 'presentation' }\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__slider']\n },\n components: [],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Sliding.config({\n dimension: { property: 'width' },\n closedClass: 'tox-sidebar--sliding-closed',\n openClass: 'tox-sidebar--sliding-open',\n shrinkingClass: 'tox-sidebar--sliding-shrinking',\n growingClass: 'tox-sidebar--sliding-growing',\n onShrunk: slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(SlotContainer.hideAllSlots);\n emit(slider, autoSize);\n },\n onGrown: slider => {\n emit(slider, autoSize);\n },\n onStartGrow: slider => {\n emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') });\n },\n onStartShrink: slider => {\n emitWith(slider, fixSize, { width: get$d(slider.element) + 'px' });\n }\n }),\n Replacing.config({}),\n Composing.config({\n find: comp => {\n const children = Replacing.contents(comp);\n return head(children);\n }\n })\n ])\n }],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n config('sidebar-sliding-events', [\n run$1(fixSize, (comp, se) => {\n set$8(comp.element, 'width', se.event.width);\n }),\n run$1(autoSize, (comp, _se) => {\n remove$7(comp.element, 'width');\n })\n ])\n ])\n });\n\n const block = (component, config, state, getBusySpec) => {\n set$9(component.element, 'aria-busy', true);\n const root = config.getRoot(component).getOr(component);\n const blockerBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: () => Optional.some(true),\n onShiftTab: () => Optional.some(true)\n }),\n Focusing.config({})\n ]);\n const blockSpec = getBusySpec(root, blockerBehaviours);\n const blocker = root.getSystem().build(blockSpec);\n Replacing.append(root, premade(blocker));\n if (blocker.hasConfigured(Keying) && config.focus) {\n Keying.focusIn(blocker);\n }\n if (!state.isBlocked()) {\n config.onBlock(component);\n }\n state.blockWith(() => Replacing.remove(root, blocker));\n };\n const unblock = (component, config, state) => {\n remove$8(component.element, 'aria-busy');\n if (state.isBlocked()) {\n config.onUnblock(component);\n }\n state.clear();\n };\n const isBlocked = (component, blockingConfig, blockingState) => blockingState.isBlocked();\n\n var BlockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n block: block,\n unblock: unblock,\n isBlocked: isBlocked\n });\n\n var BlockingSchema = [\n defaultedFunction('getRoot', Optional.none),\n defaultedBoolean('focus', true),\n onHandler('onBlock'),\n onHandler('onUnblock')\n ];\n\n const init$4 = () => {\n const blocker = destroyable();\n const blockWith = destroy => {\n blocker.set({ destroy });\n };\n return nu$7({\n readState: blocker.isSet,\n blockWith,\n clear: blocker.clear,\n isBlocked: blocker.isSet\n });\n };\n\n var BlockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$4\n });\n\n const Blocking = create$4({\n fields: BlockingSchema,\n name: 'blocking',\n apis: BlockingApis,\n state: BlockingState\n });\n\n const getBusySpec$1 = providerBackstage => (_root, _behaviours) => ({\n dom: {\n tag: 'div',\n attributes: {\n 'aria-label': providerBackstage.translate('Loading...'),\n 'tabindex': '0'\n },\n classes: ['tox-throbber__busy-spinner']\n },\n components: [{ dom: fromHtml('
    ') }]\n });\n const focusBusyComponent = throbber => Composing.getCurrent(throbber).each(comp => focus$3(comp.element, true));\n const toggleEditorTabIndex = (editor, state) => {\n const tabIndexAttr = 'tabindex';\n const dataTabIndexAttr = `data-mce-${ tabIndexAttr }`;\n Optional.from(editor.iframeElement).map(SugarElement.fromDom).each(iframe => {\n if (state) {\n getOpt(iframe, tabIndexAttr).each(tabIndex => set$9(iframe, dataTabIndexAttr, tabIndex));\n set$9(iframe, tabIndexAttr, -1);\n } else {\n remove$8(iframe, tabIndexAttr);\n getOpt(iframe, dataTabIndexAttr).each(tabIndex => {\n set$9(iframe, tabIndexAttr, tabIndex);\n remove$8(iframe, dataTabIndexAttr);\n });\n }\n });\n };\n const toggleThrobber = (editor, comp, state, providerBackstage) => {\n const element = comp.element;\n toggleEditorTabIndex(editor, state);\n if (state) {\n Blocking.block(comp, getBusySpec$1(providerBackstage));\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n if (editor.hasFocus()) {\n focusBusyComponent(comp);\n }\n } else {\n const throbberFocus = Composing.getCurrent(comp).exists(busyComp => hasFocus(busyComp.element));\n Blocking.unblock(comp);\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n if (throbberFocus) {\n editor.focus();\n }\n }\n };\n const renderThrobber = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n attributes: { 'aria-hidden': 'true' },\n classes: ['tox-throbber'],\n styles: { display: 'none' }\n },\n behaviours: derive$1([\n Replacing.config({}),\n Blocking.config({ focus: false }),\n Composing.config({ find: comp => head(comp.components()) })\n ]),\n components: []\n });\n const isFocusEvent = event => event.type === 'focusin';\n const isPasteBinTarget = event => {\n if (isFocusEvent(event)) {\n const node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n return node.map(SugarElement.fromDom).filter(isElement$1).exists(targetElm => has(targetElm, 'mce-pastebin'));\n } else {\n return false;\n }\n };\n const setup$7 = (editor, lazyThrobber, sharedBackstage) => {\n const throbberState = Cell(false);\n const timer = value$4();\n const stealFocus = e => {\n if (throbberState.get() && !isPasteBinTarget(e)) {\n e.preventDefault();\n focusBusyComponent(lazyThrobber());\n editor.editorManager.setActive(editor);\n }\n };\n if (!editor.inline) {\n editor.on('PreInit', () => {\n editor.dom.bind(editor.getWin(), 'focusin', stealFocus);\n editor.on('BeforeExecCommand', e => {\n if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) {\n stealFocus(e);\n }\n });\n });\n }\n const toggle = state => {\n if (state !== throbberState.get()) {\n throbberState.set(state);\n toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n fireAfterProgressState(editor, state);\n }\n };\n editor.on('ProgressState', e => {\n timer.on(clearTimeout);\n if (isNumber(e.time)) {\n const timerId = global$9.setEditorTimeout(editor, () => toggle(e.state), e.time);\n timer.set(timerId);\n } else {\n toggle(e.state);\n timer.clear();\n }\n });\n };\n\n const generate$1 = (xs, f) => {\n const init = {\n len: 0,\n list: []\n };\n const r = foldl(xs, (b, a) => {\n const value = f(a, b.len);\n return value.fold(constant$1(b), v => ({\n len: v.finish,\n list: b.list.concat([v])\n }));\n }, init);\n return r.list;\n };\n\n const output = (within, extra, withinWidth) => ({\n within,\n extra,\n withinWidth\n });\n const apportion = (units, total, len) => {\n const parray = generate$1(units, (unit, current) => {\n const width = len(unit);\n return Optional.some({\n element: unit,\n start: current,\n finish: current + width,\n width\n });\n });\n const within = filter$2(parray, unit => unit.finish <= total);\n const withinWidth = foldr(within, (acc, el) => acc + el.width, 0);\n const extra = parray.slice(within.length);\n return {\n within,\n extra,\n withinWidth\n };\n };\n const toUnit = parray => map$2(parray, unit => unit.element);\n const fitLast = (within, extra, withinWidth) => {\n const fits = toUnit(within.concat(extra));\n return output(fits, [], withinWidth);\n };\n const overflow = (within, extra, overflower, withinWidth) => {\n const fits = toUnit(within).concat([overflower]);\n return output(fits, toUnit(extra), withinWidth);\n };\n const fitAll = (within, extra, withinWidth) => output(toUnit(within), [], withinWidth);\n const tryFit = (total, units, len) => {\n const divide = apportion(units, total, len);\n return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n };\n const partition = (total, units, len, overflower) => {\n const divide = tryFit(total, units, len).getOrThunk(() => apportion(units, total - len(overflower), len));\n const within = divide.within;\n const extra = divide.extra;\n const withinWidth = divide.withinWidth;\n if (extra.length === 1 && extra[0].width <= len(overflower)) {\n return fitLast(within, extra, withinWidth);\n } else if (extra.length >= 1) {\n return overflow(within, extra, overflower, withinWidth);\n } else {\n return fitAll(within, extra, withinWidth);\n }\n };\n\n const setGroups$1 = (toolbar, storedGroups) => {\n const bGroups = map$2(storedGroups, g => premade(g));\n Toolbar.setGroups(toolbar, bGroups);\n };\n const findFocusedComp = comps => findMap(comps, comp => search(comp.element).bind(focusedElm => comp.getSystem().getByDom(focusedElm).toOptional()));\n const refresh$2 = (toolbar, detail, setOverflow) => {\n const builtGroups = detail.builtGroups.get();\n if (builtGroups.length === 0) {\n return;\n }\n const primary = getPartOrDie(toolbar, detail, 'primary');\n const overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$8(primary.element, 'visibility', 'hidden');\n const groups = builtGroups.concat([overflowGroup]);\n const focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups$1(primary, groups);\n const availableWidth = get$d(primary.element);\n const overflows = partition(availableWidth, detail.builtGroups.get(), comp => Math.ceil(comp.element.dom.getBoundingClientRect().width), overflowGroup);\n if (overflows.extra.length === 0) {\n Replacing.remove(primary, overflowGroup);\n setOverflow([]);\n } else {\n setGroups$1(primary, overflows.within);\n setOverflow(overflows.extra);\n }\n remove$7(primary.element, 'visibility');\n reflow(primary.element);\n focusedComp.each(Focusing.focus);\n };\n\n const schema$c = constant$1([\n field('splitToolbarBehaviours', [Coupling]),\n customField('builtGroups', () => Cell([]))\n ]);\n\n const schema$b = constant$1([\n markers$1(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n required$1('lazySink'),\n customField('overflowGroups', () => Cell([])),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n const parts$7 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n external({\n schema: schema$e(),\n name: 'overflow'\n }),\n external({ name: 'overflow-button' }),\n external({ name: 'overflow-group' })\n ]);\n\n const expandable = constant$1((element, available) => {\n setMax(element, Math.floor(available));\n });\n\n const schema$a = constant$1([\n markers$1(['toggledClass']),\n required$1('lazySink'),\n requiredFunction('fetch'),\n optionFunction('getBounds'),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n schema$y(),\n onHandler('onToggled')\n ]);\n const parts$6 = constant$1([\n external({\n name: 'button',\n overrides: detail => ({\n dom: { attributes: { 'aria-haspopup': 'true' } },\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.toggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false,\n onToggled: detail.onToggled\n })])\n })\n }),\n external({\n factory: Toolbar,\n schema: schema$e(),\n name: 'toolbar',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: comp => {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Optional.none();\n }\n })])\n };\n }\n })\n ]);\n\n const shouldSkipFocus = value$4();\n const toggleWithoutFocusing = (button, externals) => {\n shouldSkipFocus.set(true);\n toggle(button, externals);\n shouldSkipFocus.clear();\n };\n const toggle = (button, externals) => {\n const toolbarSandbox = Coupling.getCoupled(button, 'toolbarSandbox');\n if (Sandboxing.isOpen(toolbarSandbox)) {\n Sandboxing.close(toolbarSandbox);\n } else {\n Sandboxing.open(toolbarSandbox, externals.toolbar());\n }\n };\n const position = (button, toolbar, detail, layouts) => {\n const bounds = detail.getBounds.map(bounder => bounder());\n const sink = detail.lazySink(button).getOrDie();\n Positioning.positionWithinBounds(sink, toolbar, {\n anchor: {\n type: 'hotspot',\n hotspot: button,\n layouts,\n overrides: { maxWidthFunction: expandable() }\n }\n }, bounds);\n };\n const setGroups = (button, toolbar, detail, layouts, groups) => {\n Toolbar.setGroups(toolbar, groups);\n position(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n const makeSandbox = (button, spec, detail) => {\n const ariaControls = manager();\n const onOpen = (sandbox, toolbar) => {\n const skipFocus = shouldSkipFocus.get().getOr(false);\n detail.fetch().get(groups => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n ariaControls.link(button.element);\n if (!skipFocus) {\n Keying.focusIn(toolbar);\n }\n });\n };\n const onClose = () => {\n Toggling.off(button);\n if (!shouldSkipFocus.get().getOr(false)) {\n Focusing.focus(button);\n }\n ariaControls.unlink(button.element);\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaControls.id }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: comp => {\n Sandboxing.close(comp);\n return Optional.some(true);\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(button, queryElem);\n },\n getAttachPoint: () => {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: never,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n doReposition: () => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n }\n })\n }\n })\n ])\n };\n };\n const factory$c = (detail, components, spec, externals) => ({\n ...Button.sketch({\n ...externals.button(),\n action: button => {\n toggle(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: button => {\n return makeSandbox(button, spec, detail);\n }\n }\n })])\n }),\n apis: {\n setGroups: (button, groups) => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: button => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: button => {\n toggle(button, externals);\n },\n toggleWithoutFocusing: button => {\n toggleWithoutFocusing(button, externals);\n },\n getToolbar: button => {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n },\n isOpen: button => {\n return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n const FloatingToolbarButton = composite({\n name: 'FloatingToolbarButton',\n factory: factory$c,\n configFields: schema$a(),\n partFields: parts$6(),\n apis: {\n setGroups: (apis, button, groups) => {\n apis.setGroups(button, groups);\n },\n reposition: (apis, button) => {\n apis.reposition(button);\n },\n toggle: (apis, button) => {\n apis.toggle(button);\n },\n toggleWithoutFocusing: (apis, button) => {\n apis.toggleWithoutFocusing(button);\n },\n getToolbar: (apis, button) => apis.getToolbar(button),\n isOpen: (apis, button) => apis.isOpen(button)\n }\n });\n\n const schema$9 = constant$1([\n required$1('items'),\n markers$1(['itemSelector']),\n field('tgroupBehaviours', [Keying])\n ]);\n const parts$5 = constant$1([group({\n name: 'items',\n unit: 'item'\n })]);\n\n const factory$b = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n mode: 'flow',\n selector: detail.markers.itemSelector\n })]),\n domModification: { attributes: { role: 'toolbar' } }\n });\n const ToolbarGroup = composite({\n name: 'ToolbarGroup',\n configFields: schema$9(),\n partFields: parts$5(),\n factory: factory$b\n });\n\n const buildGroups = comps => map$2(comps, g => premade(g));\n const refresh$1 = (toolbar, memFloatingToolbarButton, detail) => {\n refresh$2(toolbar, detail, overflowGroups => {\n detail.overflowGroups.set(overflowGroups);\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n });\n });\n };\n const factory$a = (detail, components, spec, externals) => {\n const memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n fetch: () => Future.nu(resolve => {\n resolve(buildGroups(detail.overflowGroups.get()));\n }),\n layouts: {\n onLtr: () => [\n southwest$2,\n southeast$2\n ],\n onRtl: () => [\n southeast$2,\n southwest$2\n ],\n onBottomLtr: () => [\n northwest$2,\n northeast$2\n ],\n onBottomRtl: () => [\n northeast$2,\n northwest$2\n ]\n },\n getBounds: spec.getOverflowBounds,\n lazySink: detail.lazySink,\n fireDismissalEventInstead: {},\n markers: { toggledClass: detail.markers.overflowToggledClass },\n parts: {\n button: externals['overflow-button'](),\n toolbar: externals.overflow()\n },\n onToggled: (comp, state) => detail[state ? 'onOpened' : 'onClosed'](comp)\n }));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n others: {\n overflowGroup: () => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [memFloatingToolbarButton.asSpec()]\n });\n }\n }\n })]),\n apis: {\n setGroups: (toolbar, groups) => {\n detail.builtGroups.set(map$2(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: toolbar => refresh$1(toolbar, memFloatingToolbarButton, detail),\n toggle: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n toggleWithoutFocusing: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(FloatingToolbarButton.toggleWithoutFocusing);\n },\n isOpen: toolbar => memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false),\n reposition: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: toolbar => memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitFloatingToolbar = composite({\n name: 'SplitFloatingToolbar',\n configFields: schema$b(),\n partFields: parts$7(),\n factory: factory$a,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n reposition: (apis, toolbar) => {\n apis.reposition(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n toggleWithoutFocusing: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar),\n getOverflow: (apis, toolbar) => apis.getOverflow(toolbar)\n }\n });\n\n const schema$8 = constant$1([\n markers$1([\n 'closedClass',\n 'openClass',\n 'shrinkingClass',\n 'growingClass',\n 'overflowToggledClass'\n ]),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n const parts$4 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'overflow',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: detail.markers.closedClass,\n openClass: detail.markers.openClass,\n shrinkingClass: detail.markers.shrinkingClass,\n growingClass: detail.markers.growingClass,\n onShrunk: comp => {\n getPart(comp, detail, 'overflow-button').each(button => {\n Toggling.off(button);\n });\n detail.onClosed(comp);\n },\n onGrown: comp => {\n detail.onOpened(comp);\n },\n onStartGrow: comp => {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: comp => {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Optional.some(true);\n }\n })\n ])\n };\n }\n }),\n external({\n name: 'overflow-button',\n overrides: detail => ({\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false\n })])\n })\n }),\n external({ name: 'overflow-group' })\n ]);\n\n const isOpen = (toolbar, detail) => getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n const toggleToolbar = (toolbar, detail, skipFocus) => {\n getPart(toolbar, detail, 'overflow-button').each(oveflowButton => {\n getPart(toolbar, detail, 'overflow').each(overf => {\n refresh(toolbar, detail);\n if (Sliding.hasShrunk(overf)) {\n const fn = detail.onOpened;\n detail.onOpened = comp => {\n if (!skipFocus) {\n Keying.focusIn(overf);\n }\n fn(comp);\n detail.onOpened = fn;\n };\n } else {\n const fn = detail.onClosed;\n detail.onClosed = comp => {\n if (!skipFocus) {\n Focusing.focus(oveflowButton);\n }\n fn(comp);\n detail.onClosed = fn;\n };\n }\n Sliding.toggleGrow(overf);\n });\n });\n };\n const refresh = (toolbar, detail) => {\n getPart(toolbar, detail, 'overflow').each(overflow => {\n refresh$2(toolbar, detail, groups => {\n const builtGroups = map$2(groups, g => premade(g));\n Toolbar.setGroups(overflow, builtGroups);\n });\n getPart(toolbar, detail, 'overflow-button').each(button => {\n if (Sliding.hasGrown(overflow)) {\n Toggling.on(button);\n }\n });\n Sliding.refresh(overflow);\n });\n };\n const factory$9 = (detail, components, spec, externals) => {\n const toolbarToggleEvent = 'alloy.toolbar.toggle';\n const doSetGroups = (toolbar, groups) => {\n const built = map$2(groups, toolbar.getSystem().build);\n detail.builtGroups.set(built);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [\n Coupling.config({\n others: {\n overflowGroup: toolbar => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [Button.sketch({\n ...externals['overflow-button'](),\n action: _button => {\n emit(toolbar, toolbarToggleEvent);\n }\n })]\n });\n }\n }\n }),\n config('toolbar-toggle-events', [run$1(toolbarToggleEvent, toolbar => {\n toggleToolbar(toolbar, detail, false);\n })])\n ]),\n apis: {\n setGroups: (toolbar, groups) => {\n doSetGroups(toolbar, groups);\n refresh(toolbar, detail);\n },\n refresh: toolbar => refresh(toolbar, detail),\n toggle: toolbar => {\n toggleToolbar(toolbar, detail, false);\n },\n toggleWithoutFocusing: toolbar => {\n toggleToolbar(toolbar, detail, true);\n },\n isOpen: toolbar => isOpen(toolbar, detail)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitSlidingToolbar = composite({\n name: 'SplitSlidingToolbar',\n configFields: schema$8(),\n partFields: parts$4(),\n factory: factory$9,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar)\n }\n });\n\n const renderToolbarGroupCommon = toolbarGroup => {\n const attributes = toolbarGroup.label.isNone() ? toolbarGroup.title.fold(() => ({}), title => ({ attributes: { 'aria-label': title } })) : toolbarGroup.label.fold(() => ({}), label => ({ attributes: { 'aria-label': label } }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__group'].concat(toolbarGroup.label.isSome() ? ['tox-toolbar__group_with_label'] : []),\n ...attributes\n },\n components: [\n ...toolbarGroup.label.map(label => {\n return {\n dom: {\n tag: 'span',\n classes: [\n 'tox-label',\n 'tox-label--context-toolbar'\n ]\n },\n components: [text$2(label)]\n };\n }).toArray(),\n ToolbarGroup.parts.items({})\n ],\n items: toolbarGroup.items,\n markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), ' + '.tox-split-button:not([disabled]), ' + '.tox-toolbar-nav-item:not([disabled]), ' + '.tox-number-input:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({ ignore: true })\n ])\n };\n };\n const renderToolbarGroup = toolbarGroup => ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n const getToolbarBehaviours = (toolbarSpec, modeName) => {\n const onAttached = runOnAttached(component => {\n const groups = map$2(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n DisablingConfigs.toolbarButton(() => toolbarSpec.providers.checkUiComponentContext('any').shouldDisable),\n toggleOnReceive(() => toolbarSpec.providers.checkUiComponentContext('any')),\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n visibilitySelector: '.tox-toolbar__overflow',\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached])\n ]);\n };\n const renderMoreToolbarCommon = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return {\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n parts: {\n 'overflow-group': renderToolbarGroupCommon({\n title: Optional.none(),\n label: Optional.none(),\n items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n context: 'any',\n name: 'more',\n icon: Optional.some('more-drawer'),\n enabled: true,\n tooltip: Optional.some('Reveal or hide additional toolbar items'),\n primary: false,\n buttonType: Optional.none(),\n borderless: false\n }, Optional.none(), toolbarSpec.providers, [], 'overflow-button')\n },\n splitToolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n };\n };\n const renderFloatingMoreToolbar = toolbarSpec => {\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n const overflowXOffset = 4;\n const primary = SplitFloatingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch({\n ...baseSpec,\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: () => {\n const headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n const headerBounds = absolute$2(headerElem);\n const docElem = documentElement(headerElem);\n const docBounds = absolute$2(docElem);\n const height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n },\n parts: {\n ...baseSpec.parts,\n overflow: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: toolbarSpec.attributes\n }\n }\n },\n components: [primary],\n markers: { overflowToggledClass: 'tox-tbtn--enabled' },\n onOpened: comp => toolbarSpec.onToggled(comp, true),\n onClosed: comp => toolbarSpec.onToggled(comp, false)\n });\n };\n const renderSlidingMoreToolbar = toolbarSpec => {\n const primary = SplitSlidingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n const overflow = SplitSlidingToolbar.parts.overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n return SplitSlidingToolbar.sketch({\n ...baseSpec,\n components: [\n primary,\n overflow\n ],\n markers: {\n openClass: 'tox-toolbar__overflow--open',\n closedClass: 'tox-toolbar__overflow--closed',\n growingClass: 'tox-toolbar__overflow--growing',\n shrinkingClass: 'tox-toolbar__overflow--shrinking',\n overflowToggledClass: 'tox-tbtn--enabled'\n },\n onOpened: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n toolbarSpec.onToggled(comp, true);\n },\n onClosed: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n toolbarSpec.onToggled(comp, false);\n }\n });\n };\n const renderToolbar = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return Toolbar.sketch({\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode$1.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts.groups({})],\n toolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n });\n };\n\n const baseButtonFields = [\n optionalText,\n optionalIcon,\n optionString('tooltip'),\n defaultedStringEnum('buttonType', 'secondary', [\n 'primary',\n 'secondary'\n ]),\n defaultedBoolean('borderless', false),\n requiredFunction('onAction'),\n defaultedString('context', 'mode:design')\n ];\n const normalButtonFields = [\n ...baseButtonFields,\n text,\n requiredStringEnum('type', ['button'])\n ];\n const toggleButtonFields = [\n ...baseButtonFields,\n defaultedBoolean('active', false),\n requiredStringEnum('type', ['togglebutton'])\n ];\n const schemaWithoutGroupButton = {\n button: normalButtonFields,\n togglebutton: toggleButtonFields\n };\n const groupFields = [\n requiredStringEnum('type', ['group']),\n defaultedArrayOf('buttons', [], choose$1('type', schemaWithoutGroupButton))\n ];\n const viewButtonSchema = choose$1('type', {\n ...schemaWithoutGroupButton,\n group: groupFields\n });\n\n const viewSchema = objOf([\n defaultedArrayOf('buttons', [], viewButtonSchema),\n requiredFunction('onShow'),\n requiredFunction('onHide')\n ]);\n const createView = spec => asRaw('view', viewSchema, spec);\n\n const renderButton = (spec, providers) => {\n var _a, _b;\n const isToggleButton = spec.type === 'togglebutton';\n const optMemIcon = spec.icon.map(memIcon => renderReplaceableIconFromPack(memIcon, providers.icons)).map(record);\n const getAction = () => comp => {\n const setIcon = newIcon => {\n optMemIcon.map(memIcon => memIcon.getOpt(comp).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(newIcon, providers.icons)]);\n }));\n };\n const setActive = state => {\n const elm = comp.element;\n if (state) {\n add$2(elm, 'tox-button--enabled');\n set$9(elm, 'aria-pressed', true);\n } else {\n remove$3(elm, 'tox-button--enabled');\n remove$8(elm, 'aria-pressed');\n }\n };\n const isActive = () => has(comp.element, 'tox-button--enabled');\n const focus = () => focus$3(comp.element);\n if (isToggleButton) {\n return spec.onAction({\n setIcon,\n setActive,\n isActive,\n focus\n });\n }\n if (spec.type === 'button') {\n return spec.onAction({ setIcon });\n }\n };\n const action = getAction();\n const buttonSpec = {\n ...spec,\n name: isToggleButton ? spec.text.getOr(spec.icon.getOr('')) : (_a = spec.text) !== null && _a !== void 0 ? _a : spec.icon.getOr(''),\n primary: spec.buttonType === 'primary',\n buttonType: Optional.from(spec.buttonType),\n tooltip: spec.tooltip,\n icon: spec.icon,\n enabled: true,\n borderless: spec.borderless\n };\n const buttonTypeClasses = calculateClassesFromButtonType((_b = spec.buttonType) !== null && _b !== void 0 ? _b : 'secondary');\n const optTranslatedText = isToggleButton ? spec.text.map(providers.translate) : Optional.some(providers.translate(spec.text));\n const optTranslatedTextComponed = optTranslatedText.map(text$2);\n const ariaLabelAttributes = buttonSpec.tooltip.or(optTranslatedText).map(al => ({ 'aria-label': providers.translate(al) })).getOr({});\n const optIconSpec = optMemIcon.map(memIcon => memIcon.asSpec());\n const components = componentRenderPipeline([\n optIconSpec,\n optTranslatedTextComponed\n ]);\n const hasIconAndText = spec.icon.isSome() && optTranslatedTextComponed.isSome();\n const dom = {\n tag: 'button',\n classes: buttonTypeClasses.concat(...spec.icon.isSome() && !hasIconAndText ? ['tox-button--icon'] : []).concat(...hasIconAndText ? ['tox-button--icon-and-text'] : []).concat(...spec.borderless ? ['tox-button--naked'] : []).concat(...spec.type === 'togglebutton' && spec.active ? ['tox-button--enabled'] : []),\n attributes: ariaLabelAttributes\n };\n const extraBehaviours = [];\n const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers);\n return Button.sketch(iconButtonSpec);\n };\n\n const renderViewButton = (spec, providers) => renderButton(spec, providers);\n const renderButtonsGroup = (spec, providers) => {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-view__toolbar__group']\n },\n components: map$2(spec.buttons, button => renderViewButton(button, providers))\n };\n };\n const deviceDetection = detect$1().deviceType;\n const isPhone = deviceDetection.isPhone();\n const isTablet = deviceDetection.isTablet();\n const renderViewHeader = spec => {\n let hasGroups = false;\n const endButtons = map$2(spec.buttons, btnspec => {\n if (btnspec.type === 'group') {\n hasGroups = true;\n return renderButtonsGroup(btnspec, spec.providers);\n } else {\n return renderViewButton(btnspec, spec.providers);\n }\n });\n return {\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: [\n !hasGroups ? 'tox-view__header' : 'tox-view__toolbar',\n ...isPhone || isTablet ? [\n 'tox-view--mobile',\n 'tox-view--scrolling'\n ] : []\n ]\n },\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n selector: 'button, .tox-button',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode\n })\n ]),\n components: hasGroups ? endButtons : [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view__header-start']\n },\n components: []\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view__header-end']\n },\n components: endButtons\n })\n ]\n };\n };\n const renderViewPane = spec => {\n return {\n uid: spec.uid,\n behaviours: derive$1([\n Focusing.config({}),\n Tabstopping.config({})\n ]),\n dom: {\n tag: 'div',\n classes: ['tox-view__pane']\n }\n };\n };\n const factory$8 = (detail, components, _spec, _externals) => {\n const apis = {\n getPane: comp => parts$a.getPart(comp, detail, 'pane'),\n getOnShow: _comp => detail.viewConfig.onShow,\n getOnHide: _comp => detail.viewConfig.onHide\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'cyclic',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode\n })\n ]),\n apis\n };\n };\n var View = composite({\n name: 'silver.View',\n configFields: [required$1('viewConfig')],\n partFields: [\n optional({\n factory: { sketch: renderViewHeader },\n schema: [\n required$1('buttons'),\n required$1('providers')\n ],\n name: 'header'\n }),\n optional({\n factory: { sketch: renderViewPane },\n schema: [],\n name: 'pane'\n })\n ],\n factory: factory$8,\n apis: {\n getPane: (apis, comp) => apis.getPane(comp),\n getOnShow: (apis, comp) => apis.getOnShow(comp),\n getOnHide: (apis, comp) => apis.getOnHide(comp)\n }\n });\n\n const makeViews = (parts, viewConfigs, providers) => {\n return mapToArray(viewConfigs, (config, name) => {\n const internalViewConfig = getOrDie(createView(config));\n return parts.slot(name, View.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view']\n },\n viewConfig: internalViewConfig,\n components: [\n ...internalViewConfig.buttons.length > 0 ? [View.parts.header({\n buttons: internalViewConfig.buttons,\n providers\n })] : [],\n View.parts.pane({})\n ]\n }));\n });\n };\n const makeSlotContainer = (viewConfigs, providers) => SlotContainer.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-view-wrap__slot-container']\n },\n components: makeViews(parts, viewConfigs, providers),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n }));\n const getCurrentName = slotContainer => {\n return find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name));\n };\n const hideContainer = comp => {\n const element = comp.element;\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n };\n const showContainer = comp => {\n const element = comp.element;\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n };\n const makeViewInstanceApi = slot => ({ getContainer: constant$1(slot) });\n const runOnPaneWithInstanceApi = (slotContainer, name, get) => {\n SlotContainer.getSlot(slotContainer, name).each(view => {\n View.getPane(view).each(pane => {\n const onCallback = get(view);\n onCallback(makeViewInstanceApi(pane.element.dom));\n });\n });\n };\n const runOnShow = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnShow);\n const runOnHide = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnHide);\n const factory$7 = (detail, spec) => {\n const setViews = (comp, viewConfigs) => {\n Replacing.set(comp, [makeSlotContainer(viewConfigs, spec.backstage.shared.providers)]);\n };\n const whichView = comp => {\n return Composing.getCurrent(comp).bind(getCurrentName);\n };\n const toggleView = (comp, showMainView, hideMainView, name) => {\n return Composing.getCurrent(comp).exists(slotContainer => {\n const optCurrentSlotName = getCurrentName(slotContainer);\n const isTogglingCurrentView = optCurrentSlotName.exists(current => name === current);\n const exists = SlotContainer.getSlot(slotContainer, name).isSome();\n if (exists) {\n SlotContainer.hideAllSlots(slotContainer);\n if (!isTogglingCurrentView) {\n hideMainView();\n showContainer(comp);\n SlotContainer.showSlot(slotContainer, name);\n runOnShow(slotContainer, name);\n } else {\n hideContainer(comp);\n showMainView();\n }\n optCurrentSlotName.each(prevName => runOnHide(slotContainer, prevName));\n }\n return exists;\n });\n };\n const apis = {\n setViews,\n whichView,\n toggleView\n };\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n classes: ['tox-view-wrap'],\n attributes: { 'aria-hidden': 'true' },\n styles: { display: 'none' }\n },\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n Composing.config({\n find: comp => {\n const children = Replacing.contents(comp);\n return head(children);\n }\n })\n ]),\n apis\n };\n };\n var ViewWrapper = single({\n factory: factory$7,\n name: 'silver.ViewWrapper',\n configFields: [required$1('backstage')],\n apis: {\n setViews: (apis, comp, views) => apis.setViews(comp, views),\n toggleView: (apis, comp, outerContainer, editorCont, name) => apis.toggleView(comp, outerContainer, editorCont, name),\n whichView: (apis, comp) => apis.whichView(comp)\n }\n });\n\n const factory$6 = (detail, components, _spec) => {\n let toolbarDrawerOpenState = false;\n const toggleStatusbar = editorContainer => {\n sibling(editorContainer, '.tox-statusbar').each(statusBar => {\n if (get$f(statusBar, 'display') === 'none' && get$g(statusBar, 'aria-hidden') === 'true') {\n remove$7(statusBar, 'display');\n remove$8(statusBar, 'aria-hidden');\n } else {\n set$8(statusBar, 'display', 'none');\n set$9(statusBar, 'aria-hidden', 'true');\n }\n });\n };\n const apis = {\n getSocket: comp => {\n return parts$a.getPart(comp, detail, 'socket');\n },\n setSidebar: (comp, panelConfigs, showSidebar) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => setSidebar(sidebar, panelConfigs, showSidebar));\n },\n toggleSidebar: (comp, name) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => toggleSidebar(sidebar, name));\n },\n whichSidebar: comp => {\n return parts$a.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: comp => {\n return parts$a.getPart(comp, detail, 'header');\n },\n getToolbar: comp => {\n return parts$a.getPart(comp, detail, 'toolbar');\n },\n setToolbar: (comp, groups) => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n const renderedGroups = map$2(groups, renderToolbarGroup);\n toolbar.getApis().setGroups(toolbar, renderedGroups);\n });\n },\n setToolbars: (comp, toolbars) => {\n parts$a.getPart(comp, detail, 'multiple-toolbar').each(mToolbar => {\n const renderedToolbars = map$2(toolbars, g => map$2(g, renderToolbarGroup));\n CustomList.setItems(mToolbar, renderedToolbars);\n });\n },\n refreshToolbar: comp => {\n const toolbar = parts$a.getPart(comp, detail, 'toolbar');\n toolbar.each(toolbar => toolbar.getApis().refresh(toolbar));\n },\n toggleToolbarDrawer: comp => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n mapFrom(toolbar.getApis().toggle, toggle => toggle(toolbar));\n });\n },\n toggleToolbarDrawerWithoutFocusing: comp => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n mapFrom(toolbar.getApis().toggleWithoutFocusing, toggleWithoutFocusing => toggleWithoutFocusing(toolbar));\n });\n },\n isToolbarDrawerToggled: comp => {\n return parts$a.getPart(comp, detail, 'toolbar').bind(toolbar => Optional.from(toolbar.getApis().isOpen).map(isOpen => isOpen(toolbar))).getOr(false);\n },\n getThrobber: comp => {\n return parts$a.getPart(comp, detail, 'throbber');\n },\n focusToolbar: comp => {\n const optToolbar = parts$a.getPart(comp, detail, 'toolbar').orThunk(() => parts$a.getPart(comp, detail, 'multiple-toolbar'));\n optToolbar.each(toolbar => {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: (comp, menus) => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: comp => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.focus(menubar);\n });\n },\n setViews: (comp, viewConfigs) => {\n parts$a.getPart(comp, detail, 'viewWrapper').each(wrapper => {\n ViewWrapper.setViews(wrapper, viewConfigs);\n });\n },\n toggleView: (comp, name) => {\n return parts$a.getPart(comp, detail, 'viewWrapper').exists(wrapper => ViewWrapper.toggleView(wrapper, () => apis.showMainView(comp), () => apis.hideMainView(comp), name));\n },\n whichView: comp => {\n return parts$a.getPart(comp, detail, 'viewWrapper').bind(ViewWrapper.whichView).getOrNull();\n },\n hideMainView: comp => {\n toolbarDrawerOpenState = apis.isToolbarDrawerToggled(comp);\n if (toolbarDrawerOpenState) {\n apis.toggleToolbarDrawer(comp);\n }\n parts$a.getPart(comp, detail, 'editorContainer').each(editorContainer => {\n const element = editorContainer.element;\n toggleStatusbar(element);\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n });\n },\n showMainView: comp => {\n if (toolbarDrawerOpenState) {\n apis.toggleToolbarDrawer(comp);\n }\n parts$a.getPart(comp, detail, 'editorContainer').each(editorContainer => {\n const element = editorContainer.element;\n toggleStatusbar(element);\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n });\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n behaviours: detail.behaviours\n };\n };\n const partMenubar = partType.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [required$1('backstage')]\n });\n const toolbarFactory = spec => {\n if (spec.type === ToolbarMode$1.sliding) {\n return renderSlidingMoreToolbar;\n } else if (spec.type === ToolbarMode$1.floating) {\n return renderFloatingMoreToolbar;\n } else {\n return renderToolbar;\n }\n };\n const partMultipleToolbar = partType.optional({\n factory: {\n sketch: spec => CustomList.sketch({\n uid: spec.uid,\n dom: spec.dom,\n listBehaviours: derive$1([Keying.config({\n mode: 'acyclic',\n selector: '.tox-toolbar'\n })]),\n makeItem: () => renderToolbar({\n type: spec.type,\n uid: generate$6('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n providers: spec.providers,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n }\n }),\n setupItem: (_mToolbar, tc, data, _index) => {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n })\n },\n name: 'multiple-toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape')\n ]\n });\n const partToolbar = partType.optional({\n factory: {\n sketch: spec => {\n const renderer = toolbarFactory(spec);\n const toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n },\n onToggled: (_comp, state) => spec.onToolbarToggled(state),\n cyclicKeying: false,\n initGroups: [],\n getSink: spec.getSink,\n providers: spec.providers,\n moreDrawerData: {\n lazyToolbar: spec.lazyToolbar,\n lazyMoreButton: spec.lazyMoreButton,\n lazyHeader: spec.lazyHeader\n },\n attributes: spec.attributes\n };\n return renderer(toolbarSpec);\n }\n },\n name: 'toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape'),\n required$1('getSink')\n ]\n });\n const partHeader = partType.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [required$1('dom')]\n });\n const partPromotion = partType.optional({\n factory: { sketch: renderPromotion },\n name: 'promotion',\n schema: [required$1('dom')]\n });\n const partSocket = partType.optional({\n name: 'socket',\n schema: [required$1('dom')]\n });\n const partSidebar = partType.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [required$1('dom')]\n });\n const partThrobber = partType.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [required$1('dom')]\n });\n const partViewWrapper = partType.optional({\n factory: ViewWrapper,\n name: 'viewWrapper',\n schema: [required$1('backstage')]\n });\n const renderEditorContainer = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: spec.components\n });\n const partEditorContainer = partType.optional({\n factory: { sketch: renderEditorContainer },\n name: 'editorContainer',\n schema: []\n });\n var OuterContainer = composite({\n name: 'OuterContainer',\n factory: factory$6,\n configFields: [\n required$1('dom'),\n required$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n partPromotion,\n partThrobber,\n partViewWrapper,\n partEditorContainer\n ],\n apis: {\n getSocket: (apis, comp) => {\n return apis.getSocket(comp);\n },\n setSidebar: (apis, comp, panelConfigs, showSidebar) => {\n apis.setSidebar(comp, panelConfigs, showSidebar);\n },\n toggleSidebar: (apis, comp, name) => {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: (apis, comp) => {\n return apis.whichSidebar(comp);\n },\n getHeader: (apis, comp) => {\n return apis.getHeader(comp);\n },\n getToolbar: (apis, comp) => {\n return apis.getToolbar(comp);\n },\n setToolbar: (apis, comp, groups) => {\n apis.setToolbar(comp, groups);\n },\n setToolbars: (apis, comp, toolbars) => {\n apis.setToolbars(comp, toolbars);\n },\n refreshToolbar: (apis, comp) => {\n return apis.refreshToolbar(comp);\n },\n toggleToolbarDrawer: (apis, comp) => {\n apis.toggleToolbarDrawer(comp);\n },\n toggleToolbarDrawerWithoutFocusing: (apis, comp) => {\n apis.toggleToolbarDrawerWithoutFocusing(comp);\n },\n isToolbarDrawerToggled: (apis, comp) => {\n return apis.isToolbarDrawerToggled(comp);\n },\n getThrobber: (apis, comp) => {\n return apis.getThrobber(comp);\n },\n setMenubar: (apis, comp, menus) => {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: (apis, comp) => {\n apis.focusMenubar(comp);\n },\n focusToolbar: (apis, comp) => {\n apis.focusToolbar(comp);\n },\n setViews: (apis, comp, views) => {\n apis.setViews(comp, views);\n },\n toggleView: (apis, comp, name) => {\n return apis.toggleView(comp, name);\n },\n whichView: (apis, comp) => {\n return apis.whichView(comp);\n }\n }\n });\n\n const defaultMenubar = 'file edit view insert format tools table help';\n const defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | importword exportpdf exportword | export print | deleteallconversations'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'\n },\n view: {\n title: 'View',\n items: 'code revisionhistory | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n },\n insert: {\n title: 'Insert',\n items: 'image link media addcomment pageembed inserttemplate codesample inserttable accordion math | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'aidialog aishortcuts | spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code typography wordcount addtemplate'\n },\n table: {\n title: 'Table',\n items: 'inserttable | cell row column | advtablesort | tableprops deletetable'\n },\n help: {\n title: 'Help',\n items: 'help'\n }\n };\n const make = (menu, registry, editor) => {\n const removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: () => bind$3(menu.items, i => {\n const itemName = i.toLowerCase();\n if (itemName.trim().length === 0) {\n return [];\n } else if (exists(removedMenuItems, removedMenuItem => removedMenuItem === itemName)) {\n return [];\n } else if (itemName === 'separator' || itemName === '|') {\n return [{ type: 'separator' }];\n } else if (registry.menuItems[itemName]) {\n return [registry.menuItems[itemName]];\n } else {\n return [];\n }\n })\n };\n };\n const parseItemsString = items => {\n return items.split(' ');\n };\n const identifyMenus = (editor, registry) => {\n const rawMenuData = {\n ...defaultMenus,\n ...registry.menus\n };\n const userDefinedMenus = keys(registry.menus).length > 0;\n const menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n const validMenus = filter$2(menubar, menuName => {\n const isDefaultMenu = has$2(defaultMenus, menuName);\n if (userDefinedMenus) {\n return isDefaultMenu || get$h(registry.menus, menuName).exists(menu => has$2(menu, 'items'));\n } else {\n return isDefaultMenu;\n }\n });\n const menus = map$2(validMenus, menuName => {\n const menuData = rawMenuData[menuName];\n return make({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter$2(menus, menu => {\n const isNotSeparator = item => isString(item) || item.type !== 'separator';\n return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n });\n };\n\n const fireSkinLoaded = editor => {\n const done = () => {\n editor._skinLoaded = true;\n fireSkinLoaded$1(editor);\n };\n return () => {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n const fireSkinLoadError = (editor, err) => () => fireSkinLoadError$1(editor, { message: err });\n\n const getSkinResourceIdentifier = editor => {\n const skin = getSkin(editor);\n if (!skin) {\n return Optional.none();\n } else {\n return Optional.from(skin);\n }\n };\n const loadStylesheet = (editor, stylesheetUrl, styleSheetLoader) => {\n editor.on('remove', () => styleSheetLoader.unload(stylesheetUrl));\n return styleSheetLoader.load(stylesheetUrl);\n };\n const loadRawCss = (editor, key, css, styleSheetLoader) => {\n editor.on('remove', () => styleSheetLoader.unloadRawCss(key));\n return styleSheetLoader.loadRawCss(key, css);\n };\n const skinIdentifierToResourceKey = (identifier, filename) => 'ui/' + identifier + '/' + filename;\n const getResourceValue = resourceKey => Optional.from(tinymce.Resource.get(resourceKey)).filter(isString);\n const determineCSSDecision = (editor, filenameBase, skinUrl = '') => {\n const resourceKey = getSkinResourceIdentifier(editor).map(identifier => skinIdentifierToResourceKey(identifier, `${ filenameBase }.css`));\n const resourceValue = resourceKey.bind(getResourceValue);\n return lift2(resourceKey, resourceValue, (key, css) => {\n return {\n _kind: 'load-raw',\n key,\n css\n };\n }).getOrThunk(() => {\n const suffix = editor.editorManager.suffix;\n const skinUiCssUrl = skinUrl + `/${ filenameBase }${ suffix }.css`;\n return {\n _kind: 'load-stylesheet',\n url: skinUiCssUrl\n };\n });\n };\n const loadUiSkins = (editor, skinUrl) => {\n const loader = editor.ui.styleSheetLoader;\n const decision = determineCSSDecision(editor, 'skin', skinUrl);\n switch (decision._kind) {\n case 'load-raw':\n const {key, css} = decision;\n loadRawCss(editor, key, css, loader);\n return Promise.resolve();\n case 'load-stylesheet':\n const {url} = decision;\n return loadStylesheet(editor, url, loader);\n default:\n return Promise.resolve();\n }\n };\n const loadShadowDomUiSkins = (editor, skinUrl) => {\n const isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n if (!isInShadowRoot$1) {\n return Promise.resolve();\n } else {\n const loader = global$8.DOM.styleSheetLoader;\n const decision = determineCSSDecision(editor, 'skin.shadowdom', skinUrl);\n switch (decision._kind) {\n case 'load-raw':\n const {key, css} = decision;\n loadRawCss(editor, key, css, loader);\n return Promise.resolve();\n case 'load-stylesheet':\n const {url} = decision;\n return loadStylesheet(editor, url, loader);\n default:\n return Promise.resolve();\n }\n }\n };\n const loadUiContentCSS = (editor, isInline, skinUrl) => {\n const filenameBase = isInline ? 'content.inline' : 'content';\n const decision = determineCSSDecision(editor, filenameBase, skinUrl);\n switch (decision._kind) {\n case 'load-raw':\n const {key, css} = decision;\n if (isInline) {\n loadRawCss(editor, key, css, editor.ui.styleSheetLoader);\n } else {\n editor.on('PostRender', () => {\n loadRawCss(editor, key, css, editor.dom.styleSheetLoader);\n });\n }\n return Promise.resolve();\n case 'load-stylesheet':\n const {url} = decision;\n if (skinUrl) {\n editor.contentCSS.push(url);\n }\n return Promise.resolve();\n default:\n return Promise.resolve();\n }\n };\n const loadUrlSkin = async (isInline, editor) => {\n const skinUrl = getSkinUrl(editor);\n await loadUiContentCSS(editor, isInline, skinUrl);\n if (!isSkinDisabled(editor) && isString(skinUrl)) {\n return Promise.all([\n loadUiSkins(editor, skinUrl),\n loadShadowDomUiSkins(editor, skinUrl)\n ]).then();\n }\n };\n const loadSkin = (isInline, editor) => {\n return loadUrlSkin(isInline, editor).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded'));\n };\n const iframe = curry(loadSkin, false);\n const inline = curry(loadSkin, true);\n\n const makeTooltipText = (editor, labelWithPlaceholder, value) => isEmpty(value) ? editor.translate(labelWithPlaceholder) : editor.translate([\n labelWithPlaceholder,\n editor.translate(value)\n ]);\n\n const generateSelectItems = (backstage, spec) => {\n const generateItem = (rawItem, response, invalid, value) => {\n const translatedText = backstage.shared.providers.translate(rawItem.title);\n if (rawItem.type === 'separator') {\n return Optional.some({\n type: 'separator',\n text: translatedText\n });\n } else if (rawItem.type === 'submenu') {\n const items = bind$3(rawItem.getStyleItems(), si => validate(si, response, value));\n if (response === 0 && items.length <= 0) {\n return Optional.none();\n } else {\n return Optional.some({\n type: 'nestedmenuitem',\n text: translatedText,\n enabled: items.length > 0,\n getSubmenuItems: () => bind$3(rawItem.getStyleItems(), si => validate(si, response, value))\n });\n }\n } else {\n return Optional.some({\n type: 'togglemenuitem',\n text: translatedText,\n icon: rawItem.icon,\n active: rawItem.isSelected(value),\n enabled: !invalid,\n onAction: spec.onAction(rawItem),\n ...rawItem.getStylePreview().fold(() => ({}), preview => ({ meta: { style: preview } }))\n });\n }\n };\n const validate = (item, response, value) => {\n const invalid = item.type === 'formatter' && spec.isInvalid(item);\n if (response === 0) {\n return invalid ? [] : generateItem(item, response, false, value).toArray();\n } else {\n return generateItem(item, response, invalid, value).toArray();\n }\n };\n const validateItems = preItems => {\n const value = spec.getCurrentValue();\n const response = spec.shouldHide ? 0 : 1;\n return bind$3(preItems, item => validate(item, response, value));\n };\n const getFetch = (backstage, getStyleItems) => (comp, callback) => {\n const preItems = getStyleItems();\n const items = validateItems(preItems);\n const menu = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n callback(menu);\n };\n return {\n validateItems,\n getFetch\n };\n };\n const createMenuItems = (backstage, spec) => {\n const dataset = spec.dataset;\n const getStyleItems = dataset.type === 'basic' ? () => map$2(dataset.data, d => processBasic(d, spec.isSelectedFor, spec.getPreviewFor)) : dataset.getData;\n return {\n items: generateSelectItems(backstage, spec),\n getStyleItems\n };\n };\n const createSelectButton = (editor, backstage, spec, getTooltip, textUpdateEventName, btnName) => {\n const {items, getStyleItems} = createMenuItems(backstage, spec);\n const tooltipString = Cell(spec.tooltip);\n const getApi = comp => ({\n getComponent: constant$1(comp),\n setTooltip: tooltip => {\n const translatedTooltip = backstage.shared.providers.translate(tooltip);\n set$9(comp.element, 'aria-label', translatedTooltip);\n tooltipString.set(tooltip);\n }\n });\n const onSetup = api => {\n const handler = e => api.setTooltip(makeTooltipText(editor, getTooltip(e.value), e.value));\n editor.on(textUpdateEventName, handler);\n return composeUnbinders(onSetupEvent(editor, 'NodeChange', api => {\n const comp = api.getComponent();\n spec.updateText(comp);\n Disabling.set(api.getComponent(), !editor.selection.isEditable());\n })(api), () => editor.off(textUpdateEventName, handler));\n };\n return renderCommonDropdown({\n context: 'mode:design',\n text: spec.icon.isSome() ? Optional.none() : spec.text,\n icon: spec.icon,\n ariaLabel: Optional.some(spec.tooltip),\n tooltip: Optional.none(),\n role: Optional.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup,\n getApi,\n columns: 1,\n presets: 'normal',\n classes: spec.icon.isSome() ? [] : ['bespoke'],\n dropdownBehaviours: [Tooltipping.config({\n ...backstage.shared.providers.tooltips.getConfig({\n tooltipText: backstage.shared.providers.translate(spec.tooltip),\n onShow: comp => {\n if (spec.tooltip !== tooltipString.get()) {\n const translatedTooltip = backstage.shared.providers.translate(tooltipString.get());\n Tooltipping.setComponents(comp, backstage.shared.providers.tooltips.getComponents({ tooltipText: translatedTooltip }));\n }\n }\n })\n })]\n }, 'tox-tbtn', backstage.shared, btnName);\n };\n\n const process = rawFormats => map$2(rawFormats, item => {\n let title = item, format = item;\n const values = item.split('=');\n if (values.length > 1) {\n title = values[0];\n format = values[1];\n }\n return {\n title,\n format\n };\n });\n const buildBasicStaticDataset = data => ({\n type: 'basic',\n data\n });\n var Delimiter;\n (function (Delimiter) {\n Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n Delimiter[Delimiter['Space'] = 1] = 'Space';\n }(Delimiter || (Delimiter = {})));\n const split = (rawFormats, delimiter) => {\n if (delimiter === Delimiter.SemiColon) {\n return rawFormats.replace(/;$/, '').split(';');\n } else {\n return rawFormats.split(' ');\n }\n };\n const buildBasicSettingsDataset = (editor, settingName, delimiter) => {\n const rawFormats = editor.options.get(settingName);\n const data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data\n };\n };\n\n const menuTitle$4 = 'Align';\n const getTooltipPlaceholder$4 = constant$1('Alignment {0}');\n const fallbackAlignment = 'left';\n const alignMenuItems = [\n {\n title: 'Left',\n icon: 'align-left',\n format: 'alignleft',\n command: 'JustifyLeft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter',\n command: 'JustifyCenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright',\n command: 'JustifyRight'\n },\n {\n title: 'Justify',\n icon: 'align-justify',\n format: 'alignjustify',\n command: 'JustifyFull'\n }\n ];\n const getSpec$4 = editor => {\n const getMatchingValue = () => find$5(alignMenuItems, item => editor.formatter.match(item.format));\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = _format => Optional.none;\n const updateSelectMenuIcon = comp => {\n const match = getMatchingValue();\n const alignment = match.fold(constant$1(fallbackAlignment), item => item.title.toLowerCase());\n emitWith(comp, updateMenuIcon, { icon: `align-${ alignment }` });\n fireAlignTextUpdate(editor, { value: alignment });\n };\n const dataset = buildBasicStaticDataset(alignMenuItems);\n const onAction = rawItem => () => find$5(alignMenuItems, item => item.format === rawItem.format).each(item => editor.execCommand(item.command));\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$4(), fallbackAlignment),\n text: Optional.none(),\n icon: Optional.some('align-left'),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuIcon,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createAlignButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$4(editor), getTooltipPlaceholder$4, 'AlignTextUpdate', 'align');\n const createAlignMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$4(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate(menuTitle$4),\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const findNearest = (editor, getStyles) => {\n const styles = getStyles();\n const formats = map$2(styles, style => style.format);\n return Optional.from(editor.formatter.closest(formats)).bind(fmt => find$5(styles, data => data.format === fmt));\n };\n\n const menuTitle$3 = 'Blocks';\n const getTooltipPlaceholder$3 = constant$1('Block {0}');\n const fallbackFormat = 'Paragraph';\n const getSpec$3 = editor => {\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n if (fmt) {\n return Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n });\n } else {\n return Optional.none();\n }\n };\n const updateSelectMenuText = comp => {\n const detectedFormat = findNearest(editor, () => dataset.data);\n const text = detectedFormat.fold(constant$1(fallbackFormat), fmt => fmt.title);\n emitWith(comp, updateMenuText, { text });\n fireBlocksTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'block_formats', Delimiter.SemiColon);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$3(), fallbackFormat),\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createBlocksButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$3(editor), getTooltipPlaceholder$3, 'BlocksTextUpdate', 'blocks');\n const createBlocksMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('blocks', {\n text: menuTitle$3,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const menuTitle$2 = 'Fonts';\n const getTooltipPlaceholder$2 = constant$1('Font {0}');\n const systemFont = 'System Font';\n const systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n const splitFonts = fontFamily => {\n const fonts = fontFamily.split(/\\s*,\\s*/);\n return map$2(fonts, font => font.replace(/^['\"]+|['\"]+$/g, ''));\n };\n const matchesStack = (fonts, stack) => stack.length > 0 && forall(stack, font => fonts.indexOf(font.toLowerCase()) > -1);\n const isSystemFontStack = (fontFamily, userStack) => {\n if (fontFamily.indexOf('-apple-system') === 0 || userStack.length > 0) {\n const fonts = splitFonts(fontFamily.toLowerCase());\n return matchesStack(fonts, systemStackFonts) || matchesStack(fonts, userStack);\n } else {\n return false;\n }\n };\n const getSpec$2 = editor => {\n const getMatchingValue = () => {\n const getFirstFont = fontFamily => fontFamily ? splitFonts(fontFamily)[0] : '';\n const fontFamily = editor.queryCommandValue('FontName');\n const items = dataset.data;\n const font = fontFamily ? fontFamily.toLowerCase() : '';\n const userStack = getDefaultFontStack(editor);\n const matchOpt = find$5(items, item => {\n const format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(() => {\n return someIf(isSystemFontStack(font, userStack), {\n title: systemFont,\n format: font\n });\n });\n return {\n matchOpt,\n font: fontFamily\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = item => () => Optional.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, font} = getMatchingValue();\n const text = matchOpt.fold(constant$1(font), item => item.title);\n emitWith(comp, updateMenuText, { text });\n fireFontFamilyTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_family_formats', Delimiter.SemiColon);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$2(), systemFont),\n text: Optional.some(systemFont),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontFamilyButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$2(editor), getTooltipPlaceholder$2, 'FontFamilyTextUpdate', 'fontfamily');\n const createFontFamilyMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontfamily', {\n text: backstage.shared.providers.translate(menuTitle$2),\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n const normalise = (input, accepted) => parse(input, accepted).map(({value, unit}) => value + unit);\n\n const Keys = {\n tab: constant$1(9),\n escape: constant$1(27),\n enter: constant$1(13),\n backspace: constant$1(8),\n delete: constant$1(46),\n left: constant$1(37),\n up: constant$1(38),\n right: constant$1(39),\n down: constant$1(40),\n space: constant$1(32),\n home: constant$1(36),\n end: constant$1(35),\n pageUp: constant$1(33),\n pageDown: constant$1(34)\n };\n\n const createBespokeNumberInput = (editor, backstage, spec, btnName) => {\n let currentComp = Optional.none();\n const getValueFromCurrentComp = comp => comp.map(alloyComp => Representing.getValue(alloyComp)).getOr('');\n const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode DisabledStateChange', api => {\n const comp = api.getComponent();\n currentComp = Optional.some(comp);\n spec.updateInputValue(comp);\n Disabling.set(comp, !editor.selection.isEditable() || isDisabled(editor));\n });\n const getApi = comp => ({ getComponent: constant$1(comp) });\n const editorOffCell = Cell(noop);\n const customEvents = generate$6('custom-number-input-events');\n const changeValue = (f, fromInput, focusBack) => {\n const text = getValueFromCurrentComp(currentComp);\n const newValue = spec.getNewValue(text, f);\n const lenghtDelta = text.length - `${ newValue }`.length;\n const oldStart = currentComp.map(comp => comp.element.dom.selectionStart - lenghtDelta);\n const oldEnd = currentComp.map(comp => comp.element.dom.selectionEnd - lenghtDelta);\n spec.onAction(newValue, focusBack);\n currentComp.each(comp => {\n Representing.setValue(comp, newValue);\n if (fromInput) {\n oldStart.each(oldStart => comp.element.dom.selectionStart = oldStart);\n oldEnd.each(oldEnd => comp.element.dom.selectionEnd = oldEnd);\n }\n });\n };\n const decrease = (fromInput, focusBack) => changeValue((n, s) => n - s, fromInput, focusBack);\n const increase = (fromInput, focusBack) => changeValue((n, s) => n + s, fromInput, focusBack);\n const goToParent = comp => parentElement(comp.element).fold(Optional.none, parent => {\n focus$3(parent);\n return Optional.some(true);\n });\n const focusInput = comp => {\n if (hasFocus(comp.element)) {\n firstChild(comp.element).each(input => focus$3(input));\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n };\n const makeStepperButton = (action, title, tooltip, classes) => {\n const editorOffCellStepButton = Cell(noop);\n const translatedTooltip = backstage.shared.providers.translate(tooltip);\n const altExecuting = generate$6('altExecuting');\n const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode DisabledStateChange', api => {\n Disabling.set(api.getComponent(), !editor.selection.isEditable() || isDisabled(editor));\n });\n const onClick = comp => {\n if (!Disabling.isDisabled(comp)) {\n action(true);\n }\n };\n return Button.sketch({\n dom: {\n tag: 'button',\n attributes: {\n 'aria-label': translatedTooltip,\n 'data-mce-name': title\n },\n classes: classes.concat(title)\n },\n components: [renderIconFromPack$1(title, backstage.shared.providers.icons)],\n buttonBehaviours: derive$1([\n Disabling.config({}),\n Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: translatedTooltip })),\n config(altExecuting, [\n onControlAttached({\n onSetup,\n getApi\n }, editorOffCellStepButton),\n onControlDetached({ getApi }, editorOffCellStepButton),\n run$1(keydown(), (comp, se) => {\n if (se.event.raw.keyCode === Keys.space() || se.event.raw.keyCode === Keys.enter()) {\n if (!Disabling.isDisabled(comp)) {\n action(false);\n }\n }\n }),\n run$1(click(), onClick),\n run$1(touchend(), onClick)\n ])\n ]),\n eventOrder: {\n [keydown()]: [\n altExecuting,\n 'keying'\n ],\n [click()]: [\n altExecuting,\n 'alloy.base.behaviour'\n ],\n [touchend()]: [\n altExecuting,\n 'alloy.base.behaviour'\n ],\n [attachedToDom()]: [\n 'alloy.base.behaviour',\n altExecuting,\n 'tooltipping'\n ],\n [detachedFromDom()]: [\n altExecuting,\n 'tooltipping'\n ]\n }\n });\n };\n const memMinus = record(makeStepperButton(focusBack => decrease(false, focusBack), 'minus', 'Decrease font size', []));\n const memPlus = record(makeStepperButton(focusBack => increase(false, focusBack), 'plus', 'Increase font size', []));\n const memInput = record({\n dom: {\n tag: 'div',\n classes: ['tox-input-wrapper']\n },\n components: [Input.sketch({\n inputBehaviours: derive$1([\n Disabling.config({}),\n config(customEvents, [\n onControlAttached({\n onSetup,\n getApi\n }, editorOffCell),\n onControlDetached({ getApi }, editorOffCell)\n ]),\n config('input-update-display-text', [\n run$1(updateMenuText, (comp, se) => {\n Representing.setValue(comp, se.event.text);\n }),\n run$1(focusout(), comp => {\n spec.onAction(Representing.getValue(comp));\n }),\n run$1(change(), comp => {\n spec.onAction(Representing.getValue(comp));\n })\n ]),\n Keying.config({\n mode: 'special',\n onEnter: _comp => {\n changeValue(identity, true, true);\n return Optional.some(true);\n },\n onEscape: goToParent,\n onUp: _comp => {\n increase(true, false);\n return Optional.some(true);\n },\n onDown: _comp => {\n decrease(true, false);\n return Optional.some(true);\n },\n onLeft: (_comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (_comp, se) => {\n se.cut();\n return Optional.none();\n }\n })\n ])\n })],\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEnter: focusInput,\n onSpace: focusInput,\n onEscape: goToParent\n }),\n config('input-wrapper-events', [run$1(mouseover(), comp => {\n each$1([\n memMinus,\n memPlus\n ], button => {\n const buttonNode = SugarElement.fromDom(button.get(comp).element.dom);\n if (hasFocus(buttonNode)) {\n blur$1(buttonNode);\n }\n });\n })])\n ])\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-number-input'],\n attributes: { ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {} }\n },\n components: [\n memMinus.asSpec(),\n memInput.asSpec(),\n memPlus.asSpec()\n ],\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode,\n cycles: false,\n selector: 'button, .tox-input-wrapper',\n onEscape: wrapperComp => {\n if (hasFocus(wrapperComp.element)) {\n return Optional.none();\n } else {\n focus$3(wrapperComp.element);\n return Optional.some(true);\n }\n }\n })\n ])\n };\n };\n\n const menuTitle$1 = 'Font sizes';\n const getTooltipPlaceholder$1 = constant$1('Font size {0}');\n const fallbackFontSize = '12pt';\n const legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\n };\n const keywordFontSizes = {\n 'xx-small': '7pt',\n 'x-small': '8pt',\n 'small': '10pt',\n 'medium': '12pt',\n 'large': '14pt',\n 'x-large': '18pt',\n 'xx-large': '24pt'\n };\n const round = (number, precision) => {\n const factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n const toPt = (fontSize, precision) => {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n } else {\n return get$h(keywordFontSizes, fontSize).getOr(fontSize);\n }\n };\n const toLegacy = fontSize => get$h(legacyFontSizes, fontSize).getOr('');\n const getSpec$1 = editor => {\n const getMatchingValue = () => {\n let matchOpt = Optional.none();\n const items = dataset.data;\n const fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n for (let precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n const pt = toPt(fontSize, precision);\n const legacy = toLegacy(pt);\n matchOpt = find$5(items, item => item.format === fontSize || item.format === pt || item.format === legacy);\n }\n }\n return {\n matchOpt,\n size: fontSize\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = constant$1(Optional.none);\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, size} = getMatchingValue();\n const text = matchOpt.fold(constant$1(size), match => match.title);\n emitWith(comp, updateMenuText, { text });\n fireFontSizeTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_size_formats', Delimiter.Space);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$1(), fallbackFontSize),\n text: Optional.some(fallbackFontSize),\n icon: Optional.none(),\n isSelectedFor,\n getPreviewFor,\n getCurrentValue,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontSizeButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$1(editor), getTooltipPlaceholder$1, 'FontSizeTextUpdate', 'fontsize');\n const getConfigFromUnit = unit => {\n var _a;\n const baseConfig = { step: 1 };\n const configs = {\n em: { step: 0.1 },\n cm: { step: 0.1 },\n in: { step: 0.1 },\n pc: { step: 0.1 },\n ch: { step: 0.1 },\n rem: { step: 0.1 }\n };\n return (_a = configs[unit]) !== null && _a !== void 0 ? _a : baseConfig;\n };\n const defaultValue = 16;\n const isValidValue = value => value >= 0;\n const getNumberInputSpec = editor => {\n const getCurrentValue = () => editor.queryCommandValue('FontSize');\n const updateInputValue = comp => emitWith(comp, updateMenuText, { text: getCurrentValue() });\n return {\n updateInputValue,\n onAction: (format, focusBack) => editor.execCommand('FontSize', false, format, { skip_focus: !focusBack }),\n getNewValue: (text, updateFunction) => {\n parse(text, [\n 'unsupportedLength',\n 'empty'\n ]);\n const currentValue = getCurrentValue();\n const parsedText = parse(text, [\n 'unsupportedLength',\n 'empty'\n ]).or(parse(currentValue, [\n 'unsupportedLength',\n 'empty'\n ]));\n const value = parsedText.map(res => res.value).getOr(defaultValue);\n const defaultUnit = getFontSizeInputDefaultUnit(editor);\n const unit = parsedText.map(res => res.unit).filter(u => u !== '').getOr(defaultUnit);\n const newValue = updateFunction(value, getConfigFromUnit(unit).step);\n const res = `${ isValidValue(newValue) ? newValue : value }${ unit }`;\n if (res !== currentValue) {\n fireFontSizeInputTextUpdate(editor, { value: res });\n }\n return res;\n }\n };\n };\n const createFontSizeInputButton = (editor, backstage) => createBespokeNumberInput(editor, backstage, getNumberInputSpec(editor), 'fontsizeinput');\n const createFontSizeMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$1(editor));\n editor.ui.registry.addNestedMenuItem('fontsize', {\n text: menuTitle$1,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const menuTitle = 'Formats';\n const getTooltipPlaceholder = value => isEmpty(value) ? 'Formats' : 'Format {0}';\n const getSpec = (editor, dataset) => {\n const fallbackFormat = 'Formats';\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const updateSelectMenuText = comp => {\n const getFormatItems = fmt => {\n if (isNestedFormat(fmt)) {\n return bind$3(fmt.items, getFormatItems);\n } else if (isFormatReference(fmt)) {\n return [{\n title: fmt.title,\n format: fmt.format\n }];\n } else {\n return [];\n }\n };\n const flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n const detectedFormat = findNearest(editor, constant$1(flattenedItems));\n const text = detectedFormat.fold(constant$1({\n title: fallbackFormat,\n tooltipLabel: ''\n }), fmt => ({\n title: fmt.title,\n tooltipLabel: fmt.title\n }));\n emitWith(comp, updateMenuText, { text: text.title });\n fireStylesTextUpdate(editor, { value: text.tooltipLabel });\n };\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder(''), ''),\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n shouldHide: shouldAutoHideStyleFormats(editor),\n isInvalid: item => !editor.formatter.canApply(item.format),\n dataset\n };\n };\n const createStylesButton = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n return createSelectButton(editor, backstage, getSpec(editor, dataset), getTooltipPlaceholder, 'StylesTextUpdate', 'styles');\n };\n const createStylesMenu = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n const menuItems = createMenuItems(backstage, getSpec(editor, dataset));\n editor.ui.registry.addNestedMenuItem('styles', {\n text: menuTitle,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const schema$7 = constant$1([\n required$1('toggleClass'),\n required$1('fetch'),\n onStrictHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n onStrictHandler('onItemExecute'),\n option$3('lazySink'),\n required$1('dom'),\n onHandler('onOpen'),\n field('splitDropdownBehaviours', [\n Coupling,\n Keying,\n Focusing\n ]),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n defaulted('eventOrder', {}),\n option$3('role'),\n option$3('listRole')\n ].concat(sandboxFields()));\n const arrowPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'arrow',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: arrow => {\n arrow.getSystem().getByUid(detail.uid).each(emitExecute);\n },\n buttonBehaviours: derive$1([Toggling.config({\n toggleOnExecute: false,\n toggleClass: detail.toggleClass\n })])\n };\n }\n });\n const buttonPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'button',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: btn => {\n btn.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onExecute(splitDropdown, btn);\n });\n }\n };\n }\n });\n const parts$3 = constant$1([\n arrowPart,\n buttonPart,\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: detail => {\n return {\n onExecute: (tmenu, item) => {\n tmenu.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onItemExecute(splitDropdown, tmenu, item);\n });\n }\n };\n }\n }),\n partType$1()\n ]);\n\n const factory$5 = (detail, components, spec, externals) => {\n const switchToMenu = sandbox => {\n Composing.getCurrent(sandbox).each(current => {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup(detail, identity, component, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const openMenu = comp => {\n action(comp);\n return Optional.some(true);\n };\n const executeOnButton = comp => {\n const button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Optional.some(true);\n };\n const buttonEvents = {\n ...derive$2([runOnAttached((component, _simulatedEvent) => {\n const ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(descriptor => {\n const descriptorId = generate$6('aria');\n set$9(descriptor.element, 'id', descriptorId);\n set$9(component.element, 'aria-describedby', descriptorId);\n });\n })]),\n ...events$9(Optional.some(action))\n };\n const apis = {\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: hotspot => {\n const arrow = getPartOrDie(hotspot, detail, 'arrow');\n const extras = {\n onOpen: () => {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: () => {\n Toggling.off(arrow);\n Toggling.off(hotspot);\n }\n };\n return makeSandbox$1(detail, hotspot, extras);\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: executeOnButton,\n onEnter: executeOnButton,\n onDown: openMenu\n }),\n Focusing.config({}),\n Toggling.config({\n toggleOnExecute: false,\n aria: { mode: 'expanded' }\n })\n ]),\n domModification: {\n attributes: {\n 'role': detail.role.getOr('button'),\n 'aria-haspopup': true\n }\n }\n };\n };\n const SplitDropdown = composite({\n name: 'SplitDropdown',\n configFields: schema$7(),\n partFields: parts$3(),\n factory: factory$5,\n apis: { repositionMenus: (apis, comp) => apis.repositionMenus(comp) }\n });\n\n const getButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setText: text => emitWith(component, updateMenuText, { text }),\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const getToggleApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setText: text => emitWith(component, updateMenuText, { text }),\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const getTooltipAttributes = (tooltip, providersBackstage) => tooltip.map(tooltip => ({ 'aria-label': providersBackstage.translate(tooltip) })).getOr({});\n const focusButtonEvent = generate$6('focus-button');\n const renderCommonStructure = (optIcon, optText, tooltip, behaviours, providersBackstage, context, btnName) => {\n const optMemDisplayText = optText.map(text => record(renderLabel$1(text, 'tox-tbtn', providersBackstage)));\n const optMemDisplayIcon = optIcon.map(icon => record(renderReplaceableIconFromPack(icon, providersBackstage.icons)));\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(optText.isSome() ? ['tox-tbtn--select'] : []),\n attributes: {\n ...getTooltipAttributes(tooltip, providersBackstage),\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(mem => mem.asSpec()),\n optMemDisplayText.map(mem => mem.asSpec())\n ]),\n eventOrder: {\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n commonButtonDisplayEvent\n ],\n [attachedToDom()]: [\n commonButtonDisplayEvent,\n 'toolbar-group-button-events'\n ],\n [detachedFromDom()]: [\n commonButtonDisplayEvent,\n 'toolbar-group-button-events',\n 'tooltipping'\n ]\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(() => providersBackstage.checkUiComponentContext(context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(context)),\n config(commonButtonDisplayEvent, [\n runOnAttached((comp, _se) => forceInitialSize(comp)),\n run$1(updateMenuText, (comp, se) => {\n optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n Replacing.set(displayText, [text$2(providersBackstage.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, (comp, se) => {\n optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, providersBackstage.icons)]);\n });\n }),\n run$1(mousedown(), (button, se) => {\n se.event.prevent();\n emit(button, focusButtonEvent);\n })\n ])\n ].concat(behaviours.getOr([])))\n };\n };\n const renderFloatingToolbarButton = (spec, backstage, identifyButtons, attributes, btnName) => {\n const sharedBackstage = backstage.shared;\n const editorOffCell = Cell(noop);\n const specialisation = {\n toolbarButtonBehaviours: [],\n getApi: getButtonApi,\n onSetup: spec.onSetup\n };\n const behaviours = [\n config('toolbar-group-button-events', [\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n ...spec.tooltip.map(t => Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: backstage.shared.providers.translate(t) }))).toArray()\n ];\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: () => Future.nu(resolve => {\n resolve(map$2(identifyButtons(spec.items), renderToolbarGroup));\n }),\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.some(behaviours), sharedBackstage.providers, spec.context, btnName),\n toolbar: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes\n }\n }\n }\n });\n };\n const renderCommonToolbarButton = (spec, specialisation, providersBackstage, btnName) => {\n var _d;\n const editorOffCell = Cell(noop);\n const structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), providersBackstage, spec.context, btnName);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: {\n ...derive$1([\n config('toolbar-button-events', [\n onToolbarButtonExecute({\n onAction: spec.onAction,\n getApi: specialisation.getApi\n }),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n ...spec.tooltip.map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) + spec.shortcut.map(shortcut => ` (${ convertText(shortcut) })`).getOr('') }))).toArray(),\n DisablingConfigs.toolbarButton(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ].concat(specialisation.toolbarButtonBehaviours)),\n [commonButtonDisplayEvent]: (_d = structure.buttonBehaviours) === null || _d === void 0 ? void 0 : _d[commonButtonDisplayEvent]\n }\n });\n };\n const renderToolbarButton = (spec, providersBackstage, btnName) => renderToolbarButtonWith(spec, providersBackstage, [], btnName);\n const renderToolbarButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : [],\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage, btnName);\n const renderToolbarToggleButton = (spec, providersBackstage, btnName) => renderToolbarToggleButtonWith(spec, providersBackstage, [], btnName);\n const renderToolbarToggleButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [\n Replacing.config({}),\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })\n ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n getApi: getToggleApi,\n onSetup: spec.onSetup\n }, providersBackstage, btnName);\n const fetchChoices = (getApi, spec, providersBackstage) => comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(getApi(comp), value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), {\n movement: deriveMenuMovement(spec.columns, spec.presets),\n menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, classForPreset(spec.presets)).each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }))));\n const renderSplitButton = (spec, sharedBackstage, btnName) => {\n const tooltipString = Cell(spec.tooltip.getOr(''));\n const getApi = comp => ({\n isEnabled: () => !Disabling.isDisabled(comp),\n setEnabled: state => Disabling.set(comp, !state),\n setIconFill: (id, value) => {\n descendant(comp.element, `svg path[class=\"${ id }\"], rect[class=\"${ id }\"]`).each(underlinePath => {\n set$9(underlinePath, 'fill', value);\n });\n },\n setActive: state => {\n set$9(comp.element, 'aria-pressed', state);\n descendant(comp.element, 'span').each(button => {\n comp.getSystem().getByDom(button).each(buttonComp => Toggling.set(buttonComp, state));\n });\n },\n isActive: () => descendant(comp.element, 'span').exists(button => comp.getSystem().getByDom(button).exists(Toggling.isOn)),\n setText: text => descendant(comp.element, 'span').each(button => comp.getSystem().getByDom(button).each(buttonComp => emitWith(buttonComp, updateMenuText, { text }))),\n setIcon: icon => descendant(comp.element, 'span').each(button => comp.getSystem().getByDom(button).each(buttonComp => emitWith(buttonComp, updateMenuIcon, { icon }))),\n setTooltip: tooltip => {\n const translatedTooltip = sharedBackstage.providers.translate(tooltip);\n set$9(comp.element, 'aria-label', translatedTooltip);\n tooltipString.set(tooltip);\n }\n });\n const editorOffCell = Cell(noop);\n const specialisation = {\n getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: {\n 'aria-pressed': false,\n ...getTooltipAttributes(spec.tooltip, sharedBackstage.providers),\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n onExecute: button => {\n const api = getApi(button);\n if (api.isEnabled()) {\n spec.onAction(api);\n }\n },\n onItemExecute: (_a, _b, _c) => {\n },\n splitDropdownBehaviours: derive$1([\n config('split-dropdown-events', [\n runOnAttached((comp, _se) => forceInitialSize(comp)),\n run$1(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n DisablingConfigs.splitButton(() => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n ...spec.tooltip.map(tooltip => {\n return Tooltipping.config({\n ...sharedBackstage.providers.tooltips.getConfig({\n tooltipText: sharedBackstage.providers.translate(tooltip),\n onShow: comp => {\n if (tooltipString.get() !== tooltip) {\n const translatedTooltip = sharedBackstage.providers.translate(tooltipString.get());\n Tooltipping.setComponents(comp, sharedBackstage.providers.tooltips.getComponents({ tooltipText: translatedTooltip }));\n }\n }\n })\n });\n }).toArray()\n ]),\n eventOrder: {\n [attachedToDom()]: [\n 'alloy.base.behaviour',\n 'split-dropdown-events',\n 'tooltipping'\n ],\n [detachedFromDom()]: [\n 'split-dropdown-events',\n 'tooltipping'\n ]\n },\n toggleClass: 'tox-tbtn--enabled',\n lazySink: sharedBackstage.getSink,\n fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n parts: { menu: part(false, spec.columns, spec.presets) },\n components: [\n SplitDropdown.parts.button(renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some([\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n toggleOnExecute: false\n }),\n DisablingConfigs.toolbarButton(never),\n toggleOnReceive(constant$1({\n contextType: 'any',\n shouldDisable: false\n }))\n ]), sharedBackstage.providers, spec.context)),\n SplitDropdown.parts.arrow({\n dom: {\n tag: 'button',\n classes: [\n 'tox-tbtn',\n 'tox-split-button__chevron'\n ],\n innerHtml: get$3('chevron-down', sharedBackstage.providers.icons)\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(never),\n toggleOnReceive(constant$1({\n contextType: 'any',\n shouldDisable: false\n }))\n ])\n }),\n SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n const defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'ai',\n items: [\n 'aidialog',\n 'aishortcuts'\n ]\n },\n {\n name: 'styles',\n items: ['styles']\n },\n {\n name: 'formatting',\n items: [\n 'bold',\n 'italic'\n ]\n },\n {\n name: 'alignment',\n items: [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ]\n },\n {\n name: 'indentation',\n items: [\n 'outdent',\n 'indent'\n ]\n },\n {\n name: 'permanent pen',\n items: ['permanentpen']\n },\n {\n name: 'comments',\n items: ['addcomment']\n }\n ];\n const renderFromBridge = (bridgeBuilder, render) => (spec, backstage, editor, btnName) => {\n const internal = bridgeBuilder(spec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return render(internal, backstage, editor, btnName);\n };\n const types = {\n button: renderFromBridge(createToolbarButton, (s, backstage, _, btnName) => renderToolbarButton(s, backstage.shared.providers, btnName)),\n togglebutton: renderFromBridge(createToggleButton, (s, backstage, _, btnName) => renderToolbarToggleButton(s, backstage.shared.providers, btnName)),\n menubutton: renderFromBridge(createMenuButton, (s, backstage, _, btnName) => renderMenuButton(s, 'tox-tbtn', backstage, Optional.none(), false, btnName)),\n splitbutton: renderFromBridge(createSplitButton, (s, backstage, _, btnName) => renderSplitButton(s, backstage.shared, btnName)),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, (s, backstage, editor, btnName) => {\n const buttons = editor.ui.registry.getAll().buttons;\n const identify = toolbar => identifyButtons(editor, {\n buttons,\n toolbar,\n allowToolbarGroups: false\n }, backstage, Optional.none());\n const attributes = { [Attribute]: backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop };\n switch (getToolbarMode(editor)) {\n case ToolbarMode$1.floating:\n return renderFloatingToolbarButton(s, backstage, identify, attributes, btnName);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n })\n };\n const extractFrom = (spec, backstage, editor, btnName) => get$h(types, spec.type).fold(() => {\n console.error('skipping button defined by', spec);\n return Optional.none();\n }, render => Optional.some(render(spec, backstage, editor, btnName)));\n const bespokeButtons = {\n styles: createStylesButton,\n fontsize: createFontSizeButton,\n fontsizeinput: createFontSizeInputButton,\n fontfamily: createFontFamilyButton,\n blocks: createBlocksButton,\n align: createAlignButton\n };\n const removeUnusedDefaults = buttons => {\n const filteredItemGroups = map$2(defaultToolbar, group => {\n const items = filter$2(group.items, subItem => has$2(buttons, subItem) || has$2(bespokeButtons, subItem));\n return {\n name: group.name,\n items\n };\n });\n return filter$2(filteredItemGroups, group => group.items.length > 0);\n };\n const convertStringToolbar = strToolbar => {\n const groupsStrings = strToolbar.split('|');\n return map$2(groupsStrings, g => ({ items: g.trim().split(' ') }));\n };\n const isToolbarGroupSettingArray = toolbar => isArrayOf(toolbar, t => (has$2(t, 'name') || has$2(t, 'label')) && has$2(t, 'items'));\n const createToolbar = toolbarConfig => {\n const toolbar = toolbarConfig.toolbar;\n const buttons = toolbarConfig.buttons;\n if (toolbar === false) {\n return [];\n } else if (toolbar === undefined || toolbar === true) {\n return removeUnusedDefaults(buttons);\n } else if (isString(toolbar)) {\n return convertStringToolbar(toolbar);\n } else if (isToolbarGroupSettingArray(toolbar)) {\n return toolbar;\n } else {\n console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]');\n return [];\n }\n };\n const lookupButton = (editor, buttons, toolbarItem, allowToolbarGroups, backstage, prefixes) => get$h(buttons, toolbarItem.toLowerCase()).orThunk(() => prefixes.bind(ps => findMap(ps, prefix => get$h(buttons, prefix + toolbarItem.toLowerCase())))).fold(() => get$h(bespokeButtons, toolbarItem.toLowerCase()).map(r => r(editor, backstage)), spec => {\n if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n console.warn(`Ignoring the '${ toolbarItem }' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`);\n return Optional.none();\n } else {\n return extractFrom(spec, backstage, editor, toolbarItem.toLowerCase());\n }\n });\n const identifyButtons = (editor, toolbarConfig, backstage, prefixes) => {\n const toolbarGroups = createToolbar(toolbarConfig);\n const groups = map$2(toolbarGroups, group => {\n const items = bind$3(group.items, toolbarItem => {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, backstage, prefixes).toArray();\n });\n return {\n title: Optional.from(editor.translate(group.name)),\n label: someIf(group.label !== undefined, editor.translate(group.label)),\n items\n };\n });\n return filter$2(groups, group => group.items.length > 0);\n };\n\n const setToolbar = (editor, uiRefs, rawUiConfig, backstage) => {\n const outerContainer = uiRefs.mainUi.outerContainer;\n const toolbarConfig = rawUiConfig.toolbar;\n const toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n const toolbars = toolbarConfig.map(t => {\n const config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, backstage, Optional.none());\n });\n OuterContainer.setToolbars(outerContainer, toolbars);\n } else {\n OuterContainer.setToolbar(outerContainer, identifyButtons(editor, rawUiConfig, backstage, Optional.none()));\n }\n };\n\n const detection = detect$1();\n const isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n const setupEvents$1 = (editor, uiRefs) => {\n const {uiMotherships} = uiRefs;\n const dom = editor.dom;\n let contentWindow = editor.getWin();\n const initialDocEle = editor.getDoc().documentElement;\n const lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n const lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n const resizeWindow = () => {\n const outer = lastWindowDimensions.get();\n if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) {\n lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n fireResizeContent(editor);\n }\n };\n const resizeDocument = () => {\n const docEle = editor.getDoc().documentElement;\n const inner = lastDocumentDimensions.get();\n if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) {\n lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight));\n fireResizeContent(editor);\n }\n };\n const scroll = e => {\n fireScrollContent(editor, e);\n };\n dom.bind(contentWindow, 'resize', resizeWindow);\n dom.bind(contentWindow, 'scroll', scroll);\n const elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n editor.on('hide', () => {\n each$1(uiMotherships, m => {\n set$8(m.element, 'display', 'none');\n });\n });\n editor.on('show', () => {\n each$1(uiMotherships, m => {\n remove$7(m.element, 'display');\n });\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', () => {\n elementLoad.unbind();\n dom.unbind(contentWindow, 'resize', resizeWindow);\n dom.unbind(contentWindow, 'scroll', scroll);\n contentWindow = null;\n });\n };\n const attachUiMotherships = (editor, uiRoot, uiRefs) => {\n if (isSplitUiMode(editor)) {\n attachSystemAfter(uiRefs.mainUi.mothership.element, uiRefs.popupUi.mothership);\n }\n attachSystem(uiRoot, uiRefs.dialogUi.mothership);\n };\n const render$1 = (editor, uiRefs, rawUiConfig, backstage, args) => {\n const {mainUi, uiMotherships} = uiRefs;\n const lastToolbarWidth = Cell(0);\n const outerContainer = mainUi.outerContainer;\n iframe(editor);\n const eTargetNode = SugarElement.fromDom(args.targetNode);\n const uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, mainUi.mothership);\n attachUiMotherships(editor, uiRoot, uiRefs);\n editor.on('PostRender', () => {\n OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar, getSidebarShow(editor));\n });\n editor.on('SkinLoaded', () => {\n setToolbar(editor, uiRefs, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setViews(outerContainer, rawUiConfig.views);\n setupEvents$1(editor, uiRefs);\n });\n const socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12) {\n setAll(socket.element, {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n const limit = first(() => {\n editor.dispatch('ScrollContent');\n }, 20);\n const unbinder = bind(socket.element, 'scroll', limit.throttle);\n editor.on('remove', unbinder.unbind);\n }\n setupEventsForUi(editor, uiRefs);\n editor.addCommand('ToggleSidebar', (_ui, value) => {\n OuterContainer.toggleSidebar(outerContainer, value);\n fireToggleSidebar(editor);\n });\n editor.addQueryValueHandler('ToggleSidebar', () => {\n var _a;\n return (_a = OuterContainer.whichSidebar(outerContainer)) !== null && _a !== void 0 ? _a : '';\n });\n editor.addCommand('ToggleView', (_ui, value) => {\n if (OuterContainer.toggleView(outerContainer, value)) {\n const target = outerContainer.element;\n mainUi.mothership.broadcastOn([dismissPopups()], { target });\n each$1(uiMotherships, m => {\n m.broadcastOn([dismissPopups()], { target });\n });\n if (isNull(OuterContainer.whichView(outerContainer))) {\n editor.focus();\n editor.nodeChanged();\n OuterContainer.refreshToolbar(outerContainer);\n }\n fireToggleView(editor);\n }\n });\n editor.addQueryValueHandler('ToggleView', () => {\n var _a;\n return (_a = OuterContainer.whichView(outerContainer)) !== null && _a !== void 0 ? _a : '';\n });\n const toolbarMode = getToolbarMode(editor);\n const refreshDrawer = () => {\n OuterContainer.refreshToolbar(uiRefs.mainUi.outerContainer);\n };\n if (toolbarMode === ToolbarMode$1.sliding || toolbarMode === ToolbarMode$1.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', () => {\n const width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n const api = {\n setEnabled: state => {\n const eventType = state ? 'setEnabled' : 'setDisabled';\n broadcastEvents(uiRefs, eventType);\n },\n isEnabled: () => !Disabling.isDisabled(outerContainer)\n };\n return {\n iframeContainer: socket.element.dom,\n editorContainer: outerContainer.element.dom,\n api\n };\n };\n\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n const parseToInt = val => {\n const re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Optional.some(parseInt('' + val, 10));\n }\n return Optional.none();\n };\n const numToPx = val => isNumber(val) ? val + 'px' : val;\n const calcCappedSize = (size, minSize, maxSize) => {\n const minOverride = minSize.filter(min => size < min);\n const maxOverride = maxSize.filter(max => size > max);\n return minOverride.or(maxOverride).getOr(size);\n };\n\n const getHeight = editor => {\n const baseHeight = getHeightOption(editor);\n const minHeight = getMinHeightOption(editor);\n const maxHeight = getMaxHeightOption(editor);\n return parseToInt(baseHeight).map(height => calcCappedSize(height, minHeight, maxHeight));\n };\n const getHeightWithFallback = editor => {\n const height = getHeight(editor);\n return height.getOr(getHeightOption(editor));\n };\n const getWidth = editor => {\n const baseWidth = getWidthOption(editor);\n const minWidth = getMinWidthOption(editor);\n const maxWidth = getMaxWidthOption(editor);\n return parseToInt(baseWidth).map(width => calcCappedSize(width, minWidth, maxWidth));\n };\n const getWidthWithFallback = editor => {\n const width = getWidth(editor);\n return width.getOr(getWidthOption(editor));\n };\n\n const {ToolbarLocation, ToolbarMode} = Options;\n const maximumDistanceToEdge = 40;\n const InlineHeader = (editor, targetElm, uiRefs, backstage, floatContainer) => {\n const {mainUi, uiMotherships} = uiRefs;\n const DOM = global$8.DOM;\n const useFixedToolbarContainer = useFixedContainer(editor);\n const isSticky = isStickyToolbar(editor);\n const editorMaxWidthOpt = getMaxWidthOption(editor).or(getWidth(editor));\n const headerBackstage = backstage.shared.header;\n const isPositionedAtTop = headerBackstage.isPositionedAtTop;\n const minimumToolbarWidth = 150;\n const toolbarMode = getToolbarMode(editor);\n const isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n const visible = Cell(false);\n const isVisible = () => visible.get() && !editor.removed;\n const calcToolbarOffset = toolbar => isSplitToolbar ? toolbar.fold(constant$1(0), tbar => tbar.components().length > 1 ? get$e(tbar.components()[1].element) : 0) : 0;\n const calcMode = container => {\n switch (getToolbarLocation(editor)) {\n case ToolbarLocation.auto:\n const toolbar = OuterContainer.getToolbar(mainUi.outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const toolbarHeight = get$e(container.element) - offset;\n const targetBounds = box$1(targetElm);\n const roomAtTop = targetBounds.y > toolbarHeight;\n if (roomAtTop) {\n return 'top';\n } else {\n const doc = documentElement(targetElm);\n const docHeight = Math.max(doc.dom.scrollHeight, get$e(doc));\n const roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n if (roomAtBottom) {\n return 'bottom';\n } else {\n const winBounds = win();\n const isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight;\n return isRoomAtBottomViewport ? 'bottom' : 'top';\n }\n }\n case ToolbarLocation.bottom:\n return 'bottom';\n case ToolbarLocation.top:\n default:\n return 'top';\n }\n };\n const setupMode = mode => {\n floatContainer.on(container => {\n Docking.setModes(container, [mode]);\n headerBackstage.setDockingMode(mode);\n const verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n set$9(container.element, Attribute, verticalDir);\n });\n };\n const updateChromeWidth = () => {\n floatContainer.on(container => {\n const maxWidth = editorMaxWidthOpt.getOrThunk(() => {\n return getBounds$3().width - viewport$1(targetElm).left - 10;\n });\n set$8(container.element, 'max-width', maxWidth + 'px');\n });\n };\n const updateChromePosition = (isOuterContainerWidthRestored, prevScroll) => {\n floatContainer.on(container => {\n const toolbar = OuterContainer.getToolbar(mainUi.outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const targetBounds = box$1(targetElm);\n const offsetParent = getOffsetParent$1(editor, mainUi.outerContainer.element);\n const getLeft = () => offsetParent.fold(() => targetBounds.x, offsetParent => {\n const offsetBox = box$1(offsetParent);\n const isOffsetParentBody = eq(offsetParent, body());\n return isOffsetParentBody ? targetBounds.x : targetBounds.x - offsetBox.x;\n });\n const getTop = () => offsetParent.fold(() => isPositionedAtTop() ? Math.max(targetBounds.y - get$e(container.element) + offset, 0) : targetBounds.bottom, offsetParent => {\n var _a;\n const offsetBox = box$1(offsetParent);\n const scrollDelta = (_a = offsetParent.dom.scrollTop) !== null && _a !== void 0 ? _a : 0;\n const isOffsetParentBody = eq(offsetParent, body());\n const topValue = isOffsetParentBody ? Math.max(targetBounds.y - get$e(container.element) + offset, 0) : targetBounds.y - offsetBox.y + scrollDelta - get$e(container.element) + offset;\n return isPositionedAtTop() ? topValue : targetBounds.bottom;\n });\n const left = getLeft();\n const widthProperties = someIf(isOuterContainerWidthRestored, Math.ceil(mainUi.outerContainer.element.dom.getBoundingClientRect().width)).filter(w => w > minimumToolbarWidth).map(toolbarWidth => {\n const scroll = prevScroll.getOr(get$c());\n const availableWidth = window.innerWidth - (left - scroll.left);\n const width = Math.max(Math.min(toolbarWidth, availableWidth), minimumToolbarWidth);\n if (availableWidth < toolbarWidth) {\n set$8(mainUi.outerContainer.element, 'width', width + 'px');\n }\n return { width: width + 'px' };\n }).getOr({ width: 'max-content' });\n const baseProperties = {\n position: 'absolute',\n left: Math.round(left) + 'px',\n top: getTop() + 'px'\n };\n setAll(mainUi.outerContainer.element, {\n ...baseProperties,\n ...widthProperties\n });\n });\n };\n const getOffsetParent$1 = (editor, element) => isSplitUiMode(editor) ? getOffsetParent(element) : Optional.none();\n const repositionPopups$1 = () => {\n each$1(uiMotherships, m => {\n m.broadcastOn([repositionPopups()], {});\n });\n };\n const restoreOuterContainerWidth = () => {\n if (!useFixedToolbarContainer) {\n const toolbarCurrentRightsidePosition = absolute$3(mainUi.outerContainer.element).left + getOuter$1(mainUi.outerContainer.element);\n if (toolbarCurrentRightsidePosition >= window.innerWidth - maximumDistanceToEdge || getRaw(mainUi.outerContainer.element, 'width').isSome()) {\n set$8(mainUi.outerContainer.element, 'position', 'absolute');\n set$8(mainUi.outerContainer.element, 'left', '0px');\n remove$7(mainUi.outerContainer.element, 'width');\n return true;\n }\n }\n return false;\n };\n const update = stickyAction => {\n if (!isVisible()) {\n return;\n }\n if (!useFixedToolbarContainer) {\n updateChromeWidth();\n }\n const prevScroll = get$c();\n const isOuterContainerWidthRestored = useFixedToolbarContainer ? false : restoreOuterContainerWidth();\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(mainUi.outerContainer);\n }\n if (!useFixedToolbarContainer) {\n const currentScroll = get$c();\n const optScroll = someIf(prevScroll.left !== currentScroll.left, prevScroll);\n updateChromePosition(isOuterContainerWidthRestored, optScroll);\n optScroll.each(scroll => {\n to(scroll.left, currentScroll.top);\n });\n }\n if (isSticky) {\n floatContainer.on(stickyAction);\n }\n repositionPopups$1();\n };\n const doUpdateMode = () => {\n if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n return false;\n }\n return floatContainer.get().exists(fc => {\n const currentMode = headerBackstage.getDockingMode();\n const newMode = calcMode(fc);\n if (newMode !== currentMode) {\n setupMode(newMode);\n return true;\n } else {\n return false;\n }\n });\n };\n const show = () => {\n visible.set(true);\n set$8(mainUi.outerContainer.element, 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n each$1(uiMotherships, m => {\n remove$7(m.element, 'display');\n });\n doUpdateMode();\n if (isSplitUiMode(editor)) {\n update(elem => Docking.isDocked(elem) ? Docking.reset(elem) : Docking.refresh(elem));\n } else {\n update(Docking.refresh);\n }\n };\n const hide = () => {\n visible.set(false);\n set$8(mainUi.outerContainer.element, 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n each$1(uiMotherships, m => {\n set$8(m.element, 'display', 'none');\n });\n };\n const updateMode = () => {\n const changedMode = doUpdateMode();\n if (changedMode) {\n update(Docking.reset);\n }\n };\n return {\n isVisible,\n isPositionedAtTop,\n show,\n hide,\n update,\n updateMode,\n repositionPopups: repositionPopups$1\n };\n };\n\n const getTargetPosAndBounds = (targetElm, isToolbarTop) => {\n const bounds = box$1(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds\n };\n };\n const setupEvents = (editor, targetElm, ui, toolbarPersist) => {\n const prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n const resizeContent = e => {\n const {pos, bounds} = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop());\n const {\n pos: prevPos,\n bounds: prevBounds\n } = prevPosAndBounds.get();\n const hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos,\n bounds\n });\n if (hasResized) {\n fireResizeContent(editor, e);\n }\n if (ui.isVisible()) {\n if (prevPos !== pos) {\n ui.update(Docking.reset);\n } else if (hasResized) {\n ui.updateMode();\n ui.repositionPopups();\n }\n }\n };\n if (!toolbarPersist) {\n editor.on('activate', ui.show);\n editor.on('deactivate', ui.hide);\n }\n editor.on('SkinLoaded ResizeWindow', () => ui.update(Docking.reset));\n editor.on('NodeChange keydown', e => {\n requestAnimationFrame(() => resizeContent(e));\n });\n let lastScrollX = 0;\n const updateUi = last(() => ui.update(Docking.refresh), 33);\n editor.on('ScrollWindow', () => {\n const newScrollX = get$c().left;\n if (newScrollX !== lastScrollX) {\n lastScrollX = newScrollX;\n updateUi.throttle();\n }\n ui.updateMode();\n });\n if (isSplitUiMode(editor)) {\n editor.on('ElementScroll', _args => {\n ui.update(Docking.refresh);\n });\n }\n const elementLoad = unbindable();\n elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), 'load', e => resizeContent(e.raw)));\n editor.on('remove', () => {\n elementLoad.clear();\n });\n };\n const render = (editor, uiRefs, rawUiConfig, backstage, args) => {\n const {mainUi} = uiRefs;\n const floatContainer = value$4();\n const targetElm = SugarElement.fromDom(args.targetNode);\n const ui = InlineHeader(editor, targetElm, uiRefs, backstage, floatContainer);\n const toolbarPersist = isToolbarPersist(editor);\n inline(editor);\n const render = () => {\n if (floatContainer.isSet()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(mainUi.outerContainer).getOrDie());\n const uiContainer = getUiContainer(editor);\n if (isSplitUiMode(editor)) {\n attachSystemAfter(targetElm, mainUi.mothership);\n attachSystemAfter(targetElm, uiRefs.popupUi.mothership);\n } else {\n attachSystem(uiContainer, mainUi.mothership);\n }\n attachSystem(uiContainer, uiRefs.dialogUi.mothership);\n const setup = () => {\n setToolbar(editor, uiRefs, rawUiConfig, backstage);\n OuterContainer.setMenubar(mainUi.outerContainer, identifyMenus(editor, rawUiConfig));\n ui.show();\n setupEvents(editor, targetElm, ui, toolbarPersist);\n editor.nodeChanged();\n };\n if (toolbarPersist) {\n editor.once('SkinLoaded', setup);\n } else {\n setup();\n }\n };\n editor.on('show', render);\n editor.on('hide', ui.hide);\n if (!toolbarPersist) {\n editor.on('focus', render);\n editor.on('blur', ui.hide);\n }\n editor.on('init', () => {\n if (editor.hasFocus() || toolbarPersist) {\n render();\n }\n });\n setupEventsForUi(editor, uiRefs);\n const api = {\n show: render,\n hide: ui.hide,\n setEnabled: state => {\n const eventType = state ? 'setEnabled' : 'setDisabled';\n broadcastEvents(uiRefs, eventType);\n },\n isEnabled: () => !Disabling.isDisabled(mainUi.outerContainer)\n };\n return {\n editorContainer: mainUi.outerContainer.element.dom,\n api\n };\n };\n\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render\n });\n\n const LazyUiReferences = () => {\n const dialogUi = value$4();\n const popupUi = value$4();\n const mainUi = value$4();\n const lazyGetInOuterOrDie = (label, f) => () => mainUi.get().bind(oc => f(oc.outerContainer)).getOrDie(`Could not find ${ label } element in OuterContainer`);\n const getUiMotherships = () => {\n const optDialogMothership = dialogUi.get().map(ui => ui.mothership);\n const optPopupMothership = popupUi.get().map(ui => ui.mothership);\n return optDialogMothership.fold(() => optPopupMothership.toArray(), dm => optPopupMothership.fold(() => [dm], pm => eq(dm.element, pm.element) ? [dm] : [\n dm,\n pm\n ]));\n };\n return {\n dialogUi,\n popupUi,\n mainUi,\n getUiMotherships,\n lazyGetInOuterOrDie\n };\n };\n\n const showContextToolbarEvent = 'contexttoolbar-show';\n const hideContextToolbarEvent = 'contexttoolbar-hide';\n\n const contextFormInputSelector = '.tox-toolbar-slider__input,.tox-toolbar-textfield';\n const focusIn = contextbar => {\n InlineView.getContent(contextbar).each(comp => {\n descendant(comp.element, contextFormInputSelector).fold(() => Keying.focusIn(comp), focus$3);\n });\n };\n const focusParent = comp => search(comp.element).each(focus => {\n ancestor(focus, '[tabindex=\"-1\"]').each(parent => {\n focus$3(parent);\n });\n });\n\n const forwardSlideEvent = generate$6('forward-slide');\n const backSlideEvent = generate$6('backward-slide');\n const changeSlideEvent = generate$6('change-slide-event');\n const resizingClass = 'tox-pop--resizing';\n const renderContextToolbar = spec => {\n const stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: comp => {\n stack.set([]);\n InlineView.getContent(comp).each(c => {\n remove$7(c.element, 'visibility');\n });\n remove$3(comp.element, resizingClass);\n remove$7(comp.element, 'width');\n },\n onHide: () => {\n spec.onHide();\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), (comp, se) => {\n if (se.event.raw.propertyName === 'width') {\n remove$3(comp.element, resizingClass);\n remove$7(comp.element, 'width');\n }\n }),\n run$1(changeSlideEvent, (comp, se) => {\n const elem = comp.element;\n remove$7(elem, 'width');\n const currentWidth = get$d(elem);\n remove$7(elem, 'left');\n remove$7(elem, 'right');\n remove$7(elem, 'max-width');\n InlineView.setContent(comp, se.event.contents);\n add$2(elem, resizingClass);\n const newWidth = get$d(elem);\n set$8(elem, 'transition', 'none');\n InlineView.reposition(comp);\n remove$7(elem, 'transition');\n set$8(elem, 'width', currentWidth + 'px');\n se.event.focus.fold(() => focusIn(comp), f => {\n focus$3(f);\n if (search(elem).isNone()) {\n focusIn(comp);\n }\n });\n setTimeout(() => {\n set$8(comp.element, 'width', newWidth + 'px');\n }, 0);\n }),\n run$1(forwardSlideEvent, (comp, se) => {\n InlineView.getContent(comp).each(oldContents => {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active$1(getRootNode(comp.element))\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event.forwardContents,\n focus: Optional.none()\n });\n }),\n run$1(backSlideEvent, (comp, _se) => {\n spec.onBack();\n last$1(stack.get()).each(last => {\n stack.set(stack.get().slice(0, stack.get().length - 1));\n emitWith(comp, changeSlideEvent, {\n contents: premade(last.bar),\n focus: last.focus\n });\n });\n })\n ]),\n Keying.config({\n mode: 'special',\n onEscape: comp => last$1(stack.get()).fold(() => spec.onEscape(), _ => {\n emit(comp, backSlideEvent);\n return Optional.some(true);\n })\n })\n ]),\n lazySink: () => Result.value(spec.sink)\n });\n };\n\n const getFormApi = (input, valueState, focusfallbackElement) => {\n return {\n setInputEnabled: state => {\n if (!state && focusfallbackElement) {\n focus$3(focusfallbackElement);\n }\n Disabling.set(input, !state);\n },\n isInputEnabled: () => !Disabling.isDisabled(input),\n hide: () => {\n emit(input, sandboxClose());\n },\n back: () => {\n emit(input, backSlideEvent);\n },\n getValue: () => {\n return valueState.get().getOrThunk(() => Representing.getValue(input));\n },\n setValue: value => {\n if (input.getSystem().isConnected()) {\n Representing.setValue(input, value);\n } else {\n valueState.set(value);\n }\n }\n };\n };\n\n const runOnExecute = (memInput, original, valueState) => run$1(internalToolbarButtonExecute, (comp, se) => {\n const input = memInput.get(comp);\n const formApi = getFormApi(input, valueState, comp.element);\n original.onAction(formApi, se.event.buttonApi);\n });\n const renderContextButton = (memInput, button, providers, valueState) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToolbarButton({\n ...rest,\n type: 'button',\n onAction: noop\n }));\n return renderToolbarButtonWith(bridged, providers, [runOnExecute(memInput, button, valueState)]);\n };\n const renderContextToggleButton = (memInput, button, providers, valueState) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToggleButton({\n ...rest,\n type: 'togglebutton',\n onAction: noop\n }));\n return renderToolbarToggleButtonWith(bridged, providers, [runOnExecute(memInput, button, valueState)]);\n };\n const isToggleButton = button => button.type === 'contextformtogglebutton';\n const generateOne = (memInput, button, providersBackstage, valueState) => {\n if (isToggleButton(button)) {\n return renderContextToggleButton(memInput, button, providersBackstage, valueState);\n } else {\n return renderContextButton(memInput, button, providersBackstage, valueState);\n }\n };\n const generate = (memInput, buttons, providersBackstage, valueState) => {\n const mementos = map$2(buttons, button => record(generateOne(memInput, button, providersBackstage, valueState)));\n const asSpecs = () => map$2(mementos, mem => mem.asSpec());\n const findPrimary = compInSystem => findMap(buttons, (button, i) => {\n if (button.primary) {\n return Optional.from(mementos[i]).bind(mem => mem.getOpt(compInSystem)).filter(not(Disabling.isDisabled));\n } else {\n return Optional.none();\n }\n });\n return {\n asSpecs,\n findPrimary\n };\n };\n\n const renderContextFormSizeInput = (ctx, providersBackstage, onEnter, valueState) => {\n const {width, height} = ctx.initValue();\n let converter = noSizeConversion;\n const enabled = true;\n const ratioEvent = generate$6('ratio-event');\n const getApi = comp => getFormApi(comp, valueState);\n const makeIcon = iconName => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n const disabled = () => !enabled;\n const label = ctx.label.getOr('Constrain proportions');\n const translatedLabel = providersBackstage.translate(label);\n const pLock = FormCoupledInputs.parts.lock({\n dom: {\n tag: 'button',\n classes: [\n 'tox-lock',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: {\n 'aria-label': translatedLabel,\n 'data-mce-name': label\n }\n },\n components: [\n makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({ disabled }),\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: translatedLabel }))\n ])\n });\n const formGroup = components => ({\n dom: {\n tag: 'div',\n classes: ['tox-context-form__group']\n },\n components\n });\n const goToParent = comp => {\n const focussableWrapperOpt = ancestor(comp.element, 'div.tox-focusable-wrapper');\n return focussableWrapperOpt.fold(Optional.none, focussableWrapper => {\n focus$3(focussableWrapper);\n return Optional.some(true);\n });\n };\n const getFieldPart = isField1 => FormField.parts.field({\n factory: Input,\n inputClasses: [\n 'tox-textfield',\n 'tox-toolbar-textfield',\n 'tox-textfield-size'\n ],\n data: isField1 ? width : height,\n inputBehaviours: derive$1([\n Disabling.config({ disabled }),\n Tabstopping.config({}),\n config('size-input-toolbar-events', [run$1(focusin(), (component, _simulatedEvent) => {\n emitWith(component, ratioEvent, { isField1 });\n })]),\n Keying.config({\n mode: 'special',\n onEnter,\n onEscape: goToParent\n })\n ]),\n selectOnFocus: false\n });\n const getLabel = label => ({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n const focusableWrapper = field => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-focusable-wrapper',\n 'tox-toolbar-nav-item'\n ]\n },\n components: [field],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEnter: comp => {\n const focussableInputOpt = descendant(comp.element, 'input');\n return focussableInputOpt.fold(Optional.none, focussableInput => {\n focus$3(focussableInput);\n return Optional.some(true);\n });\n }\n })\n ])\n });\n const widthField = focusableWrapper(FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width:')),\n getFieldPart(true)\n ])));\n const heightField = focusableWrapper(FormCoupledInputs.parts.field2(formGroup([\n FormField.parts.label(getLabel('Height:')),\n getFieldPart(false)\n ])));\n const editorOffCell = Cell(noop);\n const controlLifecycleHandlers = [\n onControlAttached({\n onSetup: ctx.onSetup,\n getApi\n }, editorOffCell),\n onContextFormControlDetached({ getApi }, editorOffCell, valueState)\n ];\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-context-form__group']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(nbsp),\n pLock\n ])\n ],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: (current, other, _lock) => {\n parseSize(Representing.getValue(current)).each(size => {\n converter(size).each(newSize => {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n onInput: current => emit(current, formInputEvent),\n coupledFieldBehaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode,\n cycles: false,\n selector: 'button, .tox-focusable-wrapper'\n }),\n Disabling.config({\n disabled,\n onDisabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('mode:design')),\n config('size-input-toolbar-events2', [\n run$1(ratioEvent, (component, simulatedEvent) => {\n const isField1 = simulatedEvent.event.isField1;\n const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n const value1 = optCurrent.map(Representing.getValue).getOr('');\n const value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n }),\n run$1(formInputEvent, input => ctx.onInput(getApi(input))),\n ...controlLifecycleHandlers\n ])\n ])\n });\n };\n\n const createContextFormFieldFromParts = (pLabel, pField, providers) => FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-context-form__group']\n },\n components: [\n ...pLabel.toArray(),\n pField\n ],\n fieldBehaviours: derive$1([Disabling.config({\n disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable,\n onDisabled: comp => {\n focusParent(comp);\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n\n const renderContextFormSliderInput = (ctx, providers, onEnter, valueState) => {\n const editorOffCell = Cell(noop);\n const getApi = comp => getFormApi(comp, valueState);\n const pLabel = ctx.label.map(label => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providers.translate(label))]\n }));\n const pField = FormField.parts.field({\n factory: Input,\n type: 'range',\n inputClasses: [\n 'tox-toolbar-slider__input',\n 'tox-toolbar-nav-item'\n ],\n inputAttributes: {\n min: String(ctx.min()),\n max: String(ctx.max())\n },\n data: ctx.initValue().toString(),\n fromInputValue: value => toFloat(value).getOr(ctx.min()),\n toInputValue: value => String(value),\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable }),\n toggleOnReceive(() => providers.checkUiComponentContext('mode:design')),\n Keying.config({\n mode: 'special',\n onEnter,\n onLeft: (comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (comp, se) => {\n se.cut();\n return Optional.none();\n }\n }),\n config('slider-events', [\n onControlAttached({\n onSetup: ctx.onSetup,\n getApi,\n onBeforeSetup: Keying.focusIn\n }, editorOffCell),\n onContextFormControlDetached({ getApi }, editorOffCell, valueState),\n run$1(input(), comp => {\n ctx.onInput(getApi(comp));\n })\n ])\n ])\n });\n return createContextFormFieldFromParts(pLabel, pField, providers);\n };\n\n const renderContextFormTextInput = (ctx, providers, onEnter, valueState) => {\n const editorOffCell = Cell(noop);\n const getFormApi$1 = comp => getFormApi(comp, valueState);\n const pLabel = ctx.label.map(label => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providers.translate(label))]\n }));\n const placeholder = ctx.placeholder.map(p => ({ placeholder: providers.translate(p) })).getOr({});\n const inputAttributes = { ...placeholder };\n const pField = FormField.parts.field({\n factory: Input,\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-item'\n ],\n inputAttributes,\n data: ctx.initValue(),\n selectOnFocus: true,\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable }),\n toggleOnReceive(() => providers.checkUiComponentContext('mode:design')),\n Keying.config({\n mode: 'special',\n onEnter,\n onLeft: (comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (comp, se) => {\n se.cut();\n return Optional.none();\n }\n }),\n config('input-events', [\n onControlAttached({\n onSetup: ctx.onSetup,\n getApi: comp => {\n const closestFocussableOpt = ancestor(comp.element, '.tox-toolbar').bind(toolbar => descendant(toolbar, 'button:enabled'));\n return closestFocussableOpt.fold(() => getFormApi(comp, valueState), closestFocussable => getFormApi(comp, valueState, closestFocussable));\n },\n onBeforeSetup: Keying.focusIn\n }, editorOffCell),\n onContextFormControlDetached({ getApi: getFormApi$1 }, editorOffCell, valueState),\n run$1(input(), comp => {\n ctx.onInput(getFormApi$1(comp));\n })\n ])\n ])\n });\n return createContextFormFieldFromParts(pLabel, pField, providers);\n };\n\n const buildInitGroup = (f, ctx, providers) => {\n const valueState = value$4();\n const onEnter = input => {\n return startCommands.findPrimary(input).orThunk(() => endCommands.findPrimary(input)).map(primary => {\n emitExecute(primary);\n return true;\n });\n };\n const memInput = record(f(providers, onEnter, valueState));\n const commandParts = partition$3(ctx.commands, command => command.align === 'start');\n const startCommands = generate(memInput, commandParts.pass, providers, valueState);\n const endCommands = generate(memInput, commandParts.fail, providers, valueState);\n return filter$2([\n {\n title: Optional.none(),\n label: Optional.none(),\n items: startCommands.asSpecs()\n },\n {\n title: Optional.none(),\n label: Optional.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Optional.none(),\n label: Optional.none(),\n items: endCommands.asSpecs()\n }\n ], group => group.items.length > 0);\n };\n const buildInitGroups = (ctx, providers) => {\n switch (ctx.type) {\n case 'contextform':\n return buildInitGroup(curry(renderContextFormTextInput, ctx), ctx, providers);\n case 'contextsliderform':\n return buildInitGroup(curry(renderContextFormSliderInput, ctx), ctx, providers);\n case 'contextsizeinputform':\n return buildInitGroup(curry(renderContextFormSizeInput, ctx), ctx, providers);\n }\n };\n const renderContextForm = (toolbarType, ctx, providers) => renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups: buildInitGroups(ctx, providers),\n onEscape: Optional.none,\n cyclicKeying: true,\n providers\n });\n const ContextForm = {\n renderContextForm,\n buildInitGroups\n };\n\n const isVerticalOverlap = (a, b, threshold) => b.bottom - a.y >= threshold && a.bottom - b.y >= threshold;\n const getRangeRect = rng => {\n const rect = rng.getBoundingClientRect();\n if (rect.height <= 0 && rect.width <= 0) {\n const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element;\n const elm = isText(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1);\n return elm.filter(isElement$1).map(e => e.dom.getBoundingClientRect()).getOr(rect);\n } else {\n return rect;\n }\n };\n const getSelectionBounds = editor => {\n const rng = editor.selection.getRng();\n const rect = getRangeRect(rng);\n if (editor.inline) {\n const scroll = get$c();\n return bounds(scroll.left + rect.left, scroll.top + rect.top, rect.width, rect.height);\n } else {\n const bodyPos = absolute$2(SugarElement.fromDom(editor.getBody()));\n return bounds(bodyPos.x + rect.left, bodyPos.y + rect.top, rect.width, rect.height);\n }\n };\n const getAnchorElementBounds = (editor, lastElement) => lastElement.filter(elem => inBody(elem) && isHTMLElement(elem)).map(absolute$2).getOrThunk(() => getSelectionBounds(editor));\n const getHorizontalBounds = (contentAreaBox, viewportBounds, margin) => {\n const x = Math.max(contentAreaBox.x + margin, viewportBounds.x);\n const right = Math.min(contentAreaBox.right - margin, viewportBounds.right);\n return {\n x,\n width: right - x\n };\n };\n const getVerticalBounds = (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) => {\n const container = SugarElement.fromDom(editor.getContainer());\n const header = descendant(container, '.tox-editor-header').getOr(container);\n const headerBox = box$1(header);\n const isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom;\n const isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea;\n if (editor.inline && isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n bottom: viewportBounds.bottom\n };\n }\n if (editor.inline && !isToolbarAbove) {\n return {\n y: viewportBounds.y,\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n }\n const containerBounds = toolbarType === 'line' ? box$1(container) : contentAreaBox;\n if (isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n bottom: Math.min(containerBounds.bottom - margin, viewportBounds.bottom)\n };\n }\n return {\n y: Math.max(containerBounds.y + margin, viewportBounds.y),\n bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n };\n };\n const getContextToolbarBounds = (editor, sharedBackstage, toolbarType, margin = 0) => {\n const viewportBounds = getBounds$3(window);\n const contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n const toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n const {x, width} = getHorizontalBounds(contentAreaBox, viewportBounds, margin);\n if (editor.inline && !toolbarOrMenubarEnabled) {\n return bounds(x, viewportBounds.y, width, viewportBounds.height);\n } else {\n const isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n const {y, bottom} = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin);\n return bounds(x, y, width, bottom - y);\n }\n };\n\n const bubbleSize$1 = 12;\n const bubbleAlignments$1 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top'],\n inset: ['tox-pop--inset']\n };\n const anchorOverrides = {\n maxHeightFunction: expandable$1(),\n maxWidthFunction: expandable()\n };\n const isEntireElementSelected = (editor, elem) => {\n const rng = editor.selection.getRng();\n const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n return rng.startContainer === rng.endContainer && rng.startOffset === rng.endOffset - 1 && eq(leaf$1.element, elem);\n };\n const preservePosition = (elem, position, f) => {\n const currentPosition = getRaw(elem, 'position');\n set$8(elem, 'position', position);\n const result = f(elem);\n currentPosition.each(pos => set$8(elem, 'position', pos));\n return result;\n };\n const shouldUseInsetLayouts = position => position === 'node';\n const determineInsetLayout = (editor, contextbar, elem, data, bounds) => {\n const selectionBounds = getSelectionBounds(editor);\n const isSameAnchorElement = data.lastElement().exists(prev => eq(elem, prev));\n if (isEntireElementSelected(editor, elem)) {\n return isSameAnchorElement ? preserve : north;\n } else if (isSameAnchorElement) {\n return preservePosition(contextbar, data.getMode(), () => {\n const isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar), -20);\n return isOverlapping && !data.isReposition() ? flip : preserve;\n });\n } else {\n const yBounds = data.getMode() === 'fixed' ? bounds.y + get$c().top : bounds.y;\n const contextbarHeight = get$e(contextbar) + bubbleSize$1;\n return yBounds + contextbarHeight <= selectionBounds.y ? north : south;\n }\n };\n const getAnchorSpec$2 = (editor, mobile, data, position) => {\n const smartInsetLayout = elem => (anchor, element, bubbles, placee, bounds) => {\n const layout = determineInsetLayout(editor, placee, elem, data, bounds);\n const newAnchor = {\n ...anchor,\n y: bounds.y,\n height: bounds.height\n };\n return {\n ...layout(newAnchor, element, bubbles, placee, bounds),\n alwaysFit: true\n };\n };\n const getInsetLayouts = elem => shouldUseInsetLayouts(position) ? [smartInsetLayout(elem)] : [];\n const desktopAnchorSpecLayouts = {\n onLtr: elem => [\n north$2,\n south$2,\n northeast$2,\n southeast$2,\n northwest$2,\n southwest$2\n ].concat(getInsetLayouts(elem)),\n onRtl: elem => [\n north$2,\n south$2,\n northwest$2,\n southwest$2,\n northeast$2,\n southeast$2\n ].concat(getInsetLayouts(elem))\n };\n const mobileAnchorSpecLayouts = {\n onLtr: elem => [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2\n ].concat(getInsetLayouts(elem)),\n onRtl: elem => [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2\n ].concat(getInsetLayouts(elem))\n };\n return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts;\n };\n const getAnchorLayout = (editor, position, isTouch, data) => {\n if (position === 'line') {\n return {\n bubble: nu$5(bubbleSize$1, 0, bubbleAlignments$1),\n layouts: {\n onLtr: () => [east$2],\n onRtl: () => [west$2]\n },\n overrides: anchorOverrides\n };\n } else {\n return {\n bubble: nu$5(0, bubbleSize$1, bubbleAlignments$1, 1 / bubbleSize$1),\n layouts: getAnchorSpec$2(editor, isTouch, data, position),\n overrides: anchorOverrides\n };\n }\n };\n\n const matchTargetWith = (elem, candidates) => {\n const ctxs = filter$2(candidates, toolbarApi => toolbarApi.predicate(elem.dom));\n const {pass, fail} = partition$3(ctxs, t => t.type === 'contexttoolbar');\n return {\n contextToolbars: pass,\n contextForms: fail\n };\n };\n const filterByPositionForStartNode = toolbars => {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n const doesPositionExist = value => exists(toolbars, t => t.position === value);\n const filterToolbarsByPosition = value => filter$2(toolbars, t => t.position === value);\n const hasSelectionToolbars = doesPositionExist('selection');\n const hasNodeToolbars = doesPositionExist('node');\n if (hasSelectionToolbars || hasNodeToolbars) {\n if (hasNodeToolbars && hasSelectionToolbars) {\n const nodeToolbars = filterToolbarsByPosition('node');\n const selectionToolbars = map$2(filterToolbarsByPosition('selection'), t => ({\n ...t,\n position: 'node'\n }));\n return nodeToolbars.concat(selectionToolbars);\n } else {\n return hasSelectionToolbars ? filterToolbarsByPosition('selection') : filterToolbarsByPosition('node');\n }\n } else {\n return filterToolbarsByPosition('line');\n }\n }\n };\n const filterByPositionForAncestorNode = toolbars => {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n const findPosition = value => find$5(toolbars, t => t.position === value);\n const basePosition = findPosition('selection').orThunk(() => findPosition('node')).orThunk(() => findPosition('line')).map(t => t.position);\n return basePosition.fold(() => [], pos => filter$2(toolbars, t => t.position === pos));\n }\n };\n const matchStartNode = (elem, nodeCandidates, editorCandidates) => {\n const nodeMatches = matchTargetWith(elem, nodeCandidates);\n if (nodeMatches.contextForms.length > 0) {\n return Optional.some({\n elem,\n toolbars: [nodeMatches.contextForms[0]]\n });\n } else {\n const editorMatches = matchTargetWith(elem, editorCandidates);\n if (editorMatches.contextForms.length > 0) {\n return Optional.some({\n elem,\n toolbars: [editorMatches.contextForms[0]]\n });\n } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n const toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n return Optional.some({\n elem,\n toolbars\n });\n } else {\n return Optional.none();\n }\n }\n };\n const matchAncestor = (isRoot, startNode, scopes) => {\n if (isRoot(startNode)) {\n return Optional.none();\n } else {\n return ancestor$2(startNode, ancestorElem => {\n if (isElement$1(ancestorElem)) {\n const {contextToolbars, contextForms} = matchTargetWith(ancestorElem, scopes.inNodeScope);\n const toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n return toolbars.length > 0 ? Optional.some({\n elem: ancestorElem,\n toolbars\n }) : Optional.none();\n } else {\n return Optional.none();\n }\n }, isRoot);\n }\n };\n const lookup$1 = (scopes, editor) => {\n const rootElem = SugarElement.fromDom(editor.getBody());\n const isRoot = elem => eq(elem, rootElem);\n const isOutsideRoot = startNode => !isRoot(startNode) && !contains(rootElem, startNode);\n const startNode = SugarElement.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Optional.none();\n }\n return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(() => matchAncestor(isRoot, startNode, scopes));\n };\n\n const categorise = (contextToolbars, navigate) => {\n const forms = {};\n const inNodeScope = [];\n const inEditorScope = [];\n const formNavigators = {};\n const lookupTable = {};\n const registerForm = (key, toolbarSpec) => {\n const contextForm = getOrDie(createContextForm(toolbarSpec));\n forms[key] = contextForm;\n contextForm.launch.map(launch => {\n formNavigators['form:' + key + ''] = {\n ...toolbarSpec.launch,\n type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n onAction: () => {\n navigate(contextForm);\n }\n };\n });\n if (contextForm.scope === 'editor') {\n inEditorScope.push(contextForm);\n } else {\n inNodeScope.push(contextForm);\n }\n lookupTable[key] = contextForm;\n };\n const registerToolbar = (key, toolbarSpec) => {\n createContextToolbar(toolbarSpec).each(contextToolbar => {\n if (toolbarSpec.scope === 'editor') {\n inEditorScope.push(contextToolbar);\n } else {\n inNodeScope.push(contextToolbar);\n }\n lookupTable[key] = contextToolbar;\n });\n };\n const keys$1 = keys(contextToolbars);\n each$1(keys$1, key => {\n const toolbarApi = contextToolbars[key];\n if (toolbarApi.type === 'contextform' || toolbarApi.type === 'contextsliderform' || toolbarApi.type === 'contextsizeinputform') {\n registerForm(key, toolbarApi);\n } else if (toolbarApi.type === 'contexttoolbar') {\n registerToolbar(key, toolbarApi);\n }\n });\n return {\n forms,\n inNodeScope,\n inEditorScope,\n lookupTable,\n formNavigators\n };\n };\n\n const transitionClass = 'tox-pop--transition';\n const register$a = (editor, registryContextToolbars, sink, extras) => {\n const backstage = extras.backstage;\n const sharedBackstage = backstage.shared;\n const isTouch = detect$1().deviceType.isTouch;\n const lastElement = value$4();\n const lastTrigger = value$4();\n const lastContextPosition = value$4();\n const contextbar = build$1(renderContextToolbar({\n sink,\n onEscape: () => {\n editor.focus();\n fireContextToolbarClose(editor);\n return Optional.some(true);\n },\n onHide: () => {\n fireContextToolbarClose(editor);\n },\n onBack: () => {\n fireContextFormSlideBack(editor);\n }\n }));\n const getBounds = () => {\n const position = lastContextPosition.get().getOr('node');\n const margin = shouldUseInsetLayouts(position) ? 1 : 0;\n return getContextToolbarBounds(editor, sharedBackstage, position, margin);\n };\n const canLaunchToolbar = () => {\n return !editor.removed && !(isTouch() && backstage.isContextMenuOpen());\n };\n const isSameLaunchElement = elem => is$1(lift2(elem, lastElement.get(), eq), true);\n const shouldContextToolbarHide = () => {\n if (!canLaunchToolbar()) {\n return true;\n } else {\n const contextToolbarBounds = getBounds();\n const anchorBounds = is$1(lastContextPosition.get(), 'node') ? getAnchorElementBounds(editor, lastElement.get()) : getSelectionBounds(editor);\n return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds, 0.01);\n }\n };\n const close = () => {\n lastElement.clear();\n lastTrigger.clear();\n lastContextPosition.clear();\n InlineView.hide(contextbar);\n };\n const hideOrRepositionIfNecessary = () => {\n if (InlineView.isOpen(contextbar)) {\n const contextBarEle = contextbar.element;\n remove$7(contextBarEle, 'display');\n if (shouldContextToolbarHide()) {\n set$8(contextBarEle, 'display', 'none');\n } else {\n lastTrigger.set(0);\n InlineView.reposition(contextbar);\n }\n }\n };\n const wrapInPopDialog = toolbarSpec => ({\n dom: {\n tag: 'div',\n classes: ['tox-pop__dialog']\n },\n components: [toolbarSpec],\n behaviours: derive$1([\n Keying.config({ mode: 'acyclic' }),\n config('pop-dialog-wrap-events', [\n runOnAttached(comp => {\n editor.shortcuts.add('ctrl+F9', 'focus statusbar', () => Keying.focusIn(comp));\n }),\n runOnDetached(_comp => {\n editor.shortcuts.remove('ctrl+F9');\n })\n ])\n ])\n });\n const getScopes = cached(() => categorise(registryContextToolbars, toolbarApi => {\n const alloySpec = buildToolbar([toolbarApi]);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n }));\n const buildContextToolbarGroups = (allButtons, ctx) => {\n return identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras.backstage, Optional.some(['form:']));\n };\n const buildContextFormGroups = (ctx, providers) => ContextForm.buildInitGroups(ctx, providers);\n const buildToolbar = toolbars => {\n const {buttons} = editor.ui.registry.getAll();\n const scopes = getScopes();\n const allButtons = {\n ...buttons,\n ...scopes.formNavigators\n };\n const toolbarType = getToolbarMode(editor) === ToolbarMode$1.scrolling ? ToolbarMode$1.scrolling : ToolbarMode$1.default;\n const initGroups = flatten(map$2(toolbars, ctx => ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, contextToolbarToSpec(ctx)) : buildContextFormGroups(ctx, sharedBackstage.providers)));\n return renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups,\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: sharedBackstage.providers\n });\n };\n const getAnchor = (position, element) => {\n const anchorage = position === 'node' ? sharedBackstage.anchors.node(element) : sharedBackstage.anchors.cursor();\n const anchorLayout = getAnchorLayout(editor, position, isTouch(), {\n lastElement: lastElement.get,\n isReposition: () => is$1(lastTrigger.get(), 0),\n getMode: () => Positioning.getMode(sink)\n });\n return deepMerge(anchorage, anchorLayout);\n };\n const launchContext = (toolbarApi, elem) => {\n launchContextToolbar.cancel();\n if (!canLaunchToolbar()) {\n return;\n }\n const toolbarSpec = buildToolbar(toolbarApi);\n const position = toolbarApi[0].position;\n const anchor = getAnchor(position, elem);\n lastContextPosition.set(position);\n lastTrigger.set(1);\n const contextBarEle = contextbar.element;\n remove$7(contextBarEle, 'display');\n if (!isSameLaunchElement(elem)) {\n remove$3(contextBarEle, transitionClass);\n Positioning.reset(sink, contextbar);\n }\n InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), {\n anchor,\n transition: {\n classes: [transitionClass],\n mode: 'placement'\n }\n }, () => Optional.some(getBounds()));\n elem.fold(lastElement.clear, lastElement.set);\n if (shouldContextToolbarHide()) {\n set$8(contextBarEle, 'display', 'none');\n }\n };\n let isDragging = false;\n const launchContextToolbar = last(() => {\n if (!editor.hasFocus() || editor.removed || isDragging) {\n return;\n }\n if (has(contextbar.element, transitionClass)) {\n launchContextToolbar.throttle();\n } else {\n const scopes = getScopes();\n lookup$1(scopes, editor).fold(close, info => {\n launchContext(info.toolbars, Optional.some(info.elem));\n });\n }\n }, 17);\n editor.on('init', () => {\n editor.on('remove', close);\n editor.on('ScrollContent ScrollWindow ObjectResized ResizeEditor longpress', hideOrRepositionIfNecessary);\n editor.on('click keyup focus SetContent', launchContextToolbar.throttle);\n editor.on(hideContextToolbarEvent, close);\n editor.on(showContextToolbarEvent, e => {\n const scopes = getScopes();\n get$h(scopes.lookupTable, e.toolbarKey).each(ctx => {\n launchContext([ctx], someIf(e.target !== editor, e.target));\n focusIn(contextbar);\n });\n });\n editor.on('focusout', _e => {\n global$9.setEditorTimeout(editor, () => {\n if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n close();\n }\n }, 0);\n });\n editor.on('SwitchMode', () => {\n if (editor.mode.isReadOnly()) {\n close();\n }\n });\n editor.on('DisabledStateChange', e => {\n if (e.state) {\n close();\n }\n });\n editor.on('ExecCommand', ({command}) => {\n if (command.toLowerCase() === 'toggleview') {\n close();\n }\n });\n editor.on('AfterProgressState', event => {\n if (event.state) {\n close();\n } else if (editor.hasFocus()) {\n launchContextToolbar.throttle();\n }\n });\n editor.on('dragstart', () => {\n isDragging = true;\n });\n editor.on('dragend drop', () => {\n isDragging = false;\n });\n editor.on('NodeChange', _e => {\n search(contextbar.element).fold(launchContextToolbar.throttle, noop);\n });\n });\n };\n\n const register$9 = editor => {\n const alignToolbarButtons = [\n {\n name: 'alignleft',\n text: 'Align left',\n cmd: 'JustifyLeft',\n icon: 'align-left'\n },\n {\n name: 'aligncenter',\n text: 'Align center',\n cmd: 'JustifyCenter',\n icon: 'align-center'\n },\n {\n name: 'alignright',\n text: 'Align right',\n cmd: 'JustifyRight',\n icon: 'align-right'\n },\n {\n name: 'alignjustify',\n text: 'Justify',\n cmd: 'JustifyFull',\n icon: 'align-justify'\n }\n ];\n each$1(alignToolbarButtons, item => {\n editor.ui.registry.addToggleButton(item.name, {\n tooltip: item.text,\n icon: item.icon,\n onAction: onActionExecCommand(editor, item.cmd),\n onSetup: onSetupStateToggle(editor, item.name)\n });\n });\n editor.ui.registry.addButton('alignnone', {\n tooltip: 'No alignment',\n icon: 'align-none',\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, 'JustifyNone')\n });\n };\n\n const registerController = (editor, spec) => {\n const getMenuItems = () => {\n const options = spec.getOptions(editor);\n const initial = spec.getCurrent(editor).map(spec.hash);\n const current = value$4();\n return map$2(options, value => ({\n type: 'togglemenuitem',\n text: spec.display(value),\n onSetup: api => {\n const setActive = active => {\n if (active) {\n current.on(oldApi => oldApi.setActive(false));\n current.set(api);\n }\n api.setActive(active);\n };\n setActive(is$1(initial, spec.hash(value)));\n const unbindWatcher = spec.watcher(editor, value, setActive);\n return () => {\n current.clear();\n unbindWatcher();\n };\n },\n onAction: () => spec.setCurrent(editor, value)\n }));\n };\n editor.ui.registry.addMenuButton(spec.name, {\n tooltip: spec.text,\n icon: spec.icon,\n fetch: callback => callback(getMenuItems()),\n onSetup: spec.onToolbarSetup\n });\n editor.ui.registry.addNestedMenuItem(spec.name, {\n type: 'nestedmenuitem',\n text: spec.text,\n getSubmenuItems: getMenuItems,\n onSetup: spec.onMenuSetup\n });\n };\n const lineHeightSpec = editor => ({\n name: 'lineheight',\n text: 'Line height',\n icon: 'line-height',\n getOptions: getLineHeightFormats,\n hash: input => normalise(input, [\n 'fixed',\n 'relative',\n 'empty'\n ]).getOr(input),\n display: identity,\n watcher: (editor, value, callback) => editor.formatter.formatChanged('lineheight', callback, false, { value }).unbind,\n getCurrent: editor => Optional.from(editor.queryCommandValue('LineHeight')),\n setCurrent: (editor, value) => editor.execCommand('LineHeight', false, value),\n onToolbarSetup: onSetupEditableToggle(editor),\n onMenuSetup: onSetupEditableToggle(editor)\n });\n const languageSpec = editor => {\n const settingsOpt = Optional.from(getContentLanguages(editor));\n return settingsOpt.map(settings => ({\n name: 'language',\n text: 'Language',\n icon: 'language',\n getOptions: constant$1(settings),\n hash: input => isUndefined(input.customCode) ? input.code : `${ input.code }/${ input.customCode }`,\n display: input => input.title,\n watcher: (editor, value, callback) => {\n var _a;\n return editor.formatter.formatChanged('lang', callback, false, {\n value: value.code,\n customValue: (_a = value.customCode) !== null && _a !== void 0 ? _a : null\n }).unbind;\n },\n getCurrent: editor => {\n const node = SugarElement.fromDom(editor.selection.getNode());\n return closest$4(node, n => Optional.some(n).filter(isElement$1).bind(ele => {\n const codeOpt = getOpt(ele, 'lang');\n return codeOpt.map(code => {\n const customCode = getOpt(ele, 'data-mce-lang').getOrUndefined();\n return {\n code,\n customCode,\n title: ''\n };\n });\n }));\n },\n setCurrent: (editor, lang) => editor.execCommand('Lang', false, lang),\n onToolbarSetup: api => {\n const unbinder = unbindable();\n api.setActive(editor.formatter.match('lang', {}, undefined, true));\n unbinder.set(editor.formatter.formatChanged('lang', api.setActive, true));\n return composeUnbinders(unbinder.clear, onSetupEditableToggle(editor)(api));\n },\n onMenuSetup: onSetupEditableToggle(editor)\n }));\n };\n const register$8 = editor => {\n registerController(editor, lineHeightSpec(editor));\n languageSpec(editor).each(spec => registerController(editor, spec));\n };\n\n const register$7 = (editor, backstage) => {\n createAlignMenu(editor, backstage);\n createFontFamilyMenu(editor, backstage);\n createStylesMenu(editor, backstage);\n createBlocksMenu(editor, backstage);\n createFontSizeMenu(editor, backstage);\n };\n\n const register$6 = editor => {\n editor.ui.registry.addContext('editable', () => {\n return editor.selection.isEditable();\n });\n editor.ui.registry.addContext('mode', mode => {\n return editor.mode.get() === mode;\n });\n editor.ui.registry.addContext('any', always);\n editor.ui.registry.addContext('formatting', format => {\n return editor.formatter.canApply(format);\n });\n editor.ui.registry.addContext('insert', child => {\n return editor.schema.isValidChild(editor.selection.getNode().tagName, child);\n });\n };\n\n const onSetupOutdentState = editor => onSetupEvent(editor, 'NodeChange', api => {\n api.setEnabled(editor.queryCommandState('outdent') && editor.selection.isEditable());\n });\n const registerButtons$2 = editor => {\n editor.ui.registry.addButton('outdent', {\n tooltip: 'Decrease indent',\n icon: 'outdent',\n onSetup: onSetupOutdentState(editor),\n onAction: onActionExecCommand(editor, 'outdent')\n });\n editor.ui.registry.addButton('indent', {\n tooltip: 'Increase indent',\n icon: 'indent',\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, 'indent')\n });\n };\n const register$5 = editor => {\n registerButtons$2(editor);\n };\n\n const makeSetupHandler = (editor, pasteAsText) => api => {\n api.setActive(pasteAsText.get());\n const pastePlainTextToggleHandler = e => {\n pasteAsText.set(e.state);\n api.setActive(e.state);\n };\n editor.on('PastePlainTextToggle', pastePlainTextToggleHandler);\n return composeUnbinders(() => editor.off('PastePlainTextToggle', pastePlainTextToggleHandler), onSetupEditableToggle(editor)(api));\n };\n const register$4 = editor => {\n const pasteAsText = Cell(getPasteAsText(editor));\n const onAction = () => editor.execCommand('mceTogglePlainTextPaste');\n editor.ui.registry.addToggleButton('pastetext', {\n active: false,\n icon: 'paste-text',\n tooltip: 'Paste as text',\n onAction,\n onSetup: makeSetupHandler(editor, pasteAsText)\n });\n editor.ui.registry.addToggleMenuItem('pastetext', {\n text: 'Paste as text',\n icon: 'paste-text',\n onAction,\n onSetup: makeSetupHandler(editor, pasteAsText)\n });\n };\n\n const onActionToggleFormat = (editor, fmt) => () => {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n const registerFormatButtons = editor => {\n global$1.each([\n {\n name: 'bold',\n text: 'Bold',\n icon: 'bold',\n shortcut: 'Meta+B'\n },\n {\n name: 'italic',\n text: 'Italic',\n icon: 'italic',\n shortcut: 'Meta+I'\n },\n {\n name: 'underline',\n text: 'Underline',\n icon: 'underline',\n shortcut: 'Meta+U'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n icon: 'strike-through'\n },\n {\n name: 'subscript',\n text: 'Subscript',\n icon: 'subscript'\n },\n {\n name: 'superscript',\n text: 'Superscript',\n icon: 'superscript'\n }\n ], (btn, _idx) => {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onSetup: onSetupStateToggle(editor, btn.name),\n onAction: onActionToggleFormat(editor, btn.name),\n shortcut: btn.shortcut\n });\n });\n for (let i = 1; i <= 6; i++) {\n const name = 'h' + i;\n const shortcut = `Access+${ i }`;\n editor.ui.registry.addToggleButton(name, {\n text: name.toUpperCase(),\n tooltip: 'Heading ' + i,\n onSetup: onSetupStateToggle(editor, name),\n onAction: onActionToggleFormat(editor, name),\n shortcut\n });\n }\n };\n const registerCommandButtons = editor => {\n global$1.each([\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy',\n context: 'any'\n },\n {\n name: 'help',\n text: 'Help',\n action: 'mceHelp',\n icon: 'help',\n shortcut: 'Alt+0',\n context: 'any'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all',\n shortcut: 'Meta+A',\n context: 'any'\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\n },\n {\n name: 'print',\n text: 'Print',\n action: 'mcePrint',\n icon: 'print',\n shortcut: 'Meta+P',\n context: 'any'\n }\n ], btn => {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action),\n shortcut: btn.shortcut,\n context: btn.context\n });\n });\n global$1.each([\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste'\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting'\n },\n {\n name: 'remove',\n text: 'Remove',\n action: 'Delete',\n icon: 'remove'\n },\n {\n name: 'hr',\n text: 'Horizontal line',\n action: 'InsertHorizontalRule',\n icon: 'horizontal-rule'\n }\n ], btn => {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, btn.action)\n });\n });\n };\n const registerCommandToggleButtons = editor => {\n global$1.each([{\n name: 'blockquote',\n text: 'Blockquote',\n action: 'mceBlockQuote',\n icon: 'quote'\n }], btn => {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action),\n onSetup: onSetupStateToggle(editor, btn.name)\n });\n });\n };\n const registerButtons$1 = editor => {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n const registerMenuItems$2 = editor => {\n global$1.each([\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy',\n shortcut: 'Meta+C',\n context: 'any'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all',\n shortcut: 'Meta+A',\n context: 'any'\n },\n {\n name: 'print',\n text: 'Print...',\n action: 'mcePrint',\n icon: 'print',\n shortcut: 'Meta+P',\n context: 'any'\n }\n ], menuitem => {\n editor.ui.registry.addMenuItem(menuitem.name, {\n text: menuitem.text,\n icon: menuitem.icon,\n shortcut: menuitem.shortcut,\n onAction: onActionExecCommand(editor, menuitem.action),\n context: menuitem.context\n });\n });\n global$1.each([\n {\n name: 'bold',\n text: 'Bold',\n action: 'Bold',\n icon: 'bold',\n shortcut: 'Meta+B'\n },\n {\n name: 'italic',\n text: 'Italic',\n action: 'Italic',\n icon: 'italic',\n shortcut: 'Meta+I'\n },\n {\n name: 'underline',\n text: 'Underline',\n action: 'Underline',\n icon: 'underline',\n shortcut: 'Meta+U'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n action: 'Strikethrough',\n icon: 'strike-through'\n },\n {\n name: 'subscript',\n text: 'Subscript',\n action: 'Subscript',\n icon: 'subscript'\n },\n {\n name: 'superscript',\n text: 'Superscript',\n action: 'Superscript',\n icon: 'superscript'\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting'\n },\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut',\n shortcut: 'Meta+X'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste',\n shortcut: 'Meta+V'\n },\n {\n name: 'hr',\n text: 'Horizontal line',\n action: 'InsertHorizontalRule',\n icon: 'horizontal-rule'\n }\n ], menuitem => {\n editor.ui.registry.addMenuItem(menuitem.name, {\n text: menuitem.text,\n icon: menuitem.icon,\n shortcut: menuitem.shortcut,\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionExecCommand(editor, menuitem.action)\n });\n });\n editor.ui.registry.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'sourcecode',\n onSetup: onSetupEditableToggle(editor),\n onAction: onActionToggleFormat(editor, 'code')\n });\n };\n const register$3 = editor => {\n registerButtons$1(editor);\n registerMenuItems$2(editor);\n };\n\n const onSetupUndoRedoState = (editor, type) => onSetupEvent(editor, 'Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', api => {\n api.setEnabled(!editor.mode.isReadOnly() && editor.undoManager[type]());\n });\n const registerMenuItems$1 = editor => {\n editor.ui.registry.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo')\n });\n editor.ui.registry.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo')\n });\n };\n const registerButtons = editor => {\n editor.ui.registry.addButton('undo', {\n tooltip: 'Undo',\n icon: 'undo',\n enabled: false,\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo'),\n shortcut: 'Meta+Z'\n });\n editor.ui.registry.addButton('redo', {\n tooltip: 'Redo',\n icon: 'redo',\n enabled: false,\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo'),\n shortcut: 'Meta+Y'\n });\n };\n const register$2 = editor => {\n registerMenuItems$1(editor);\n registerButtons(editor);\n };\n\n const onSetupVisualAidState = editor => onSetupEvent(editor, 'VisualAid', api => {\n api.setActive(editor.hasVisual);\n });\n const registerMenuItems = editor => {\n editor.ui.registry.addToggleMenuItem('visualaid', {\n text: 'Visual aids',\n onSetup: onSetupVisualAidState(editor),\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid'),\n context: 'any'\n });\n };\n const registerToolbarButton = editor => {\n editor.ui.registry.addButton('visualaid', {\n tooltip: 'Visual aids',\n text: 'Visual aids',\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid'),\n context: 'any'\n });\n };\n const register$1 = editor => {\n registerToolbarButton(editor);\n registerMenuItems(editor);\n };\n\n const setup$6 = (editor, backstage) => {\n register$9(editor);\n register$3(editor);\n register$7(editor, backstage);\n register$2(editor);\n register$d(editor);\n register$1(editor);\n register$5(editor);\n register$8(editor);\n register$4(editor);\n register$6(editor);\n };\n\n const patchPipeConfig = config => isString(config) ? config.split(/[ ,]/) : config;\n const option = name => editor => editor.options.get(name);\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('contextmenu_avoid_overlap', {\n processor: 'string',\n default: ''\n });\n registerOption('contextmenu_never_use_native', {\n processor: 'boolean',\n default: false\n });\n registerOption('contextmenu', {\n processor: value => {\n if (value === false) {\n return {\n value: [],\n valid: true\n };\n } else if (isString(value) || isArrayOf(value, isString)) {\n return {\n value: patchPipeConfig(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be false or a string.'\n };\n }\n },\n default: 'link linkchecker image editimage table spellchecker configurepermanentpen'\n });\n };\n const shouldNeverUseNative = option('contextmenu_never_use_native');\n const getAvoidOverlapSelector = option('contextmenu_avoid_overlap');\n const isContextMenuDisabled = editor => getContextMenu(editor).length === 0;\n const getContextMenu = editor => {\n const contextMenus = editor.ui.registry.getAll().contextMenus;\n const contextMenu = editor.options.get('contextmenu');\n if (editor.options.isSet('contextmenu')) {\n return contextMenu;\n } else {\n return filter$2(contextMenu, item => has$2(contextMenus, item));\n }\n };\n\n const nu = (x, y) => ({\n type: 'makeshift',\n x,\n y\n });\n const transpose = (pos, dx, dy) => {\n return nu(pos.x + dx, pos.y + dy);\n };\n const isTouchEvent$1 = e => e.type === 'longpress' || e.type.indexOf('touch') === 0;\n const fromPageXY = e => {\n if (isTouchEvent$1(e)) {\n const touch = e.touches[0];\n return nu(touch.pageX, touch.pageY);\n } else {\n return nu(e.pageX, e.pageY);\n }\n };\n const fromClientXY = e => {\n if (isTouchEvent$1(e)) {\n const touch = e.touches[0];\n return nu(touch.clientX, touch.clientY);\n } else {\n return nu(e.clientX, e.clientY);\n }\n };\n const transposeContentAreaContainer = (element, pos) => {\n const containerPos = global$8.DOM.getPos(element);\n return transpose(pos, containerPos.x, containerPos.y);\n };\n const getPointAnchor = (editor, e) => {\n if (e.type === 'contextmenu' || e.type === 'longpress') {\n if (editor.inline) {\n return fromPageXY(e);\n } else {\n return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n }\n } else {\n return getSelectionAnchor(editor);\n }\n };\n const getSelectionAnchor = editor => {\n return {\n type: 'selection',\n root: SugarElement.fromDom(editor.selection.getNode())\n };\n };\n const getNodeAnchor = editor => ({\n type: 'node',\n node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n root: SugarElement.fromDom(editor.getBody())\n });\n const getAnchorSpec$1 = (editor, e, anchorType) => {\n switch (anchorType) {\n case 'node':\n return getNodeAnchor(editor);\n case 'point':\n return getPointAnchor(editor, e);\n case 'selection':\n return getSelectionAnchor(editor);\n }\n };\n\n const initAndShow$1 = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n const items = buildMenu();\n const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n }).map(menuData => {\n e.preventDefault();\n InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, {\n menu: { markers: markers('normal') },\n data: menuData\n });\n });\n };\n\n const layouts = {\n onLtr: () => [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2,\n north,\n south,\n northeast,\n southeast,\n northwest,\n southwest\n ],\n onRtl: () => [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2,\n north,\n south,\n northwest,\n southwest,\n northeast,\n southeast\n ]\n };\n const bubbleSize = 12;\n const bubbleAlignments = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top']\n };\n const isTouchWithinSelection = (editor, e) => {\n const selection = editor.selection;\n if (selection.isCollapsed() || e.touches.length < 1) {\n return false;\n } else {\n const touch = e.touches[0];\n const rng = selection.getRng();\n const rngRectOpt = getFirstRect(editor.getWin(), SimSelection.domRange(rng));\n return rngRectOpt.exists(rngRect => rngRect.left <= touch.clientX && rngRect.right >= touch.clientX && rngRect.top <= touch.clientY && rngRect.bottom >= touch.clientY);\n }\n };\n const setupiOSOverrides = editor => {\n const originalSelection = editor.selection.getRng();\n const selectionReset = () => {\n global$9.setEditorTimeout(editor, () => {\n editor.selection.setRng(originalSelection);\n }, 10);\n unbindEventListeners();\n };\n editor.once('touchend', selectionReset);\n const preventMousedown = e => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n editor.on('mousedown', preventMousedown, true);\n const clearSelectionReset = () => unbindEventListeners();\n editor.once('longpresscancel', clearSelectionReset);\n const unbindEventListeners = () => {\n editor.off('touchend', selectionReset);\n editor.off('longpresscancel', clearSelectionReset);\n editor.off('mousedown', preventMousedown);\n };\n };\n const getAnchorSpec = (editor, e, anchorType) => {\n const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n const bubbleYOffset = anchorType === 'point' ? bubbleSize : 0;\n return {\n bubble: nu$5(0, bubbleYOffset, bubbleAlignments),\n layouts,\n overrides: {\n maxWidthFunction: expandable(),\n maxHeightFunction: expandable$1()\n },\n ...anchorSpec\n };\n };\n const show = (editor, e, items, backstage, contextmenu, anchorType, highlightImmediately) => {\n const anchorSpec = getAnchorSpec(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: true,\n search: Optional.none()\n }).map(menuData => {\n e.preventDefault();\n const highlightOnOpen = highlightImmediately ? HighlightOnOpen.HighlightMenuAndItem : HighlightOnOpen.HighlightNone;\n InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, {\n menu: {\n markers: markers('normal'),\n highlightOnOpen\n },\n data: menuData,\n type: 'horizontal'\n }, () => Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === 'node' ? 'node' : 'selection')));\n editor.dispatch(hideContextToolbarEvent);\n });\n };\n const initAndShow = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n const detection = detect$1();\n const isiOS = detection.os.isiOS();\n const isMacOS = detection.os.isMacOS();\n const isAndroid = detection.os.isAndroid();\n const isTouch = detection.deviceType.isTouch();\n const shouldHighlightImmediately = () => !(isAndroid || isiOS || isMacOS && isTouch);\n const open = () => {\n const items = buildMenu();\n show(editor, e, items, backstage, contextmenu, anchorType, shouldHighlightImmediately());\n };\n if ((isMacOS || isiOS) && anchorType !== 'node') {\n const openiOS = () => {\n setupiOSOverrides(editor);\n open();\n };\n if (isTouchWithinSelection(editor, e)) {\n openiOS();\n } else {\n editor.once('selectionchange', openiOS);\n editor.once('touchend', () => editor.off('selectionchange', openiOS));\n }\n } else {\n open();\n }\n };\n\n const isSeparator = item => isString(item) ? item === '|' : item.type === 'separator';\n const separator = { type: 'separator' };\n const makeContextItem = item => {\n const commonMenuItem = item => ({\n text: item.text,\n icon: item.icon,\n enabled: item.enabled,\n shortcut: item.shortcut\n });\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator;\n case 'submenu':\n return {\n type: 'nestedmenuitem',\n ...commonMenuItem(item),\n getSubmenuItems: () => {\n const items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map$2(items, makeContextItem);\n }\n }\n };\n default:\n const commonItem = item;\n return {\n type: 'menuitem',\n ...commonMenuItem(commonItem),\n onAction: noarg(commonItem.onAction)\n };\n }\n }\n };\n const addContextMenuGroup = (xs, groupItems) => {\n if (groupItems.length === 0) {\n return xs;\n }\n const lastMenuItem = last$1(xs).filter(item => !isSeparator(item));\n const before = lastMenuItem.fold(() => [], _ => [separator]);\n return xs.concat(before).concat(groupItems).concat([separator]);\n };\n const generateContextMenu = (contextMenus, menuConfig, selectedElement) => {\n const sections = foldl(menuConfig, (acc, name) => {\n return get$h(contextMenus, name.toLowerCase()).map(menu => {\n const items = menu.update(selectedElement);\n if (isString(items) && isNotEmpty(trim$1(items))) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (isArray(items) && items.length > 0) {\n const allItems = map$2(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n }).getOrThunk(() => acc.concat([name]));\n }, []);\n if (sections.length > 0 && isSeparator(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n const isNativeOverrideKeyEvent = (editor, e) => e.ctrlKey && !shouldNeverUseNative(editor);\n const isTouchEvent = e => e.type === 'longpress' || has$2(e, 'touches');\n const isTriggeredByKeyboard = (editor, e) => !isTouchEvent(e) && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n const getSelectedElement = (editor, e) => isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target;\n const getAnchorType = (editor, e) => {\n const selector = getAvoidOverlapSelector(editor);\n const anchorType = isTriggeredByKeyboard(editor, e) ? 'selection' : 'point';\n if (isNotEmpty(selector)) {\n const target = getSelectedElement(editor, e);\n const selectorExists = closest(SugarElement.fromDom(target), selector);\n return selectorExists ? 'node' : anchorType;\n } else {\n return anchorType;\n }\n };\n const setup$5 = (editor, lazySink, backstage) => {\n const detection = detect$1();\n const isTouch = detection.deviceType.isTouch;\n const contextmenu = build$1(InlineView.sketch({\n dom: { tag: 'div' },\n lazySink,\n onEscape: () => editor.focus(),\n onShow: () => backstage.setContextMenuState(true),\n onHide: () => backstage.setContextMenuState(false),\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissContextMenu', [run$1(dismissRequested(), (comp, _se) => {\n Sandboxing.close(comp);\n editor.focus();\n })])])\n }));\n const hideContextMenu = () => InlineView.hide(contextmenu);\n const showContextMenu = e => {\n if (shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) {\n return;\n }\n const anchorType = getAnchorType(editor, e);\n const buildMenu = () => {\n const selectedElement = getSelectedElement(editor, e);\n const registry = editor.ui.registry.getAll();\n const menuConfig = getContextMenu(editor);\n return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n };\n const initAndShow$2 = isTouch() ? initAndShow : initAndShow$1;\n initAndShow$2(editor, e, buildMenu, backstage, contextmenu, anchorType);\n };\n editor.on('init', () => {\n const hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow');\n editor.on(hideEvents, hideContextMenu);\n editor.on('longpress contextmenu', showContextMenu);\n });\n };\n\n const adt = Adt.generate([\n {\n offset: [\n 'x',\n 'y'\n ]\n },\n {\n absolute: [\n 'x',\n 'y'\n ]\n },\n {\n fixed: [\n 'x',\n 'y'\n ]\n }\n ]);\n const subtract = change => point => point.translate(-change.left, -change.top);\n const add = change => point => point.translate(change.left, change.top);\n const transform = changes => (x, y) => foldl(changes, (rest, f) => f(rest), SugarPosition(x, y));\n const asFixed = (coord, scroll, origin) => coord.fold(transform([\n add(origin),\n subtract(scroll)\n ]), transform([subtract(scroll)]), transform([]));\n const asAbsolute = (coord, scroll, origin) => coord.fold(transform([add(origin)]), transform([]), transform([add(scroll)]));\n const asOffset = (coord, scroll, origin) => coord.fold(transform([]), transform([subtract(origin)]), transform([\n add(scroll),\n subtract(origin)\n ]));\n const withinRange = (coord1, coord2, xRange, yRange, scroll, origin) => {\n const a1 = asAbsolute(coord1, scroll, origin);\n const a2 = asAbsolute(coord2, scroll, origin);\n return Math.abs(a1.left - a2.left) <= xRange && Math.abs(a1.top - a2.top) <= yRange;\n };\n const getDeltas = (coord1, coord2, xRange, yRange, scroll, origin) => {\n const a1 = asAbsolute(coord1, scroll, origin);\n const a2 = asAbsolute(coord2, scroll, origin);\n const left = Math.abs(a1.left - a2.left);\n const top = Math.abs(a1.top - a2.top);\n return SugarPosition(left, top);\n };\n const toStyles = (coord, scroll, origin) => {\n const stylesOpt = coord.fold((x, y) => ({\n position: Optional.some('absolute'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n }), (x, y) => ({\n position: Optional.some('absolute'),\n left: Optional.some(x - origin.left + 'px'),\n top: Optional.some(y - origin.top + 'px')\n }), (x, y) => ({\n position: Optional.some('fixed'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n }));\n return {\n right: Optional.none(),\n bottom: Optional.none(),\n ...stylesOpt\n };\n };\n const translate = (coord, deltaX, deltaY) => coord.fold((x, y) => offset(x + deltaX, y + deltaY), (x, y) => absolute(x + deltaX, y + deltaY), (x, y) => fixed(x + deltaX, y + deltaY));\n const absorb = (partialCoord, originalCoord, scroll, origin) => {\n const absorbOne = (stencil, nu) => (optX, optY) => {\n const original = stencil(originalCoord, scroll, origin);\n return nu(optX.getOr(original.left), optY.getOr(original.top));\n };\n return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute), absorbOne(asFixed, fixed));\n };\n const offset = adt.offset;\n const absolute = adt.absolute;\n const fixed = adt.fixed;\n\n const parseAttrToInt = (element, name) => {\n const value = get$g(element, name);\n return isUndefined(value) ? NaN : parseInt(value, 10);\n };\n const get$1 = (component, snapsInfo) => {\n const element = component.element;\n const x = parseAttrToInt(element, snapsInfo.leftAttr);\n const y = parseAttrToInt(element, snapsInfo.topAttr);\n return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y));\n };\n const set = (component, snapsInfo, pt) => {\n const element = component.element;\n set$9(element, snapsInfo.leftAttr, pt.left + 'px');\n set$9(element, snapsInfo.topAttr, pt.top + 'px');\n };\n const clear = (component, snapsInfo) => {\n const element = component.element;\n remove$8(element, snapsInfo.leftAttr);\n remove$8(element, snapsInfo.topAttr);\n };\n\n const getCoords = (component, snapInfo, coord, delta) => get$1(component, snapInfo).fold(() => coord, fixed$1 => fixed(fixed$1.left + delta.left, fixed$1.top + delta.top));\n const moveOrSnap = (component, snapInfo, coord, delta, scroll, origin) => {\n const newCoord = getCoords(component, snapInfo, coord, delta);\n const snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n const fixedCoord = asFixed(newCoord, scroll, origin);\n set(component, snapInfo, fixedCoord);\n return snap.fold(() => ({\n coord: fixed(fixedCoord.left, fixedCoord.top),\n extra: Optional.none()\n }), spanned => ({\n coord: spanned.output,\n extra: spanned.extra\n }));\n };\n const stopDrag = (component, snapInfo) => {\n clear(component, snapInfo);\n };\n const findMatchingSnap = (snaps, newCoord, scroll, origin) => findMap(snaps, snap => {\n const sensor = snap.sensor;\n const inRange = withinRange(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return inRange ? Optional.some({\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n }) : Optional.none();\n });\n const findClosestSnap = (component, snapInfo, newCoord, scroll, origin) => {\n const snaps = snapInfo.getSnapPoints(component);\n const matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n return matchSnap.orThunk(() => {\n const bestSnap = foldl(snaps, (acc, snap) => {\n const sensor = snap.sensor;\n const deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return acc.deltas.fold(() => ({\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n }), bestDeltas => {\n const currAvg = (deltas.left + deltas.top) / 2;\n const bestAvg = (bestDeltas.left + bestDeltas.top) / 2;\n if (currAvg <= bestAvg) {\n return {\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n };\n } else {\n return acc;\n }\n });\n }, {\n deltas: Optional.none(),\n snap: Optional.none()\n });\n return bestSnap.snap.map(snap => ({\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n }));\n });\n };\n const findSnap = (component, snapInfo, newCoord, scroll, origin) => {\n const snaps = snapInfo.getSnapPoints(component);\n return findMatchingSnap(snaps, newCoord, scroll, origin);\n };\n const snapTo$1 = (snap, scroll, origin) => ({\n coord: absorb(snap.output, snap.output, scroll, origin),\n extra: snap.extra\n });\n\n const snapTo = (component, dragConfig, _state, snap) => {\n const target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n const doc = owner$4(component.element);\n const scroll = get$c(doc);\n const origin = getOrigin(target);\n const snapPin = snapTo$1(snap, scroll, origin);\n const styles = toStyles(snapPin.coord, scroll, origin);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo\n });\n\n const initialAttribute = 'data-initial-z-index';\n const resetZIndex = blocker => {\n parent(blocker.element).filter(isElement$1).each(root => {\n getOpt(root, initialAttribute).fold(() => remove$7(root, 'z-index'), zIndex => set$8(root, 'z-index', zIndex));\n remove$8(root, initialAttribute);\n });\n };\n const changeZIndex = blocker => {\n parent(blocker.element).filter(isElement$1).each(root => {\n getRaw(root, 'z-index').each(zindex => {\n set$9(root, initialAttribute, zindex);\n });\n set$8(root, 'z-index', get$f(blocker.element, 'z-index'));\n });\n };\n const instigate = (anyComponent, blocker) => {\n anyComponent.getSystem().addToGui(blocker);\n changeZIndex(blocker);\n };\n const discard = blocker => {\n resetZIndex(blocker);\n blocker.getSystem().removeFromGui(blocker);\n };\n const createComponent = (component, blockerClass, blockerEvents) => component.getSystem().build(Container.sketch({\n dom: {\n styles: {\n 'left': '0px',\n 'top': '0px',\n 'width': '100%',\n 'height': '100%',\n 'position': 'fixed',\n 'z-index': '1000000000000000'\n },\n classes: [blockerClass]\n },\n events: blockerEvents\n }));\n\n var SnapSchema = optionObjOf('snaps', [\n required$1('getSnapPoints'),\n onHandler('onSensor'),\n required$1('leftAttr'),\n required$1('topAttr'),\n defaulted('lazyViewport', win),\n defaulted('mustSnap', false)\n ]);\n\n const schema$6 = [\n defaulted('useFixed', never),\n required$1('blockerClass'),\n defaulted('getTarget', identity),\n defaulted('onDrag', noop),\n defaulted('repositionTarget', true),\n defaulted('onDrop', noop),\n defaultedFunction('getBounds', win),\n SnapSchema\n ];\n\n const getCurrentCoord = target => lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), (left, top, position) => {\n const nu = position === 'fixed' ? fixed : offset;\n return nu(parseInt(left, 10), parseInt(top, 10));\n }).getOrThunk(() => {\n const location = absolute$3(target);\n return absolute(location.left, location.top);\n });\n const clampCoords = (component, coords, scroll, origin, startData) => {\n const bounds = startData.bounds;\n const absoluteCoord = asAbsolute(coords, scroll, origin);\n const newX = clamp(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width);\n const newY = clamp(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height);\n const newCoords = absolute(newX, newY);\n return coords.fold(() => {\n const offset$1 = asOffset(newCoords, scroll, origin);\n return offset(offset$1.left, offset$1.top);\n }, constant$1(newCoords), () => {\n const fixed$1 = asFixed(newCoords, scroll, origin);\n return fixed(fixed$1.left, fixed$1.top);\n });\n };\n const calcNewCoord = (component, optSnaps, currentCoord, scroll, origin, delta, startData) => {\n const newCoord = optSnaps.fold(() => {\n const translated = translate(currentCoord, delta.left, delta.top);\n const fixedCoord = asFixed(translated, scroll, origin);\n return fixed(fixedCoord.left, fixedCoord.top);\n }, snapInfo => {\n const snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n snapping.extra.each(extra => {\n snapInfo.onSensor(component, extra);\n });\n return snapping.coord;\n });\n return clampCoords(component, newCoord, scroll, origin, startData);\n };\n const dragBy = (component, dragConfig, startData, delta) => {\n const target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n const doc = owner$4(component.element);\n const scroll = get$c(doc);\n const origin = getOrigin(target);\n const currentCoord = getCurrentCoord(target);\n const newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData);\n const styles = toStyles(newCoord, scroll, origin);\n setOptions(target, styles);\n }\n dragConfig.onDrag(component, target, delta);\n };\n\n const calcStartData = (dragConfig, comp) => ({\n bounds: dragConfig.getBounds(),\n height: getOuter$2(comp.element),\n width: getOuter$1(comp.element)\n });\n const move = (component, dragConfig, dragState, dragMode, event) => {\n const delta = dragState.update(dragMode, event);\n const dragStartData = dragState.getStartData().getOrThunk(() => calcStartData(dragConfig, component));\n delta.each(dlt => {\n dragBy(component, dragConfig, dragStartData, dlt);\n });\n };\n const stop = (component, blocker, dragConfig, dragState) => {\n blocker.each(discard);\n dragConfig.snaps.each(snapInfo => {\n stopDrag(component, snapInfo);\n });\n const target = dragConfig.getTarget(component.element);\n dragState.reset();\n dragConfig.onDrop(component, target);\n };\n const handlers = events => (dragConfig, dragState) => {\n const updateStartState = comp => {\n dragState.setStartData(calcStartData(dragConfig, comp));\n };\n return derive$2([\n run$1(windowScroll(), comp => {\n dragState.getStartData().each(() => updateStartState(comp));\n }),\n ...events(dragConfig, dragState, updateStartState)\n ]);\n };\n\n const init$3 = dragApi => derive$2([\n run$1(mousedown(), dragApi.forceDrop),\n run$1(mouseup(), dragApi.drop),\n run$1(mousemove(), (comp, simulatedEvent) => {\n dragApi.move(simulatedEvent.event);\n }),\n run$1(mouseout(), dragApi.delayDrop)\n ]);\n\n const getData$1 = event => Optional.from(SugarPosition(event.x, event.y));\n const getDelta$1 = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n var MouseData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$1,\n getDelta: getDelta$1\n });\n\n const events$3 = (dragConfig, dragState, updateStartState) => [run$1(mousedown(), (component, simulatedEvent) => {\n const raw = simulatedEvent.event.raw;\n if (raw.button !== 0) {\n return;\n }\n simulatedEvent.stop();\n const stop$1 = () => stop(component, Optional.some(blocker), dragConfig, dragState);\n const delayDrop = DelayedFunction(stop$1, 200);\n const dragApi = {\n drop: stop$1,\n delayDrop: delayDrop.schedule,\n forceDrop: stop$1,\n move: event => {\n delayDrop.cancel();\n move(component, dragConfig, dragState, MouseData, event);\n }\n };\n const blocker = createComponent(component, dragConfig.blockerClass, init$3(dragApi));\n const start = () => {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n })];\n const schema$5 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$3) })\n ];\n\n const init$2 = dragApi => derive$2([\n run$1(touchstart(), dragApi.forceDrop),\n run$1(touchend(), dragApi.drop),\n run$1(touchcancel(), dragApi.drop),\n run$1(touchmove(), (comp, simulatedEvent) => {\n dragApi.move(simulatedEvent.event);\n })\n ]);\n\n const getDataFrom = touches => {\n const touch = touches[0];\n return Optional.some(SugarPosition(touch.clientX, touch.clientY));\n };\n const getData = event => {\n const raw = event.raw;\n const touches = raw.touches;\n return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n };\n const getDelta = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n var TouchData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData,\n getDelta: getDelta\n });\n\n const events$2 = (dragConfig, dragState, updateStartState) => {\n const blockerSingleton = value$4();\n const stopBlocking = component => {\n stop(component, blockerSingleton.get(), dragConfig, dragState);\n blockerSingleton.clear();\n };\n return [\n run$1(touchstart(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n const stop = () => stopBlocking(component);\n const dragApi = {\n drop: stop,\n delayDrop: noop,\n forceDrop: stop,\n move: event => {\n move(component, dragConfig, dragState, TouchData, event);\n }\n };\n const blocker = createComponent(component, dragConfig.blockerClass, init$2(dragApi));\n blockerSingleton.set(blocker);\n const start = () => {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n }),\n run$1(touchmove(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n move(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n }),\n run$1(touchend(), (component, simulatedEvent) => {\n simulatedEvent.stop();\n stopBlocking(component);\n }),\n run$1(touchcancel(), stopBlocking)\n ];\n };\n const schema$4 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$2) })\n ];\n\n const events$1 = (dragConfig, dragState, updateStartState) => [\n ...events$3(dragConfig, dragState, updateStartState),\n ...events$2(dragConfig, dragState, updateStartState)\n ];\n const schema$3 = [\n ...schema$6,\n output$1('dragger', { handlers: handlers(events$1) })\n ];\n\n const mouse = schema$5;\n const touch = schema$4;\n const mouseOrTouch = schema$3;\n\n var DraggingBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n mouse: mouse,\n touch: touch,\n mouseOrTouch: mouseOrTouch\n });\n\n const init$1 = () => {\n let previous = Optional.none();\n let startData = Optional.none();\n const reset = () => {\n previous = Optional.none();\n startData = Optional.none();\n };\n const calculateDelta = (mode, nu) => {\n const result = previous.map(old => mode.getDelta(old, nu));\n previous = Optional.some(nu);\n return result;\n };\n const update = (mode, dragEvent) => mode.getData(dragEvent).bind(nuData => calculateDelta(mode, nuData));\n const setStartData = data => {\n startData = Optional.some(data);\n };\n const getStartData = () => startData;\n const readState = constant$1({});\n return nu$7({\n readState,\n reset,\n update,\n getStartData,\n setStartData\n });\n };\n\n var DragState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$1\n });\n\n const Dragging = createModes({\n branchKey: 'mode',\n branches: DraggingBranches,\n name: 'dragging',\n active: {\n events: (dragConfig, dragState) => {\n const dragger = dragConfig.dragger;\n return dragger.handlers(dragConfig, dragState);\n }\n },\n extra: {\n snap: sConfig => ({\n sensor: sConfig.sensor,\n range: sConfig.range,\n output: sConfig.output,\n extra: Optional.from(sConfig.extra)\n })\n },\n state: DragState,\n apis: DraggingApis\n });\n\n const snapWidth = 40;\n const snapOffset = snapWidth / 2;\n const calcSnap = (selectorOpt, td, x, y, width, height) => selectorOpt.fold(() => Dragging.snap({\n sensor: absolute(x - snapOffset, y - snapOffset),\n range: SugarPosition(width, height),\n output: absolute(Optional.some(x), Optional.some(y)),\n extra: { td }\n }), selectorHandle => {\n const sensorLeft = x - snapOffset;\n const sensorTop = y - snapOffset;\n const sensorWidth = snapWidth;\n const sensorHeight = snapWidth;\n const rect = selectorHandle.element.dom.getBoundingClientRect();\n return Dragging.snap({\n sensor: absolute(sensorLeft, sensorTop),\n range: SugarPosition(sensorWidth, sensorHeight),\n output: absolute(Optional.some(x - rect.width / 2), Optional.some(y - rect.height / 2)),\n extra: { td }\n });\n });\n const getSnapsConfig = (getSnapPoints, cell, onChange) => {\n const isSameCell = (cellOpt, td) => cellOpt.exists(currentTd => eq(currentTd, td));\n return {\n getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: (component, extra) => {\n const td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(td);\n onChange(td);\n }\n },\n mustSnap: true\n };\n };\n const createSelector = snaps => record(Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-selector']\n },\n buttonBehaviours: derive$1([\n Dragging.config({\n mode: 'mouseOrTouch',\n blockerClass: 'blocker',\n snaps\n }),\n Unselecting.config({})\n ]),\n eventOrder: {\n mousedown: [\n 'dragging',\n 'alloy.base.behaviour'\n ],\n touchstart: [\n 'dragging',\n 'alloy.base.behaviour'\n ]\n }\n }));\n const setup$4 = (editor, sink) => {\n const tlTds = Cell([]);\n const brTds = Cell([]);\n const isVisible = Cell(false);\n const startCell = value$4();\n const finishCell = value$4();\n const getTopLeftSnap = td => {\n const box = absolute$2(td);\n return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height);\n };\n const getTopLeftSnaps = () => map$2(tlTds.get(), td => getTopLeftSnap(td));\n const getBottomRightSnap = td => {\n const box = absolute$2(td);\n return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height);\n };\n const getBottomRightSnaps = () => map$2(brTds.get(), td => getBottomRightSnap(td));\n const topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, start => {\n finishCell.get().each(finish => {\n editor.dispatch('TableSelectorChange', {\n start,\n finish\n });\n });\n });\n const bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, finish => {\n startCell.get().each(start => {\n editor.dispatch('TableSelectorChange', {\n start,\n finish\n });\n });\n });\n const memTopLeft = createSelector(topLeftSnaps);\n const memBottomRight = createSelector(bottomRightSnaps);\n const topLeft = build$1(memTopLeft.asSpec());\n const bottomRight = build$1(memBottomRight.asSpec());\n const showOrHideHandle = (selector, cell, isAbove, isBelow) => {\n const cellRect = cell.dom.getBoundingClientRect();\n remove$7(selector.element, 'display');\n const viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n const aboveViewport = isAbove(cellRect);\n const belowViewport = isBelow(cellRect, viewportHeight);\n if (aboveViewport || belowViewport) {\n set$8(selector.element, 'display', 'none');\n }\n };\n const snapTo = (selector, cell, getSnapConfig, pos) => {\n const snap = getSnapConfig(cell);\n Dragging.snapTo(selector, snap);\n const isAbove = rect => rect[pos] < 0;\n const isBelow = (rect, viewportHeight) => rect[pos] > viewportHeight;\n showOrHideHandle(selector, cell, isAbove, isBelow);\n };\n const snapTopLeft = cell => snapTo(topLeft, cell, getTopLeftSnap, 'top');\n const snapLastTopLeft = () => startCell.get().each(snapTopLeft);\n const snapBottomRight = cell => snapTo(bottomRight, cell, getBottomRightSnap, 'bottom');\n const snapLastBottomRight = () => finishCell.get().each(snapBottomRight);\n if (detect$1().deviceType.isTouch()) {\n const domToSugar = arr => map$2(arr, SugarElement.fromDom);\n editor.on('TableSelectionChange', e => {\n if (!isVisible.get()) {\n attach(sink, topLeft);\n attach(sink, bottomRight);\n isVisible.set(true);\n }\n const start = SugarElement.fromDom(e.start);\n const finish = SugarElement.fromDom(e.finish);\n startCell.set(start);\n finishCell.set(finish);\n Optional.from(e.otherCells).each(otherCells => {\n tlTds.set(domToSugar(otherCells.upOrLeftCells));\n brTds.set(domToSugar(otherCells.downOrRightCells));\n snapTopLeft(start);\n snapBottomRight(finish);\n });\n });\n editor.on('ResizeEditor ResizeWindow ScrollContent', () => {\n snapLastTopLeft();\n snapLastBottomRight();\n });\n editor.on('TableSelectionClear', () => {\n if (isVisible.get()) {\n detach(topLeft);\n detach(bottomRight);\n isVisible.set(false);\n }\n startCell.clear();\n finishCell.clear();\n });\n }\n };\n\n var Logo = \"\\n\";\n\n const describedBy = (describedElement, describeElement) => {\n const describeId = Optional.from(get$g(describedElement, 'id')).getOrThunk(() => {\n const id = generate$6('aria');\n set$9(describeElement, 'id', id);\n return id;\n });\n set$9(describedElement, 'aria-describedby', describeId);\n };\n const remove = describedElement => {\n remove$8(describedElement, 'aria-describedby');\n };\n\n const isHidden = elm => elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus') || elm.getAttribute('data-mce-type') === 'bookmark';\n const renderElementPath = (editor, settings, providersBackstage) => {\n var _a;\n const delimiter = (_a = settings.delimiter) !== null && _a !== void 0 ? _a : '\\u203A';\n const renderElement = (name, element, index) => Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: { 'data-index': index }\n },\n components: [text$2(name)],\n action: _btn => {\n editor.focus();\n editor.selection.select(element);\n editor.nodeChanged();\n },\n buttonBehaviours: derive$1([\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: providersBackstage.translate([\n 'Select the {0} element',\n element.nodeName.toLowerCase()\n ]),\n onShow: (comp, tooltip) => {\n describedBy(comp.element, tooltip.element);\n },\n onHide: comp => {\n remove(comp.element);\n }\n })\n }),\n DisablingConfigs.button(providersBackstage.isDisabled),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('any'))\n ])\n });\n const renderDivider = () => ({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true }\n },\n components: [text$2(` ${ delimiter } `)]\n });\n const renderPathData = data => foldl(data, (acc, path, index) => {\n const element = renderElement(path.name, path.element, index);\n if (index === 0) {\n return acc.concat([element]);\n } else {\n return acc.concat([\n renderDivider(),\n element\n ]);\n }\n }, []);\n const updatePath = parents => {\n const newPath = [];\n let i = parents.length;\n while (i-- > 0) {\n const parent = parents[i];\n if (parent.nodeType === 1 && !isHidden(parent)) {\n const args = fireResolveName(editor, parent);\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n return newPath;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path'],\n attributes: { role: 'navigation' }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: 'div[role=button]'\n }),\n Disabling.config({ disabled: providersBackstage.isDisabled }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('any')),\n Tabstopping.config({}),\n Replacing.config({}),\n config('elementPathEvents', [runOnAttached((comp, _e) => {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', () => Keying.focusIn(comp));\n editor.on('NodeChange', e => {\n const newPath = updatePath(e.parents);\n const newChildren = newPath.length > 0 ? renderPathData(newPath) : [];\n Replacing.set(comp, newChildren);\n });\n })])\n ]),\n components: []\n };\n };\n\n var ResizeTypes;\n (function (ResizeTypes) {\n ResizeTypes[ResizeTypes['None'] = 0] = 'None';\n ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';\n ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';\n }(ResizeTypes || (ResizeTypes = {})));\n const getDimensions = (editor, deltas, resizeType, originalHeight, originalWidth) => {\n const dimensions = { height: calcCappedSize(originalHeight + deltas.top, getMinHeightOption(editor), getMaxHeightOption(editor)) };\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthOption(editor), getMaxWidthOption(editor));\n }\n return dimensions;\n };\n const resize = (editor, deltas, resizeType) => {\n const container = SugarElement.fromDom(editor.getContainer());\n const dimensions = getDimensions(editor, deltas, resizeType, get$e(container), get$d(container));\n each(dimensions, (val, dim) => {\n if (isNumber(val)) {\n set$8(container, dim, numToPx(val));\n }\n });\n fireResizeEditor(editor);\n };\n\n const getResizeType = editor => {\n const resize = getResize(editor);\n if (resize === false) {\n return ResizeTypes.None;\n } else if (resize === 'both') {\n return ResizeTypes.Both;\n } else {\n return ResizeTypes.Vertical;\n }\n };\n const keyboardHandler = (editor, resizeType, x, y) => {\n const scale = 20;\n const delta = SugarPosition(x * scale, y * scale);\n resize(editor, delta, resizeType);\n return Optional.some(true);\n };\n const renderResizeHandler = (editor, providersBackstage) => {\n const resizeType = getResizeType(editor);\n if (resizeType === ResizeTypes.None) {\n return Optional.none();\n }\n const resizeLabel = resizeType === ResizeTypes.Both ? 'Press the arrow keys to resize the editor.' : 'Press the Up and Down arrow keys to resize the editor.';\n return Optional.some(render$3('resize-handle', {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: {\n 'aria-label': providersBackstage.translate(resizeLabel),\n 'data-mce-name': 'resize-handle'\n },\n behaviours: [\n Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: (_comp, _target, delta) => resize(editor, delta, resizeType),\n blockerClass: 'tox-blocker'\n }),\n Keying.config({\n mode: 'special',\n onLeft: () => keyboardHandler(editor, resizeType, -1, 0),\n onRight: () => keyboardHandler(editor, resizeType, 1, 0),\n onUp: () => keyboardHandler(editor, resizeType, 0, -1),\n onDown: () => keyboardHandler(editor, resizeType, 0, 1)\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate('Resize') }))\n ]\n }, providersBackstage.icons));\n };\n\n const renderWordCount = (editor, providersBackstage) => {\n const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$2(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\n return Button.sketch({\n dom: {\n tag: 'button',\n classes: ['tox-statusbar__wordcount']\n },\n components: [],\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('any')),\n Tabstopping.config({}),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: {\n mode: 'words',\n count: {\n words: 0,\n characters: 0\n }\n }\n }\n }),\n config('wordcount-events', [\n runOnExecute$1(comp => {\n const currentVal = Representing.getValue(comp);\n const newMode = currentVal.mode === 'words' ? 'characters' : 'words';\n Representing.setValue(comp, {\n mode: newMode,\n count: currentVal.count\n });\n replaceCountText(comp, currentVal.count, newMode);\n }),\n runOnAttached(comp => {\n editor.on('wordCountUpdate', e => {\n const {mode} = Representing.getValue(comp);\n Representing.setValue(comp, {\n mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ]),\n eventOrder: {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'wordcount-events'\n ]\n }\n });\n };\n\n const renderStatusbar = (editor, providersBackstage) => {\n const renderBranding = () => {\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding']\n },\n components: [{\n dom: {\n tag: 'a',\n attributes: {\n 'href': 'https://www.tiny.cloud/powered-by-tiny?utm_campaign=poweredby&utm_source=tiny&utm_medium=referral&utm_content=v7',\n 'rel': 'noopener',\n 'target': '_blank',\n 'aria-label': editor.translate([\n 'Build with {0}',\n 'TinyMCE'\n ])\n },\n innerHtml: editor.translate([\n 'Build with {0}',\n Logo.trim()\n ])\n },\n behaviours: derive$1([Focusing.config({})])\n }]\n };\n };\n const renderHelpAccessibility = () => {\n const shortcutText = convertText('Alt+0');\n const text = `Press {0} for help`;\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__help-text']\n },\n components: [text$2(global$5.translate([\n text,\n shortcutText\n ]))]\n };\n };\n const renderRightContainer = () => {\n const components = [];\n if (editor.hasPlugin('wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (useBranding(editor)) {\n components.push(renderBranding());\n }\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__right-container']\n },\n components\n };\n };\n const getTextComponents = () => {\n const components = [];\n const shouldRenderHelp = useHelpAccessibility(editor);\n const shouldRenderElementPath = useElementPath(editor);\n const shouldRenderRightContainer = useBranding(editor) || editor.hasPlugin('wordcount');\n const getTextComponentClasses = () => {\n const flexStart = 'tox-statusbar__text-container--flex-start';\n const flexEnd = 'tox-statusbar__text-container--flex-end';\n const spaceAround = 'tox-statusbar__text-container--space-around';\n if (shouldRenderHelp) {\n const container3Columns = 'tox-statusbar__text-container-3-cols';\n if (!shouldRenderRightContainer && !shouldRenderElementPath) {\n return [\n container3Columns,\n spaceAround\n ];\n }\n if (shouldRenderRightContainer && !shouldRenderElementPath) {\n return [\n container3Columns,\n flexEnd\n ];\n }\n return [\n container3Columns,\n flexStart\n ];\n }\n return [shouldRenderRightContainer && !shouldRenderElementPath ? flexEnd : flexStart];\n };\n if (shouldRenderElementPath) {\n components.push(renderElementPath(editor, {}, providersBackstage));\n }\n if (shouldRenderHelp) {\n components.push(renderHelpAccessibility());\n }\n if (shouldRenderRightContainer) {\n components.push(renderRightContainer());\n }\n if (components.length > 0) {\n return [{\n dom: {\n tag: 'div',\n classes: [\n 'tox-statusbar__text-container',\n ...getTextComponentClasses()\n ]\n },\n components\n }];\n }\n return [];\n };\n const getComponents = () => {\n const components = getTextComponents();\n const resizeHandler = renderResizeHandler(editor, providersBackstage);\n return components.concat(resizeHandler.toArray());\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n const getLazyMothership = (label, singleton) => singleton.get().getOrDie(`UI for ${ label } has not been rendered`);\n const setup$3 = (editor, setupForTheme) => {\n const isInline = editor.inline;\n const mode = isInline ? Inline : Iframe;\n const header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n const lazyUiRefs = LazyUiReferences();\n const lazyMothership = value$4();\n const lazyDialogMothership = value$4();\n const lazyPopupMothership = value$4();\n const platform = detect$1();\n const isTouch = platform.deviceType.isTouch();\n const touchPlatformClass = 'tox-platform-touch';\n const deviceClasses = isTouch ? [touchPlatformClass] : [];\n const isToolbarBottom = isToolbarLocationBottom(editor);\n const toolbarMode = getToolbarMode(editor);\n const memAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-anchorbar']\n }\n });\n const memBottomAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-bottom-anchorbar']\n }\n });\n const lazyHeader = () => lazyUiRefs.mainUi.get().map(ui => ui.outerContainer).bind(OuterContainer.getHeader);\n const lazyDialogSinkResult = () => Result.fromOption(lazyUiRefs.dialogUi.get().map(ui => ui.sink), 'UI has not been rendered');\n const lazyPopupSinkResult = () => Result.fromOption(lazyUiRefs.popupUi.get().map(ui => ui.sink), '(popup) UI has not been rendered');\n const lazyAnchorBar = lazyUiRefs.lazyGetInOuterOrDie('anchor bar', memAnchorBar.getOpt);\n const lazyBottomAnchorBar = lazyUiRefs.lazyGetInOuterOrDie('bottom anchor bar', memBottomAnchorBar.getOpt);\n const lazyToolbar = lazyUiRefs.lazyGetInOuterOrDie('toolbar', OuterContainer.getToolbar);\n const lazyThrobber = lazyUiRefs.lazyGetInOuterOrDie('throbber', OuterContainer.getThrobber);\n const backstages = init$5({\n popup: lazyPopupSinkResult,\n dialog: lazyDialogSinkResult\n }, editor, lazyAnchorBar, lazyBottomAnchorBar);\n const makeHeaderPart = () => {\n const verticalDirAttributes = { attributes: { [Attribute]: isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom } };\n const partMenubar = OuterContainer.parts.menubar({\n dom: {\n tag: 'div',\n classes: ['tox-menubar']\n },\n backstage: backstages.popup,\n onEscape: () => {\n editor.focus();\n }\n });\n const partToolbar = OuterContainer.parts.toolbar({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar']\n },\n getSink: backstages.popup.shared.getSink,\n providers: backstages.popup.shared.providers,\n onEscape: () => {\n editor.focus();\n },\n onToolbarToggled: state => {\n fireToggleToolbarDrawer(editor, state);\n },\n type: toolbarMode,\n lazyToolbar,\n lazyHeader: () => lazyHeader().getOrDie('Could not find header element'),\n ...verticalDirAttributes\n });\n const partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n providers: backstages.popup.shared.providers,\n onEscape: () => {\n editor.focus();\n },\n type: toolbarMode\n });\n const hasMultipleToolbar = isMultipleToolbars(editor);\n const hasToolbar = isToolbarEnabled(editor);\n const hasMenubar = isMenubarEnabled(editor);\n const shouldHavePromotion = promotionEnabled(editor);\n const partPromotion = makePromotion();\n const hasAnyContents = hasMultipleToolbar || hasToolbar || hasMenubar;\n const getPartToolbar = () => {\n if (hasMultipleToolbar) {\n return [partMultipleToolbar];\n } else if (hasToolbar) {\n return [partToolbar];\n } else {\n return [];\n }\n };\n const menubarCollection = shouldHavePromotion ? [\n partPromotion,\n partMenubar\n ] : [partMenubar];\n return OuterContainer.parts.header({\n dom: {\n tag: 'div',\n classes: ['tox-editor-header'].concat(hasAnyContents ? [] : ['tox-editor-header--empty']),\n ...verticalDirAttributes\n },\n components: flatten([\n hasMenubar ? menubarCollection : [],\n getPartToolbar(),\n useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n ]),\n sticky: isStickyToolbar(editor),\n editor,\n sharedBackstage: backstages.popup.shared\n });\n };\n const makePromotion = () => {\n return OuterContainer.parts.promotion({\n dom: {\n tag: 'div',\n classes: ['tox-promotion']\n }\n });\n };\n const makeSidebarDefinition = () => {\n const partSocket = OuterContainer.parts.socket({\n dom: {\n tag: 'div',\n classes: ['tox-edit-area']\n }\n });\n const partSidebar = OuterContainer.parts.sidebar({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar']\n }\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar-wrap']\n },\n components: [\n partSocket,\n partSidebar\n ]\n };\n };\n const renderDialogUi = () => {\n const uiContainer = getUiContainer(editor);\n const isGridUiContainer = eq(body(), uiContainer) && get$f(uiContainer, 'display') === 'grid';\n const sinkSpec = {\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-tinymce-aux'\n ].concat(deviceClasses),\n attributes: { ...global$5.isRtl() ? { dir: 'rtl' } : {} }\n },\n behaviours: derive$1([Positioning.config({ useFixed: () => header.isDocked(lazyHeader) })])\n };\n const reactiveWidthSpec = {\n dom: { styles: { width: document.body.clientWidth + 'px' } },\n events: derive$2([run$1(windowResize(), comp => {\n set$8(comp.element, 'width', document.body.clientWidth + 'px');\n })])\n };\n const sink = build$1(deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {}));\n const uiMothership = takeover(sink);\n lazyDialogMothership.set(uiMothership);\n return {\n sink,\n mothership: uiMothership\n };\n };\n const renderPopupUi = () => {\n const sinkSpec = {\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-silver-popup-sink',\n 'tox-tinymce-aux'\n ].concat(deviceClasses),\n attributes: { ...global$5.isRtl() ? { dir: 'rtl' } : {} }\n },\n behaviours: derive$1([Positioning.config({\n useFixed: () => header.isDocked(lazyHeader),\n getBounds: () => setupForTheme.getPopupSinkBounds()\n })])\n };\n const sink = build$1(sinkSpec);\n const uiMothership = takeover(sink);\n lazyPopupMothership.set(uiMothership);\n return {\n sink,\n mothership: uiMothership\n };\n };\n const renderMainUi = () => {\n const partHeader = makeHeaderPart();\n const sidebarContainer = makeSidebarDefinition();\n const partThrobber = OuterContainer.parts.throbber({\n dom: {\n tag: 'div',\n classes: ['tox-throbber']\n },\n backstage: backstages.popup\n });\n const partViewWrapper = OuterContainer.parts.viewWrapper({ backstage: backstages.popup });\n const statusbar = useStatusBar(editor) && !isInline ? Optional.some(renderStatusbar(editor, backstages.popup.shared.providers)) : Optional.none();\n const editorComponents = flatten([\n isToolbarBottom ? [] : [partHeader],\n isInline ? [] : [sidebarContainer],\n isToolbarBottom ? [partHeader] : []\n ]);\n const editorContainer = OuterContainer.parts.editorContainer({\n components: flatten([\n editorComponents,\n isInline ? [] : [memBottomAnchorBar.asSpec()]\n ])\n });\n const isHidden = isDistractionFree(editor);\n const attributes = {\n role: 'application',\n ...global$5.isRtl() ? { dir: 'rtl' } : {},\n ...isHidden ? { 'aria-hidden': 'true' } : {}\n };\n const outerContainer = build$1(OuterContainer.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-tinymce'\n ].concat(isInline ? ['tox-tinymce-inline'] : []).concat(isToolbarBottom ? ['tox-tinymce--toolbar-bottom'] : []).concat(deviceClasses),\n styles: {\n visibility: 'hidden',\n ...isHidden ? {\n opacity: '0',\n border: '0'\n } : {}\n },\n attributes\n },\n components: [\n editorContainer,\n ...isInline ? [] : [\n partViewWrapper,\n ...statusbar.toArray()\n ],\n partThrobber\n ],\n behaviours: derive$1([\n toggleOnReceive(() => backstages.popup.shared.providers.checkUiComponentContext('any')),\n Disabling.config({ disableClass: 'tox-tinymce--disabled' }),\n Keying.config({\n mode: 'cyclic',\n selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle'\n })\n ])\n }));\n const mothership = takeover(outerContainer);\n lazyMothership.set(mothership);\n return {\n mothership,\n outerContainer\n };\n };\n const setEditorSize = outerContainer => {\n const parsedHeight = numToPx(getHeightWithFallback(editor));\n const parsedWidth = numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue$1('div', 'width', parsedWidth)) {\n set$8(outerContainer.element, 'width', parsedWidth);\n }\n if (isValidValue$1('div', 'height', parsedHeight)) {\n set$8(outerContainer.element, 'height', parsedHeight);\n } else {\n set$8(outerContainer.element, 'height', '400px');\n }\n }\n return parsedHeight;\n };\n const setupShortcutsAndCommands = outerContainer => {\n editor.addShortcut('alt+F9', 'focus menubar', () => {\n OuterContainer.focusMenubar(outerContainer);\n });\n editor.addShortcut('alt+F10', 'focus toolbar', () => {\n OuterContainer.focusToolbar(outerContainer);\n });\n editor.addCommand('ToggleToolbarDrawer', (_ui, options) => {\n if (options === null || options === void 0 ? void 0 : options.skipFocus) {\n OuterContainer.toggleToolbarDrawerWithoutFocusing(outerContainer);\n } else {\n OuterContainer.toggleToolbarDrawer(outerContainer);\n }\n });\n editor.addQueryStateHandler('ToggleToolbarDrawer', () => OuterContainer.isToolbarDrawerToggled(outerContainer));\n };\n const renderUIWithRefs = uiRefs => {\n const {mainUi, popupUi, uiMotherships} = uiRefs;\n map$1(getToolbarGroups(editor), (toolbarGroupButtonConfig, name) => {\n editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n });\n const {buttons, menuItems, contextToolbars, sidebars, views} = editor.ui.registry.getAll();\n const toolbarOpt = getMultipleToolbarsOption(editor);\n const rawUiConfig = {\n menuItems,\n menus: getMenus(editor),\n menubar: getMenubar(editor),\n toolbar: toolbarOpt.getOrThunk(() => getToolbar(editor)),\n allowToolbarGroups: toolbarMode === ToolbarMode$1.floating,\n buttons,\n sidebar: sidebars,\n views\n };\n setupShortcutsAndCommands(mainUi.outerContainer);\n setup$b(editor, mainUi.mothership, uiMotherships);\n header.setup(editor, backstages.popup.shared, lazyHeader);\n setup$6(editor, backstages.popup);\n setup$5(editor, backstages.popup.shared.getSink, backstages.popup);\n setup$8(editor);\n setup$7(editor, lazyThrobber, backstages.popup.shared);\n register$a(editor, contextToolbars, popupUi.sink, { backstage: backstages.popup });\n setup$4(editor, popupUi.sink);\n const elm = editor.getElement();\n const height = setEditorSize(mainUi.outerContainer);\n const args = {\n targetNode: elm,\n height\n };\n return mode.render(editor, uiRefs, rawUiConfig, backstages.popup, args);\n };\n const reuseDialogUiForPopuUi = dialogUi => {\n lazyPopupMothership.set(dialogUi.mothership);\n return dialogUi;\n };\n const renderUI = () => {\n const mainUi = renderMainUi();\n const dialogUi = renderDialogUi();\n const popupUi = isSplitUiMode(editor) ? renderPopupUi() : reuseDialogUiForPopuUi(dialogUi);\n lazyUiRefs.dialogUi.set(dialogUi);\n lazyUiRefs.popupUi.set(popupUi);\n lazyUiRefs.mainUi.set(mainUi);\n const uiRefs = {\n popupUi,\n dialogUi,\n mainUi,\n uiMotherships: lazyUiRefs.getUiMotherships()\n };\n return renderUIWithRefs(uiRefs);\n };\n return {\n popups: {\n backstage: backstages.popup,\n getMothership: () => getLazyMothership('popups', lazyPopupMothership)\n },\n dialogs: {\n backstage: backstages.dialog,\n getMothership: () => getLazyMothership('dialogs', lazyDialogMothership)\n },\n renderUI\n };\n };\n\n const get = element => element.dom.textContent;\n\n const labelledBy = (labelledElement, labelElement) => {\n const labelId = getOpt(labelledElement, 'id').fold(() => {\n const id = generate$6('dialog-label');\n set$9(labelElement, 'id', id);\n return id;\n }, identity);\n set$9(labelledElement, 'aria-labelledby', labelId);\n };\n\n const schema$2 = constant$1([\n required$1('lazySink'),\n option$3('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted('useTabstopAt', always),\n defaulted('firstTabstop', 0),\n defaulted('eventOrder', {}),\n field('modalBehaviours', [Keying]),\n onKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape')\n ]);\n const basic = { sketch: identity };\n const parts$2 = constant$1([\n optional({\n name: 'draghandle',\n overrides: (detail, spec) => {\n return {\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n getTarget: handle => {\n return ancestor(handle, '[role=\"dialog\"]').getOr(handle);\n },\n blockerClass: detail.dragBlockClass.getOrDie(new Error('The drag blocker class was not specified for a dialog with a drag handle: \\n' + JSON.stringify(spec, null, 2)).message),\n getBounds: detail.getDragBounds\n })])\n };\n }\n }),\n required({\n schema: [required$1('dom')],\n name: 'title'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'close'\n }),\n required({\n factory: basic,\n schema: [required$1('dom')],\n name: 'body'\n }),\n optional({\n factory: basic,\n schema: [required$1('dom')],\n name: 'footer'\n }),\n external({\n factory: {\n sketch: (spec, detail) => ({\n ...spec,\n dom: detail.dom,\n components: detail.components\n })\n },\n schema: [\n defaulted('dom', {\n tag: 'div',\n styles: {\n position: 'fixed',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px'\n }\n }),\n defaulted('components', [])\n ],\n name: 'blocker'\n })\n ]);\n\n const factory$4 = (detail, components, spec, externals) => {\n const dialogComp = value$4();\n const showDialog = dialog => {\n dialogComp.set(dialog);\n const sink = detail.lazySink(dialog).getOrDie();\n const externalBlocker = externals.blocker();\n const blocker = sink.getSystem().build({\n ...externalBlocker,\n components: externalBlocker.components.concat([premade(dialog)]),\n behaviours: derive$1([\n Focusing.config({}),\n config('dialog-blocker-events', [runOnSource(focusin(), () => {\n Blocking.isBlocked(dialog) ? noop() : Keying.focusIn(dialog);\n })])\n ])\n });\n attach(sink, blocker);\n Keying.focusIn(dialog);\n };\n const hideDialog = dialog => {\n dialogComp.clear();\n parent(dialog.element).each(blockerDom => {\n dialog.getSystem().getByDom(blockerDom).each(blocker => {\n detach(blocker);\n });\n });\n };\n const getDialogBody = dialog => getPartOrDie(dialog, detail, 'body');\n const getDialogFooter = dialog => getPart(dialog, detail, 'footer');\n const setBusy = (dialog, getBusySpec) => {\n Blocking.block(dialog, getBusySpec);\n };\n const setIdle = dialog => {\n Blocking.unblock(dialog);\n };\n const modalEventsId = generate$6('modal-events');\n const eventOrder = {\n ...detail.eventOrder,\n [attachedToDom()]: [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || [])\n };\n const browser = detect$1();\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis: {\n show: showDialog,\n hide: hideDialog,\n getBody: getDialogBody,\n getFooter: getDialogFooter,\n setIdle,\n setBusy\n },\n eventOrder,\n domModification: {\n attributes: {\n 'role': 'dialog',\n 'aria-modal': 'true'\n }\n },\n behaviours: augment(detail.modalBehaviours, [\n Replacing.config({}),\n Keying.config({\n mode: 'cyclic',\n onEnter: detail.onExecute,\n onEscape: detail.onEscape,\n useTabstopAt: detail.useTabstopAt,\n firstTabstop: detail.firstTabstop\n }),\n Blocking.config({ getRoot: dialogComp.get }),\n config(modalEventsId, [runOnAttached(c => {\n const titleElm = getPartOrDie(c, detail, 'title').element;\n const title = get(titleElm);\n if (browser.os.isMacOS() && isNonNullable(title)) {\n set$9(c.element, 'aria-label', title);\n } else {\n labelledBy(c.element, titleElm);\n }\n })])\n ])\n };\n };\n const ModalDialog = composite({\n name: 'ModalDialog',\n configFields: schema$2(),\n partFields: parts$2(),\n factory: factory$4,\n apis: {\n show: (apis, dialog) => {\n apis.show(dialog);\n },\n hide: (apis, dialog) => {\n apis.hide(dialog);\n },\n getBody: (apis, dialog) => apis.getBody(dialog),\n getFooter: (apis, dialog) => apis.getFooter(dialog),\n setBusy: (apis, dialog, getBusySpec) => {\n apis.setBusy(dialog, getBusySpec);\n },\n setIdle: (apis, dialog) => {\n apis.setIdle(dialog);\n }\n }\n });\n\n const dialogToggleMenuItemSchema = objOf([\n type,\n name$1\n ].concat(commonMenuItemFields));\n const dialogToggleMenuItemDataProcessor = boolean;\n\n const baseFooterButtonFields = [\n generatedName('button'),\n optionalIcon,\n defaultedStringEnum('align', 'end', [\n 'start',\n 'end'\n ]),\n primary,\n enabled,\n optionStringEnum('buttonType', [\n 'primary',\n 'secondary'\n ]),\n defaultedString('context', 'mode:design')\n ];\n const dialogFooterButtonFields = [\n ...baseFooterButtonFields,\n text\n ];\n const normalFooterButtonFields = [\n requiredStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ]),\n ...dialogFooterButtonFields\n ];\n const menuFooterButtonFields = [\n requiredStringEnum('type', ['menu']),\n optionalText,\n optionalTooltip,\n optionalIcon,\n requiredArrayOf('items', dialogToggleMenuItemSchema),\n ...baseFooterButtonFields\n ];\n const toggleButtonSpecFields = [\n ...baseFooterButtonFields,\n requiredStringEnum('type', ['togglebutton']),\n optionalTooltip,\n optionalIcon,\n optionalText,\n defaultedBoolean('active', false)\n ];\n const dialogFooterButtonSchema = choose$1('type', {\n submit: normalFooterButtonFields,\n cancel: normalFooterButtonFields,\n custom: normalFooterButtonFields,\n menu: menuFooterButtonFields,\n togglebutton: toggleButtonSpecFields\n });\n\n const alertBannerFields = [\n type,\n text,\n requiredStringEnum('level', [\n 'info',\n 'warn',\n 'error',\n 'success'\n ]),\n icon,\n defaulted('url', '')\n ];\n const alertBannerSchema = objOf(alertBannerFields);\n\n const createBarFields = itemsField => [\n type,\n itemsField\n ];\n\n const buttonFields = [\n type,\n text,\n enabled,\n generatedName('button'),\n optionalIcon,\n borderless,\n optionStringEnum('buttonType', [\n 'primary',\n 'secondary',\n 'toolbar'\n ]),\n primary,\n defaultedString('context', 'mode:design')\n ];\n const buttonSchema = objOf(buttonFields);\n\n const formComponentFields = [\n type,\n name$1\n ];\n const formComponentWithLabelFields = formComponentFields.concat([optionalLabel]);\n\n const checkboxFields = formComponentFields.concat([\n label,\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const checkboxSchema = objOf(checkboxFields);\n const checkboxDataProcessor = boolean;\n\n const collectionFields = formComponentWithLabelFields.concat([\n defaultedColumns('auto'),\n defaultedString('context', 'mode:design')\n ]);\n const collectionSchema = objOf(collectionFields);\n const collectionDataProcessor = arrOfObj([\n value$1,\n text,\n icon\n ]);\n\n const colorInputFields = formComponentWithLabelFields.concat([\n defaultedString('storageKey', 'default'),\n defaultedString('context', 'mode:design')\n ]);\n const colorInputSchema = objOf(colorInputFields);\n const colorInputDataProcessor = string;\n\n const colorPickerFields = formComponentWithLabelFields;\n const colorPickerSchema = objOf(colorPickerFields);\n const colorPickerDataProcessor = string;\n\n const customEditorFields = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredString('scriptId'),\n requiredString('scriptUrl'),\n optionFunction('onFocus'),\n defaultedPostMsg('settings', undefined)\n ]);\n const customEditorFieldsOld = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredFunction('init')\n ]);\n const customEditorSchema = valueOf(v => asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(() => asRaw('customeditor.new', objOfOnly(customEditorFields), v)));\n const customEditorDataProcessor = string;\n\n const dropZoneFields = formComponentWithLabelFields.concat([defaultedString('context', 'mode:design')]);\n const dropZoneSchema = objOf(dropZoneFields);\n const dropZoneDataProcessor = arrOfVal();\n\n const createGridFields = itemsField => [\n type,\n requiredNumber('columns'),\n itemsField\n ];\n\n const htmlPanelFields = [\n type,\n requiredString('html'),\n defaultedStringEnum('presets', 'presentation', [\n 'presentation',\n 'document'\n ]),\n defaultedFunction('onInit', noop),\n defaultedBoolean('stretched', false)\n ];\n const htmlPanelSchema = objOf(htmlPanelFields);\n\n const iframeFields = formComponentWithLabelFields.concat([\n defaultedBoolean('border', false),\n defaultedBoolean('sandboxed', true),\n defaultedBoolean('streamContent', false),\n defaultedBoolean('transparent', true)\n ]);\n const iframeSchema = objOf(iframeFields);\n const iframeDataProcessor = string;\n\n const imagePreviewSchema = objOf(formComponentFields.concat([optionString('height')]));\n const imagePreviewDataProcessor = objOf([\n requiredString('url'),\n optionNumber('zoom'),\n optionNumber('cachedWidth'),\n optionNumber('cachedHeight')\n ]);\n\n const inputFields = formComponentWithLabelFields.concat([\n optionString('inputMode'),\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const inputSchema = objOf(inputFields);\n const inputDataProcessor = string;\n\n const createLabelFields = itemsField => [\n type,\n label,\n itemsField,\n defaultedStringEnum('align', 'start', [\n 'start',\n 'center',\n 'end'\n ]),\n optionString('for')\n ];\n\n const listBoxSingleItemFields = [\n text,\n value$1\n ];\n const listBoxNestedItemFields = [\n text,\n requiredArrayOf('items', thunkOf('items', () => listBoxItemSchema))\n ];\n const listBoxItemSchema = oneOf([\n objOf(listBoxSingleItemFields),\n objOf(listBoxNestedItemFields)\n ]);\n const listBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOf('items', listBoxItemSchema),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const listBoxSchema = objOf(listBoxFields);\n const listBoxDataProcessor = string;\n\n const selectBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOfObj('items', [\n text,\n value$1\n ]),\n defaultedNumber('size', 1),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const selectBoxSchema = objOf(selectBoxFields);\n const selectBoxDataProcessor = string;\n\n const sizeInputFields = formComponentWithLabelFields.concat([\n defaultedBoolean('constrain', true),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const sizeInputSchema = objOf(sizeInputFields);\n const sizeInputDataProcessor = objOf([\n requiredString('width'),\n requiredString('height')\n ]);\n\n const sliderFields = formComponentFields.concat([\n label,\n defaultedNumber('min', 0),\n defaultedNumber('max', 0)\n ]);\n const sliderSchema = objOf(sliderFields);\n const sliderInputDataProcessor = number;\n\n const tableFields = [\n type,\n requiredArrayOf('header', string),\n requiredArrayOf('cells', arrOf(string))\n ];\n const tableSchema = objOf(tableFields);\n\n const textAreaFields = formComponentWithLabelFields.concat([\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n enabled,\n defaultedString('context', 'mode:design')\n ]);\n const textAreaSchema = objOf(textAreaFields);\n const textAreaDataProcessor = string;\n\n const baseTreeItemFields = [\n requiredStringEnum('type', [\n 'directory',\n 'leaf'\n ]),\n title,\n requiredString('id'),\n optionOf('menu', MenuButtonSchema),\n optionString('customStateIcon'),\n optionString('customStateIconTooltip')\n ];\n const treeItemLeafFields = baseTreeItemFields;\n const treeItemLeafSchema = objOf(treeItemLeafFields);\n const treeItemDirectoryFields = baseTreeItemFields.concat([requiredArrayOf('children', thunkOf('children', () => {\n return choose$2('type', {\n directory: treeItemDirectorySchema,\n leaf: treeItemLeafSchema\n });\n }))]);\n const treeItemDirectorySchema = objOf(treeItemDirectoryFields);\n const treeItemSchema = choose$2('type', {\n directory: treeItemDirectorySchema,\n leaf: treeItemLeafSchema\n });\n const treeFields = [\n type,\n requiredArrayOf('items', treeItemSchema),\n optionFunction('onLeafAction'),\n optionFunction('onToggleExpand'),\n defaultedArrayOf('defaultExpandedIds', [], string),\n optionString('defaultSelectedId')\n ];\n const treeSchema = objOf(treeFields);\n\n const urlInputFields = formComponentWithLabelFields.concat([\n defaultedStringEnum('filetype', 'file', [\n 'image',\n 'media',\n 'file'\n ]),\n enabled,\n optionString('picker_text'),\n defaultedString('context', 'mode:design')\n ]);\n const urlInputSchema = objOf(urlInputFields);\n const urlInputDataProcessor = objOf([\n value$1,\n defaultedMeta\n ]);\n\n const createItemsField = name => field$1('items', 'items', required$2(), arrOf(valueOf(v => asRaw(`Checking item of ${ name }`, itemSchema, v).fold(sErr => Result.error(formatError(sErr)), passValue => Result.value(passValue)))));\n const itemSchema = valueThunk(() => choose$2('type', {\n alertbanner: alertBannerSchema,\n bar: objOf(createBarFields(createItemsField('bar'))),\n button: buttonSchema,\n checkbox: checkboxSchema,\n colorinput: colorInputSchema,\n colorpicker: colorPickerSchema,\n dropzone: dropZoneSchema,\n grid: objOf(createGridFields(createItemsField('grid'))),\n iframe: iframeSchema,\n input: inputSchema,\n listbox: listBoxSchema,\n selectbox: selectBoxSchema,\n sizeinput: sizeInputSchema,\n slider: sliderSchema,\n textarea: textAreaSchema,\n urlinput: urlInputSchema,\n customeditor: customEditorSchema,\n htmlpanel: htmlPanelSchema,\n imagepreview: imagePreviewSchema,\n collection: collectionSchema,\n label: objOf(createLabelFields(createItemsField('label'))),\n table: tableSchema,\n tree: treeSchema,\n panel: panelSchema\n }));\n const panelFields = [\n type,\n defaulted('classes', []),\n requiredArrayOf('items', itemSchema)\n ];\n const panelSchema = objOf(panelFields);\n\n const tabFields = [\n generatedName('tab'),\n title,\n requiredArrayOf('items', itemSchema)\n ];\n const tabPanelFields = [\n type,\n requiredArrayOfObj('tabs', tabFields)\n ];\n const tabPanelSchema = objOf(tabPanelFields);\n\n const dialogButtonFields = dialogFooterButtonFields;\n const dialogButtonSchema = dialogFooterButtonSchema;\n const dialogSchema = objOf([\n requiredString('title'),\n requiredOf('body', choose$2('type', {\n panel: panelSchema,\n tabpanel: tabPanelSchema\n })),\n defaultedString('size', 'normal'),\n defaultedArrayOf('buttons', [], dialogButtonSchema),\n defaulted('initialData', {}),\n defaultedFunction('onAction', noop),\n defaultedFunction('onChange', noop),\n defaultedFunction('onSubmit', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onTabChange', noop)\n ]);\n const createDialog = spec => asRaw('dialog', dialogSchema, spec);\n\n const urlDialogButtonSchema = objOf([\n requiredStringEnum('type', [\n 'cancel',\n 'custom'\n ]),\n ...dialogButtonFields\n ]);\n const urlDialogSchema = objOf([\n requiredString('title'),\n requiredString('url'),\n optionNumber('height'),\n optionNumber('width'),\n optionArrayOf('buttons', urlDialogButtonSchema),\n defaultedFunction('onAction', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onMessage', noop)\n ]);\n const createUrlDialog = spec => asRaw('dialog', urlDialogSchema, spec);\n\n const getAllObjects = obj => {\n if (isObject(obj)) {\n return [obj].concat(bind$3(values(obj), getAllObjects));\n } else if (isArray(obj)) {\n return bind$3(obj, getAllObjects);\n } else {\n return [];\n }\n };\n\n const isNamedItem = obj => isString(obj.type) && isString(obj.name);\n const dataProcessors = {\n checkbox: checkboxDataProcessor,\n colorinput: colorInputDataProcessor,\n colorpicker: colorPickerDataProcessor,\n dropzone: dropZoneDataProcessor,\n input: inputDataProcessor,\n iframe: iframeDataProcessor,\n imagepreview: imagePreviewDataProcessor,\n selectbox: selectBoxDataProcessor,\n sizeinput: sizeInputDataProcessor,\n slider: sliderInputDataProcessor,\n listbox: listBoxDataProcessor,\n size: sizeInputDataProcessor,\n textarea: textAreaDataProcessor,\n urlinput: urlInputDataProcessor,\n customeditor: customEditorDataProcessor,\n collection: collectionDataProcessor,\n togglemenuitem: dialogToggleMenuItemDataProcessor\n };\n const getDataProcessor = item => Optional.from(dataProcessors[item.type]);\n const getNamedItems = structure => filter$2(getAllObjects(structure), isNamedItem);\n\n const createDataValidator = structure => {\n const namedItems = getNamedItems(structure);\n const fields = bind$3(namedItems, item => getDataProcessor(item).fold(() => [], schema => [requiredOf(item.name, schema)]));\n return objOf(fields);\n };\n\n const extract = structure => {\n var _a;\n const internalDialog = getOrDie(createDialog(structure));\n const dataValidator = createDataValidator(structure);\n const initialData = (_a = structure.initialData) !== null && _a !== void 0 ? _a : {};\n return {\n internalDialog,\n dataValidator,\n initialData\n };\n };\n const DialogManager = {\n open: (factory, structure) => {\n const extraction = extract(structure);\n return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n },\n openUrl: (factory, structure) => {\n const internalDialog = getOrDie(createUrlDialog(structure));\n return factory(internalDialog);\n },\n redial: structure => extract(structure)\n };\n\n const events = (reflectingConfig, reflectingState) => {\n const update = (component, data) => {\n reflectingConfig.updateState.each(updateState => {\n const newState = updateState(component, data);\n reflectingState.set(newState);\n });\n reflectingConfig.renderComponents.each(renderComponents => {\n const newComponents = renderComponents(data, reflectingState.get());\n const replacer = reflectingConfig.reuseDom ? withReuse : withoutReuse;\n replacer(component, newComponents);\n });\n };\n return derive$2([\n run$1(receive(), (component, message) => {\n const receivingData = message;\n if (!receivingData.universal) {\n const channel = reflectingConfig.channel;\n if (contains$2(receivingData.channels, channel)) {\n update(component, receivingData.data);\n }\n }\n }),\n runOnAttached((comp, _se) => {\n reflectingConfig.initialData.each(rawData => {\n update(comp, rawData);\n });\n })\n ]);\n };\n\n var ActiveReflecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events\n });\n\n const getState = (component, replaceConfig, reflectState) => reflectState;\n\n var ReflectingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getState: getState\n });\n\n var ReflectingSchema = [\n required$1('channel'),\n option$3('renderComponents'),\n option$3('updateState'),\n option$3('initialData'),\n defaultedBoolean('reuseDom', true)\n ];\n\n const init = () => {\n const cell = Cell(Optional.none());\n const clear = () => cell.set(Optional.none());\n const readState = () => cell.get().getOr('none');\n return {\n readState,\n get: cell.get,\n set: cell.set,\n clear\n };\n };\n\n var ReflectingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init\n });\n\n const Reflecting = create$4({\n fields: ReflectingSchema,\n name: 'reflecting',\n active: ActiveReflecting,\n apis: ReflectingApis,\n state: ReflectingState\n });\n\n const toValidValues = values => {\n const errors = [];\n const result = {};\n each(values, (value, name) => {\n value.fold(() => {\n errors.push(name);\n }, v => {\n result[name] = v;\n });\n });\n return errors.length > 0 ? Result.error(errors) : Result.value(result);\n };\n\n const renderBodyPanel = (spec, dialogData, backstage, getCompByName) => {\n const memForm = record(Form.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-form'].concat(spec.classes)\n },\n components: map$2(spec.items, item => interpretInForm(parts, item, dialogData, backstage, getCompByName))\n })));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [memForm.asSpec()]\n }],\n behaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n ComposingConfigs.memento(memForm),\n memento(memForm, {\n postprocess: formValue => toValidValues(formValue).fold(err => {\n console.error(err);\n return {};\n }, identity)\n }),\n config('dialog-body-panel', [run$1(focusin(), (comp, se) => {\n comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { newFocus: Optional.some(se.event.target) });\n })])\n ])\n };\n };\n\n const factory$3 = (detail, _spec) => ({\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events$9(detail.action),\n behaviours: augment(detail.tabButtonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n })\n ]),\n domModification: detail.domModification\n });\n const TabButton = single({\n name: 'TabButton',\n configFields: [\n defaulted('uid', undefined),\n required$1('value'),\n field$1('dom', 'dom', mergeWithThunk(() => ({\n attributes: {\n 'role': 'tab',\n 'id': generate$6('aria'),\n 'aria-selected': 'false'\n }\n })), anyValue()),\n option$3('action'),\n defaulted('domModification', {}),\n field('tabButtonBehaviours', [\n Focusing,\n Keying,\n Representing\n ]),\n required$1('view')\n ],\n factory: factory$3\n });\n\n const schema$1 = constant$1([\n required$1('tabs'),\n required$1('dom'),\n defaulted('clickToDismiss', false),\n field('tabbarBehaviours', [\n Highlighting,\n Keying\n ]),\n markers$1([\n 'tabClass',\n 'selectedClass'\n ])\n ]);\n const tabsPart = group({\n factory: TabButton,\n name: 'tabs',\n unit: 'tab',\n overrides: barDetail => {\n const dismissTab$1 = (tabbar, button) => {\n Highlighting.dehighlight(tabbar, button);\n emitWith(tabbar, dismissTab(), {\n tabbar,\n button\n });\n };\n const changeTab$1 = (tabbar, button) => {\n Highlighting.highlight(tabbar, button);\n emitWith(tabbar, changeTab(), {\n tabbar,\n button\n });\n };\n return {\n action: button => {\n const tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();\n const activeButton = Highlighting.isHighlighted(tabbar, button);\n const response = (() => {\n if (activeButton && barDetail.clickToDismiss) {\n return dismissTab$1;\n } else if (!activeButton) {\n return changeTab$1;\n } else {\n return noop;\n }\n })();\n response(tabbar, button);\n },\n domModification: { classes: [barDetail.markers.tabClass] }\n };\n }\n });\n const parts$1 = constant$1([tabsPart]);\n\n const factory$2 = (detail, components, _spec, _externals) => ({\n 'uid': detail.uid,\n 'dom': detail.dom,\n components,\n 'debug.sketcher': 'Tabbar',\n 'domModification': { attributes: { role: 'tablist' } },\n 'behaviours': augment(detail.tabbarBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedClass,\n itemClass: detail.markers.tabClass,\n onHighlight: (tabbar, tab) => {\n set$9(tab.element, 'aria-selected', 'true');\n },\n onDehighlight: (tabbar, tab) => {\n set$9(tab.element, 'aria-selected', 'false');\n }\n }),\n Keying.config({\n mode: 'flow',\n getInitial: tabbar => {\n return Highlighting.getHighlighted(tabbar).map(tab => tab.element);\n },\n selector: '.' + detail.markers.tabClass,\n executeOnMove: true\n })\n ])\n });\n const Tabbar = composite({\n name: 'Tabbar',\n configFields: schema$1(),\n partFields: parts$1(),\n factory: factory$2\n });\n\n const factory$1 = (detail, _spec) => ({\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n domModification: { attributes: { role: 'tabpanel' } }\n });\n const Tabview = single({\n name: 'Tabview',\n configFields: [field('tabviewBehaviours', [Replacing])],\n factory: factory$1\n });\n\n const schema = constant$1([\n defaulted('selectFirst', true),\n onHandler('onChangeTab'),\n onHandler('onDismissTab'),\n defaulted('tabs', []),\n field('tabSectionBehaviours', [])\n ]);\n const barPart = required({\n factory: Tabbar,\n schema: [\n required$1('dom'),\n requiredObjOf('markers', [\n required$1('tabClass'),\n required$1('selectedClass')\n ])\n ],\n name: 'tabbar',\n defaults: detail => {\n return { tabs: detail.tabs };\n }\n });\n const viewPart = required({\n factory: Tabview,\n name: 'tabview'\n });\n const parts = constant$1([\n barPart,\n viewPart\n ]);\n\n const factory = (detail, components, _spec, _externals) => {\n const changeTab$1 = button => {\n const tabValue = Representing.getValue(button);\n getPart(button, detail, 'tabview').each(tabview => {\n const tabWithValue = find$5(detail.tabs, t => t.value === tabValue);\n tabWithValue.each(tabData => {\n const panel = tabData.view();\n getOpt(button.element, 'id').each(id => {\n set$9(tabview.element, 'aria-labelledby', id);\n });\n Replacing.set(tabview, panel);\n detail.onChangeTab(tabview, button, panel);\n });\n });\n };\n const changeTabBy = (section, byPred) => {\n getPart(section, detail, 'tabbar').each(tabbar => {\n byPred(tabbar).each(emitExecute);\n });\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: get$4(detail.tabSectionBehaviours),\n events: derive$2(flatten([\n detail.selectFirst ? [runOnAttached((section, _simulatedEvent) => {\n changeTabBy(section, Highlighting.getFirst);\n })] : [],\n [\n run$1(changeTab(), (section, simulatedEvent) => {\n const button = simulatedEvent.event.button;\n changeTab$1(button);\n }),\n run$1(dismissTab(), (section, simulatedEvent) => {\n const button = simulatedEvent.event.button;\n detail.onDismissTab(section, button);\n })\n ]\n ])),\n apis: {\n getViewItems: section => {\n return getPart(section, detail, 'tabview').map(tabview => Replacing.contents(tabview)).getOr([]);\n },\n showTab: (section, tabKey) => {\n const getTabIfNotActive = tabbar => {\n const candidates = Highlighting.getCandidates(tabbar);\n const optTab = find$5(candidates, c => Representing.getValue(c) === tabKey);\n return optTab.filter(tab => !Highlighting.isHighlighted(tabbar, tab));\n };\n changeTabBy(section, getTabIfNotActive);\n }\n }\n };\n };\n const TabSection = composite({\n name: 'TabSection',\n configFields: schema(),\n partFields: parts(),\n factory,\n apis: {\n getViewItems: (apis, component) => apis.getViewItems(component),\n showTab: (apis, component, tabKey) => {\n apis.showTab(component, tabKey);\n }\n }\n });\n\n const measureHeights = (allTabs, tabview, tabviewComp) => map$2(allTabs, (_tab, i) => {\n Replacing.set(tabviewComp, allTabs[i].view());\n const rect = tabview.dom.getBoundingClientRect();\n Replacing.set(tabviewComp, []);\n return rect.height;\n });\n const getMaxHeight = heights => head(sort(heights, (a, b) => {\n if (a > b) {\n return -1;\n } else if (a < b) {\n return +1;\n } else {\n return 0;\n }\n }));\n const getMaxTabviewHeight = (dialog, tabview, tablist) => {\n const documentElement$1 = documentElement(dialog).dom;\n const rootElm = ancestor(dialog, '.tox-dialog-wrap').getOr(dialog);\n const isFixed = get$f(rootElm, 'position') === 'fixed';\n let maxHeight;\n if (isFixed) {\n maxHeight = Math.max(documentElement$1.clientHeight, window.innerHeight);\n } else {\n maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n }\n const tabviewHeight = get$e(tabview);\n const isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$d(tablist);\n const currentTabHeight = isTabListBeside ? Math.max(get$e(tablist), tabviewHeight) : tabviewHeight;\n const dialogTopMargin = parseInt(get$f(dialog, 'margin-top'), 10) || 0;\n const dialogBottomMargin = parseInt(get$f(dialog, 'margin-bottom'), 10) || 0;\n const dialogHeight = get$e(dialog) + dialogTopMargin + dialogBottomMargin;\n const chromeHeight = dialogHeight - currentTabHeight;\n return maxHeight - chromeHeight;\n };\n const showTab = (allTabs, comp) => {\n head(allTabs).each(tab => TabSection.showTab(comp, tab.value));\n };\n const setTabviewHeight = (tabview, height) => {\n set$8(tabview, 'height', height + 'px');\n set$8(tabview, 'flex-basis', height + 'px');\n };\n const updateTabviewHeight = (dialogBody, tabview, maxTabHeight) => {\n ancestor(dialogBody, '[role=\"dialog\"]').each(dialog => {\n descendant(dialog, '[role=\"tablist\"]').each(tablist => {\n maxTabHeight.get().map(height => {\n set$8(tabview, 'height', '0');\n set$8(tabview, 'flex-basis', '0');\n return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist));\n }).each(height => {\n setTabviewHeight(tabview, height);\n });\n });\n });\n };\n const getTabview = dialog => descendant(dialog, '[role=\"tabpanel\"]');\n const smartMode = allTabs => {\n const maxTabHeight = value$4();\n const extraEvents = [\n runOnAttached(comp => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n set$8(tabview, 'visibility', 'hidden');\n comp.getSystem().getByDom(tabview).toOptional().each(tabviewComp => {\n const heights = measureHeights(allTabs, tabview, tabviewComp);\n const maxTabHeightOpt = getMaxHeight(heights);\n maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set);\n });\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n remove$7(tabview, 'visibility');\n showTab(allTabs, comp);\n requestAnimationFrame(() => {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n });\n }),\n run$1(windowResize(), comp => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n }),\n run$1(formResizeEvent, (comp, _se) => {\n const dialog = comp.element;\n getTabview(dialog).each(tabview => {\n const oldFocus = active$1(getRootNode(tabview));\n set$8(tabview, 'visibility', 'hidden');\n const oldHeight = getRaw(tabview, 'height').map(h => parseInt(h, 10));\n remove$7(tabview, 'height');\n remove$7(tabview, 'flex-basis');\n const newHeight = tabview.dom.getBoundingClientRect().height;\n const hasGrown = oldHeight.forall(h => newHeight > h);\n if (hasGrown) {\n maxTabHeight.set(newHeight);\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n } else {\n oldHeight.each(h => {\n setTabviewHeight(tabview, h);\n });\n }\n remove$7(tabview, 'visibility');\n oldFocus.each(focus$3);\n });\n })\n ];\n const selectFirst = false;\n return {\n extraEvents,\n selectFirst\n };\n };\n\n const SendDataToSectionChannel = 'send-data-to-section';\n const SendDataToViewChannel = 'send-data-to-view';\n const renderTabPanel = (spec, dialogData, backstage, getCompByName) => {\n const storedValue = Cell({});\n const updateDataWithForm = form => {\n const formData = Representing.getValue(form);\n const validData = toValidValues(formData).getOr({});\n const currentData = storedValue.get();\n const newData = deepMerge(currentData, validData);\n storedValue.set(newData);\n };\n const setDataOnForm = form => {\n const tabData = storedValue.get();\n Representing.setValue(form, tabData);\n };\n const oldTab = Cell(null);\n const allTabs = map$2(spec.tabs, tab => {\n return {\n value: tab.name,\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav-item']\n },\n components: [text$2(backstage.shared.providers.translate(tab.title))],\n view: () => {\n return [Form.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-form']\n },\n components: map$2(tab.items, item => interpretInForm(parts, item, dialogData, backstage, getCompByName)),\n formBehaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n }),\n config('TabView.form.events', [\n runOnAttached(setDataOnForm),\n runOnDetached(updateDataWithForm)\n ]),\n Receiving.config({\n channels: wrapAll([\n {\n key: SendDataToSectionChannel,\n value: { onReceive: updateDataWithForm }\n },\n {\n key: SendDataToViewChannel,\n value: { onReceive: setDataOnForm }\n }\n ])\n })\n ])\n }))];\n }\n };\n });\n const tabMode = smartMode(allTabs);\n return TabSection.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n onChangeTab: (section, button, _viewItems) => {\n const name = Representing.getValue(button);\n emitWith(section, formTabChangeEvent, {\n name,\n oldName: oldTab.get()\n });\n oldTab.set(name);\n },\n tabs: allTabs,\n components: [\n TabSection.parts.tabbar({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav']\n },\n components: [Tabbar.parts.tabs({})],\n markers: {\n tabClass: 'tox-tab',\n selectedClass: 'tox-dialog__body-nav-item--active'\n },\n tabbarBehaviours: derive$1([Tabstopping.config({})])\n }),\n TabSection.parts.tabview({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n }\n })\n ],\n selectFirst: tabMode.selectFirst,\n tabSectionBehaviours: derive$1([\n config('tabpanel', tabMode.extraEvents),\n Keying.config({ mode: 'acyclic' }),\n Composing.config({ find: comp => head(TabSection.getViewItems(comp)) }),\n withComp(Optional.none(), tsection => {\n tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n return storedValue.get();\n }, (tsection, value) => {\n storedValue.set(value);\n tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n })\n ])\n });\n };\n\n const renderBody = (spec, dialogId, contentId, backstage, ariaAttrs, getCompByName) => {\n const renderComponents = incoming => {\n const body = incoming.body;\n switch (body.type) {\n case 'tabpanel': {\n return [renderTabPanel(body, incoming.initialData, backstage, getCompByName)];\n }\n default: {\n return [renderBodyPanel(body, incoming.initialData, backstage, getCompByName)];\n }\n }\n };\n const updateState = (_comp, incoming) => Optional.some({ isTabPanel: () => incoming.body.type === 'tabpanel' });\n const ariaAttributes = { 'aria-live': 'polite' };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js'],\n attributes: {\n ...contentId.map(x => ({ id: x })).getOr({}),\n ...ariaAttrs ? ariaAttributes : {}\n }\n },\n components: [],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n Reflecting.config({\n channel: `${ bodyChannel }-${ dialogId }`,\n updateState,\n renderComponents,\n initialData: spec\n })\n ])\n };\n };\n const renderInlineBody = (spec, dialogId, contentId, backstage, ariaAttrs, getCompByName) => renderBody(spec, dialogId, Optional.some(contentId), backstage, ariaAttrs, getCompByName);\n const renderModalBody = (spec, dialogId, backstage, getCompByName) => {\n const bodySpec = renderBody(spec, dialogId, Optional.none(), backstage, false, getCompByName);\n return ModalDialog.parts.body(bodySpec);\n };\n const renderIframeBody = spec => {\n const bodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-iframe']\n },\n components: [craft(Optional.none(), {\n dom: {\n tag: 'iframe',\n attributes: { src: spec.url }\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n })]\n }],\n behaviours: derive$1([Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(isPseudoStop)\n })])\n };\n return ModalDialog.parts.body(bodySpec);\n };\n\n const isTouch = global$6.deviceType.isTouch();\n const hiddenHeader = (title, close) => ({\n dom: {\n tag: 'div',\n styles: { display: 'none' },\n classes: ['tox-dialog__header']\n },\n components: [\n title,\n close\n ]\n });\n const pClose = (onClose, providersBackstage) => ModalDialog.parts.close(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close')\n }\n },\n action: onClose,\n buttonBehaviours: derive$1([Tabstopping.config({})])\n }));\n const pUntitled = () => ModalDialog.parts.title({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n innerHtml: '',\n styles: { display: 'none' }\n }\n });\n const pBodyMessage = (message, providersBackstage) => ModalDialog.parts.body({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [{ dom: fromHtml(`

    ${ sanitizeHtmlString(providersBackstage.translate(message)) }

    `) }]\n }]\n });\n const pFooter = buttons => ModalDialog.parts.footer({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer']\n },\n components: buttons\n });\n const pFooterGroup = (startButtons, endButtons) => [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-start']\n },\n components: startButtons\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-end']\n },\n components: endButtons\n })\n ];\n const renderDialog$1 = spec => {\n const dialogClass = 'tox-dialog';\n const blockerClass = dialogClass + '-wrap';\n const blockerBackdropClass = blockerClass + '__backdrop';\n const scrollLockClass = dialogClass + '__disable-scroll';\n return ModalDialog.sketch({\n lazySink: spec.lazySink,\n onEscape: comp => {\n spec.onEscape(comp);\n return Optional.some(true);\n },\n useTabstopAt: elem => !isPseudoStop(elem),\n firstTabstop: spec.firstTabstop,\n dom: {\n tag: 'div',\n classes: [dialogClass].concat(spec.extraClasses),\n styles: {\n position: 'relative',\n ...spec.extraStyles\n }\n },\n components: [\n spec.header,\n spec.body,\n ...spec.footer.toArray()\n ],\n parts: {\n blocker: {\n dom: fromHtml(`
    `),\n components: [{\n dom: {\n tag: 'div',\n classes: isTouch ? [\n blockerBackdropClass,\n blockerBackdropClass + '--opaque'\n ] : [blockerBackdropClass]\n }\n }]\n }\n },\n dragBlockClass: blockerClass,\n modalBehaviours: derive$1([\n Focusing.config({}),\n config('dialog-events', spec.dialogEvents.concat([\n runOnSource(focusin(), (comp, _se) => {\n Blocking.isBlocked(comp) ? noop() : Keying.focusIn(comp);\n }),\n run$1(focusShifted(), (comp, se) => {\n comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { newFocus: se.event.newFocus });\n })\n ])),\n config('scroll-lock', [\n runOnAttached(() => {\n add$2(body(), scrollLockClass);\n }),\n runOnDetached(() => {\n remove$3(body(), scrollLockClass);\n })\n ]),\n ...spec.extraBehaviours\n ]),\n eventOrder: {\n [execute$5()]: ['dialog-events'],\n [attachedToDom()]: [\n 'scroll-lock',\n 'dialog-events',\n 'alloy.base.behaviour'\n ],\n [detachedFromDom()]: [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'scroll-lock'\n ],\n ...spec.eventOrder\n }\n });\n };\n\n const renderClose = providersBackstage => Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close'),\n 'data-mce-name': 'close'\n }\n },\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate('Close') }))\n ]),\n components: [render$3('close', {\n tag: 'span',\n classes: ['tox-icon']\n }, providersBackstage.icons)],\n action: comp => {\n emit(comp, formCancelEvent);\n }\n });\n const renderTitle = (spec, dialogId, titleId, providersBackstage) => {\n const renderComponents = data => [text$2(providersBackstage.translate(data.title))];\n return {\n dom: {\n tag: 'h1',\n classes: ['tox-dialog__title'],\n attributes: { ...titleId.map(x => ({ id: x })).getOr({}) }\n },\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: `${ titleChannel }-${ dialogId }`,\n initialData: spec,\n renderComponents\n })])\n };\n };\n const renderDragHandle = () => ({ dom: fromHtml('
    ') });\n const renderInlineHeader = (spec, dialogId, titleId, providersBackstage) => Container.sketch({\n dom: fromHtml('
    '),\n components: [\n renderTitle(spec, dialogId, Optional.some(titleId), providersBackstage),\n renderDragHandle(),\n renderClose(providersBackstage)\n ],\n containerBehaviours: derive$1([Dragging.config({\n mode: 'mouse',\n blockerClass: 'blocker',\n getTarget: handle => {\n return closest$1(handle, '[role=\"dialog\"]').getOrDie();\n },\n snaps: {\n getSnapPoints: () => [],\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top'\n }\n })])\n });\n const renderModalHeader = (spec, dialogId, providersBackstage) => {\n const pTitle = ModalDialog.parts.title(renderTitle(spec, dialogId, Optional.none(), providersBackstage));\n const pHandle = ModalDialog.parts.draghandle(renderDragHandle());\n const pClose = ModalDialog.parts.close(renderClose(providersBackstage));\n const components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]);\n return Container.sketch({\n dom: fromHtml('
    '),\n components\n });\n };\n\n const getHeader = (title, dialogId, backstage) => renderModalHeader({\n title: backstage.shared.providers.translate(title),\n draggable: backstage.dialog.isDraggableModal()\n }, dialogId, backstage.shared.providers);\n const getBusySpec = (message, bs, providers, headerHeight) => ({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__busy-spinner'],\n attributes: { 'aria-label': providers.translate(message) },\n styles: {\n left: '0px',\n right: '0px',\n bottom: '0px',\n top: `${ headerHeight.getOr(0) }px`,\n position: 'absolute'\n }\n },\n behaviours: bs,\n components: [{ dom: fromHtml('
    ') }]\n });\n const getEventExtras = (lazyDialog, providers, extra) => ({\n onClose: () => extra.closeWindow(),\n onBlock: blockEvent => {\n const headerHeight = descendant(lazyDialog().element, '.tox-dialog__header').map(header => get$e(header));\n ModalDialog.setBusy(lazyDialog(), (_comp, bs) => getBusySpec(blockEvent.message, bs, providers, headerHeight));\n },\n onUnblock: () => {\n ModalDialog.setIdle(lazyDialog());\n }\n });\n const fullscreenClass = 'tox-dialog--fullscreen';\n const largeDialogClass = 'tox-dialog--width-lg';\n const mediumDialogClass = 'tox-dialog--width-md';\n const getDialogSizeClass = size => {\n switch (size) {\n case 'large':\n return Optional.some(largeDialogClass);\n case 'medium':\n return Optional.some(mediumDialogClass);\n default:\n return Optional.none();\n }\n };\n const updateDialogSizeClass = (size, component) => {\n const dialogBody = SugarElement.fromDom(component.element.dom);\n if (!has(dialogBody, fullscreenClass)) {\n remove$2(dialogBody, [\n largeDialogClass,\n mediumDialogClass\n ]);\n getDialogSizeClass(size).each(dialogSizeClass => add$2(dialogBody, dialogSizeClass));\n }\n };\n const toggleFullscreen = (comp, currentSize) => {\n const dialogBody = SugarElement.fromDom(comp.element.dom);\n const classes = get$9(dialogBody);\n const currentSizeClass = find$5(classes, c => c === largeDialogClass || c === mediumDialogClass).or(getDialogSizeClass(currentSize));\n toggle$3(dialogBody, [\n fullscreenClass,\n ...currentSizeClass.toArray()\n ]);\n };\n const renderModalDialog = (spec, dialogEvents, backstage) => build$1(renderDialog$1({\n ...spec,\n firstTabstop: 1,\n lazySink: backstage.shared.getSink,\n extraBehaviours: [\n memory({}),\n ...spec.extraBehaviours\n ],\n onEscape: comp => {\n emit(comp, formCancelEvent);\n },\n dialogEvents,\n eventOrder: {\n [receive()]: [\n Reflecting.name(),\n Receiving.name()\n ],\n [attachedToDom()]: [\n 'scroll-lock',\n Reflecting.name(),\n 'messages',\n 'dialog-events',\n 'alloy.base.behaviour'\n ],\n [detachedFromDom()]: [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'messages',\n Reflecting.name(),\n 'scroll-lock'\n ]\n }\n }));\n const mapMenuButtons = (buttons, menuItemStates = {}) => {\n const mapItems = button => {\n const items = map$2(button.items, item => {\n const cell = get$h(menuItemStates, item.name).getOr(Cell(false));\n return {\n ...item,\n storage: cell\n };\n });\n return {\n ...button,\n items\n };\n };\n return map$2(buttons, button => {\n return button.type === 'menu' ? mapItems(button) : button;\n });\n };\n const extractCellsToObject = buttons => foldl(buttons, (acc, button) => {\n if (button.type === 'menu') {\n const menuButton = button;\n return foldl(menuButton.items, (innerAcc, item) => {\n innerAcc[item.name] = item.storage;\n return innerAcc;\n }, acc);\n }\n return acc;\n }, {});\n\n const initCommonEvents = (fireApiEvent, extras) => [\n runWithTarget(focusin(), onFocus),\n fireApiEvent(formCloseEvent, (_api, spec, _event, self) => {\n if (hasFocus(self.element)) {\n active$1(getRootNode(self.element)).each(blur$1);\n }\n extras.onClose();\n spec.onClose();\n }),\n fireApiEvent(formCancelEvent, (api, spec, _event, self) => {\n spec.onCancel(api);\n emit(self, formCloseEvent);\n }),\n run$1(formUnblockEvent, (_c, _se) => extras.onUnblock()),\n run$1(formBlockEvent, (_c, se) => extras.onBlock(se.event))\n ];\n const initUrlDialog = (getInstanceApi, extras) => {\n const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n withSpec(c, (spec, _c) => {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n const withSpec = (c, f) => {\n Reflecting.getState(c).get().each(currentDialog => {\n f(currentDialog, c);\n });\n };\n return [\n ...initCommonEvents(fireApiEvent, extras),\n fireApiEvent(formActionEvent, (api, spec, event) => {\n spec.onAction(api, { name: event.name });\n })\n ];\n };\n const initDialog = (getInstanceApi, extras, getSink) => {\n const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n withSpec(c, (spec, _c) => {\n f(getInstanceApi(), spec, se.event, c);\n });\n });\n const withSpec = (c, f) => {\n Reflecting.getState(c).get().each(currentDialogInit => {\n f(currentDialogInit.internalDialog, c);\n });\n };\n return [\n ...initCommonEvents(fireApiEvent, extras),\n fireApiEvent(formSubmitEvent, (api, spec) => spec.onSubmit(api)),\n fireApiEvent(formChangeEvent, (api, spec, event) => {\n spec.onChange(api, { name: event.name });\n }),\n fireApiEvent(formActionEvent, (api, spec, event, component) => {\n const focusIn = () => component.getSystem().isConnected() ? Keying.focusIn(component) : undefined;\n const isDisabled = focused => has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(val => val === 'true');\n const rootNode = getRootNode(component.element);\n const current = active$1(rootNode);\n spec.onAction(api, {\n name: event.name,\n value: event.value\n });\n active$1(rootNode).fold(focusIn, focused => {\n if (isDisabled(focused)) {\n focusIn();\n } else if (current.exists(cur => contains(focused, cur) && isDisabled(cur))) {\n focusIn();\n } else {\n getSink().toOptional().filter(sink => !contains(sink.element, focused)).each(focusIn);\n }\n });\n }),\n fireApiEvent(formTabChangeEvent, (api, spec, event) => {\n spec.onTabChange(api, {\n newTabName: event.name,\n oldTabName: event.oldName\n });\n }),\n runOnDetached(component => {\n const api = getInstanceApi();\n Representing.setValue(component, api.getData());\n })\n ];\n };\n\n const makeButton = (button, backstage) => renderFooterButton(button, button.type, backstage);\n const lookup = (compInSystem, footerButtons, buttonName) => find$5(footerButtons, button => button.name === buttonName).bind(memButton => memButton.memento.getOpt(compInSystem));\n const renderComponents = (_data, state) => {\n const footerButtons = state.map(s => s.footerButtons).getOr([]);\n const buttonGroups = partition$3(footerButtons, button => button.align === 'start');\n const makeGroup = (edge, buttons) => Container.sketch({\n dom: {\n tag: 'div',\n classes: [`tox-dialog__footer-${ edge }`]\n },\n components: map$2(buttons, button => button.memento.asSpec())\n });\n const startButtons = makeGroup('start', buttonGroups.pass);\n const endButtons = makeGroup('end', buttonGroups.fail);\n return [\n startButtons,\n endButtons\n ];\n };\n const renderFooter = (initSpec, dialogId, backstage) => {\n const updateState = (comp, data) => {\n const footerButtons = map$2(data.buttons, button => {\n const memButton = record(makeButton(button, backstage));\n return {\n name: button.name,\n align: button.align,\n memento: memButton\n };\n });\n const lookupByName = buttonName => lookup(comp, footerButtons, buttonName);\n return Optional.some({\n lookupByName,\n footerButtons\n });\n };\n return {\n dom: fromHtml('
    '),\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: `${ footerChannel }-${ dialogId }`,\n initialData: initSpec,\n updateState,\n renderComponents\n })])\n };\n };\n const renderInlineFooter = (initSpec, dialogId, backstage) => renderFooter(initSpec, dialogId, backstage);\n const renderModalFooter = (initSpec, dialogId, backstage) => ModalDialog.parts.footer(renderFooter(initSpec, dialogId, backstage));\n\n const getCompByName = (access, name) => {\n const root = access.getRoot();\n if (root.getSystem().isConnected()) {\n const form = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n return Form.getField(form, name).orThunk(() => {\n const footer = access.getFooter();\n const footerState = footer.bind(f => Reflecting.getState(f).get());\n return footerState.bind(f => f.lookupByName(name));\n });\n } else {\n return Optional.none();\n }\n };\n const validateData$1 = (access, data) => {\n const root = access.getRoot();\n return Reflecting.getState(root).get().map(dialogState => getOrDie(asRaw('data', dialogState.dataValidator, data))).getOr(data);\n };\n const getDialogApi = (access, doRedial, menuItemStates) => {\n const withRoot = f => {\n const root = access.getRoot();\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n const getData = () => {\n const root = access.getRoot();\n const valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root;\n const representedValues = Representing.getValue(valueComp);\n const menuItemCurrentState = map$1(menuItemStates, cell => cell.get());\n return {\n ...representedValues,\n ...menuItemCurrentState\n };\n };\n const setData = newData => {\n withRoot(_ => {\n const prevData = instanceApi.getData();\n const mergedData = deepMerge(prevData, newData);\n const newInternalData = validateData$1(access, mergedData);\n const form = access.getFormWrapper();\n Representing.setValue(form, newInternalData);\n each(menuItemStates, (v, k) => {\n if (has$2(mergedData, k)) {\n v.set(mergedData[k]);\n }\n });\n });\n };\n const setEnabled = (name, state) => {\n getCompByName(access, name).each(state ? Disabling.enable : Disabling.disable);\n };\n const focus = name => {\n getCompByName(access, name).each(Focusing.focus);\n };\n const block = message => {\n if (!isString(message)) {\n throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(root => {\n emitWith(root, formBlockEvent, { message });\n });\n };\n const unblock = () => {\n withRoot(root => {\n emit(root, formUnblockEvent);\n });\n };\n const showTab = name => {\n withRoot(_ => {\n const body = access.getBody();\n const bodyState = Reflecting.getState(body);\n if (bodyState.get().exists(b => b.isTabPanel())) {\n Composing.getCurrent(body).each(tabSection => {\n TabSection.showTab(tabSection, name);\n });\n }\n });\n };\n const redial = d => {\n withRoot(root => {\n const id = access.getId();\n const dialogInit = doRedial(d);\n const storedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons, menuItemStates);\n root.getSystem().broadcastOn([`${ dialogChannel }-${ id }`], dialogInit);\n root.getSystem().broadcastOn([`${ titleChannel }-${ id }`], dialogInit.internalDialog);\n root.getSystem().broadcastOn([`${ bodyChannel }-${ id }`], dialogInit.internalDialog);\n root.getSystem().broadcastOn([`${ footerChannel }-${ id }`], {\n ...dialogInit.internalDialog,\n buttons: storedMenuButtons\n });\n instanceApi.setData(dialogInit.initialData);\n });\n };\n const close = () => {\n withRoot(root => {\n emit(root, formCloseEvent);\n });\n };\n const instanceApi = {\n getData,\n setData,\n setEnabled,\n focus,\n block,\n unblock,\n showTab,\n redial,\n close,\n toggleFullscreen: access.toggleFullscreen\n };\n return instanceApi;\n };\n\n const renderDialog = (dialogInit, extra, backstage) => {\n const dialogId = generate$6('dialog');\n const internalDialog = dialogInit.internalDialog;\n const header = getHeader(internalDialog.title, dialogId, backstage);\n const dialogSize = Cell(internalDialog.size);\n const getCompByName$1 = name => getCompByName(modalAccess, name);\n const dialogSizeClasses = getDialogSizeClass(dialogSize.get()).toArray();\n const updateState = (comp, incoming) => {\n dialogSize.set(incoming.internalDialog.size);\n updateDialogSizeClass(incoming.internalDialog.size, comp);\n return Optional.some(incoming);\n };\n const body = renderModalBody({\n body: internalDialog.body,\n initialData: internalDialog.initialData\n }, dialogId, backstage, getCompByName$1);\n const storedMenuButtons = mapMenuButtons(internalDialog.buttons);\n const objOfCells = extractCellsToObject(storedMenuButtons);\n const footer = someIf(storedMenuButtons.length !== 0, renderModalFooter({ buttons: storedMenuButtons }, dialogId, backstage));\n const dialogEvents = initDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra), backstage.shared.getSink);\n const spec = {\n id: dialogId,\n header,\n body,\n footer,\n extraClasses: dialogSizeClasses,\n extraBehaviours: [Reflecting.config({\n channel: `${ dialogChannel }-${ dialogId }`,\n updateState,\n initialData: dialogInit\n })],\n extraStyles: {}\n };\n const dialog = renderModalDialog(spec, dialogEvents, backstage);\n const modalAccess = (() => {\n const getForm = () => {\n const outerForm = ModalDialog.getBody(dialog);\n return Composing.getCurrent(outerForm).getOr(outerForm);\n };\n const toggleFullscreen$1 = () => {\n toggleFullscreen(dialog, dialogSize.get());\n };\n return {\n getId: constant$1(dialogId),\n getRoot: constant$1(dialog),\n getBody: () => ModalDialog.getBody(dialog),\n getFooter: () => ModalDialog.getFooter(dialog),\n getFormWrapper: getForm,\n toggleFullscreen: toggleFullscreen$1\n };\n })();\n const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n return {\n dialog,\n instanceApi\n };\n };\n\n const renderInlineDialog = (dialogInit, extra, backstage, ariaAttrs = false, refreshDocking) => {\n const dialogId = generate$6('dialog');\n const dialogLabelId = generate$6('dialog-label');\n const dialogContentId = generate$6('dialog-content');\n const internalDialog = dialogInit.internalDialog;\n const getCompByName$1 = name => getCompByName(modalAccess, name);\n const dialogSize = Cell(internalDialog.size);\n const dialogSizeClass = getDialogSizeClass(dialogSize.get()).toArray();\n const updateState = (comp, incoming) => {\n dialogSize.set(incoming.internalDialog.size);\n updateDialogSizeClass(incoming.internalDialog.size, comp);\n refreshDocking();\n return Optional.some(incoming);\n };\n const memHeader = record(renderInlineHeader({\n title: internalDialog.title,\n draggable: true\n }, dialogId, dialogLabelId, backstage.shared.providers));\n const memBody = record(renderInlineBody({\n body: internalDialog.body,\n initialData: internalDialog.initialData\n }, dialogId, dialogContentId, backstage, ariaAttrs, getCompByName$1));\n const storagedMenuButtons = mapMenuButtons(internalDialog.buttons);\n const objOfCells = extractCellsToObject(storagedMenuButtons);\n const optMemFooter = someIf(storagedMenuButtons.length !== 0, record(renderInlineFooter({ buttons: storagedMenuButtons }, dialogId, backstage)));\n const dialogEvents = initDialog(() => instanceApi, {\n onBlock: event => {\n Blocking.block(dialog, (_comp, bs) => {\n const headerHeight = memHeader.getOpt(dialog).map(dialog => get$e(dialog.element));\n return getBusySpec(event.message, bs, backstage.shared.providers, headerHeight);\n });\n },\n onUnblock: () => {\n Blocking.unblock(dialog);\n },\n onClose: () => extra.closeWindow()\n }, backstage.shared.getSink);\n const inlineClass = 'tox-dialog-inline';\n const os = detect$1().os;\n const dialog = build$1({\n dom: {\n tag: 'div',\n classes: [\n 'tox-dialog',\n inlineClass,\n ...dialogSizeClass\n ],\n attributes: {\n role: 'dialog',\n ...os.isMacOS() ? { 'aria-label': internalDialog.title } : { 'aria-labelledby': dialogLabelId }\n }\n },\n eventOrder: {\n [receive()]: [\n Reflecting.name(),\n Receiving.name()\n ],\n [execute$5()]: ['execute-on-form'],\n [attachedToDom()]: [\n 'reflecting',\n 'execute-on-form'\n ]\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n onEscape: c => {\n emit(c, formCloseEvent);\n return Optional.some(true);\n },\n useTabstopAt: elem => !isPseudoStop(elem) && (name$3(elem) !== 'button' || get$g(elem, 'disabled') !== 'disabled'),\n firstTabstop: 1\n }),\n Reflecting.config({\n channel: `${ dialogChannel }-${ dialogId }`,\n updateState,\n initialData: dialogInit\n }),\n Focusing.config({}),\n config('execute-on-form', dialogEvents.concat([\n runOnSource(focusin(), (comp, _se) => {\n Keying.focusIn(comp);\n }),\n run$1(focusShifted(), (comp, se) => {\n comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { newFocus: se.event.newFocus });\n })\n ])),\n Blocking.config({ getRoot: () => Optional.some(dialog) }),\n Replacing.config({}),\n memory({})\n ]),\n components: [\n memHeader.asSpec(),\n memBody.asSpec(),\n ...optMemFooter.map(memFooter => memFooter.asSpec()).toArray()\n ]\n });\n const toggleFullscreen$1 = () => {\n toggleFullscreen(dialog, dialogSize.get());\n };\n const modalAccess = {\n getId: constant$1(dialogId),\n getRoot: constant$1(dialog),\n getFooter: () => optMemFooter.map(memFooter => memFooter.get(dialog)),\n getBody: () => memBody.get(dialog),\n getFormWrapper: () => {\n const body = memBody.get(dialog);\n return Composing.getCurrent(body).getOr(body);\n },\n toggleFullscreen: toggleFullscreen$1\n };\n const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n return {\n dialog,\n instanceApi\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n const getUrlDialogApi = root => {\n const withRoot = f => {\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n const block = message => {\n if (!isString(message)) {\n throw new Error('The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(root => {\n emitWith(root, formBlockEvent, { message });\n });\n };\n const unblock = () => {\n withRoot(root => {\n emit(root, formUnblockEvent);\n });\n };\n const close = () => {\n withRoot(root => {\n emit(root, formCloseEvent);\n });\n };\n const sendMessage = data => {\n withRoot(root => {\n root.getSystem().broadcastOn([bodySendMessageChannel], data);\n });\n };\n return {\n block,\n unblock,\n close,\n sendMessage\n };\n };\n\n const SUPPORTED_MESSAGE_ACTIONS = [\n 'insertContent',\n 'setContent',\n 'execCommand',\n 'close',\n 'block',\n 'unblock'\n ];\n const isSupportedMessage = data => isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;\n const isCustomMessage = data => !isSupportedMessage(data) && isObject(data) && has$2(data, 'mceAction');\n const handleMessage = (editor, api, data) => {\n switch (data.mceAction) {\n case 'insertContent':\n editor.insertContent(data.content);\n break;\n case 'setContent':\n editor.setContent(data.content);\n break;\n case 'execCommand':\n const ui = isBoolean(data.ui) ? data.ui : false;\n editor.execCommand(data.cmd, ui, data.value);\n break;\n case 'close':\n api.close();\n break;\n case 'block':\n api.block(data.message);\n break;\n case 'unblock':\n api.unblock();\n break;\n }\n };\n const renderUrlDialog = (internalDialog, extra, editor, backstage) => {\n const dialogId = generate$6('dialog');\n const header = getHeader(internalDialog.title, dialogId, backstage);\n const body = renderIframeBody(internalDialog);\n const footer = internalDialog.buttons.bind(buttons => {\n if (buttons.length === 0) {\n return Optional.none();\n } else {\n return Optional.some(renderModalFooter({ buttons }, dialogId, backstage));\n }\n });\n const dialogEvents = initUrlDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra));\n const styles = {\n ...internalDialog.height.fold(() => ({}), height => ({\n 'height': height + 'px',\n 'max-height': height + 'px'\n })),\n ...internalDialog.width.fold(() => ({}), width => ({\n 'width': width + 'px',\n 'max-width': width + 'px'\n }))\n };\n const classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];\n const iframeUri = new global(internalDialog.url, { base_uri: new global(window.location.href) });\n const iframeDomain = `${ iframeUri.protocol }://${ iframeUri.host }${ iframeUri.port ? ':' + iframeUri.port : '' }`;\n const messageHandlerUnbinder = unbindable();\n const updateState = (_comp, incoming) => Optional.some(incoming);\n const extraBehaviours = [\n Reflecting.config({\n channel: `${ dialogChannel }-${ dialogId }`,\n updateState,\n initialData: internalDialog\n }),\n config('messages', [\n runOnAttached(() => {\n const unbind = bind(SugarElement.fromDom(window), 'message', e => {\n if (iframeUri.isSameOrigin(new global(e.raw.origin))) {\n const data = e.raw.data;\n if (isSupportedMessage(data)) {\n handleMessage(editor, instanceApi, data);\n } else if (isCustomMessage(data)) {\n internalDialog.onMessage(instanceApi, data);\n }\n }\n });\n messageHandlerUnbinder.set(unbind);\n }),\n runOnDetached(messageHandlerUnbinder.clear)\n ]),\n Receiving.config({\n channels: {\n [bodySendMessageChannel]: {\n onReceive: (comp, data) => {\n descendant(comp.element, 'iframe').each(iframeEle => {\n const iframeWin = iframeEle.dom.contentWindow;\n if (isNonNullable(iframeWin)) {\n iframeWin.postMessage(data, iframeDomain);\n }\n });\n }\n }\n }\n })\n ];\n const spec = {\n id: dialogId,\n header,\n body,\n footer,\n extraClasses: classes,\n extraBehaviours,\n extraStyles: styles\n };\n const dialog = renderModalDialog(spec, dialogEvents, backstage);\n const instanceApi = getUrlDialogApi(dialog);\n return {\n dialog,\n instanceApi\n };\n };\n\n const setup$2 = backstage => {\n const sharedBackstage = backstage.shared;\n const open = (message, callback) => {\n const closeDialog = () => {\n ModalDialog.hide(alertDialog);\n callback();\n };\n const memFooterClose = record(renderFooterButton({\n context: 'any',\n name: 'close-alert',\n text: 'OK',\n primary: true,\n buttonType: Optional.some('primary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'cancel', backstage));\n const titleSpec = pUntitled();\n const closeSpec = pClose(closeDialog, sharedBackstage.providers);\n const alertDialog = build$1(renderDialog$1({\n lazySink: () => sharedBackstage.getSink(),\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [memFooterClose.asSpec()]))),\n onEscape: closeDialog,\n extraClasses: ['tox-alert-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [run$1(formCancelEvent, closeDialog)],\n eventOrder: {}\n }));\n ModalDialog.show(alertDialog);\n const footerCloseButton = memFooterClose.get(alertDialog);\n Focusing.focus(footerCloseButton);\n };\n return { open };\n };\n\n const setup$1 = backstage => {\n const sharedBackstage = backstage.shared;\n const open = (message, callback) => {\n const closeDialog = state => {\n ModalDialog.hide(confirmDialog);\n callback(state);\n };\n const memFooterYes = record(renderFooterButton({\n context: 'any',\n name: 'yes',\n text: 'Yes',\n primary: true,\n buttonType: Optional.some('primary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'submit', backstage));\n const footerNo = renderFooterButton({\n context: 'any',\n name: 'no',\n text: 'No',\n primary: false,\n buttonType: Optional.some('secondary'),\n align: 'end',\n enabled: true,\n icon: Optional.none()\n }, 'cancel', backstage);\n const titleSpec = pUntitled();\n const closeSpec = pClose(() => closeDialog(false), sharedBackstage.providers);\n const confirmDialog = build$1(renderDialog$1({\n lazySink: () => sharedBackstage.getSink(),\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Optional.some(pFooter(pFooterGroup([], [\n footerNo,\n memFooterYes.asSpec()\n ]))),\n onEscape: () => closeDialog(false),\n extraClasses: ['tox-confirm-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [\n run$1(formCancelEvent, () => closeDialog(false)),\n run$1(formSubmitEvent, () => closeDialog(true))\n ],\n eventOrder: {}\n }));\n ModalDialog.show(confirmDialog);\n const footerYesButton = memFooterYes.get(confirmDialog);\n Focusing.focus(footerYesButton);\n };\n return { open };\n };\n\n const validateData = (data, validator) => getOrDie(asRaw('data', validator, data));\n const isAlertOrConfirmDialog = target => closest(target, '.tox-alert-dialog') || closest(target, '.tox-confirm-dialog');\n const inlineAdditionalBehaviours = (editor, isStickyToolbar, isToolbarLocationTop) => {\n if (isStickyToolbar && isToolbarLocationTop) {\n return [];\n } else {\n return [Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))),\n fadeInClass: 'tox-dialog-dock-fadein',\n fadeOutClass: 'tox-dialog-dock-fadeout',\n transitionClass: 'tox-dialog-dock-transition'\n },\n modes: ['top'],\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.map(sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n }).getOrThunk(() => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n }));\n }\n })];\n }\n };\n const setup = extras => {\n const editor = extras.editor;\n const isStickyToolbar$1 = isStickyToolbar(editor);\n const alertDialog = setup$2(extras.backstages.dialog);\n const confirmDialog = setup$1(extras.backstages.dialog);\n const open = (config, params, closeWindow) => {\n if (!isUndefined(params)) {\n if (params.inline === 'toolbar') {\n return openInlineDialog(config, extras.backstages.popup.shared.anchors.inlineDialog(), closeWindow, params);\n } else if (params.inline === 'bottom') {\n return openBottomInlineDialog(config, extras.backstages.popup.shared.anchors.inlineBottomDialog(), closeWindow, params);\n } else if (params.inline === 'cursor') {\n return openInlineDialog(config, extras.backstages.popup.shared.anchors.cursor(), closeWindow, params);\n }\n }\n return openModalDialog(config, closeWindow);\n };\n const openUrl = (config, closeWindow) => openModalUrlDialog(config, closeWindow);\n const openModalUrlDialog = (config, closeWindow) => {\n const factory = contents => {\n const dialog = renderUrlDialog(contents, {\n closeWindow: () => {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, editor, extras.backstages.dialog);\n ModalDialog.show(dialog.dialog);\n return dialog.instanceApi;\n };\n return DialogManager.openUrl(factory, config);\n };\n const openModalDialog = (config, closeWindow) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = internalInitialData;\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const dialog = renderDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, extras.backstages.dialog);\n ModalDialog.show(dialog.dialog);\n dialog.instanceApi.setData(initialData);\n return dialog.instanceApi;\n };\n return DialogManager.open(factory, config);\n };\n const openInlineDialog = (config$1, anchor, closeWindow, windowParams) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = validateData(internalInitialData, dataValidator);\n const inlineDialog = value$4();\n const isToolbarLocationTop = extras.backstages.popup.shared.header.isPositionedAtTop();\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const refreshDocking = () => inlineDialog.on(dialog => {\n InlineView.reposition(dialog);\n if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n Docking.refresh(dialog);\n }\n });\n const dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, extras.backstages.popup, windowParams.ariaAttrs, refreshDocking);\n const inlineDialogComp = build$1(InlineView.sketch({\n lazySink: extras.backstages.popup.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: windowParams.persistent ? { event: 'doNotDismissYet' } : {},\n ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n config('window-manager-inline-events', [run$1(dismissRequested(), (_comp, _se) => {\n emit(dialogUi.dialog, formCancelEvent);\n })]),\n ...inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop)\n ]),\n isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target)\n }));\n inlineDialog.set(inlineDialogComp);\n const getInlineDialogBounds = () => {\n const elem = editor.inline ? body() : SugarElement.fromDom(editor.getContainer());\n const bounds = box$1(elem);\n return Optional.some(bounds);\n };\n InlineView.showWithinBounds(inlineDialogComp, premade(dialogUi.dialog), { anchor }, getInlineDialogBounds);\n if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor', refreshDocking);\n }\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n const openBottomInlineDialog = (config$1, anchor, closeWindow, windowParams) => {\n const factory = (contents, internalInitialData, dataValidator) => {\n const initialData = validateData(internalInitialData, dataValidator);\n const inlineDialog = value$4();\n const isToolbarLocationTop = extras.backstages.popup.shared.header.isPositionedAtTop();\n const dialogInit = {\n dataValidator,\n initialData,\n internalDialog: contents\n };\n const refreshDocking = () => inlineDialog.on(dialog => {\n InlineView.reposition(dialog);\n Docking.refresh(dialog);\n });\n const dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: () => {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor ScrollWindow ElementScroll', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, extras.backstages.popup, windowParams.ariaAttrs, refreshDocking);\n const inlineDialogComp = build$1(InlineView.sketch({\n lazySink: extras.backstages.popup.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: windowParams.persistent ? { event: 'doNotDismissYet' } : {},\n ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n config('window-manager-inline-events', [run$1(dismissRequested(), (_comp, _se) => {\n emit(dialogUi.dialog, formCancelEvent);\n })]),\n Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))),\n fadeInClass: 'tox-dialog-dock-fadein',\n fadeOutClass: 'tox-dialog-dock-fadeout',\n transitionClass: 'tox-dialog-dock-transition'\n },\n modes: [\n 'top',\n 'bottom'\n ],\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.map(sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n }).getOrThunk(() => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n }));\n }\n })\n ]),\n isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target)\n }));\n inlineDialog.set(inlineDialogComp);\n const getInlineDialogBounds = () => {\n return extras.backstages.popup.shared.getSink().toOptional().bind(s => {\n const optScrollingContext = detectWhenSplitUiMode(editor, s.element);\n const margin = 15;\n const bounds$1 = optScrollingContext.map(sc => getBoundsFrom(sc)).getOr(win());\n const contentAreaContainer = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n const constrainedBounds = constrain(contentAreaContainer, bounds$1);\n return Optional.some(bounds(constrainedBounds.x, constrainedBounds.y, constrainedBounds.width, constrainedBounds.height - margin));\n });\n };\n InlineView.showWithinBounds(inlineDialogComp, premade(dialogUi.dialog), { anchor }, getInlineDialogBounds);\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor ScrollWindow ElementScroll ResizeWindow', refreshDocking);\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n const confirm = (message, callback) => {\n confirmDialog.open(message, callback);\n };\n const alert = (message, callback) => {\n alertDialog.open(message, callback);\n };\n const close = instanceApi => {\n instanceApi.close();\n };\n return {\n open,\n openUrl,\n alert,\n close,\n confirm\n };\n };\n\n const registerOptions = editor => {\n register$f(editor);\n register$e(editor);\n register(editor);\n };\n var Theme = () => {\n global$a.add('silver', editor => {\n registerOptions(editor);\n let popupSinkBounds = () => win();\n const {\n dialogs,\n popups,\n renderUI: renderModeUI\n } = setup$3(editor, { getPopupSinkBounds: () => popupSinkBounds() });\n const renderUI = () => {\n const renderResult = renderModeUI();\n const optScrollingContext = detectWhenSplitUiMode(editor, popups.getMothership().element);\n optScrollingContext.each(sc => {\n popupSinkBounds = () => {\n return getBoundsFrom(sc);\n };\n });\n return renderResult;\n };\n Autocompleter.register(editor, popups.backstage.shared);\n const windowMgr = setup({\n editor,\n backstages: {\n popup: popups.backstage,\n dialog: dialogs.backstage\n }\n });\n const notificationRegion = value$4();\n const getNotificationManagerImpl = () => NotificationManagerImpl(editor, { backstage: popups.backstage }, popups.getMothership(), notificationRegion);\n return {\n renderUI,\n getWindowManagerImpl: constant$1(windowMgr),\n getNotificationManagerImpl\n };\n });\n };\n\n Theme();\n\n})();\n","// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/silver')\n// ES2015:\n// import 'tinymce/themes/silver'\nrequire('./theme.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\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$2 = t => a => t === a;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isNull = eq$2(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$2(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\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 = f => {\n return 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 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 range$1 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const map$1 = (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$2 = (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 = (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$2 = (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$2(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (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$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex = (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(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$2 = (xs, f) => flatten(map$1(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 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$1 = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$d(xs, 0);\n const last$2 = xs => get$d(xs, xs.length - 1);\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\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each$1 = (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 = (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$1(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$1(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter$1 = (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$1(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$c = (obj, key) => {\n return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const isEmpty = r => {\n for (const x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\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 = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement(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$1(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const setOptions = (element, attrs) => {\n each$1(attrs, (v, k) => {\n v.fold(() => {\n remove$7(element, k);\n }, value => {\n rawSet(element.dom, k, value);\n });\n });\n };\n const get$b = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$b(element, key));\n const remove$7 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\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$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = 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$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint: fromPoint$1\n };\n\n const is$2 = (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$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$1(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$1 = (e1, e2) => e1.dom === e2.dom;\n const contains$1 = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is$1 = is$2;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner(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 = (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 prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\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$5 = (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 appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$1(parent, element);\n }, v => {\n before$3(v, element);\n });\n };\n const wrap = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$4 = (marker, elements) => {\n each$2(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$5(e, x);\n });\n };\n const append = (parent, elements) => {\n each$2(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$2(children$2(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$2(wrapper);\n if (children.length > 0) {\n after$4(wrapper, children);\n }\n remove$6(wrapper);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$2(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const copy$2 = (original, tag) => {\n const nu = shallowAs(original, tag);\n const cloneChildren = children$2(deep(original));\n append(nu, cloneChildren);\n return nu;\n };\n const mutate$1 = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$5(original, nu);\n const children = children$2(original);\n append(nu, children);\n remove$6(original);\n return nu;\n };\n\n const validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n const isValidSection = parentName => contains$2(validSectionList, parentName);\n const grid = (rows, columns) => ({\n rows,\n columns\n });\n const address = (row, column) => ({\n row,\n column\n });\n const detail = (element, rowspan, colspan) => ({\n element,\n rowspan,\n colspan\n });\n const detailnew = (element, rowspan, colspan, isNew) => ({\n element,\n rowspan,\n colspan,\n isNew\n });\n const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n element,\n rowspan,\n colspan,\n row,\n column,\n isLocked\n });\n const rowdetail = (element, cells, section) => ({\n element,\n cells,\n section\n });\n const rowdetailnew = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const elementnew = (element, isNew, isLocked) => ({\n element,\n isNew,\n isLocked\n });\n const rowcells = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const bounds = (startRow, startCol, finishRow, finishCol) => ({\n startRow,\n startCol,\n finishRow,\n finishCol\n });\n const columnext = (element, colspan, column) => ({\n element,\n colspan,\n column\n });\n const colgroup = (element, columns) => ({\n element,\n columns\n });\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\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 (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(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(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 const body$1 = () => getBody$1(SugarElement.fromDom(document));\n const getBody$1 = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$2(children$2(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 const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n const descendants = (scope, selector) => all$1(selector, scope);\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$2 = (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$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$1(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$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$2(element, selector);\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n const is = (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 bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\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 = (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 = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(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$1(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$a = (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(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$2 = (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 remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$7(element, 'style');\n }\n };\n const copy$1 = (source, target) => {\n const sourceDom = source.dom;\n const targetDom = target.dom;\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n const hasColspan = cellOrCol => {\n if (isTag('col')(cellOrCol)) {\n return getAttrValue(cellOrCol, 'span', 1) > 1;\n } else {\n return getSpan(cellOrCol, 'colspan') > 1;\n }\n };\n const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n const minWidth = constant(10);\n const minHeight = constant(10);\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$2(children$2(scope), x => {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup = (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$2(elm, 'table') || isRoot(elm);\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup([\n 'td',\n 'th'\n ], element, isRoot);\n const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n const columns$1 = ancestor => {\n if (is$2(ancestor, 'colgroup')) {\n return children(ancestor, 'col');\n } else {\n return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n }\n };\n const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n if (name(row) === 'colgroup') {\n const cells = map$1(columns$1(row), column => {\n const colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n const cells = map$1(cells$1(row), cell => {\n const rowspan = getAttrValue(cell, 'rowspan', 1);\n const colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdetail(row, cells, getSection(row));\n }\n });\n const getParentSection = group => parent(group).map(parent => {\n const parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n const fromTable$1 = table => {\n const rows = rows$1(table);\n const columnGroups$1 = columnGroups(table);\n const elems = [\n ...columnGroups$1,\n ...rows\n ];\n return fromRowsOrColGroups(elems, getParentSection);\n };\n const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\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 = (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$2(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(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\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$1(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$1(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 normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(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(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(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(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: '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$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 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$1,\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({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = 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,\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 = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform();\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(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$a(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$a(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 toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n const calcContentBoxSize = (element, size, upper, lower) => {\n const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n const paddingLower = getProp(element, `padding-${ lower }`, 0);\n const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n const borderLower = getProp(element, `border-${ lower }-width`, 0);\n return size - paddingUpper - paddingLower - borderUpper - borderLower;\n };\n const getCalculatedWidth = (element, boxSizing) => {\n const dom = element.dom;\n const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n };\n const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n const api$2 = Dimension('width', element => element.dom.offsetWidth);\n const get$9 = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const getInner = getInnerWidth;\n const getRuntime$1 = getWidth;\n\n const addCells = (gridRow, index, cells) => {\n const existingCells = gridRow.cells;\n const before = existingCells.slice(0, index);\n const after = existingCells.slice(index);\n const newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n const mutateCell = (gridRow, index, cell) => {\n const cells = gridRow.cells;\n cells[index] = cell;\n };\n const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n const mapCells = (gridRow, f) => {\n const cells = gridRow.cells;\n const r = map$1(cells, f);\n return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n };\n const getCell = (gridRow, index) => gridRow.cells[index];\n const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n const cellLength = gridRow => gridRow.cells.length;\n const extractGridDetails = grid => {\n const result = partition(grid, row => row.section === 'colgroup');\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n const clone = (gridRow, cloneRow, cloneCell) => {\n const newCells = map$1(gridRow.cells, cloneCell);\n return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n };\n\n const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n const getLockedColumnsFromGrid = grid => {\n const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n each$2(row.cells, (cell, idx) => {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n return sort$1(lockedArr);\n };\n\n const key = (row, column) => {\n return row + ',' + column;\n };\n const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n const findItem = (warehouse, item, comparator) => {\n const filtered = filterItems(warehouse, detail => {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n const filterItems = (warehouse, predicate) => {\n const all = bind$2(warehouse.all, r => {\n return r.cells;\n });\n return filter$2(all, predicate);\n };\n const generateColumns = rowData => {\n const columnsGroup = {};\n let index = 0;\n each$2(rowData.cells, column => {\n const colspan = column.colspan;\n range$1(colspan, columnIndex => {\n const colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n const generate$2 = list => {\n const access = {};\n const cells = [];\n const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n let maxRows = 0;\n let maxColumns = 0;\n let rowCount = 0;\n const {\n pass: colgroupRows,\n fail: rows\n } = partition(list, rowData => rowData.section === 'colgroup');\n each$2(rows, rowData => {\n const currentRow = [];\n each$2(rowData.cells, rowCell => {\n let start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n const rowPosition = rowCount + occupiedRowPosition;\n const columnPosition = start + occupiedColumnPosition;\n const newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n rowCount++;\n });\n const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n const columns = generateColumns(rowData);\n const colgroup$1 = colgroup(rowData.element, values(columns));\n return {\n colgroups: [colgroup$1],\n columns\n };\n }).getOrThunk(() => ({\n colgroups: [],\n columns: {}\n }));\n const grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access,\n all: cells,\n columns,\n colgroups\n };\n };\n const fromTable = table => {\n const list = fromTable$1(table);\n return generate$2(list);\n };\n const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n const justColumns = warehouse => values(warehouse.columns);\n const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n const Warehouse = {\n fromTable,\n generate: generate$2,\n getAt,\n findItem,\n filterItems,\n justCells,\n justColumns,\n hasColumns,\n getColumnAt\n };\n\n const columns = (warehouse, isValidCell = always) => {\n const grid = warehouse.grid;\n const cols = range$1(grid.columns, identity);\n const rowsArr = range$1(grid.rows, identity);\n return map$1(cols, col => {\n const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n return decide(getBlock, isValid, getFallback);\n });\n };\n const decide = (getBlock, isValid, getFallback) => {\n const inBlock = getBlock();\n const validInBlock = find$1(inBlock, isValid);\n const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n return detailOption.map(detail => detail.element);\n };\n const rows = warehouse => {\n const grid = warehouse.grid;\n const rowsArr = range$1(grid.rows, identity);\n const cols = range$1(grid.columns, identity);\n return map$1(rowsArr, row => {\n const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n const isSingle = detail => detail.rowspan === 1;\n const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n const deduce = (xs, index) => {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n const current = xs[index].fold(() => {\n const rest = reverse(xs.slice(0, index));\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, c => Optional.some({\n value: c,\n delta: 0\n }));\n const next = xs[index + 1].fold(() => {\n const rest = xs.slice(index + 1);\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, n => Optional.some({\n value: n,\n delta: 1\n }));\n return current.bind(c => next.map(n => {\n const extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n }));\n };\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n const api$1 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$8 = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const getRuntime = getHeight$1;\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 rowInfo = (row, y) => ({\n row,\n y\n });\n const colInfo = (col, x) => ({\n col,\n x\n });\n const rtlEdge = cell => {\n const pos = absolute(cell);\n return pos.left + getOuter$2(cell);\n };\n const ltrEdge = cell => {\n return absolute(cell).left;\n };\n const getLeftEdge = (index, cell) => {\n return colInfo(index, ltrEdge(cell));\n };\n const getRightEdge = (index, cell) => {\n return colInfo(index, rtlEdge(cell));\n };\n const getTop$1 = cell => {\n return absolute(cell).top;\n };\n const getTopEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell));\n };\n const getBottomEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n };\n const findPositions = (getInnerEdge, getOuterEdge, array) => {\n if (array.length === 0) {\n return [];\n }\n const lines = map$1(array.slice(1), (cellOption, index) => {\n return cellOption.map(cell => {\n return getInnerEdge(index, cell);\n });\n });\n const lastLine = array[array.length - 1].map(cell => {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n const negate = step => {\n return -step;\n };\n const height = {\n delta: identity,\n positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n edge: getTop$1\n };\n const ltr$1 = {\n delta: identity,\n edge: ltrEdge,\n positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n };\n const rtl$1 = {\n delta: negate,\n edge: rtlEdge,\n positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n };\n const detect$1 = onDirection(ltr$1, rtl$1);\n const width = {\n delta: (amount, table) => detect$1(table).delta(amount, table),\n positions: (cols, table) => detect$1(table).positions(cols, table),\n edge: cell => detect$1(cell).edge(cell)\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n const isCol$2 = isTag('col');\n const isRow$2 = isTag('tr');\n const getPercentSize = (elm, outerGetter, innerGetter) => {\n const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n return outerGetter(elm) / innerGetter(relativeParent) * 100;\n };\n const setPixelWidth = (cell, amount) => {\n set$1(cell, 'width', amount + 'px');\n };\n const setPercentageWidth = (cell, amount) => {\n set$1(cell, 'width', amount + '%');\n };\n const setHeight = (cell, amount) => {\n set$1(cell, 'height', amount + 'px');\n };\n const removeHeight = cell => {\n remove$5(cell, 'height');\n };\n const getHeightValue = cell => getRuntime(cell) + 'px';\n const convert = (cell, number, getter, setter) => {\n const newSize = table(cell).map(table => {\n const total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n const normalizePixelSize = (value, cell, getter, setter) => {\n const number = parseFloat(value);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n const getTotalHeight = cell => {\n const value = getHeightValue(cell);\n if (!value) {\n return get$8(cell);\n }\n return normalizePixelSize(value, cell, get$8, setHeight);\n };\n const get$7 = (cell, type, f) => {\n const v = f(cell);\n const span = getSpan(cell, type);\n return v / span;\n };\n const getRaw$1 = (element, prop) => {\n return getRaw$2(element, prop).orThunk(() => {\n return getOpt(element, prop).map(val => val + 'px');\n });\n };\n const getRawWidth$1 = element => getRaw$1(element, 'width');\n const getRawHeight$1 = element => getRaw$1(element, 'height');\n const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n const getHeight = cell => {\n return isRow$2(cell) ? get$8(cell) : get$7(cell, 'rowspan', getTotalHeight);\n };\n const getGenericWidth = cell => {\n const width = getRawWidth$1(cell);\n return width.bind(w => parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]));\n };\n const setGenericWidth = (cell, amount, unit) => {\n set$1(cell, 'width', amount + unit);\n };\n const getPixelTableWidth = table => get$9(table) + 'px';\n const getPixelTableHeight = table => get$8(table) + 'px';\n const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n const isCol$1 = isTag('col');\n const getRawW = cell => {\n return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n };\n const getRawH = cell => {\n return getRawHeight$1(cell).getOrThunk(() => getHeight(cell) + 'px');\n };\n const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n const isValidColumn = cell => {\n const browser = detect$2().browser;\n const supportsColWidths = browser.isChromium() || browser.isFirefox();\n return isCol$1(cell) ? supportsColWidths : true;\n };\n const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n const columnCells = columns(warehouse);\n const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n const colFilter = not(hasColspan);\n return map$1(columns$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, colFilter, column => {\n if (isValidColumn(column)) {\n return getWidth(column);\n } else {\n const cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n }\n }, fallback);\n });\n };\n const getDeduced = deduced => {\n return deduced.map(d => {\n return d + 'px';\n }).getOr('');\n };\n const getRawWidths = (warehouse, table) => {\n return getWidthFrom(warehouse, table, getRawW, getDeduced);\n };\n const getPercentageWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n return deduced.fold(() => {\n return tableSize.minCellWidth();\n }, cellWidth => {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n });\n };\n const getPixelWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n return deduced.getOrThunk(tableSize.minCellWidth);\n });\n };\n const getHeightFrom = (warehouse, table, getHeight, fallback) => {\n const rowCells = rows(warehouse);\n const rows$1 = map$1(warehouse.all, r => Optional.some(r.element));\n const backups = [Optional.some(height.edge(table))].concat(map$1(height.positions(rowCells, table), pos => pos.map(p => p.y)));\n return map$1(rows$1, (row, i) => getDimension(row, i, backups, always, getHeight, fallback));\n };\n const getPixelHeights = (warehouse, table) => {\n return getHeightFrom(warehouse, table, getHeight, deduced => {\n return deduced.getOrThunk(minHeight);\n });\n };\n const getRawHeights = (warehouse, table) => {\n return getHeightFrom(warehouse, table, getRawH, getDeduced);\n };\n\n const widthLookup = (table, getter) => () => {\n if (inBody(table)) {\n return getter(table);\n } else {\n return parseFloat(getRaw$2(table, 'width').getOr('0'));\n }\n };\n const noneSize = table => {\n const getWidth = widthLookup(table, get$9);\n const zero = constant(0);\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n isRelative: true,\n label: 'none'\n };\n };\n const percentageSize = table => {\n const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = delta => delta / getWidth() * 100;\n const singleColumnWidth = (w, _delta) => [100 - w];\n const minCellWidth = () => minWidth() / getWidth() * 100;\n const adjustTableWidth = delta => {\n const currentWidth = getFloatWidth();\n const change = delta / 100 * currentWidth;\n const newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n return {\n width: getFloatWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n const pixelSize = table => {\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = identity;\n const singleColumnWidth = (w, delta) => {\n const newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n const adjustTableWidth = delta => {\n const newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n const chooseSize = (element, width) => {\n const percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(element);\n } else {\n return pixelSize(element);\n }\n };\n const getTableSize = table => {\n const width = getRawWidth$1(table);\n return width.fold(() => noneSize(table), w => chooseSize(table, w));\n };\n const TableSize = {\n getTableSize,\n pixelSize,\n percentageSize,\n noneSize\n };\n\n const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n minRow,\n minCol,\n maxRow,\n maxCol,\n allCells,\n selectedCells\n });\n const findSelectedStats = (house, isSelected) => {\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n let minRow = totalRows;\n let minCol = totalColumns;\n let maxRow = 0;\n let maxCol = 0;\n const allCells = [];\n const selectedCells = [];\n each$1(house.access, detail => {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n const startRow = detail.row;\n const endRow = startRow + detail.rowspan - 1;\n const startCol = detail.column;\n const endCol = startCol + detail.colspan - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n };\n const makeCell = (list, seenSelected, rowIndex) => {\n const row = list[rowIndex].element;\n const td = SugarElement.fromTag('td');\n append$1(td, SugarElement.fromTag('br'));\n const f = seenSelected ? append$1 : prepend;\n f(row, td);\n };\n const fillInGaps = (list, house, stats, isSelected) => {\n const rows = filter$2(list, row => row.section !== 'colgroup');\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n for (let i = 0; i < totalRows; i++) {\n let seenSelected = false;\n for (let j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(rows, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n const clean = (replica, stats, house, widthDelta) => {\n each$1(house.columns, col => {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$6(col.element);\n }\n });\n const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n each$2(emptyRows, remove$6);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each$2(firstLayer(replica, 'th,td'), cell => {\n remove$7(cell, 'rowspan');\n remove$7(cell, 'colspan');\n });\n }\n remove$7(replica, LOCKED_COL_ATTR);\n remove$7(replica, 'data-snooker-col-series');\n const tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n const colWidths = getPixelWidths(warehouse, table, tableSize);\n const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n const delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n const extract$1 = (table, selectedSelector) => {\n const isSelected = detail => is$2(detail.element, selectedSelector);\n const replica = deep(table);\n const list = fromTable$1(replica);\n const tableSize = TableSize.getTableSize(table);\n const replicaHouse = Warehouse.generate(list);\n const replicaStats = findSelectedStats(replicaHouse, isSelected);\n const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n each$2(unselectedCells, remove$6);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n const house = Warehouse.fromTable(table);\n const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n const nbsp = '\\xA0';\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 = NodeValue(isText, 'text');\n const get$6 = element => api.get(element);\n const getOption = element => api.getOption(element);\n const set = (element, value) => api.set(element, value);\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse = elem => isHTMLElement(elem) && get$b(elem, 'contenteditable') === 'false';\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)) || isContentEditableFalse(elem);\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last$1 = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children = children$2(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 transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n const createCell = doc => () => {\n const td = SugarElement.fromTag('td', doc.dom);\n append$1(td, SugarElement.fromTag('br', doc.dom));\n return td;\n };\n const createCol = doc => () => {\n return SugarElement.fromTag('col', doc.dom);\n };\n const createColgroup = doc => () => {\n return SugarElement.fromTag('colgroup', doc.dom);\n };\n const createRow$1 = doc => () => {\n return SugarElement.fromTag('tr', doc.dom);\n };\n const replace$1 = (cell, tag, attrs) => {\n const replica = copy$2(cell, tag);\n each$1(attrs, (v, k) => {\n if (v === null) {\n remove$7(replica, k);\n } else {\n set$2(replica, k, v);\n }\n });\n return replica;\n };\n const pasteReplace = cell => {\n return cell;\n };\n const cloneFormats = (oldCell, newCell, formats) => {\n const first$1 = first(oldCell);\n return first$1.map(firstText => {\n const formatSelector = formats.join(',');\n const parents = ancestors$3(firstText, formatSelector, element => {\n return eq$1(element, oldCell);\n });\n return foldr(parents, (last, parent) => {\n const clonedFormat = shallow(parent);\n append$1(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n const cloneAppropriateAttributes = (original, clone) => {\n each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n };\n const cellOperations = (mutate, doc, formatsToClone) => {\n const cloneCss = (prev, clone) => {\n copy$1(prev.element, clone);\n remove$5(clone, 'height');\n if (prev.colspan !== 1) {\n remove$5(clone, 'width');\n }\n };\n const newCell = prev => {\n const td = SugarElement.fromTag(name(prev.element), doc.dom);\n const formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n append$1(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n const newCol = prev => {\n const col = SugarElement.fromTag(name(prev.element), doc.dom);\n cloneCss(prev, col);\n mutate(prev.element, col);\n return col;\n };\n return {\n col: newCol,\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: newCell,\n replace: replace$1,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n const paste$1 = doc => {\n return {\n col: createCol(doc),\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: createCell(doc),\n replace: pasteReplace,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\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$2(SugarElement.fromDom(div));\n };\n const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n const option = name => editor => editor.options.get(name);\n const defaultWidth = '100%';\n const getPixelForcedWidth = editor => {\n var _a;\n const dom = editor.dom;\n const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n };\n const determineDefaultTableStyles = (editor, defaultStyles) => {\n if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n return defaultStyles;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultStyles,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultStyles,\n width: defaultWidth\n };\n }\n };\n const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n return defaultAttributes;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultAttributes,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultAttributes,\n width: defaultWidth\n };\n }\n };\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('table_clone_elements', { processor: 'string[]' });\n registerOption('table_use_colgroups', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_header_type', {\n processor: value => {\n const valid = contains$2([\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: section, cells, sectionCells or auto.'\n };\n },\n default: 'section'\n });\n registerOption('table_sizing_mode', {\n processor: 'string',\n default: 'auto'\n });\n registerOption('table_default_attributes', {\n processor: 'object',\n default: { border: '1' }\n });\n registerOption('table_default_styles', {\n processor: 'object',\n default: { 'border-collapse': 'collapse' }\n });\n registerOption('table_column_resizing', {\n processor: value => {\n const valid = contains$2([\n 'preservetable',\n 'resizetable'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be preservetable, or resizetable.'\n };\n },\n default: 'preservetable'\n });\n registerOption('table_resize_bars', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_style_by_css', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_merge_content_on_paste', {\n processor: 'boolean',\n default: true\n });\n };\n const getTableCloneElements = editor => {\n return Optional.from(editor.options.get('table_clone_elements'));\n };\n const hasTableObjectResizing = editor => {\n const objectResizing = editor.options.get('object_resizing');\n return contains$2(objectResizing.split(','), 'table');\n };\n const getTableHeaderType = option('table_header_type');\n const getTableColumnResizingBehaviour = option('table_column_resizing');\n const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n const getTableSizingMode = option('table_sizing_mode');\n const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n const hasTableResizeBars = option('table_resize_bars');\n const shouldStyleWithCss = option('table_style_by_css');\n const shouldMergeContentOnPaste = option('table_merge_content_on_paste');\n const getTableDefaultAttributes = editor => {\n const options = editor.options;\n const defaultAttributes = options.get('table_default_attributes');\n return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n };\n const getTableDefaultStyles = editor => {\n const options = editor.options;\n const defaultStyles = options.get('table_default_styles');\n return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n };\n const tableUseColumnGroup = option('table_use_colgroups');\n const fixedContainerSelector = option('fixed_toolbar_container');\n const fixedToolbarContainerTarget = option('fixed_toolbar_container_target');\n const fixedContainerTarget = editor => {\n var _a;\n if (!editor.inline) {\n return Optional.none();\n }\n const selector = (_a = fixedContainerSelector(editor)) !== null && _a !== void 0 ? _a : '';\n if (selector.length > 0) {\n return descendant(body$1(), selector);\n }\n const element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n const useFixedContainer = editor => editor.inline && fixedContainerTarget(editor).isSome();\n const getUiMode = option('ui_mode');\n const isSplitUiMode = editor => !useFixedContainer(editor) && getUiMode(editor) === 'split';\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable$1 = (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 getBody = editor => SugarElement.fromDom(editor.getBody());\n const getIsRoot = editor => element => eq$1(element, getBody(editor));\n const removeDataStyle = table => {\n remove$7(table, 'data-mce-style');\n const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n each$2(cells$1(table), removeStyleAttribute);\n each$2(columns$1(table), removeStyleAttribute);\n each$2(rows$1(table), removeStyleAttribute);\n };\n const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n const getPixelWidth = elm => elm.getBoundingClientRect().width;\n const getPixelHeight = elm => elm.getBoundingClientRect().height;\n const getRawValue = prop => (editor, elm) => {\n const raw = editor.dom.getStyle(elm, prop) || editor.dom.getAttrib(elm, prop);\n return Optional.from(raw).filter(isNotEmpty);\n };\n const getRawWidth = getRawValue('width');\n const getRawHeight = getRawValue('height');\n const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n const isInEditableContext$1 = cell => closest$2(cell, isTag('table')).exists(isEditable$1);\n\n const inSelection = (bounds, detail) => {\n const leftEdge = detail.column;\n const rightEdge = detail.column + detail.colspan - 1;\n const topEdge = detail.row;\n const bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n const isWithin = (bounds, detail) => {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n const isRectangular = (warehouse, bounds) => {\n let isRect = true;\n const detailIsWithin = curry(isWithin, bounds);\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n const getBounds = (detailA, detailB) => {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n const getAnyBox = (warehouse, startCell, finishCell) => {\n const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(sc => {\n return finishCoords.map(fc => {\n return getBounds(sc, fc);\n });\n });\n };\n const getBox$1 = (warehouse, startCell, finishCell) => {\n return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n return isRectangular(warehouse, bounds);\n });\n };\n\n const moveBy$1 = (warehouse, cell, row, column) => {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(d => {\n return d.element;\n });\n });\n };\n const intercepts$1 = (warehouse, start, finish) => {\n return getAnyBox(warehouse, start, finish).map(bounds => {\n const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map$1(inside, detail => {\n return detail.element;\n });\n });\n };\n const parentCell = (warehouse, innerCell) => {\n const isContainedBy = (c1, c2) => {\n return contains$1(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n return detail.element;\n });\n };\n\n const moveBy = (cell, deltaRow, deltaColumn) => {\n return table(cell).bind(table => {\n const warehouse = getWarehouse(table);\n return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n const intercepts = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return intercepts$1(warehouse, first, last);\n };\n const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n const warehouse = getWarehouse(table);\n const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n };\n const getBox = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n const getWarehouse = Warehouse.fromTable;\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n var DomUniverse = () => {\n const clone = element => {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n const document = element => documentOrOwner(element).dom;\n const isBoundary = element => {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains$2(TagBoundaries, name(element));\n };\n const isEmptyTag = element => {\n if (!isElement(element)) {\n return false;\n }\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n const comparePosition = (element, other) => {\n return element.dom.compareDocumentPosition(other.dom);\n };\n const copyAttributesTo = (source, destination) => {\n const as = clone$2(source);\n setAll$1(destination, as);\n };\n const isSpecial = element => {\n const tag = name(element);\n return contains$2([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor$2,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$a,\n getRaw: getRaw$2,\n set: set$1,\n remove: remove$5\n }),\n attrs: constant({\n get: get$b,\n set: set$2,\n remove: remove$7,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before$3,\n after: after$5,\n afterAll: after$4,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$6\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$2,\n name: name,\n parent: parent,\n document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial,\n getLanguage,\n getText: get$6,\n setText: set,\n isBoundary,\n isEmptyTag,\n isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n };\n\n const all = (universe, look, elements, f) => {\n const head = elements[0];\n const tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n const oneAll = (universe, look, elements) => {\n return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n };\n const unsafeOne = (universe, look, head, tail) => {\n const start = look(universe, head);\n return foldr(tail, (b, a) => {\n const current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n const commonElement = (universe, start, end) => {\n return start.bind(s => {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n const eq = (universe, item) => {\n return curry(universe.eq, item);\n };\n const ancestors$2 = (universe, start, end, isRoot = never) => {\n const ps1 = [start].concat(universe.up().all(start));\n const ps2 = [end].concat(universe.up().all(end));\n const prune = path => {\n const index = findIndex(path, isRoot);\n return index.fold(() => {\n return path;\n }, ind => {\n return path.slice(0, ind + 1);\n });\n };\n const pruned1 = prune(ps1);\n const pruned2 = prune(ps2);\n const shared = find$1(pruned1, x => {\n return exists(pruned2, eq(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared\n };\n };\n\n const sharedOne$1 = oneAll;\n const ancestors$1 = ancestors$2;\n\n const universe$3 = DomUniverse();\n const sharedOne = (look, elements) => {\n return sharedOne$1(universe$3, (_universe, element) => {\n return look(element);\n }, elements);\n };\n const ancestors = (start, finish, isRoot) => {\n return ancestors$1(universe$3, start, finish, isRoot);\n };\n\n const lookupTable = container => {\n return ancestor$1(container, 'table');\n };\n const identify = (start, finish, isRoot) => {\n const getIsRoot = rootTable => {\n return element => {\n return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n };\n };\n if (eq$1(start, finish)) {\n return Optional.some({\n boxes: Optional.some([start]),\n start,\n finish\n });\n } else {\n return lookupTable(start).bind(startTable => {\n return lookupTable(finish).bind(finishTable => {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts(startTable, start, finish),\n start,\n finish\n });\n } else if (contains$1(startTable, finishTable)) {\n const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start,\n finish: finishCell\n });\n } else if (contains$1(finishTable, startTable)) {\n const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start,\n finish: startCell\n });\n } else {\n return ancestors(start, finish).shared.bind(lca => {\n return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n const retrieve$1 = (container, selector) => {\n const sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n const getLast = (boxes, lastSelectedSelector) => {\n return find$1(boxes, box => {\n return is$2(box, lastSelectedSelector);\n });\n };\n const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n return descendant(container, firstSelectedSelector).bind(first => {\n return descendant(container, lastSelectedSelector).bind(last => {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(table => {\n return {\n first,\n last,\n table\n };\n });\n });\n });\n };\n const expandTo = (finish, firstSelectedSelector) => {\n return ancestor$1(finish, 'table').bind(table => {\n return descendant(table, firstSelectedSelector).bind(start => {\n return identify(start, finish).bind(identified => {\n return identified.boxes.map(boxes => {\n return {\n boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n return getLast(boxes, lastSelectedSelector).bind(last => {\n return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n const retrieve = (container, selector) => {\n return retrieve$1(container, selector);\n };\n const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n const isRoot = ancestor => {\n return eq$1(container, ancestor);\n };\n const sectionSelector = 'thead,tfoot,tbody,table';\n const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(fA => {\n return lastAncestor.bind(lA => {\n return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n const selection = identity;\n const unmergable = selectedCells => {\n const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n };\n const mergable = (table, selectedCells, ephemera) => {\n if (selectedCells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n bounds,\n cells: selectedCells\n }));\n }\n };\n\n const strSelected = 'data-mce-selected';\n const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n const strAttributeSelector = '[' + strSelected + ']';\n const strFirstSelected = 'data-mce-first-selected';\n const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n const strLastSelected = 'data-mce-last-selected';\n const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n const attributeSelector = strAttributeSelector;\n const ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n const forMenu = (selectedCells, table, cell) => ({\n element: cell,\n mergable: mergable(table, selectedCells, ephemera),\n unmergable: unmergable(selectedCells),\n selection: selection(selectedCells)\n });\n const paste = (element, clipboard, generators) => ({\n element,\n clipboard,\n generators\n });\n const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n selection: selection(selectedCells),\n clipboard,\n generators\n });\n\n const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n const getSelectionFromSelector = selector => (initCell, isRoot) => {\n const cellName = name(initCell);\n const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest$1(cell, selector, isRoot);\n };\n const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n const getSelectionCell = getSelectionFromSelector('th,td');\n const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n const extractSelected = cells => {\n return table(cells[0]).map(table => {\n const replica = extract$1(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n const getTextContent = (editor, replicaElements) => {\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 overflow: 'hidden',\n opacity: '0'\n });\n const root = getContentContainer(dos);\n append(offscreenDiv, replicaElements);\n append$1(root, offscreenDiv);\n const textContent = offscreenDiv.dom.innerText;\n remove$6(offscreenDiv);\n return textContent;\n };\n const registerEvents = (editor, actions) => {\n editor.on('BeforeGetContent', e => {\n const multiCellContext = cells => {\n e.preventDefault();\n extractSelected(cells).each(replicaElements => {\n const content = e.format === 'text' ? getTextContent(editor, replicaElements) : serializeElements(editor, replicaElements);\n e.content = content;\n });\n };\n if (e.selection === true) {\n const cells = getCellsFromFakeSelection(editor);\n if (cells.length >= 1) {\n multiCellContext(cells);\n }\n }\n });\n editor.on('BeforeSetContent', e => {\n if (e.selection === true && e.paste === true) {\n const selectedCells = getCellsFromSelection(editor);\n head(selectedCells).each(cell => {\n table(cell).each(table => {\n const elements = filter$2(fromHtml(e.content), content => {\n return name(content) !== 'meta';\n });\n const isTable = isTag('table');\n if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = paste$1(doc);\n const targets = paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(() => {\n editor.focus();\n });\n }\n });\n });\n }\n });\n };\n\n const point = (element, offset) => ({\n element,\n offset\n });\n\n const scan$1 = (universe, element, direction) => {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(elem => {\n return scan$1(universe, elem, direction).orThunk(() => {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const toEnd = (universe, element) => {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n const children = universe.property().children(element);\n return children.length;\n };\n const freefallRtl$2 = (universe, element) => {\n const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n const children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n const freefallRtl$1 = freefallRtl$2;\n\n const universe$2 = DomUniverse();\n const freefallRtl = element => {\n return freefallRtl$1(universe$2, element);\n };\n\n const halve = (main, other) => {\n if (!hasColspan(main)) {\n const width = getGenericWidth(main);\n width.each(w => {\n const newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n const zero = array => map$1(array, constant(0));\n const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n if (!predicate(delta)) {\n return delta;\n } else {\n const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n const diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n const clampDelta = clampDeltaHelper(always);\n const resizeTable = () => {\n const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n const ratio = (100 + delta) / 100;\n const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map$1(sizes, (size, idx) => {\n const newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n }\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n const resizeTable = (resizer, delta) => resizer(delta);\n const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n if (isRelative) {\n const tableWidth = totalWidth + pixelDelta;\n const ratio = tableWidth / totalWidth;\n const newSizes = map$1(sizes, size => size / ratio);\n return {\n delta: ratio * 100 - 100,\n newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n const preserveTable = () => {\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n const idx = delta >= 0 ? next : index;\n const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n const resizeTable = (resizer, delta, isLastColumn) => {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n if (isRelative) {\n return zero(sizes);\n } else {\n const diff = delta / sizes.length;\n return map$1(sizes, constant(diff));\n }\n };\n const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n delta: 0,\n newSizes: sizes\n });\n return {\n resizeTable,\n clampTableDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n\n const getGridSize = table => {\n const warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n const isHeaderCell = isTag('th');\n const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n const getRowType = row => {\n const isHeaderRow = row.section === 'thead';\n const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else {\n return { type: 'body' };\n }\n };\n const findCommonCellType = cells => {\n const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n const findCommonRowType = rows => {\n const rowTypes = map$1(rows, row => getRowType(row).type);\n const hasHeader = contains$2(rowTypes, 'header');\n const hasFooter = contains$2(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n const hasBody = contains$2(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n const rowType = getRowType(row);\n return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n });\n\n const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n const section = () => ({\n transformRow,\n transformCell: (cell, comparator, substitution) => {\n const newCell = substitution(cell.element, comparator);\n const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n return elementnew(fixedCell, cell.isNew, cell.isLocked);\n }\n });\n const sectionCells = () => ({\n transformRow,\n transformCell\n });\n const cells = () => ({\n transformRow: (row, section) => {\n const newSection = section === 'thead' ? 'tbody' : section;\n return transformRow(row, newSection);\n },\n transformCell\n });\n const fallback = () => ({\n transformRow: identity,\n transformCell\n });\n const getTableSectionType = (table, fallback) => {\n const warehouse = Warehouse.fromTable(table);\n const type = findTableRowHeaderType(warehouse).getOr(fallback);\n switch (type) {\n case 'section':\n return section();\n case 'sectionCells':\n return sectionCells();\n case 'cells':\n return cells();\n }\n };\n const TableSection = {\n getTableSectionType,\n section,\n sectionCells,\n cells,\n fallback\n };\n\n const setIfNot = (element, property, value, ignore) => {\n if (value === ignore) {\n remove$7(element, property);\n } else {\n set$2(element, property, value);\n }\n };\n const insert$1 = (table, selector, element) => {\n last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n };\n const generateSection = (table, sectionName) => {\n const section = child(table, sectionName).getOrThunk(() => {\n const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert$1(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert$1(table, 'caption', newSection);\n } else {\n append$1(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n const render$1 = (table, grid) => {\n const newRows = [];\n const newCells = [];\n const syncRows = gridSection => map$1(gridSection, row => {\n if (row.isNew) {\n newRows.push(row.element);\n }\n const tr = row.element;\n empty(tr);\n each$2(row.cells, cell => {\n if (cell.isNew) {\n newCells.push(cell.element);\n }\n setIfNot(cell.element, 'colspan', cell.colspan, 1);\n setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n append$1(tr, cell.element);\n });\n return tr;\n });\n const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n }));\n const renderSection = (gridSection, sectionName) => {\n const section = generateSection(table, sectionName);\n const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n const sectionElems = sync(gridSection);\n append(section, sectionElems);\n };\n const removeSection = sectionName => {\n child(table, sectionName).each(remove$6);\n };\n const renderOrRemoveSection = (gridSection, sectionName) => {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n const headSection = [];\n const bodySection = [];\n const footSection = [];\n const columnGroupsSection = [];\n each$2(grid, row => {\n switch (row.section) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n case 'colgroup':\n columnGroupsSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(columnGroupsSection, 'colgroup');\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows,\n newCells\n };\n };\n const copy = grid => map$1(grid, row => {\n const tr = shallow(row.element);\n each$2(row.cells, cell => {\n const clonedCell = deep(cell.element);\n setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n append$1(tr, clonedCell);\n });\n return tr;\n });\n\n const getColumn = (grid, index) => {\n return map$1(grid, row => {\n return getCell(row, index);\n });\n };\n const getRow = (grid, index) => {\n return grid[index];\n };\n const findDiff = (xs, comp) => {\n if (xs.length === 0) {\n return 0;\n }\n const first = xs[0];\n const index = findIndex(xs, x => {\n return !comp(first.element, x.element);\n });\n return index.getOr(xs.length);\n };\n const subgrid = (grid, row, column, comparator) => {\n const gridRow = getRow(grid, row);\n const isColRow = gridRow.section === 'colgroup';\n const colspan = findDiff(gridRow.cells.slice(column), comparator);\n const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n return {\n colspan,\n rowspan\n };\n };\n\n const toDetails = (grid, comparator) => {\n const seen = map$1(grid, row => map$1(row.cells, never));\n const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n for (let column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map$1(grid, (row, rowIndex) => {\n const details = bind$2(row.cells, (cell, columnIndex) => {\n if (seen[rowIndex][columnIndex] === false) {\n const result = subgrid(grid, rowIndex, columnIndex, comparator);\n updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n } else {\n return [];\n }\n });\n return rowdetailnew(row.element, details, row.section, row.isNew);\n });\n };\n const toGrid = (warehouse, generators, isNew) => {\n const grid = [];\n each$2(warehouse.colgroups, colgroup => {\n const colgroupCols = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n colgroupCols.push(element);\n }\n grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n });\n for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n const rowCells = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n rowCells.push(element);\n }\n const rowDetail = warehouse.all[rowIndex];\n const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n grid.push(row);\n }\n return grid;\n };\n\n const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n const toDetailList = grid => toDetails(grid, eq$1);\n const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n const extractCells = (warehouse, target, predicate) => {\n const details = map$1(target.selection, cell$1 => {\n return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n });\n const cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n const warehouse = Warehouse.fromTable(table);\n const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n const output = extract(warehouse, target).map(info => {\n const model = fromWarehouse(warehouse, generators);\n const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n const lockedColumns = getLockedColumnsFromGrid(result.grid);\n const grid = toDetailList(result.grid);\n return {\n info,\n grid,\n cursor: result.cursor,\n lockedColumns\n };\n });\n return output.bind(out => {\n const newElements = render$1(table, out.grid);\n const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, {\n sizing: tableSizing,\n resize: resizing,\n section: tableSection\n });\n postAction(table);\n remove$7(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n }\n return Optional.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n const value = {\n ...details,\n generators: target.generators,\n clipboard: target.clipboard\n };\n return value;\n }));\n const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n cells,\n generators: target.generators,\n clipboard: target.clipboard\n }));\n const onMergable = (_warehouse, target) => target.mergable;\n const onUnmergable = (_warehouse, target) => target.unmergable;\n const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n const merge$2 = (grid, bounds, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n const row = rows[i];\n const isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n const unmerge = (grid, target, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n let first = true;\n for (let i = 0; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const currentCell = getCell(row, j);\n const currentCellElm = currentCell.element;\n const isToReplace = comparator(currentCellElm, target);\n if (isToReplace && !first) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace) {\n first = false;\n }\n }\n }\n return grid;\n };\n const uniqueCells = (row, comparator) => {\n return foldl(row, (rest, cell) => {\n return exists(rest, currentCell => {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n const splitCols = (grid, index, comparator, substitution) => {\n if (index > 0 && index < grid[0].cells.length) {\n each$2(grid, row => {\n const prevCell = row.cells[index - 1];\n let offset = 0;\n const substitute = substitution();\n while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n offset++;\n }\n });\n }\n return grid;\n };\n const splitRows = (grid, index, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n const rowPrevCells = rows[index - 1].cells;\n const cells = uniqueCells(rowPrevCells, comparator);\n each$2(cells, cell => {\n let replacement = Optional.none();\n for (let i = index; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const current = getCell(row, j);\n const isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(sub => {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n }\n }\n });\n }\n return grid;\n };\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,\n orThunk: apply,\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 measure = (startAddress, gridA, gridB) => {\n if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n }\n const rowRemainder = gridA.slice(startAddress.row);\n const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n const colRequired = cellLength(gridB[0]);\n const rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n const measureWidth = (gridA, gridB) => {\n const colLengthA = cellLength(gridA[0]);\n const colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n const measureHeight = (gridA, gridB) => {\n const rowLengthA = gridA.length;\n const rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n const generateElements = (amount, row, generators, isLocked) => {\n const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n };\n const rowFill = (grid, amount, generators, lockedColumns) => {\n const exampleRow = grid[grid.length - 1];\n return grid.concat(range$1(amount, () => {\n const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n const row = clone(exampleRow, generator, identity);\n const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n return setCells(row, elements);\n }));\n };\n const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n const newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n return foldl(lockedColumns, (acc, colNum) => {\n const newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n const tailor = (gridA, delta, generators) => {\n const fillCols = delta.colDelta < 0 ? colFill : identity;\n const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const gridWidth = cellLength(gridA[0]);\n const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n const isSpanning = (grid, row, col, comparator) => {\n const candidate = getCell(grid[row], col);\n const matching = curry(comparator, candidate.element);\n const currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n const startRow = startAddress.row;\n const startCol = startAddress.column;\n const mergeHeight = gridBRows.length;\n const mergeWidth = cellLength(gridBRows[0]);\n const endRow = startRow + mergeHeight;\n const endCol = startCol + mergeWidth + lockedColumns.length;\n const lockedColumnObj = mapToObject(lockedColumns, always);\n for (let r = startRow; r < endRow; r++) {\n let skippedCol = 0;\n for (let c = startCol; c < endCol; c++) {\n if (lockedColumnObj[c]) {\n skippedCol++;\n continue;\n }\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n const gridBColIndex = c - startCol - skippedCol;\n const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n const newCellElm = newCell.element;\n const replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n const gridColLength = cellLength(grid[0]);\n const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n return {\n row: adjustedRowAddress,\n column: validColAddress\n };\n };\n const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n const gridBRows = extractGridDetails(gridB).rows;\n const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n const result = measure(validStartAddress, gridA, gridBRows);\n return result.map(diff => {\n const delta = {\n ...diff,\n colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n };\n const fittedGrid = tailor(gridA, delta, generator);\n const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n const insertCols = (index, gridA, gridB, generator, comparator) => {\n splitCols(gridA, index, comparator, generator.cell);\n const delta = measureHeight(gridB, gridA);\n const fittedNewGrid = tailor(gridB, delta, generator);\n const secondDelta = measureHeight(gridA, fittedNewGrid);\n const fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map$1(fittedOldGrid, (gridRow, i) => {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n const insertRows = (index, gridA, gridB, generator, comparator) => {\n splitRows(gridA, index, comparator, generator.cell);\n const locked = getLockedColumnsFromGrid(gridA);\n const diff = measureWidth(gridA, gridB);\n const delta = {\n ...diff,\n colDelta: diff.colDelta - locked.length\n };\n const fittedOldGrid = tailor(gridA, delta, generator);\n const {\n cols: oldCols,\n rows: oldRows\n } = extractGridDetails(fittedOldGrid);\n const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n const secondDiff = measureWidth(gridB, gridA);\n const secondDelta = {\n ...secondDiff,\n colDelta: secondDiff.colDelta + newLocked.length\n };\n const fittedGridB = lockedColFill(gridB, generator, newLocked);\n const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return [\n ...oldCols,\n ...oldRows.slice(0, index),\n ...fittedNewGrid,\n ...oldRows.slice(index, oldRows.length)\n ];\n };\n\n const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n const insertRowAt = (grid, index, example, comparator, substitution) => {\n const {rows, cols} = extractGridDetails(grid);\n const before = rows.slice(0, index);\n const after = rows.slice(index);\n const newRow = cloneRow(rows[example], (ex, c) => {\n const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n }, comparator, substitution);\n return [\n ...cols,\n ...before,\n newRow,\n ...after\n ];\n };\n const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n if (section === 'colgroup' || !withinSpan) {\n const cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n const existingCells = row.cells;\n const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n });\n const deleteRowsAt = (grid, start, finish) => {\n const {rows, cols} = extractGridDetails(grid);\n return [\n ...cols,\n ...rows.slice(0, start),\n ...rows.slice(finish + 1)\n ];\n };\n\n const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n const rowReplacerPredicate = (targetRow, columnHeaders) => {\n const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && columnHeaders[colIndex]);\n };\n };\n const columnReplacePredicate = (targetColumn, rowHeaders) => {\n const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && rowHeaders[rowIndex]);\n };\n };\n const determineScope = (applyScope, cell, newScope, isInHeader) => {\n const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n if (applyScope) {\n return isHeaderCell(cell) ? getScope(newScope) : null;\n } else if (isInHeader && isHeaderCell(cell)) {\n const oppositeScope = newScope === 'row' ? 'col' : 'row';\n return getScope(oppositeScope);\n } else {\n return null;\n }\n };\n const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n const isTarget = cell => {\n return exists(targets, target => {\n return comparator(cell.element, target.element);\n });\n };\n return map$1(grid, (row, rowIndex) => {\n return mapCells(row, (cell, colIndex) => {\n if (isTarget(cell)) {\n const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n genScope(newCell, rowIndex, colIndex).each(scope => {\n setOptions(newCell.element, { scope: Optional.from(scope) });\n });\n return newCell;\n } else {\n return cell;\n }\n });\n });\n };\n const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n });\n const getRowCells = (rows, rowIndex, comparator) => {\n const targetRow = rows[rowIndex];\n return bind$2(targetRow.cells, (item, i) => {\n return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n });\n };\n const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n };\n const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n const {cols, rows} = extractGridDetails(grid);\n const targetRow = rows[indexes[0]];\n const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n const newRows = [...rows];\n each$2(indexes, index => {\n newRows[index] = tableSection.transformRow(rows[index], section);\n });\n const newGrid = [\n ...cols,\n ...newRows\n ];\n const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n };\n const replaceCells = (grid, details, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n };\n\n const generate$1 = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$2(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(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: generate$1 };\n\n const adt$6 = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n const ColumnContext = { ...adt$6 };\n\n const neighbours = (input, index) => {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n const determine = (input, column, step, tableSize, resize) => {\n const result = input.slice(0);\n const context = neighbours(input, column);\n const onNone = constant(map$1(result, constant(0)));\n const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n const total = (start, end, measures) => {\n let r = 0;\n for (let i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n const recalculateWidthForCells = (warehouse, widths) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width,\n colspan: cell.colspan\n };\n });\n };\n const recalculateWidthForColumns = (warehouse, widths) => {\n const groups = Warehouse.justColumns(warehouse);\n return map$1(groups, (column, index) => ({\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n }));\n };\n const matchRowHeight = (warehouse, heights) => {\n return map$1(warehouse.all, (row, i) => {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n const recalculate = (warehouse, widths) => {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n const recalculateAndApply = (warehouse, widths, tableSize) => {\n const newSizes = recalculate(warehouse, widths);\n each$2(newSizes, cell => {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n const adjustWidth = (table, delta, index, resizing, tableSize) => {\n const warehouse = Warehouse.fromTable(table);\n const step = tableSize.getCellDelta(delta);\n const widths = tableSize.getWidths(warehouse, tableSize);\n const isLastColumn = index === warehouse.grid.columns - 1;\n const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n const adjustHeight = (table, delta, index) => {\n const warehouse = Warehouse.fromTable(table);\n const heights = getPixelHeights(warehouse, table);\n const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n const newRowSizes = matchRowHeight(warehouse, newHeights);\n each$2(newRowSizes, row => {\n setHeight(row.element, row.height);\n });\n each$2(Warehouse.justCells(warehouse), cell => {\n removeHeight(cell.element);\n });\n const total = sumUp(newHeights);\n setHeight(table, total);\n };\n const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n const warehouse = Warehouse.generate(list);\n const sizes = tableSize.getWidths(warehouse, tableSize);\n const tablePixelWidth = tableSize.pixelWidth();\n const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n const adjustWidthTo = (_table, list, _info, tableSize) => {\n const warehouse = Warehouse.generate(list);\n const widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n const uniqueColumns = details => {\n const uniqueCheck = (rest, detail) => {\n const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n };\n\n const isCol = isTag('col');\n const isColgroup = isTag('colgroup');\n const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n const elementToData = element => {\n const colspan = getAttrValue(element, 'colspan', 1);\n const rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element,\n colspan,\n rowspan\n };\n };\n const modification = (generators, toData = elementToData) => {\n const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n const add = element => {\n if (isRow$1(element)) {\n return nuRow({ element });\n } else {\n const cell = element;\n const replacement = nuCell(toData(cell));\n recent = Optional.some({\n item: cell,\n replacement\n });\n return replacement;\n }\n };\n let recent = Optional.none();\n const getOrInit = (element, comparator) => {\n return recent.fold(() => {\n return add(element);\n }, p => {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return { getOrInit };\n };\n const transform$1 = tag => {\n return generators => {\n const list = [];\n const find = (element, comparator) => {\n return find$1(list, x => {\n return comparator(x.item, element);\n });\n };\n const makeNew = element => {\n const attrs = tag === 'td' ? { scope: null } : {};\n const cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n return cell;\n };\n const replaceOrInit = (element, comparator) => {\n if (isRow$1(element) || isCol(element)) {\n return element;\n } else {\n const cell = element;\n return find(cell, comparator).fold(() => {\n return makeNew(cell);\n }, p => {\n return comparator(element, p.item) ? p.sub : makeNew(cell);\n });\n }\n };\n return { replaceOrInit };\n };\n };\n const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n const merging = generators => {\n const unmerge = cell => {\n const scope = getScopeAttribute(cell);\n scope.each(attribute => set$2(cell, 'scope', attribute));\n return () => {\n const raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$5(raw, 'width');\n remove$5(cell, 'width');\n scope.each(attribute => set$2(raw, 'scope', attribute));\n return raw;\n };\n };\n const merge = cells => {\n const getScopeProperty = () => {\n const stringAttributes = cat(map$1(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n const baseScope = stringAttributes[0];\n const scopes = [\n 'row',\n 'col'\n ];\n const isMixed = exists(stringAttributes, attribute => {\n return attribute !== baseScope && contains$2(scopes, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope);\n }\n };\n remove$5(cells[0], 'width');\n getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n return constant(cells[0]);\n };\n return {\n unmerge,\n merge\n };\n };\n const Generators = {\n modification,\n transform: transform$1,\n merging\n };\n\n const blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n const isList$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2([\n 'ol',\n 'ul'\n ], tagName);\n };\n const isBlock$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2(blockList, tagName);\n };\n const isEmptyTag$1 = (universe, item) => {\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n const universe$1 = DomUniverse();\n const isBlock = element => {\n return isBlock$1(universe$1, element);\n };\n const isList = element => {\n return isList$1(universe$1, element);\n };\n const isEmptyTag = element => {\n return isEmptyTag$1(universe$1, element);\n };\n\n const merge = cells => {\n const isBr = isTag('br');\n const advancedBr = children => {\n return forall(children, c => {\n return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n });\n };\n const isListItem = el => {\n return name(el) === 'li' || ancestor$2(el, isList).isSome();\n };\n const siblingIsBlock = el => {\n return nextSibling(el).map(rightSibling => {\n if (isBlock(rightSibling)) {\n return true;\n }\n if (isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n const markCell = cell => {\n return last$1(cell).bind(rightEdge => {\n const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(parent => {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n const markContent = () => {\n const content = bind$2(cells, cell => {\n const children = children$2(cell);\n return advancedBr(children) ? [] : children.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n const contents = markContent();\n empty(cells[0]);\n append(cells[0], contents);\n };\n\n const isEditable = elem => isEditable$1(elem, true);\n const prune = table => {\n const cells = cells$1(table);\n if (cells.length === 0) {\n remove$6(table);\n }\n };\n const outcome = (grid, cursor) => ({\n grid,\n cursor\n });\n const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n const elem = cell.element;\n return someIf(isEditable(elem), elem);\n }));\n const elementFromGrid = (grid, row, column) => {\n var _a, _b;\n const rows = extractGridDetails(grid).rows;\n return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n };\n const bundle = (grid, row, column) => {\n const cursorElement = elementFromGrid(grid, row, column);\n return outcome(grid, cursorElement);\n };\n const uniqueRows = details => {\n const rowCompilation = (rest, detail) => {\n const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n };\n const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n const targetIndex = details[0].row;\n const rows = uniqueRows(details);\n const newGrid = foldr(rows, (acc, row) => {\n const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n const rows = uniqueRows(details);\n const target = rows[rows.length - 1];\n const targetIndex = target.row + target.rowspan;\n const newGrid = foldr(rows, (newG, row) => {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const columns = uniqueColumns(details);\n const targetIndex = columns[0].column;\n const newGrid = foldr(columns, (acc, col) => {\n const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const target = details[details.length - 1];\n const targetIndex = target.column + target.colspan;\n const columns = uniqueColumns(details);\n const newGrid = foldr(columns, (newG, col) => {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n const rows = uniqueRows(details);\n const rowIndexes = map$1(rows, detail => detail.row);\n const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeRowsHeader = makeRowsSection('thead', true);\n const opMakeRowsBody = makeRowsSection('tbody', false);\n const opMakeRowsFooter = makeRowsSection('tfoot', false);\n const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n const columns = uniqueColumns(extractDetail.details);\n const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n };\n const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n const rows = uniqueRows(details);\n const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n const maxRowIndex = Math.max(extractGridDetails(newGrid).rows.length - 1, 0);\n return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n };\n const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n const cells = mergable.cells;\n merge(cells);\n const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n const newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n const gridify = (table, generators) => {\n const wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n const startAddress = address(pasteDetails.row, pasteDetails.column);\n const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n });\n };\n const gridifyRows = (rows, generators, context) => {\n const pasteDetails = fromPastedRows(rows, context.section);\n const wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].column;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, index);\n };\n const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].row;\n const context = rows[index];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, index, pasteDetails.cells[0].column);\n };\n const opGetColumnsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n return findCommonCellType(selectedColumnCells);\n }).getOr('');\n };\n const opGetCellsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(findCommonCellType).getOr('');\n };\n const opGetRowsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minRowRange = selectedCells[0].row;\n const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n const selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n const getColumnsWidth = (warehouse, details) => {\n const columns$1 = columns(warehouse);\n const uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, (acc, detail) => {\n const column = columns$1[detail.column];\n const colWidth = column.map(getOuter$2).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(details => ({\n details,\n pixelDelta: getColumnsWidth(warehouse, details)\n }));\n const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n }));\n const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n const headerCellGenerator = Generators.transform('th');\n const bodyCellGenerator = Generators.transform('td');\n const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsHeader = run(opMakeRowsHeader, onCells, noop, noop, headerCellGenerator);\n const makeRowsBody = run(opMakeRowsBody, onCells, noop, noop, bodyCellGenerator);\n const makeRowsFooter = run(opMakeRowsFooter, onCells, noop, noop, bodyCellGenerator);\n const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n const getColumnsType = opGetColumnsType;\n const getCellsType = opGetCellsType;\n const getRowsType = opGetRowsType;\n\n const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n const fireTableModified = (editor, table, data) => {\n editor.dispatch('TableModified', {\n ...data,\n table\n });\n };\n const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n editor.dispatch('TableSelectionChange', {\n cells,\n start,\n finish,\n otherCells\n });\n };\n const fireTableSelectionClear = editor => {\n editor.dispatch('TableSelectionClear');\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 styleModified = {\n structure: false,\n style: true\n };\n const structureModified = {\n structure: true,\n style: false\n };\n const styleAndStructureModified = {\n structure: true,\n style: true\n };\n\n const get$5 = (editor, table) => {\n if (isTablePercentagesForced(editor)) {\n return TableSize.percentageSize(table);\n } else if (isTablePixelsForced(editor)) {\n return TableSize.pixelSize(table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n const isTableBody = editor => name(getBody(editor)) === 'table';\n const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n const cloneFormats = getTableCloneElements(editor);\n const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n const getTableSectionType = table => {\n switch (getTableHeaderType(editor)) {\n case 'section':\n return TableSection.section();\n case 'sectionCells':\n return TableSection.sectionCells();\n case 'cells':\n return TableSection.cells();\n default:\n return TableSection.getTableSectionType(table, 'section');\n }\n };\n const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n const cells = cells$1(table);\n return head(cells).filter(inBody).map(firstCell => {\n cellSelectionHandler.clearSelectedCells(table.dom);\n const rng = editor.dom.createRng();\n rng.selectNode(firstCell.dom);\n editor.selection.setRng(rng);\n set$2(firstCell, 'data-mce-selected', '1');\n return rng;\n });\n }, cell => {\n const des = freefallRtl(cell);\n const rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n editor.selection.setRng(rng);\n cellSelectionHandler.clearSelectedCells(table.dom);\n return Optional.some(rng);\n });\n const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n removeDataStyle(table);\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = cellOperations(mutate, doc, cloneFormats);\n const behaviours = {\n sizing: get$5(editor, table),\n resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n section: getTableSectionType(table)\n };\n return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n resizeHandler.refresh(table.dom);\n each$2(result.newRows, row => {\n fireNewRow(editor, row.dom);\n });\n each$2(result.newCells, cell => {\n fireNewCell(editor, cell.dom);\n });\n const range = setSelectionFromAction(table, result);\n if (inBody(table)) {\n removeDataStyle(table);\n if (!noEvents) {\n fireTableModified(editor, table.dom, effect);\n }\n }\n return range.map(rng => ({\n rng,\n effect\n }));\n }) : Optional.none();\n };\n const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n const getTableCellType = getCellsType;\n const getTableColType = getColumnsType;\n const getTableRowType = getRowsType;\n return {\n deleteRow,\n deleteColumn,\n insertRowsBefore: insertRowsBefore$1,\n insertRowsAfter: insertRowsAfter$1,\n insertColumnsBefore: insertColumnsBefore$1,\n insertColumnsAfter: insertColumnsAfter$1,\n mergeCells: mergeCells$1,\n unmergeCells: unmergeCells$1,\n pasteColsBefore: pasteColsBefore$1,\n pasteColsAfter: pasteColsAfter$1,\n pasteRowsBefore: pasteRowsBefore$1,\n pasteRowsAfter: pasteRowsAfter$1,\n pasteCells: pasteCells$1,\n makeCellsHeader: makeCellsHeader$1,\n unmakeCellsHeader: unmakeCellsHeader$1,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n makeRowsHeader: makeRowsHeader$1,\n makeRowsBody: makeRowsBody$1,\n makeRowsFooter: makeRowsFooter$1,\n getTableRowType,\n getTableCellType,\n getTableColType\n };\n };\n\n const constrainSpan = (element, property, value) => {\n const currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove$7(element, property);\n } else {\n set$2(element, property, Math.min(value, currentColspan));\n }\n };\n const isColInRange = (minColRange, maxColRange) => cell => {\n const endCol = cell.column + cell.colspan - 1;\n const startCol = cell.column;\n return endCol >= minColRange && startCol < maxColRange;\n };\n const generateColGroup = (house, minColRange, maxColRange) => {\n if (Warehouse.hasColumns(house)) {\n const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n const copiedCols = map$1(colsToCopy, c => {\n const clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n const fakeColgroup = SugarElement.fromTag('colgroup');\n append(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n const copiedCells = map$1(cellsToCopy, cell => {\n const clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n const fakeTR = SugarElement.fromTag('tr');\n append(fakeTR, copiedCells);\n return fakeTR;\n });\n const copyCols = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onUnlockedCells(house, target);\n return details.map(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n const fakeRows = generateRows(house, minColRange, maxColRange);\n return [\n ...fakeColGroups,\n ...fakeRows\n ];\n });\n };\n\n const copyRows = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.bind(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const rows = extractGridDetails(grid).rows;\n const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n const filteredGrid = bind$2(slicedGrid, row => {\n const newCells = filter$2(row.cells, cell => !cell.isLocked);\n return newCells.length > 0 ? [{\n ...row,\n cells: newCells\n }] : [];\n });\n const slicedDetails = toDetailList(filteredGrid);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(slicedDetails => copy(slicedDetails));\n };\n\n const adt$5 = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n const validateFor = (suffix, type, value) => {\n const rawAmount = value.substring(0, value.length - suffix.length);\n const amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n };\n const from = value => {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$5.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$5.pixels, value);\n }\n return adt$5.invalid(value);\n };\n const Size = {\n ...adt$5,\n from\n };\n\n const redistributeToPercent = (widths, totalWidth) => {\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n const ratio = px / totalWidth * 100;\n return ratio + '%';\n }, pc => {\n return pc + '%';\n });\n });\n };\n const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n const scale = newTotalWidth / totalWidth;\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n return px * scale + 'px';\n }, pc => {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n const redistributeEmpty = (newWidthType, columns) => {\n const f = newWidthType.fold(() => constant(''), pixels => {\n const num = pixels / columns;\n return constant(num + 'px');\n }, () => {\n const num = 100 / columns;\n return constant(num + '%');\n });\n return range$1(columns, f);\n };\n const redistributeValues = (newWidthType, widths, totalWidth) => {\n return newWidthType.fold(() => {\n return widths;\n }, px => {\n return redistributeToPx(widths, totalWidth, px);\n }, _pc => {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n const redistribute$1 = (widths, totalWidth, newWidth) => {\n const newType = Size.from(newWidth);\n const floats = forall(widths, s => {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n const sum = (values, fallback) => {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, (rest, v) => {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n const roundDown = (num, unit) => {\n const floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n const add$3 = (value, amount) => {\n return Size.from(value).fold(constant(value), px => {\n return px + amount + 'px';\n }, pc => {\n return pc + amount + '%';\n });\n };\n const normalize = values => {\n if (values.length === 0) {\n return values;\n }\n const scan = foldr(values, (rest, value) => {\n const info = Size.from(value).fold(() => ({\n value,\n remainder: 0\n }), num => roundDown(num, 'px'), num => ({\n value: num + '%',\n remainder: 0\n }));\n return {\n output: [info.value].concat(rest.output),\n remainder: rest.remainder + info.remainder\n };\n }, {\n output: [],\n remainder: 0\n });\n const r = scan.output;\n return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n };\n const validate = Size.from;\n\n const redistributeToW = (newWidths, cells, unit) => {\n each$2(cells, cell => {\n const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n const w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n const redistributeToColumns = (newWidths, columns, unit) => {\n each$2(columns, (column, index) => {\n const width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n const redistributeToH = (newHeights, rows, cells) => {\n each$2(cells, cell => {\n remove$5(cell.element, 'height');\n });\n each$2(rows, (row, i) => {\n set$1(row.element, 'height', newHeights[i]);\n });\n };\n const getUnit = newSize => {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n const redistribute = (table, optWidth, optHeight) => {\n const warehouse = Warehouse.fromTable(table);\n const rows = warehouse.all;\n const cells = Warehouse.justCells(warehouse);\n const columns = Warehouse.justColumns(warehouse);\n optWidth.each(newWidth => {\n const widthUnit = getUnit(newWidth);\n const totalWidth = get$9(table);\n const oldWidths = getRawWidths(warehouse, table);\n const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n if (Warehouse.hasColumns(warehouse)) {\n redistributeToColumns(nuWidths, columns, widthUnit);\n } else {\n redistributeToW(nuWidths, cells, widthUnit);\n }\n set$1(table, 'width', newWidth);\n });\n optHeight.each(newHeight => {\n const totalHeight = get$8(table);\n const oldHeights = getRawHeights(warehouse, table);\n const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells);\n set$1(table, 'height', newHeight);\n });\n };\n const isPercentSizing = isPercentSizing$1;\n const isPixelSizing = isPixelSizing$1;\n const isNoneSizing = isNoneSizing$1;\n\n const cleanupLegacyAttributes = element => {\n remove$7(element, 'width');\n remove$7(element, 'height');\n };\n const convertToPercentSizeWidth = table => {\n const newWidth = getPercentTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSizeWidth = table => {\n const newWidth = getPixelTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSizeHeight = table => {\n const newHeight = getPixelTableHeight(table);\n redistribute(table, Optional.none(), Optional.some(newHeight));\n cleanupLegacyAttributes(table);\n };\n const convertToNoneSizeWidth = table => {\n remove$5(table, 'width');\n const columns = columns$1(table);\n const rowElements = columns.length > 0 ? columns : cells$1(table);\n each$2(rowElements, cell => {\n remove$5(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n const DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n const tableHeaderCell = () => SugarElement.fromTag('th');\n const tableCell = () => SugarElement.fromTag('td');\n const tableColumn = () => SugarElement.fromTag('col');\n const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n const tr = SugarElement.fromTag('tr');\n for (let j = 0; j < columns; j++) {\n const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set$2(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set$2(td, 'scope', 'col');\n }\n append$1(td, SugarElement.fromTag('br'));\n append$1(tr, td);\n }\n return tr;\n };\n const createGroupRow = columns => {\n const columnGroup = SugarElement.fromTag('colgroup');\n range$1(columns, () => append$1(columnGroup, tableColumn()));\n return columnGroup;\n };\n const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n const table = SugarElement.fromTag('table');\n const rowHeadersGoInThead = headerType !== 'cells';\n setAll(table, renderOpts.styles);\n setAll$1(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append$1(table, createGroupRow(columns));\n }\n const actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n const thead = SugarElement.fromTag('thead');\n append$1(table, thead);\n const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append(thead, theadRows);\n }\n const tbody = SugarElement.fromTag('tbody');\n append$1(table, tbody);\n const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append(tbody, tbodyRows);\n return table;\n };\n\n const get$4 = element => element.dom.innerHTML;\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$4(container);\n };\n\n const placeCaretInCell = (editor, cell) => {\n editor.selection.select(cell.dom, true);\n editor.selection.collapse(true);\n };\n const selectFirstCellInTable = (editor, tableElm) => {\n descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n const fireEvents = (editor, table) => {\n each$2(descendants(table, 'tr'), row => {\n fireNewRow(editor, row.dom);\n each$2(descendants(row, 'th,td'), cell => {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n const defaultStyles = getTableDefaultStyles(editor);\n const options = {\n styles: defaultStyles,\n attributes: getTableDefaultAttributes(editor),\n colGroups: tableUseColumnGroup(editor)\n };\n editor.undoManager.ignore(() => {\n const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set$2(table, 'data-mce-id', '__mce');\n const html = getOuter(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n if (isTablePixelsForced(editor)) {\n convertToPixelSizeWidth(table);\n } else if (isTableResponsiveForced(editor)) {\n convertToNoneSizeWidth(table);\n } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n convertToPercentSizeWidth(table);\n }\n removeDataStyle(table);\n remove$7(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).getOrNull();\n };\n const insertTable = (editor, rows, columns, options = {}) => {\n const checkInput = val => isNumber(val) && val > 0;\n if (checkInput(rows) && checkInput(columns)) {\n const headerRows = options.headerRows || 0;\n const headerColumns = options.headerColumns || 0;\n return insert(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n return null;\n }\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n const tableTypeBase = 'x-tinymce/dom-table-';\n const tableTypeRow = tableTypeBase + 'rows';\n const tableTypeColumn = tableTypeBase + 'columns';\n const setData = items => {\n const fakeClipboardItem = global.FakeClipboardItem(items);\n global.write([fakeClipboardItem]);\n };\n const getData = type => {\n var _a;\n const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n return findMap(items, item => Optional.from(item.getType(type)));\n };\n const clearData = type => {\n if (getData(type).isSome()) {\n global.clear();\n }\n };\n const setRows = rowsOpt => {\n rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n };\n const getRows = () => getData(tableTypeRow);\n const clearRows = () => clearData(tableTypeRow);\n const setColumns = columnsOpt => {\n columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n };\n const getColumns = () => getData(tableTypeColumn);\n const clearColumns = () => clearData(tableTypeColumn);\n\n const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const registerCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n const cursor = SugarElement.fromText('');\n after$5(table, cursor);\n remove$6(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n const rng = editor.dom.createRng();\n rng.setStart(cursor.dom, 0);\n rng.setEnd(cursor.dom, 0);\n editor.selection.setRng(rng);\n editor.nodeChanged();\n }\n });\n });\n const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(table => {\n if (sizing === 'relative' && !isPercentSizing(table)) {\n convertToPercentSizeWidth(table);\n } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n convertToPixelSizeWidth(table);\n } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n convertToNoneSizeWidth(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n const getTableFromCell = cell => table(cell, isRoot);\n const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n const toggleTableClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleTableCellClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n const selectedCells = getCellsFromSelection(editor);\n const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleCaption = () => {\n getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).each(table => {\n child(table, 'caption').fold(() => {\n const caption = SugarElement.fromTag('caption');\n append$1(caption, SugarElement.fromText('Caption'));\n appendAt(table, caption, 0);\n editor.selection.setCursorLocation(caption.dom, 0);\n }, caption => {\n if (isTag('caption')(cellOrCaption)) {\n one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n }\n remove$6(caption);\n });\n fireTableModified(editor, table.dom, structureModified);\n });\n });\n };\n const postExecute = _data => {\n editor.focus();\n };\n const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n execute(table, targets, noEvents).each(postExecute);\n });\n const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n const copyColSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n return copyCols(table, targets);\n });\n const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n const clonedRows = map$1(rows, row => deep(row));\n performActionOnSelection((table, startCell) => {\n const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n execute(table, targets).each(postExecute);\n });\n });\n const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n actOnSelection(getAction(type), args.no_events);\n });\n each$1({\n mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n mceTableCutCol: () => copyColSelection().each(selection => {\n setColumns(selection);\n actOnSelection(actions.deleteColumn);\n }),\n mceTableCutRow: () => copyRowSelection().each(selection => {\n setRows(selection);\n actOnSelection(actions.deleteRow);\n }),\n mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n mceTableDelete: eraseTable,\n mceTableCellToggleClass: toggleTableCellClass,\n mceTableToggleClass: toggleTableClass,\n mceTableToggleCaption: toggleCaption,\n mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n mceTableRowType: actOnType(type => {\n switch (type) {\n case 'header':\n return actions.makeRowsHeader;\n case 'footer':\n return actions.makeRowsFooter;\n default:\n return actions.makeRowsBody;\n }\n })\n }, (func, name) => editor.addCommand(name, func));\n editor.addCommand('mceInsertTable', (_ui, args) => {\n insertTable(editor, args.rows, args.columns, args.options);\n });\n editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n if (!isObject(args)) {\n return;\n }\n const cells = filter$2(getCellsFromSelection(editor), isInEditableContext$1);\n if (cells.length === 0) {\n return;\n }\n const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, (value, style) => {\n const formatName = getFormatName(style);\n each$2(cells, cell => {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n } else {\n editor.formatter.apply(formatName, { value }, cell.dom);\n }\n });\n });\n getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n });\n };\n\n const registerQueryCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n const targets = forMenu(getCellsFromSelection(editor), table, cell);\n return action(table, targets);\n })).getOr('');\n each$1({\n mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n mceTableColType: () => lookupOnSelection(actions.getTableColType)\n }, (func, name) => editor.addQueryValueHandler(name, func));\n };\n\n const adt$4 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before$2 = adt$4.before;\n const on = adt$4.on;\n const after$3 = adt$4.after;\n const Situ = {\n before: before$2,\n on,\n after: after$3,\n cata: cata$1,\n getStart: getStart$1\n };\n\n const create$4 = (selection, kill) => ({\n selection,\n kill\n });\n const Response = { create: create$4 };\n\n const selectNode = (win, element) => {\n const rng = win.document.createRange();\n rng.selectNode(element.dom);\n return rng;\n };\n const selectNodeContents = (win, element) => {\n const rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\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 const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n 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 const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (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 rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const create$2 = (start, soffset, finish, foffset) => {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n const Situs = { create: create$2 };\n\n const convertToRange = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n const makeSitus = Situs.create;\n\n const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(s => {\n return closest$1(finish, 'td,th', isRoot).bind(f => {\n return detect(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const detect = (container, isRoot, start, finish, selectRange) => {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1) {\n selectRange(container, boxes, cellSel.start, cellSel.finish);\n return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Optional.none();\n }\n });\n } else {\n return Optional.none();\n }\n };\n const update = (rows, columns, container, selected, annotations) => {\n const updateSelection = newSels => {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n return newSels.boxes;\n };\n return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n const traverse = (item, mode) => ({\n item,\n mode\n });\n const backtrack = (universe, item, _direction, transition = sidestep) => {\n return universe.property().parent(item).map(p => {\n return traverse(p, transition);\n });\n };\n const sidestep = (universe, item, direction, transition = advance) => {\n return direction.sibling(universe, item).map(p => {\n return traverse(p, transition);\n });\n };\n const advance = (universe, item, direction, transition = advance) => {\n const children = universe.property().children(item);\n const result = direction.first(children);\n return result.map(r => {\n return traverse(r, transition);\n });\n };\n const successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Optional.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Optional.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Optional.some(sidestep)\n }\n ];\n const go = (universe, item, mode, direction, rules = successors) => {\n const ruleOpt = find$1(rules, succ => {\n return succ.current === mode;\n });\n return ruleOpt.bind(rule => {\n return rule.current(universe, item, direction, rule.next).orThunk(() => {\n return rule.fallback.bind(fb => {\n return go(universe, item, fb, direction);\n });\n });\n });\n };\n\n const left$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().prevSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const right$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().nextSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const Walkers = {\n left: left$1,\n right: right$1\n };\n\n const hone = (universe, item, predicate, mode, direction, isRoot) => {\n const next = go(universe, item, mode, direction);\n return next.bind(n => {\n if (isRoot(n.item)) {\n return Optional.none();\n } else {\n return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n }\n });\n };\n const left = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n const right = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n const isLeaf = universe => element => universe.property().children(element).length === 0;\n const before$1 = (universe, item, isRoot) => {\n return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n };\n const after$2 = (universe, item, isRoot) => {\n return seekRight$1(universe, item, isLeaf(universe), isRoot);\n };\n const seekLeft$1 = left;\n const seekRight$1 = right;\n\n const universe = DomUniverse();\n const before = (element, isRoot) => {\n return before$1(universe, element, isRoot);\n };\n const after$1 = (element, isRoot) => {\n return after$2(universe, element, isRoot);\n };\n const seekLeft = (element, predicate, isRoot) => {\n return seekLeft$1(universe, element, predicate, isRoot);\n };\n const seekRight = (element, predicate, isRoot) => {\n return seekRight$1(universe, element, predicate, isRoot);\n };\n\n const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n const adt$2 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n const isOverlapping = (bridge, before, after) => {\n const beforeBounds = bridge.getRect(before);\n const afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n const isRow = elem => {\n return closest$1(elem, 'tr');\n };\n const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(() => {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n }, _sharedRow => {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n }\n });\n }).getOr(adt$2.none('default'));\n };\n const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n const BeforeAfter = {\n ...adt$2,\n verify,\n cata\n };\n\n const inParent = (parent, children, element, index) => ({\n parent,\n children,\n element,\n index\n });\n const indexInParent = element => parent(element).bind(parent => {\n const children = children$2(parent);\n return indexOf(children, element).map(index => inParent(parent, children, element, index));\n });\n const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n const isBr = isTag('br');\n const gatherer = (cand, gather, isRoot) => {\n return gather(cand, isRoot).bind(target => {\n return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n const handleBr = (isRoot, element, direction) => {\n return direction.traverse(element).orThunk(() => {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n const findBr = (element, offset) => {\n return child$2(element, offset).filter(isBr).orThunk(() => {\n return child$2(element, offset - 1).filter(isBr);\n });\n };\n const handleParent = (isRoot, element, offset, direction) => {\n return findBr(element, offset).bind(br => {\n return direction.traverse(br).fold(() => {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, adjacent => {\n return indexInParent(adjacent).map(info => {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n const tryBr = (isRoot, element, offset, direction) => {\n const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(tgt => {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n const process = analysis => {\n return BeforeAfter.cata(analysis, _message => {\n return Optional.none();\n }, () => {\n return Optional.none();\n }, cell => {\n return Optional.some(point(cell, 0));\n }, cell => {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n const moveDown = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n const moveUp = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n const translate = (caret, xDelta, yDelta) => {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n const getTop = caret => {\n return caret.top;\n };\n const getBottom = caret => {\n return caret.bottom;\n };\n\n const getPartialBox = (bridge, element, offset) => {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Optional.none();\n };\n const toCaret = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n const getElemBox = (bridge, element) => {\n return Optional.some(bridge.getRect(element));\n };\n const getBoxAt = (bridge, element, offset) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n const getEntireBox = (bridge, element) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n\n const JUMP_SIZE = 5;\n const NUM_RETRIES = 100;\n const adt$1 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n const isOutside = (caret, box) => {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n const inOutsideBlock = (bridge, element, caret) => {\n return closest$2(element, isBlock).fold(never, cell => {\n return getEntireBox(bridge, cell).exists(box => {\n return isOutside(caret, box);\n });\n });\n };\n const adjustDown = (bridge, element, guessBox, original, caret) => {\n const lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$1.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const adjustUp = (bridge, element, guessBox, original, caret) => {\n const higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$1.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const upMovement = {\n point: getTop,\n adjuster: adjustUp,\n move: moveUp,\n gather: before\n };\n const downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$1\n };\n const isAtTable = (bridge, x, y) => {\n return bridge.elementFromPoint(x, y).filter(elm => {\n return name(elm) === 'table';\n }).isSome();\n };\n const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n const adjustTil = (bridge, movement, original, caret, numRetries) => {\n if (numRetries === 0) {\n return Optional.some(caret);\n }\n if (isAtTable(bridge, caret.left, movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n return guess.start.fold(Optional.none, element => {\n return getEntireBox(bridge, element).bind(guessBox => {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(() => {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n const checkScroll = (movement, adjusted, bridge) => {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Optional.some(-movement.point(adjusted));\n } else {\n return Optional.none();\n }\n };\n const retry = (movement, bridge, caret) => {\n const moved = movement.move(caret, JUMP_SIZE);\n const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(() => {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, delta => {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n const Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n getJumpSize: constant(JUMP_SIZE)\n };\n\n const MAX_RETRIES = 20;\n const findSpot = (bridge, isRoot, direction) => {\n return bridge.getSelection().bind(sel => {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n return Optional.some(point(sel.finish, sel.foffset));\n }, brNeighbour => {\n const range = bridge.fromSitus(brNeighbour);\n const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n const range = bridge.fromSitus(situs);\n const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, () => {\n return Optional.none();\n }, () => {\n return Optional.some(situs);\n }, cell => {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, cell => {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n const tryAgain = (bridge, element, offset, move, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n const tryAt = (bridge, direction, box) => {\n const browser = detect$2().browser;\n if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n return direction.retry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n const tryCursor = (bridge, isRoot, element, offset, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, box);\n });\n };\n const handle$1 = (bridge, isRoot, direction) => {\n return findSpot(bridge, isRoot, direction).bind(spot => {\n return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n const inSameTable = (elem, table) => {\n return ancestor(elem, e => {\n return parent(e).exists(p => {\n return eq$1(p, table);\n });\n });\n };\n const simulate = (bridge, isRoot, direction, initial, anchor) => {\n return closest$1(initial, 'td,th', isRoot).bind(start => {\n return closest$1(start, 'table', isRoot).bind(table => {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle$1(bridge, isRoot, direction).bind(range => {\n return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n return {\n start,\n finish,\n range\n };\n });\n });\n });\n });\n };\n const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n return precheck(initial, isRoot).orThunk(() => {\n return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n const range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n };\n const firstUpCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft(table, element => {\n return last$1(element).isSome();\n }, isRoot).map(last => {\n const lastOffset = getEnd(last);\n return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const lastDownCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight(table, element => {\n return first(element).isSome();\n }, isRoot).map(first => {\n return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n return detect(container, isRoot, info.start, info.finish, selectRange);\n });\n };\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 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 value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n const isInEditableContext = cell => parentElement(cell).exists(isEditable$1);\n const MouseSelection = (bridge, container, isRoot, annotations) => {\n const cursor = value();\n const clearstate = cursor.clear;\n const applySelection = event => {\n cursor.on(start => {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(finish => {\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length === 1) {\n const singleCell = boxes[0];\n const isNonEditableCell = getRaw(singleCell) === 'false';\n const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n if (isNonEditableCell && isCellClosestContentEditable) {\n annotations.selectRange(container, boxes, singleCell, singleCell);\n }\n } else if (boxes.length > 1) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n const mousedown = event => {\n annotations.clear(container);\n findCell(event.target, isRoot).filter(isInEditableContext).each(cursor.set);\n };\n const mouseover = event => {\n applySelection(event);\n };\n const mouseup = event => {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate,\n mousedown,\n mouseover,\n mouseup\n };\n };\n\n const down = {\n traverse: nextSibling,\n gather: after$1,\n relative: Situ.before,\n retry: Retries.tryDown,\n failure: BeforeAfter.failedDown\n };\n const up = {\n traverse: prevSibling,\n gather: before,\n relative: Situ.before,\n retry: Retries.tryUp,\n failure: BeforeAfter.failedUp\n };\n\n const isKey = key => {\n return keycode => {\n return keycode === key;\n };\n };\n const isUp = isKey(38);\n const isDown = isKey(40);\n const isNavigation = keycode => {\n return keycode >= 37 && keycode <= 40;\n };\n const ltr = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n const rtl = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n const get$3 = _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 by = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n const adt = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = 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.domRange;\n const relative = adt.relative;\n const exact = adt.exact;\n const getWin = selection => {\n const start = getStart(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 caretPositionFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretPositionFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.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;\n return Optional.from((_a = doc.caretRangeFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y));\n };\n const availableSearch = (doc, x, y) => {\n if (doc.caretPositionFromPoint) {\n return caretPositionFromPoint(doc, x, y);\n } else if (doc.caretRangeFromPoint) {\n return caretRangeFromPoint(doc, x, y);\n } else {\n return Optional.none();\n }\n };\n const fromPoint = (win, x, y) => {\n const doc = 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 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\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const doSetNativeRange = (win, rng) => {\n getNativeSelection(win).each(selection => {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n const doSetRange = (win, start, soffset, finish, foffset) => {\n const rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n ltr: (start, soffset, finish, foffset) => {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: (start, soffset, finish, foffset) => {\n getNativeSelection(win).each(selection => {\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (_a) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n });\n }\n });\n const setExact = (win, start, soffset, finish, foffset) => {\n const relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n const setRelative = (win, startSitu, finishSitu) => {\n const relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const setToElement = (win, element, selectNodeContents$1 = true) => {\n const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n const rng = rngGetter(win, element);\n doSetNativeRange(win, rng);\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n const clear = win => {\n getNativeSelection(win).each(selection => selection.removeAllRanges());\n };\n\n const WindowBridge = win => {\n const elementFromPoint = (x, y) => {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n const getRect = element => {\n return element.dom.getBoundingClientRect();\n };\n const getRangedRect = (start, soffset, finish, foffset) => {\n const sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect(win, sel);\n };\n const getSelection = () => {\n return get$2(win).map(exactAdt => {\n return convertToRange(win, exactAdt);\n });\n };\n const fromSitus = situs => {\n const relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n const situsFromPoint = (x, y) => {\n return getAtPoint(win, x, y).map(exact => {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n const clearSelection = () => {\n clear(win);\n };\n const collapseSelection = (toStart = false) => {\n get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n const situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, (start, soffset, finish, foffset) => {\n const node = toStart ? start : finish;\n const offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n }));\n };\n const selectNode = element => {\n setToElement(win, element, false);\n };\n const selectContents = element => {\n setToElement(win, element);\n };\n const setSelection = sel => {\n setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n };\n const setRelativeSelection = (start, finish) => {\n setRelative(win, start, finish);\n };\n const getInnerHeight = () => {\n return win.innerHeight;\n };\n const getScrollY = () => {\n const pos = get$3(SugarElement.fromDom(win.document));\n return pos.top;\n };\n const scrollBy = (x, y) => {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint,\n getRect,\n getRangedRect,\n getSelection,\n fromSitus,\n situsFromPoint,\n clearSelection,\n collapseSelection,\n setSelection,\n setRelativeSelection,\n selectNode,\n selectContents,\n getInnerHeight,\n getScrollY,\n scrollBy\n };\n };\n\n const rc = (rows, cols) => ({\n rows,\n cols\n });\n const mouse = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n clearstate: handlers.clearstate,\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n const isEditableNode = node => closest$2(node, isHTMLElement).exists(isEditable$1);\n const isEditableSelection = (start, finish) => isEditableNode(start) || isEditableNode(finish);\n const keyboard = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const clearToNavigate = () => {\n annotations.clear(container);\n return Optional.none();\n };\n const keydown = (event, start, soffset, finish, foffset, direction) => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n if (isNavigation(keycode) && !shiftKey) {\n annotations.clearBeforeUpdate(container);\n }\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Optional.none;\n }\n }, selected => {\n const update$1 = attempts => {\n return () => {\n const navigation = findMap(attempts, delta => {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(() => {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n annotations.clear(container);\n return Response.create(Optional.none(), true);\n });\n }, _ => {\n return Optional.some(Response.create(Optional.none(), true));\n });\n };\n };\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && !shiftKey) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n const keyup = (event, start, soffset, finish, foffset) => {\n return retrieve$1(container, annotations.selectedSelector).fold(() => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n if (!shiftKey) {\n return Optional.none();\n }\n if (isNavigation(keycode) && isEditableSelection(start, finish)) {\n return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Optional.none();\n }\n }, Optional.none);\n };\n return {\n keydown,\n keyup\n };\n };\n const external = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n return (start, finish) => {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n const read = (element, attr) => {\n const value = get$b(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$2 = (element, attr, id) => {\n const old = read(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$4 = (element, attr, id) => {\n const nu = filter$2(read(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$1 = element => read(element, 'class');\n const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n const add = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$1(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n const remove$2 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const remove$1 = (element, classes) => {\n each$2(classes, x => {\n remove$2(element, x);\n });\n };\n\n const addClass = clazz => element => {\n add(element, clazz);\n };\n const removeClasses = classes => element => {\n remove$1(element, classes);\n };\n\n const byClass = ephemera => {\n const addSelectionClass = addClass(ephemera.selected);\n const removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n const clear = container => {\n const sels = descendants(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionClasses);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionClass);\n add(start, ephemera.firstSelected);\n add(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const byAttr = (ephemera, onSelection, onClear) => {\n const removeSelectionAttributes = element => {\n remove$7(element, ephemera.selected);\n remove$7(element, ephemera.firstSelected);\n remove$7(element, ephemera.lastSelected);\n };\n const addSelectionAttribute = element => {\n set$2(element, ephemera.selected, '1');\n };\n const clear = container => {\n clearBeforeUpdate(container);\n onClear();\n };\n const clearBeforeUpdate = container => {\n const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n each$2(sels, removeSelectionAttributes);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionAttribute);\n set$2(start, ephemera.firstSelected, '1');\n set$2(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const SelectionAnnotation = {\n byClass,\n byAttr\n };\n\n const fold = (subject, onNone, onMultiple, onSingle) => {\n switch (subject.tag) {\n case 'none':\n return onNone();\n case 'single':\n return onSingle(subject.element);\n case 'multiple':\n return onMultiple(subject.elements);\n }\n };\n const none = () => ({ tag: 'none' });\n const multiple = elements => ({\n tag: 'multiple',\n elements\n });\n const single = element => ({\n tag: 'single',\n element\n });\n\n const Selections = (lazyRoot, getStart, selectedSelector) => {\n const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n return { get };\n };\n\n const getUpOrLeftCells = (grid, selectedCells) => {\n const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n const upDetails = toDetailList(upGrid);\n return bind$2(upDetails, detail => {\n const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getDownOrRightCells = (grid, selectedCells) => {\n const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n const downDetails = toDetailList(downGrid);\n return bind$2(downDetails, detail => {\n const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getOtherCells = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.map(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const {rows} = extractGridDetails(grid);\n const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n return {\n upOrLeftCells,\n downOrRightCells\n };\n });\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$1 = 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 = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$1 = (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 filter = always;\n const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n const TableCellSelectionHandler = (editor, resizeHandler) => {\n const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n const onSelection = (cells, start, finish) => {\n const tableOpt = table(start);\n tableOpt.each(table => {\n const cellsDom = map$1(cells, cell => cell.dom);\n const cloneFormats = getTableCloneElements(editor);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n const selectedCells = getCellsFromSelection(editor);\n const otherCellsDom = getOtherCells(table, { selection: selectedCells }, generators).map(otherCells => map(otherCells, cellArr => map$1(cellArr, cell => cell.dom))).getOrUndefined();\n fireTableSelectionChange(editor, cellsDom, start.dom, finish.dom, otherCellsDom);\n });\n };\n const onClear = () => fireTableSelectionClear(editor);\n const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', _e => {\n const win = editor.getWin();\n const body = getBody(editor);\n const isRoot = getIsRoot(editor);\n const syncSelection = () => {\n const sel = editor.selection;\n const start = SugarElement.fromDom(sel.getStart());\n const end = SugarElement.fromDom(sel.getEnd());\n const shared = sharedOne(table, [\n start,\n end\n ]);\n shared.fold(() => annotations.clear(body), noop);\n };\n const mouseHandlers = mouse(win, body, isRoot, annotations);\n const keyHandlers = keyboard(win, body, isRoot, annotations);\n const external$1 = external(win, body, isRoot, annotations);\n const hasShiftKey = event => event.raw.shiftKey === true;\n editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n const handleResponse = (event, response) => {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(ns => {\n const relative = SimSelection.relative(ns.start, ns.finish);\n const rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n const keyup = event => {\n const wrappedEvent = fromRawEvent(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n const keydown = event => {\n const wrappedEvent = fromRawEvent(event);\n resizeHandler.hide();\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n handleResponse(wrappedEvent, response);\n });\n resizeHandler.show();\n };\n const isLeftMouse = raw => raw.button === 0;\n const isLeftButtonPressed = raw => {\n if (raw.buttons === undefined) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n const dragStart = _e => {\n mouseHandlers.clearstate();\n };\n const mouseDown = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent(e));\n }\n };\n const mouseOver = e => {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent(e));\n }\n };\n const mouseUp = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent(e));\n }\n };\n const getDoubleTap = () => {\n const lastTarget = Cell(SugarElement.fromDom(body));\n const lastTimeStamp = Cell(0);\n const touchEnd = t => {\n const target = SugarElement.fromDom(t.target);\n if (isTag('td')(target) || isTag('th')(target)) {\n const lT = lastTarget.get();\n const lTS = lastTimeStamp.get();\n if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd };\n };\n const doubleTap = getDoubleTap();\n editor.on('dragstart', dragStart);\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n editor.on('PreInit', () => {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n });\n const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n return map$1(cells, cell => cell.dom);\n }, cell => [cell.dom]);\n return {\n getSelectedCells,\n clearSelectedCells\n };\n };\n\n const Event = fields => {\n let handlers = [];\n const bind = handler => {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n const unbind = handler => {\n handlers = filter$2(handlers, h => {\n return h !== handler;\n });\n };\n const trigger = (...args) => {\n const event = {};\n each$2(fields, (name, i) => {\n event[name] = args[i];\n });\n each$2(handlers, handler => {\n handler(event);\n });\n };\n return {\n bind,\n unbind,\n trigger\n };\n };\n\n const create$1 = typeDefs => {\n const registry = map(typeDefs, event => {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n const trigger = map(typeDefs, event => {\n return event.trigger;\n });\n return {\n registry,\n trigger\n };\n };\n\n const last = (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 sort = arr => {\n return arr.slice(0).sort();\n };\n const reqMessage = (required, keys) => {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n const unsuppMessage = unsupported => {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n const validateStrArr = (label, array) => {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each$2(array, a => {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n const invalidTypeMessage = (incorrect, type) => {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n const checkDupes = everything => {\n const sorted = sort(everything);\n const dupe = find$1(sorted, (s, i) => {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(d => {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n const base = (handleUnsupported, required) => {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n const baseWith = (handleUnsupported, required, pred) => {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return obj => {\n const keys$1 = keys(obj);\n const allReqd = forall(required, req => {\n return contains$2(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n const invalidKeys = filter$2(required, key => {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n const handleExact = (required, keys) => {\n const unsupported = filter$2(keys, key => {\n return !contains$2(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n const exactly = required => base(handleExact, required);\n\n const DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n const DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n const DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n const InDrag = () => {\n let previous = Optional.none();\n const reset = () => {\n previous = Optional.none();\n };\n const update = (mode, nu) => {\n const result = previous.map(old => {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n const onEvent = (event, mode) => {\n const dataOption = mode.extract(event);\n dataOption.each(data => {\n const offset = update(mode, data);\n offset.each(d => {\n events.trigger.move(d);\n });\n });\n };\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent,\n reset,\n events: events.registry\n };\n };\n\n const NoDrag = () => {\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n const Movement = () => {\n const noDragState = NoDrag();\n const inDragState = InDrag();\n let dragState = noDragState;\n const on = () => {\n dragState.reset();\n dragState = inDragState;\n };\n const off = () => {\n dragState.reset();\n dragState = noDragState;\n };\n const onEvent = (event, mode) => {\n dragState.onEvent(event, mode);\n };\n const isOn = () => {\n return dragState === inDragState;\n };\n return {\n on,\n off,\n isOn,\n onEvent,\n events: inDragState.events\n };\n };\n\n const setup = (mutation, mode, settings) => {\n let active = false;\n const events = create$1({\n start: Event([]),\n stop: Event([])\n });\n const movement = Movement();\n const drop = () => {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n const throttledDrop = last(drop, 200);\n const go = parent => {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n const mousemove = event => {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(event => {\n mode.mutate(mutation, event.info);\n });\n const on = () => {\n active = true;\n };\n const off = () => {\n active = false;\n };\n const isActive = () => active;\n const runIfActive = f => {\n return (...args) => {\n if (active) {\n f.apply(null, args);\n }\n };\n };\n const sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n const destroy = () => {\n sink.destroy();\n };\n return {\n element: sink.element,\n go,\n on,\n off,\n isActive,\n destroy,\n events: events.registry\n };\n };\n\n const css = namespace => {\n const dashNamespace = namespace.replace(/\\./g, '-');\n const resolve = str => {\n return dashNamespace + '-' + str;\n };\n return { resolve };\n };\n\n const styles$1 = css('ephox-dragster');\n const resolve$1 = styles$1.resolve;\n\n const Blocker = options => {\n const settings = {\n layerClass: resolve$1('blocker'),\n ...options\n };\n const div = SugarElement.fromTag('div');\n set$2(div, 'role', 'presentation');\n setAll(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add(div, resolve$1('blocker'));\n add(div, settings.layerClass);\n const element = constant(div);\n const destroy = () => {\n remove$6(div);\n };\n return {\n element,\n destroy\n };\n };\n\n const compare = (old, nu) => {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n const extract = event => {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n const mutate = (mutation, info) => {\n mutation.mutate(info.left, info.top);\n };\n const sink = (dragApi, settings) => {\n const blocker = Blocker(settings);\n const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n const destroy = () => {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n const start = parent => {\n append$1(parent, blocker.element());\n };\n const stop = () => {\n remove$6(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start,\n stop,\n destroy\n });\n };\n var MouseDrag = DragMode({\n compare,\n extract,\n sink,\n mutate\n });\n\n const transform = (mutation, settings = {}) => {\n var _a;\n const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n const styles = css('ephox-snooker');\n const resolve = styles.resolve;\n\n const Mutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n const mutate = (x, y) => {\n events.trigger.drag(x, y);\n };\n return {\n mutate,\n events: events.registry\n };\n };\n\n const BarMutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n let target = Optional.none();\n const delegate = Mutation();\n delegate.events.drag.bind(event => {\n target.each(t => {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n const assign = t => {\n target = Optional.some(t);\n };\n const get = () => {\n return target;\n };\n return {\n assign,\n get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n const col = (column, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n const row = (r, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n const resizeBar = resolve('resizer-bar');\n const resizeRowBar = resolve('resizer-rows');\n const resizeColBar = resolve('resizer-cols');\n const BAR_THICKNESS = 7;\n const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n const resizableColumns = (warehouse, isResizable) => {\n const resizableCols = [];\n range$1(warehouse.grid.columns, index => {\n const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter$2(resizableCols, colIndex => {\n const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n return forall(columnCells, cell => isResizable(cell.element));\n });\n };\n const destroy = wire => {\n const previous = descendants(wire.parent(), '.' + resizeBar);\n each$2(previous, remove$6);\n };\n const drawBar = (wire, positions, create) => {\n const origin = wire.origin();\n each$2(positions, cpOption => {\n cpOption.each(cp => {\n const bar = create(origin, cp);\n add(bar, resizeBar);\n append$1(wire.parent(), bar);\n });\n });\n };\n const refreshCol = (wire, colPositions, position, tableHeight) => {\n drawBar(wire, colPositions, (origin, cp) => {\n const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n add(colBar, resizeColBar);\n return colBar;\n });\n };\n const refreshRow = (wire, rowPositions, position, tableWidth) => {\n drawBar(wire, rowPositions, (origin, cp) => {\n const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n add(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n const refreshGrid = (warhouse, wire, table, rows, cols) => {\n const position = absolute(table);\n const isResizable = wire.isResizable;\n const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n const refresh = (wire, table) => {\n destroy(wire);\n if (wire.isResizable(table)) {\n const warehouse = Warehouse.fromTable(table);\n const rows$1 = rows(warehouse);\n const cols = columns(warehouse);\n refreshGrid(warehouse, wire, table, rows$1, cols);\n }\n };\n const each = (wire, f) => {\n const bars = descendants(wire.parent(), '.' + resizeBar);\n each$2(bars, f);\n };\n const hide = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'none');\n });\n };\n const show = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'block');\n });\n };\n const isRowBar = element => {\n return has(element, resizeRowBar);\n };\n const isColBar = element => {\n return has(element, resizeColBar);\n };\n\n const resizeBarDragging = resolve('resizer-bar-dragging');\n const BarManager = wire => {\n const mutation = BarMutation();\n const resizing = transform(mutation, {});\n let hoverTable = Optional.none();\n const getResizer = (element, type) => {\n return Optional.from(get$b(element, type));\n };\n mutation.events.drag.bind(event => {\n getResizer(event.target, 'data-row').each(_dataRow => {\n const currentRow = getCssValue(event.target, 'top');\n set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n });\n getResizer(event.target, 'data-column').each(_dataCol => {\n const currentCol = getCssValue(event.target, 'left');\n set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n });\n });\n const getDelta = (target, dir) => {\n const newX = getCssValue(target, dir);\n const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(() => {\n mutation.get().each(target => {\n hoverTable.each(table => {\n getResizer(target, 'data-row').each(row => {\n const delta = getDelta(target, 'top');\n remove$7(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(column => {\n const delta = getDelta(target, 'left');\n remove$7(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n const handler = (target, dir) => {\n events.trigger.startAdjust();\n mutation.assign(target);\n set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n add(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.dragContainer());\n };\n const mousedown = bind(wire.parent(), 'mousedown', event => {\n if (isRowBar(event.target)) {\n handler(event.target, 'top');\n }\n if (isColBar(event.target)) {\n handler(event.target, 'left');\n }\n });\n const isRoot = e => {\n return eq$1(e, wire.view());\n };\n const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n const mouseover = bind(wire.view(), 'mouseover', event => {\n findClosestEditableTable(event.target).fold(() => {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, table => {\n if (resizing.isActive()) {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n }\n });\n });\n const destroy$1 = () => {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n const refresh$1 = tbl => {\n refresh(wire, tbl);\n };\n const events = create$1({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy$1,\n refresh: refresh$1,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(hide, wire),\n showBars: curry(show, wire),\n events: events.registry\n };\n };\n\n const create = (wire, resizing, lazySizing) => {\n const hdirection = height;\n const vdirection = width;\n const manager = BarManager(wire);\n const events = create$1({\n beforeResize: Event([\n 'table',\n 'type'\n ]),\n afterResize: Event([\n 'table',\n 'type'\n ]),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'row');\n const delta = hdirection.delta(event.delta, table);\n adjustHeight(table, delta, event.row);\n events.trigger.afterResize(table, 'row');\n });\n manager.events.startAdjust.bind(_event => {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'col');\n const delta = vdirection.delta(event.delta, table);\n const tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column, resizing, tableSize);\n events.trigger.afterResize(table, 'col');\n });\n return {\n on: manager.on,\n off: manager.off,\n refreshBars: manager.refresh,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n const TableResize = { create };\n\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + unique + String(time);\n };\n\n const only = (element, isResizable) => {\n const parent = isDocument(element) ? documentElement(element) : element;\n return {\n parent: constant(parent),\n view: constant(element),\n dragContainer: constant(parent),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const detached = (editable, chrome, isResizable) => {\n const origin = () => absolute(chrome);\n return {\n parent: constant(chrome),\n view: constant(editable),\n dragContainer: constant(chrome),\n origin,\n isResizable\n };\n };\n const body = (editable, chrome, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n dragContainer: constant(chrome),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const scrollable = (editable, chrome, dragContainer, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n dragContainer: constant(dragContainer),\n origin: () => absolute(chrome),\n isResizable\n };\n };\n const ResizeWire = {\n only,\n detached,\n body,\n scrollable\n };\n\n const createContainer = position => {\n const id = generate('resizer-container');\n const container = SugarElement.fromTag('div');\n set$2(container, 'id', id);\n setAll(container, {\n position,\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n return container;\n };\n const getInlineResizeWire = (editor, isResizable) => {\n const isSplitUiMode$1 = isSplitUiMode(editor);\n const editorBody = SugarElement.fromDom(editor.getBody());\n const container = createContainer(isSplitUiMode$1 ? 'relative' : 'static');\n const body = body$1();\n if (isSplitUiMode$1) {\n after$5(editorBody, container);\n return ResizeWire.scrollable(editorBody, container, body, isResizable);\n }\n append$1(body, container);\n return ResizeWire.body(editorBody, container, isResizable);\n };\n const get = (editor, isResizable) => {\n if (editor.inline) {\n return getInlineResizeWire(editor, isResizable);\n }\n return ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n const remove = (editor, wire) => {\n if (editor.inline) {\n remove$6(wire.parent());\n }\n };\n\n const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n const barResizerPrefix = 'bar-';\n const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n const syncTableCellPixels = table => {\n const warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each$2(cells$1(table), cell => {\n const computedWidth = get$a(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove$7(cell, 'width');\n });\n }\n };\n const isCornerResize = origin => startsWith(origin, 'corner-');\n const getCornerLocation = origin => removeLeading(origin, 'corner-');\n const TableResizeHandler = editor => {\n const selectionRng = value();\n const tableResize = value();\n const resizeWire = value();\n let startW;\n let startRawW;\n let startH;\n let startRawH;\n const lazySizing = table => get$5(editor, table);\n const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n const getNumColumns = table => getGridSize(table).columns;\n const getNumRows = table => getGridSize(table).rows;\n const afterCornerResize = (table, origin, width, height) => {\n const location = getCornerLocation(origin);\n const isRightEdgeResize = endsWith(location, 'e');\n const isNorthEdgeResize = startsWith(location, 'n');\n if (startRawW === '') {\n convertToPercentSizeWidth(table);\n }\n if (startRawH === '') {\n convertToPixelSizeHeight(table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n const resizing = lazyResizingBehaviour();\n const tableSize = lazySizing(table);\n const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage$1(startRawW)) {\n const percentW = parseFloat(startRawW.replace('%', ''));\n const targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncTableCellPixels(table);\n }\n if (height !== startH && startRawH !== '') {\n set$1(table, 'height', startRawH);\n const idx = isNorthEdgeResize ? 0 : getNumRows(table) - 1;\n adjustHeight(table, height - startH, idx);\n }\n };\n const destroy = () => {\n tableResize.on(sz => {\n sz.destroy();\n });\n resizeWire.on(w => {\n remove(editor, w);\n });\n };\n editor.on('init', () => {\n const rawWire = get(editor, isResizable);\n resizeWire.set(rawWire);\n if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n const resizing = lazyResizingBehaviour();\n const sz = TableResize.create(rawWire, resizing, lazySizing);\n if (!editor.mode.isReadOnly()) {\n sz.on();\n }\n sz.events.startDrag.bind(_event => {\n selectionRng.set(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(event => {\n const rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(event => {\n const table = event.table;\n const rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.on(rng => {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n tableResize.set(sz);\n }\n });\n editor.on('ObjectResizeStart', e => {\n const targetElm = e.target;\n if (isTable(targetElm) && !editor.mode.isReadOnly()) {\n const table = SugarElement.fromDom(targetElm);\n each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n convertToPixelSizeWidth(table);\n } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n convertToPercentSizeWidth(table);\n }\n if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n convertToPercentSizeWidth(table);\n }\n startW = e.width;\n startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n startH = e.height;\n startRawH = getRawHeight(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n const origin = e.origin;\n if (isCornerResize(origin)) {\n afterCornerResize(table, origin, e.width, e.height);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n const showResizeBars = () => {\n tableResize.on(resize => {\n resize.on();\n resize.showBars();\n });\n };\n const hideResizeBars = () => {\n tableResize.on(resize => {\n resize.off();\n resize.hideBars();\n });\n };\n editor.on('DisabledStateChange', e => {\n e.state ? hideResizeBars() : showResizeBars();\n });\n editor.on('SwitchMode', () => {\n editor.mode.isReadOnly() ? hideResizeBars() : showResizeBars();\n });\n editor.on('dragstart dragend', e => {\n e.type === 'dragstart' ? hideResizeBars() : showResizeBars();\n });\n editor.on('remove', () => {\n destroy();\n });\n const refresh = table => {\n tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n };\n const hide = () => {\n tableResize.on(resize => resize.hideBars());\n };\n const show = () => {\n tableResize.on(resize => resize.showBars());\n };\n return {\n refresh,\n hide,\n show\n };\n };\n\n const setupTable = editor => {\n register(editor);\n const resizeHandler = TableResizeHandler(editor);\n const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n registerCommands(editor, actions);\n registerQueryCommands(editor, actions);\n registerEvents(editor, actions);\n return {\n getSelectedCells: cellSelectionHandler.getSelectedCells,\n clearSelectedCells: cellSelectionHandler.clearSelectedCells\n };\n };\n\n const DomModel = editor => {\n const table = setupTable(editor);\n return { table };\n };\n var Model = () => {\n global$1.add('dom', DomModel);\n };\n\n Model();\n\n})();\n","// Exports the \"dom\" model for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/models/dom')\n// ES2015:\n// import 'tinymce/models/dom'\nrequire('./model.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const applyListFormat = (editor, listName, styleValue) => {\n const cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n\n const register$2 = editor => {\n editor.addCommand('ApplyUnorderedListStyle', (ui, value) => {\n applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', (ui, value) => {\n applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('advlist_number_styles', {\n processor: 'string[]',\n default: 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman'.split(',')\n });\n registerOption('advlist_bullet_styles', {\n processor: 'string[]',\n default: 'default,circle,square'.split(',')\n });\n };\n const getNumberStyles = option('advlist_number_styles');\n const getBulletStyles = option('advlist_bullet_styles');\n\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\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 nativeIndexOf = Array.prototype.indexOf;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const findUntil = (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\n const keys = Object.keys;\n const each = (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 = (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(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const isCustomList = list => /\\btox\\-/.test(list.className);\n const isChildOfBody = (editor, elm) => {\n return editor.dom.isChildOf(elm, editor.getBody());\n };\n const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n const inList = (editor, parents, nodeName) => findUntil(parents, parent => isListNode(parent) && !isCustomList(parent), isTableCellNode).exists(list => list.nodeName === nodeName && isChildOfBody(editor, list));\n const getSelectedStyleType = editor => {\n const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n const style = editor.dom.getStyle(listElm, 'listStyleType');\n return Optional.from(style);\n };\n const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n const initialNode = editor.selection.getNode();\n nodeChangeHandler({\n parents: editor.dom.getParents(initialNode),\n element: initialNode\n });\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n\n const styleValueToText = styleValue => {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, chr => {\n return chr.toUpperCase();\n });\n };\n const normalizeStyleValue = styleValue => isNullable(styleValue) || styleValue === 'default' ? '' : styleValue;\n const makeSetupHandler = (editor, nodeName) => api => {\n const updateButtonState = (editor, parents) => {\n const element = editor.selection.getStart(true);\n api.setActive(inList(editor, parents, nodeName));\n api.setEnabled(!isWithinNonEditableList(editor, element));\n };\n const nodeChangeHandler = e => updateButtonState(editor, e.parents);\n return setNodeChangeHandler(editor, nodeChangeHandler);\n };\n const addSplitButton = (editor, id, tooltip, cmd, nodeName, styles) => {\n const listStyleTypeAliases = {\n 'lower-latin': 'lower-alpha',\n 'upper-latin': 'upper-alpha',\n 'lower-alpha': 'lower-latin',\n 'upper-alpha': 'upper-latin'\n };\n const stylesContainsAliasMap = map(listStyleTypeAliases, alias => contains(styles, alias));\n editor.ui.registry.addSplitButton(id, {\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n presets: 'listpreview',\n columns: 3,\n fetch: callback => {\n const items = global.map(styles, styleValue => {\n const iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n const iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n const itemValue = normalizeStyleValue(styleValue);\n const displayText = styleValueToText(styleValue);\n return {\n type: 'choiceitem',\n value: itemValue,\n icon: 'list-' + iconStyle + '-' + iconName,\n text: displayText\n };\n });\n callback(items);\n },\n onAction: () => editor.execCommand(cmd),\n onItemAction: (_splitButtonApi, value) => {\n applyListFormat(editor, nodeName, value);\n },\n select: value => {\n const listStyleType = getSelectedStyleType(editor);\n return listStyleType.exists(listStyle => value === listStyle || listStyleTypeAliases[listStyle] === value && !stylesContainsAliasMap[value]);\n },\n onSetup: makeSetupHandler(editor, nodeName)\n });\n };\n const addButton = (editor, id, tooltip, cmd, nodeName, styleValue) => {\n editor.ui.registry.addToggleButton(id, {\n active: false,\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n onSetup: makeSetupHandler(editor, nodeName),\n onAction: () => editor.queryCommandState(cmd) || styleValue === '' ? editor.execCommand(cmd) : applyListFormat(editor, nodeName, styleValue)\n });\n };\n const addControl = (editor, id, tooltip, cmd, nodeName, styles) => {\n if (styles.length > 1) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName, normalizeStyleValue(styles[0]));\n }\n };\n const register = editor => {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor));\n };\n\n var Plugin = () => {\n global$1.add('advlist', editor => {\n if (editor.hasPlugin('lists')) {\n register$1(editor);\n register(editor);\n register$2(editor);\n } else {\n console.error('Please use the Lists plugin together with the List Styles plugin.');\n }\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const link = () => /(?:[A-Za-z][A-Za-z\\d.+-]{0,14}:\\/\\/(?:[-.~*+=!&;:'%@?^${}(),\\w]+@)?|www\\.|[-;:&=+$,.\\w]+@)[A-Za-z\\d-]+(?:\\.[A-Za-z\\d-]+)*(?::\\d+)?(?:\\/(?:[-.~*+=!;:'%@$(),\\/\\w]*[-~*+=%@$()\\/\\w])?)?(?:\\?(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?/g;\n\n const option = name => editor => editor.options.get(name);\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('autolink_pattern', {\n processor: 'regexp',\n default: new RegExp('^' + link().source + '$', 'i')\n });\n registerOption('link_default_target', { processor: 'string' });\n registerOption('link_default_protocol', {\n processor: 'string',\n default: 'https'\n });\n };\n const getAutoLinkPattern = option('autolink_pattern');\n const getDefaultLinkTarget = option('link_default_target');\n const getDefaultLinkProtocol = option('link_default_protocol');\n const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n\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 = type => value => typeOf(value) === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n const not = f => t => !f(t);\n\n const hasOwnProperty = Object.hasOwnProperty;\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const contains = (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\n const zeroWidth = '\\uFEFF';\n const isZwsp = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n const isTextNode = node => node.nodeType === 3;\n const isElement = node => node.nodeType === 1;\n const isBracketOrSpace = char => /^[(\\[{ \\u00a0]$/.test(char);\n const hasProtocol = url => /^([A-Za-z][A-Za-z\\d.+-]*:\\/\\/)|mailto:/.test(url);\n const isPunctuation = char => /[?!,.;:]/.test(char);\n const findChar = (text, index, predicate) => {\n for (let i = index - 1; i >= 0; i--) {\n const char = text.charAt(i);\n if (!isZwsp(char) && predicate(char)) {\n return i;\n }\n }\n return -1;\n };\n const freefallRtl = (container, offset) => {\n let tempNode = container;\n let tempOffset = offset;\n while (isElement(tempNode) && tempNode.childNodes[tempOffset]) {\n tempNode = tempNode.childNodes[tempOffset];\n tempOffset = isTextNode(tempNode) ? tempNode.data.length : tempNode.childNodes.length;\n }\n return {\n container: tempNode,\n offset: tempOffset\n };\n };\n\n const parseCurrentLine = (editor, offset) => {\n var _a;\n const voidElements = editor.schema.getVoidElements();\n const autoLinkPattern = getAutoLinkPattern(editor);\n const {dom, selection} = editor;\n if (dom.getParent(selection.getNode(), 'a[href]') !== null || editor.mode.isReadOnly()) {\n return null;\n }\n const rng = selection.getRng();\n const textSeeker = global(dom, node => {\n return dom.isBlock(node) || has(voidElements, node.nodeName.toLowerCase()) || dom.getContentEditable(node) === 'false';\n });\n const {\n container: endContainer,\n offset: endOffset\n } = freefallRtl(rng.endContainer, rng.endOffset);\n const root = (_a = dom.getParent(endContainer, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n const endSpot = textSeeker.backwards(endContainer, endOffset + offset, (node, offset) => {\n const text = node.data;\n const idx = findChar(text, offset, not(isBracketOrSpace));\n return idx === -1 || isPunctuation(text[idx]) ? idx : idx + 1;\n }, root);\n if (!endSpot) {\n return null;\n }\n let lastTextNode = endSpot.container;\n const startSpot = textSeeker.backwards(endSpot.container, endSpot.offset, (node, offset) => {\n lastTextNode = node;\n const idx = findChar(node.data, offset, isBracketOrSpace);\n return idx === -1 ? idx : idx + 1;\n }, root);\n const newRng = dom.createRng();\n if (!startSpot) {\n newRng.setStart(lastTextNode, 0);\n } else {\n newRng.setStart(startSpot.container, startSpot.offset);\n }\n newRng.setEnd(endSpot.container, endSpot.offset);\n const rngText = removeZwsp(newRng.toString());\n const matches = rngText.match(autoLinkPattern);\n if (matches) {\n let url = matches[0];\n if (startsWith(url, 'www.')) {\n const protocol = getDefaultLinkProtocol(editor);\n url = protocol + '://' + url;\n } else if (contains(url, '@') && !hasProtocol(url)) {\n url = 'mailto:' + url;\n }\n return {\n rng: newRng,\n url\n };\n } else {\n return null;\n }\n };\n const convertToLink = (editor, result) => {\n const {dom, selection} = editor;\n const {rng, url} = result;\n const bookmark = selection.getBookmark();\n selection.setRng(rng);\n const command = 'createlink';\n const args = {\n command,\n ui: false,\n value: url\n };\n const beforeExecEvent = editor.dispatch('BeforeExecCommand', args);\n if (!beforeExecEvent.isDefaultPrevented()) {\n editor.getDoc().execCommand(command, false, url);\n editor.dispatch('ExecCommand', args);\n const defaultLinkTarget = getDefaultLinkTarget(editor);\n if (isString(defaultLinkTarget)) {\n const anchor = selection.getNode();\n dom.setAttrib(anchor, 'target', defaultLinkTarget);\n if (defaultLinkTarget === '_blank' && !allowUnsafeLinkTarget(editor)) {\n dom.setAttrib(anchor, 'rel', 'noopener');\n }\n }\n }\n selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n };\n const handleSpacebar = editor => {\n const result = parseCurrentLine(editor, -1);\n if (isNonNullable(result)) {\n convertToLink(editor, result);\n }\n };\n const handleBracket = handleSpacebar;\n const handleEnter = editor => {\n const result = parseCurrentLine(editor, 0);\n if (isNonNullable(result)) {\n convertToLink(editor, result);\n }\n };\n const setup = editor => {\n editor.on('keydown', e => {\n if (e.keyCode === 13 && !e.isDefaultPrevented()) {\n handleEnter(editor);\n }\n });\n editor.on('keyup', e => {\n if (e.keyCode === 32) {\n handleSpacebar(editor);\n } else if (e.keyCode === 48 && e.shiftKey || e.keyCode === 221) {\n handleBracket(editor);\n }\n });\n };\n\n var Plugin = () => {\n global$1.add('autolink', editor => {\n register(editor);\n setup(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"autolink\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autolink')\n// ES2015:\n// import 'tinymce/plugins/autolink'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\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 isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\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\n const noop = () => {\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\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 never = constant(false);\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 contains$1 = (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 = (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$1 = (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 filter$1 = (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 groupBy = (xs, f) => {\n if (xs.length === 0) {\n return [];\n } else {\n let wasType = f(xs[0]);\n const r = [];\n let group = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (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 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$1(xs, 0);\n const last = xs => get$1(xs, xs.length - 1);\n const unique = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$1(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 is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n\n const COMMENT = 8;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const fromHtml = (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$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = 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 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint\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\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 const is = is$1;\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n const isElement$1 = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$1(e) && name(e) === tag;\n\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 nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n const child = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child(element, 0);\n const lastChild = element => child(element, element.dom.childNodes.length - 1);\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\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\n const inBody = element => {\n const dom = isText(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 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$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n };\n\n const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, e => is$1(e, selector), isRoot);\n const closest$1 = (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 closest = target => closest$1(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 before$1 = (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 = (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$1(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\n const before = (marker, elements) => {\n each$1(elements, x => {\n before$1(marker, x);\n });\n };\n const append = (parent, elements) => {\n each$1(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(element), rogue => {\n remove(rogue);\n });\n };\n const remove = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const fromDom = nodes => map(nodes, SugarElement.fromDom);\n\n const keys = Object.keys;\n const each = (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 objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\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 setAll = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const deep = original => clone(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$1(original);\n setAll(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after(original, nu);\n const children$1 = children(original);\n append(nu, children$1);\n remove(original);\n return nu;\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const matchNodeName = name => node => isNonNullable(node) && node.nodeName.toLowerCase() === name;\n const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n const isTextNode$1 = node => isNonNullable(node) && node.nodeType === 3;\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n const isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n const isOlNode = matchNodeName('ol');\n const isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n const isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n const isBr = matchNodeName('br');\n const isFirstChild = node => {\n var _a;\n return ((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === node;\n };\n const isTextBlock = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getTextBlockElements();\n const isBlock = (node, blockElements) => isNonNullable(node) && node.nodeName in blockElements;\n const isVoid = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getVoidElements();\n const isBogusBr = (dom, node) => {\n if (!isBr(node)) {\n return false;\n }\n return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n };\n const isEmpty$2 = (dom, elm, keepBookmarks) => {\n const empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n const isChildOfBody = (dom, elm) => dom.isChildOf(elm, dom.getRoot());\n\n const option = name => editor => editor.options.get(name);\n const register$3 = editor => {\n const registerOption = editor.options.register;\n registerOption('lists_indent_on_tab', {\n processor: 'boolean',\n default: true\n });\n };\n const shouldIndentOnTab = option('lists_indent_on_tab');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n\n const createTextBlock = (editor, contentNode, attrs = {}) => {\n const dom = editor.dom;\n const blockElements = editor.schema.getBlockElements();\n const fragment = dom.createFragment();\n const blockName = getForcedRootBlock(editor);\n const blockAttrs = getForcedRootBlockAttrs(editor);\n let node;\n let textBlock;\n let hasContentNode = false;\n textBlock = dom.create(blockName, {\n ...blockAttrs,\n ...attrs.style ? { style: attrs.style } : {}\n });\n if (!isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n while (node = contentNode.firstChild) {\n const nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (!textBlock) {\n textBlock = dom.create(blockName, blockAttrs);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n }\n }\n if (!hasContentNode && textBlock) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n return fragment;\n };\n\n const DOM$2 = global$3.DOM;\n const splitList = (editor, list, li) => {\n const removeAndKeepBookmarks = targetNode => {\n const parent = targetNode.parentNode;\n if (parent) {\n global$2.each(bookmarks, node => {\n parent.insertBefore(node, li.parentNode);\n });\n }\n DOM$2.remove(targetNode);\n };\n const bookmarks = DOM$2.select('span[data-mce-type=\"bookmark\"]', list);\n const newBlock = createTextBlock(editor, li);\n const tmpRng = DOM$2.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(list);\n const fragment = tmpRng.extractContents();\n for (let node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM$2.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$2.insertAfter(fragment, list);\n }\n DOM$2.insertAfter(newBlock, list);\n const parent = li.parentElement;\n if (parent && isEmpty$2(editor.dom, parent)) {\n removeAndKeepBookmarks(parent);\n }\n DOM$2.remove(li);\n if (isEmpty$2(editor.dom, list)) {\n DOM$2.remove(list);\n }\n };\n\n const isDescriptionDetail = isTag('dd');\n const isDescriptionTerm = isTag('dt');\n const outdentDlItem = (editor, item) => {\n if (isDescriptionDetail(item)) {\n mutate(item, 'dt');\n } else if (isDescriptionTerm(item)) {\n parentElement(item).each(dl => splitList(editor, dl.dom, item.dom));\n }\n };\n const indentDlItem = item => {\n if (isDescriptionTerm(item)) {\n mutate(item, 'dd');\n }\n };\n const dlIndentation = (editor, indentation, dlItems) => {\n if (indentation === 'Indent') {\n each$1(dlItems, indentDlItem);\n } else {\n each$1(dlItems, item => outdentDlItem(editor, item));\n }\n };\n\n const getNormalizedPoint = (container, offset) => {\n if (isTextNode$1(container)) {\n return {\n container,\n offset\n };\n }\n const node = global$6.getNode(container, offset);\n if (isTextNode$1(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && isTextNode$1(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && isTextNode$1(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container,\n offset\n };\n };\n const normalizeRange = rng => {\n const outRng = rng.cloneRange();\n const rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n const rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n\n const listNames = [\n 'OL',\n 'UL',\n 'DL'\n ];\n const listSelector = listNames.join(',');\n const getParentList = (editor, node) => {\n const selectionStart = node || editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, listSelector, getClosestListHost(editor, selectionStart));\n };\n const isParentListSelected = (parentList, selectedBlocks) => isNonNullable(parentList) && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n const findSubLists = parentList => filter$1(parentList.querySelectorAll(listSelector), isListNode);\n const getSelectedSubLists = editor => {\n const parentList = getParentList(editor);\n const selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return filter$1(selectedBlocks, elm => {\n return isListNode(elm) && parentList !== elm;\n });\n }\n };\n const findParentListItemsNodes = (editor, elms) => {\n const listItemsElms = global$2.map(elms, elm => {\n const parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListHost(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return unique(listItemsElms);\n };\n const getSelectedListItems = editor => {\n const selectedBlocks = editor.selection.getSelectedBlocks();\n return filter$1(findParentListItemsNodes(editor, selectedBlocks), isListItemNode);\n };\n const getSelectedDlItems = editor => filter$1(getSelectedListItems(editor), isDlItemNode);\n const getClosestEditingHost = (editor, elm) => {\n const parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n return parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n };\n const isListHost = (schema, node) => !isListNode(node) && !isListItemNode(node) && exists(listNames, listName => schema.isValidChild(node.nodeName, listName));\n const getClosestListHost = (editor, elm) => {\n const parentBlocks = editor.dom.getParents(elm, editor.dom.isBlock);\n const isNotForcedRootBlock = elm => elm.nodeName.toLowerCase() !== getForcedRootBlock(editor);\n const parentBlock = find(parentBlocks, elm => isNotForcedRootBlock(elm) && isListHost(editor.schema, elm));\n return parentBlock.getOr(editor.getBody());\n };\n const isListInsideAnLiWithFirstAndLastNotListElement = list => parent(list).exists(parent => isListItemNode(parent.dom) && firstChild(parent).exists(firstChild => !isListNode(firstChild.dom)) && lastChild(parent).exists(lastChild => !isListNode(lastChild.dom)));\n const findLastParentListNode = (editor, elm) => {\n const parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n return last(parentLists);\n };\n const getSelectedLists = editor => {\n const firstList = findLastParentListNode(editor, editor.selection.getStart());\n const subsequentLists = filter$1(editor.selection.getSelectedBlocks(), isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n const getParentLists = editor => {\n const elm = editor.selection.getStart();\n return editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n };\n const getSelectedListRoots = editor => {\n const selectedLists = getSelectedLists(editor);\n const parentLists = getParentLists(editor);\n return find(parentLists, p => isListInsideAnLiWithFirstAndLastNotListElement(SugarElement.fromDom(p))).fold(() => getUniqueListRoots(editor, selectedLists), l => [l]);\n };\n const getUniqueListRoots = (editor, lists) => {\n const listRoots = map(lists, list => findLastParentListNode(editor, list).getOr(list));\n return unique(listRoots);\n };\n\n const isCustomList = list => /\\btox\\-/.test(list.className);\n const inList = (parents, listName) => findUntil(parents, isListNode, isTableCellNode).exists(list => list.nodeName === listName && !isCustomList(list));\n const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n const selectionIsWithinNonEditableList = editor => {\n const parentList = getParentList(editor);\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n const initialNode = editor.selection.getNode();\n nodeChangeHandler({\n parents: editor.dom.getParents(initialNode),\n element: initialNode\n });\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$1(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const fireListEvent = (editor, action, element) => editor.dispatch('ListMutation', {\n action,\n element\n });\n\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty$1 = s => !isNotEmpty(s);\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const set = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n\n const isList = el => is(el, 'OL,UL');\n const isListItem = el => is(el, 'LI');\n const hasFirstChildList = el => firstChild(el).exists(isList);\n const hasLastChildList = el => lastChild(el).exists(isList);\n\n const isEntryList = entry => 'listAttributes' in entry;\n const isEntryComment = entry => 'isComment' in entry;\n const isEntryFragment = entry => 'isFragment' in entry;\n const isIndented = entry => entry.depth > 0;\n const isSelected = entry => entry.isSelected;\n const cloneItemContent = li => {\n const children$1 = children(li);\n const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n const createEntry = (li, depth, isSelected) => parent(li).filter(isElement$1).map(list => ({\n depth,\n dirty: false,\n isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone$1(li),\n listAttributes: clone$1(list),\n listType: name(list),\n isInPreviousLi: false\n }));\n\n const joinSegment = (parent, child) => {\n append$1(parent.item, child.list);\n };\n const joinSegments = segments => {\n for (let i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n const appendSegments = (head$1, tail) => {\n lift2(last(head$1), head(tail), joinSegment);\n };\n const createSegment = (scope, listType) => {\n const segment = {\n list: SugarElement.fromTag(listType, scope),\n item: SugarElement.fromTag('li', scope)\n };\n append$1(segment.list, segment.item);\n return segment;\n };\n const createSegments = (scope, entry, size) => {\n const segments = [];\n for (let i = 0; i < size; i++) {\n segments.push(createSegment(scope, isEntryList(entry) ? entry.listType : entry.parentListType));\n }\n return segments;\n };\n const populateSegments = (segments, entry) => {\n for (let i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(segment => {\n if (isEntryList(entry)) {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n }\n append(segment.item, entry.content);\n });\n };\n const normalizeSegment = (segment, entry) => {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n const createItem = (scope, attr, content) => {\n const item = SugarElement.fromTag('li', scope);\n setAll(item, attr);\n append(item, content);\n return item;\n };\n const appendItem = (segment, item) => {\n append$1(segment.list, item);\n segment.item = item;\n };\n const writeShallow = (scope, cast, entry) => {\n const newCast = cast.slice(0, entry.depth);\n last(newCast).each(segment => {\n if (isEntryList(entry)) {\n const item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n } else if (isEntryFragment(entry)) {\n append(segment.item, entry.content);\n } else {\n const item = SugarElement.fromHtml(``);\n append$1(segment.list, item);\n }\n });\n return newCast;\n };\n const writeDeep = (scope, cast, entry) => {\n const segments = createSegments(scope, entry, entry.depth - cast.length);\n joinSegments(segments);\n populateSegments(segments, entry);\n appendSegments(cast, segments);\n return cast.concat(segments);\n };\n const composeList = (scope, entries) => {\n let firstCommentEntryOpt = Optional.none();\n const cast = foldl(entries, (cast, entry, i) => {\n if (!isEntryComment(entry)) {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n } else {\n if (i === 0) {\n firstCommentEntryOpt = Optional.some(entry);\n return cast;\n }\n return writeShallow(scope, cast, entry);\n }\n }, []);\n firstCommentEntryOpt.each(firstCommentEntry => {\n const item = SugarElement.fromHtml(``);\n head(cast).each(fistCast => {\n prepend(fistCast.list, item);\n });\n });\n return head(cast).map(segment => segment.list);\n };\n\n const indentEntry = (indentation, entry) => {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n entry.dirty = true;\n };\n\n const cloneListProperties = (target, source) => {\n if (isEntryList(target) && isEntryList(source)) {\n target.listType = source.listType;\n target.listAttributes = { ...source.listAttributes };\n }\n };\n const cleanListProperties = entry => {\n entry.listAttributes = filter(entry.listAttributes, (_value, key) => key !== 'start');\n };\n const closestSiblingEntry = (entries, start) => {\n const depth = entries[start].depth;\n const matches = entry => entry.depth === depth && !entry.dirty;\n const until = entry => entry.depth < depth;\n return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(() => findUntil(entries.slice(start + 1), matches, until));\n };\n const normalizeEntries = entries => {\n each$1(entries, (entry, i) => {\n closestSiblingEntry(entries, i).fold(() => {\n if (entry.dirty && isEntryList(entry)) {\n cleanListProperties(entry);\n }\n }, matchingEntry => cloneListProperties(entry, matchingEntry));\n });\n return entries;\n };\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 parseSingleItem = (depth, itemSelection, selectionState, item) => {\n var _a;\n if (isComment(item)) {\n return [{\n depth: depth + 1,\n content: (_a = item.dom.nodeValue) !== null && _a !== void 0 ? _a : '',\n dirty: false,\n isSelected: false,\n isComment: true\n }];\n }\n itemSelection.each(selection => {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n const currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(selection => {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n const childListEntries = lastChild(item).filter(isList).map(list => parseList(depth, itemSelection, selectionState, list)).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n };\n const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => parseSingleItem(depth, itemSelection, selectionState, item), list => {\n const parsedSiblings = foldl(children(item), (acc, liChild, i) => {\n if (i === 0) {\n return acc;\n } else {\n if (isListItem(liChild)) {\n return acc.concat(parseSingleItem(depth, itemSelection, selectionState, liChild));\n } else {\n const fragment = {\n isFragment: true,\n depth,\n content: [liChild],\n isSelected: false,\n dirty: false,\n parentListType: name(list)\n };\n return acc.concat(fragment);\n }\n }\n }, []);\n return parseList(depth, itemSelection, selectionState, list).concat(parsedSiblings);\n });\n const parseList = (depth, itemSelection, selectionState, list) => bind(children(list), element => {\n const parser = isList(element) ? parseList : parseItem;\n const newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n const parseLists = (lists, itemSelection) => {\n const selectionState = Cell(false);\n const initialDepth = 0;\n return map(lists, list => ({\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n }));\n };\n\n const outdentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return map(normalizedEntries, entry => {\n const content = !isEntryComment(entry) ? fromElements(entry.content) : fromElements([SugarElement.fromHtml(``)]);\n const listItemAttrs = isEntryList(entry) ? entry.itemAttributes : {};\n return SugarElement.fromDom(createTextBlock(editor, content.dom, listItemAttrs));\n });\n };\n const indentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return composeList(editor.contentDocument, normalizedEntries).toArray();\n };\n const composeEntries = (editor, entries) => bind(groupBy(entries, isIndented), entries => {\n const groupIsIndented = head(entries).exists(isIndented);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n const indentSelectedEntries = (entries, indentation) => {\n each$1(filter$1(entries, isSelected), entry => indentEntry(indentation, entry));\n };\n const getItemSelection = editor => {\n const selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), (start, end) => ({\n start,\n end\n }));\n };\n const listIndentation = (editor, lists, indentation) => {\n const entrySets = parseLists(lists, getItemSelection(editor));\n each$1(entrySets, entrySet => {\n indentSelectedEntries(entrySet.entries, indentation);\n const composedLists = composeEntries(editor, entrySet.entries);\n each$1(composedLists, composedList => {\n fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom);\n });\n before(entrySet.sourceList, composedLists);\n remove(entrySet.sourceList);\n });\n };\n\n const selectionIndentation = (editor, indentation) => {\n const lists = fromDom(getSelectedListRoots(editor));\n const dlItems = fromDom(getSelectedDlItems(editor));\n let isHandled = false;\n if (lists.length || dlItems.length) {\n const bookmark = editor.selection.getBookmark();\n listIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n const handleIndentation = (editor, indentation) => !selectionIsWithinNonEditableList(editor) && selectionIndentation(editor, indentation);\n const indentListSelection = editor => handleIndentation(editor, 'Indent');\n const outdentListSelection = editor => handleIndentation(editor, 'Outdent');\n const flattenListSelection = editor => handleIndentation(editor, 'Flatten');\n\n const zeroWidth = '\\uFEFF';\n const isZwsp = char => char === zeroWidth;\n\n const ancestor$1 = (scope, predicate, isRoot) => ancestor$3(scope, predicate, isRoot).isSome();\n\n const ancestor = (element, target) => ancestor$1(element, curry(eq, target));\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n const DOM$1 = global$3.DOM;\n const createBookmark = rng => {\n const bookmark = {};\n const setupEndPoint = start => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n const offsetNode = DOM$1.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM$1.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n const resolveBookmark = bookmark => {\n const restoreEndPoint = start => {\n const nodeIndex = container => {\n var _a;\n let node = (_a = container.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild;\n let idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (!isElement(node) || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n let container = bookmark[start ? 'startContainer' : 'endContainer'];\n let offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (isElement(container) && container.parentNode) {\n const node = container;\n offset = nodeIndex(container);\n container = container.parentNode;\n DOM$1.remove(node);\n if (!container.hasChildNodes() && DOM$1.isBlock(container)) {\n container.appendChild(DOM$1.create('br'));\n }\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n restoreEndPoint(true);\n restoreEndPoint();\n const rng = DOM$1.createRng();\n rng.setStart(bookmark.startContainer, bookmark.startOffset);\n if (bookmark.endContainer) {\n rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n }\n return normalizeRange(rng);\n };\n\n const listToggleActionFromListName = listName => {\n switch (listName) {\n case 'UL':\n return 'ToggleUlList';\n case 'OL':\n return 'ToggleOlList';\n case 'DL':\n return 'ToggleDLList';\n }\n };\n\n const updateListStyle = (dom, el, detail) => {\n const type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n const setAttribs = (elm, attrs) => {\n global$2.each(attrs, (value, key) => {\n elm.setAttribute(key, value);\n });\n };\n const updateListAttrs = (dom, el, detail) => {\n setAttribs(el, detail['list-attributes']);\n global$2.each(dom.select('li', el), li => {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n const updateListWithDetails = (dom, el, detail) => {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n const removeStyles = (dom, element, styles) => {\n global$2.each(styles, style => dom.setStyle(element, style, ''));\n };\n const isInline = (editor, node) => isNonNullable(node) && !isBlock(node, editor.schema.getBlockElements());\n const getEndPointNode = (editor, rng, start, root) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n const offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n const findBlockAncestor = node => {\n while (!editor.dom.isBlock(node) && node.parentNode && root !== node) {\n node = node.parentNode;\n }\n return node;\n };\n const findBetterContainer = (container, forward) => {\n var _a;\n const walker = new global$5(container, findBlockAncestor(container));\n const dir = forward ? 'next' : 'prev';\n let node;\n while (node = walker[dir]()) {\n if (!(isVoid(editor, node) || isZwsp(node.textContent) || ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length) === 0)) {\n return Optional.some(node);\n }\n }\n return Optional.none();\n };\n if (start && isTextNode$1(container)) {\n if (isZwsp(container.textContent)) {\n container = findBetterContainer(container, false).getOr(container);\n } else {\n if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n container = container.parentNode;\n }\n while (container.previousSibling !== null && (isInline(editor, container.previousSibling) || isTextNode$1(container.previousSibling))) {\n container = container.previousSibling;\n }\n }\n }\n if (!start && isTextNode$1(container)) {\n if (isZwsp(container.textContent)) {\n container = findBetterContainer(container, true).getOr(container);\n } else {\n if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n container = container.parentNode;\n }\n while (container.nextSibling !== null && (isInline(editor, container.nextSibling) || isTextNode$1(container.nextSibling))) {\n container = container.nextSibling;\n }\n }\n }\n while (container.parentNode !== root) {\n const parent = container.parentNode;\n if (isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(parent.nodeName)) {\n return container;\n }\n container = parent;\n }\n return container;\n };\n const getSelectedTextBlocks = (editor, rng, root) => {\n const textBlocks = [];\n const dom = editor.dom;\n const startNode = getEndPointNode(editor, rng, true, root);\n const endNode = getEndPointNode(editor, rng, false, root);\n let block;\n const siblings = [];\n for (let node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$2.each(siblings, node => {\n var _a;\n if (isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || isBr(node)) {\n if (isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n const nextSibling = node.nextSibling;\n if (global$1.isBookmarkNode(node)) {\n if (isListNode(nextSibling) || isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n const hasCompatibleStyle = (dom, sib, detail) => {\n const sibStyle = dom.getStyle(sib, 'list-style-type');\n let detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n const getRootSearchStart = (editor, range) => {\n const start = editor.selection.getStart(true);\n const startPoint = getEndPointNode(editor, range, true, editor.getBody());\n if (ancestor(SugarElement.fromDom(startPoint), SugarElement.fromDom(range.commonAncestorContainer))) {\n return range.commonAncestorContainer;\n } else {\n return start;\n }\n };\n const applyList = (editor, listName, detail) => {\n const rng = editor.selection.getRng();\n let listItemName = 'LI';\n const root = getClosestListHost(editor, getRootSearchStart(editor, rng));\n const dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n const bookmark = createBookmark(rng);\n const selectedTextBlocks = filter$1(getSelectedTextBlocks(editor, rng, root), editor.dom.isEditable);\n global$2.each(selectedTextBlocks, block => {\n let listBlock;\n const sibling = block.previousSibling;\n const parent = block.parentNode;\n if (!isListItemNode(parent)) {\n if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n parent.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n }\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n };\n const isValidLists = (list1, list2) => {\n return isListNode(list1) && list1.nodeName === (list2 === null || list2 === void 0 ? void 0 : list2.nodeName);\n };\n const hasSameListStyle = (dom, list1, list2) => {\n const targetStyle = dom.getStyle(list1, 'list-style-type', true);\n const style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n const hasSameClasses = (elm1, elm2) => {\n return elm1.className === elm2.className;\n };\n const shouldMerge = (dom, list1, list2) => {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n const mergeWithAdjacentLists = (dom, listBlock) => {\n let node;\n let sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(liSibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(liSibling);\n }\n };\n const updateList$1 = (editor, list, listName, detail) => {\n if (list.nodeName !== listName) {\n const newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n const updateCustomList = (editor, list, listName, detail) => {\n list.classList.forEach((cls, _, classList) => {\n if (cls.startsWith('tox-')) {\n classList.remove(cls);\n if (classList.length === 0) {\n list.removeAttribute('class');\n }\n }\n });\n if (list.nodeName !== listName) {\n const newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n const toggleMultipleLists = (editor, parentList, lists, listName, detail) => {\n const parentIsList = isListNode(parentList);\n if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n applyList(editor, listName, detail);\n const bookmark = createBookmark(editor.selection.getRng());\n const allLists = parentIsList ? [\n parentList,\n ...lists\n ] : lists;\n const updateFunction = parentIsList && isCustomList(parentList) ? updateCustomList : updateList$1;\n global$2.each(allLists, elm => {\n updateFunction(editor, elm, listName, detail);\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const hasListStyleDetail = detail => {\n return 'list-style-type' in detail;\n };\n const toggleSingleList = (editor, parentList, listName, detail) => {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n const bookmark = createBookmark(editor.selection.getRng());\n if (isCustomList(parentList)) {\n parentList.classList.forEach((cls, _, classList) => {\n if (cls.startsWith('tox-')) {\n classList.remove(cls);\n if (classList.length === 0) {\n parentList.removeAttribute('class');\n }\n }\n });\n }\n updateListWithDetails(editor.dom, parentList, detail);\n const newList = editor.dom.rename(parentList, listName);\n mergeWithAdjacentLists(editor.dom, newList);\n editor.selection.setRng(resolveBookmark(bookmark));\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n }\n } else {\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n }\n };\n const toggleList = (editor, listName, _detail) => {\n const parentList = getParentList(editor);\n if (isWithinNonEditableList(editor, parentList)) {\n return;\n }\n const selectedSubLists = getSelectedSubLists(editor);\n const detail = isObject(_detail) ? _detail : {};\n if (selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n\n const DOM = global$3.DOM;\n const normalizeList = (dom, list) => {\n const parentNode = list.parentElement;\n if (parentNode && parentNode.nodeName === 'LI' && parentNode.firstChild === list) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n if (isEmpty$2(dom, parentNode)) {\n DOM.remove(parentNode);\n }\n } else {\n DOM.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (isListNode(parentNode)) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n }\n }\n };\n const normalizeLists = (dom, element) => {\n const lists = global$2.grep(dom.select('ol,ul', element));\n global$2.each(lists, list => {\n normalizeList(dom, list);\n });\n };\n\n const findNextCaretContainer = (editor, rng, isForward, root) => {\n let node = rng.startContainer;\n const offset = rng.startOffset;\n if (isTextNode$1(node) && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n const nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (isElement(node)) {\n node = global$6.getNode(node, offset);\n }\n const walker = new global$5(node, root);\n if (isForward) {\n if (isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n const walkFn = isForward ? walker.next.bind(walker) : walker.prev2.bind(walker);\n while (node = walkFn()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (isTextNode$1(node) && node.data.length > 0) {\n return node;\n }\n }\n return null;\n };\n const hasOnlyOneBlockChild = (dom, elm) => {\n const childNodes = elm.childNodes;\n return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n const isUnwrappable = node => Optional.from(node).map(SugarElement.fromDom).filter(isHTMLElement).exists(el => isEditable(el) && !contains$1(['details'], name(el)));\n const unwrapSingleBlockChild = (dom, elm) => {\n if (hasOnlyOneBlockChild(dom, elm) && isUnwrappable(elm.firstChild)) {\n dom.remove(elm.firstChild, true);\n }\n };\n const moveChildren = (dom, fromElm, toElm) => {\n let node;\n const targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!isEmpty$2(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n const mergeLiElements = (dom, fromElm, toElm) => {\n let listNode;\n const ul = fromElm.parentNode;\n if (!isChildOfBody(dom, fromElm) || !isChildOfBody(dom, toElm)) {\n return;\n }\n if (isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n const node = toElm.lastChild;\n if (node && isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (isEmpty$2(dom, toElm, true)) {\n empty(SugarElement.fromDom(toElm));\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n const contains$1 = contains(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n const nestedLists = contains$1 ? dom.getParents(fromElm, isListNode, toElm) : [];\n dom.remove(fromElm);\n each$1(nestedLists, list => {\n if (isEmpty$2(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n const mergeIntoEmptyLi = (editor, fromLi, toLi) => {\n empty(SugarElement.fromDom(toLi));\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi, 0);\n };\n const mergeForward = (editor, rng, fromLi, toLi) => {\n const dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n const bookmark = createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const mergeBackward = (editor, rng, fromLi, toLi) => {\n const bookmark = createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n const resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n const backspaceDeleteFromListToListCaret = (editor, isForward) => {\n const dom = editor.dom, selection = editor.selection;\n const selectionStartElm = selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const li = dom.getParent(selection.getStart(), 'LI', root);\n if (li) {\n const ul = li.parentElement;\n if (ul === editor.getBody() && isEmpty$2(dom, ul)) {\n return true;\n }\n const rng = normalizeRange(selection.getRng());\n const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n const willMergeParentIntoChild = otherLi && (isForward ? dom.isChildOf(li, otherLi) : dom.isChildOf(otherLi, li));\n if (otherLi && otherLi !== li && !willMergeParentIntoChild) {\n editor.undoManager.transact(() => {\n if (isForward) {\n mergeForward(editor, rng, otherLi, li);\n } else {\n if (isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng, li, otherLi);\n }\n }\n });\n return true;\n } else if (willMergeParentIntoChild && !isForward && otherLi !== li) {\n const commonAncestorParent = rng.commonAncestorContainer.parentElement;\n if (!commonAncestorParent || dom.isChildOf(otherLi, commonAncestorParent)) {\n return false;\n }\n editor.undoManager.transact(() => {\n const bookmark = createBookmark(rng);\n moveChildren(dom, commonAncestorParent, otherLi);\n commonAncestorParent.remove();\n const resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n });\n return true;\n } else if (!otherLi) {\n if (!isForward && rng.startOffset === 0 && rng.endOffset === 0) {\n editor.undoManager.transact(() => {\n flattenListSelection(editor);\n });\n return true;\n }\n }\n }\n return false;\n };\n const removeBlock = (dom, block, root) => {\n const parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n const backspaceDeleteIntoListCaret = (editor, isForward) => {\n const dom = editor.dom;\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block, undefined, { checkRootAsContent: true })) {\n const rng = normalizeRange(editor.selection.getRng());\n const nextCaretContainer = findNextCaretContainer(editor, rng, isForward, root);\n const otherLi = dom.getParent(nextCaretContainer, 'LI', root);\n if (nextCaretContainer && otherLi) {\n const findValidElement = element => contains$1([\n 'td',\n 'th',\n 'caption'\n ], name(element));\n const findRoot = node => node.dom === root;\n const otherLiCell = closest$2(SugarElement.fromDom(otherLi), findValidElement, findRoot);\n const caretCell = closest$2(SugarElement.fromDom(rng.startContainer), findValidElement, findRoot);\n if (!equals(otherLiCell, caretCell, eq)) {\n return false;\n }\n editor.undoManager.transact(() => {\n const parentNode = otherLi.parentNode;\n removeBlock(dom, block, root);\n mergeWithAdjacentLists(dom, parentNode);\n editor.selection.select(nextCaretContainer, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n const backspaceDeleteCaret = (editor, isForward) => {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n const hasListSelection = editor => {\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n return startListParent || getSelectedListItems(editor).length > 0;\n };\n const backspaceDeleteRange = editor => {\n if (hasListSelection(editor)) {\n editor.undoManager.transact(() => {\n let shouldFireInput = true;\n const inputHandler = () => shouldFireInput = false;\n editor.on('input', inputHandler);\n editor.execCommand('Delete');\n editor.off('input', inputHandler);\n if (shouldFireInput) {\n editor.dispatch('input');\n }\n normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n const backspaceDelete = (editor, isForward) => {\n const selection = editor.selection;\n return !isWithinNonEditableList(editor, selection.getNode()) && (selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor));\n };\n const setup$2 = editor => {\n editor.on('ExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if ((cmd === 'delete' || cmd === 'forwarddelete') && hasListSelection(editor)) {\n normalizeLists(editor.dom, editor.getBody());\n }\n });\n editor.on('keydown', e => {\n if (e.keyCode === global$4.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$4.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n\n const get = editor => ({\n backspaceDelete: isForward => {\n backspaceDelete(editor, isForward);\n }\n });\n\n const updateList = (editor, update) => {\n const parentList = getParentList(editor);\n if (parentList === null || isWithinNonEditableList(editor, parentList)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (isObject(update.styles)) {\n editor.dom.setStyles(parentList, update.styles);\n }\n if (isObject(update.attrs)) {\n each(update.attrs, (v, k) => editor.dom.setAttrib(parentList, k, v));\n }\n });\n };\n\n const parseAlphabeticBase26 = str => {\n const chars = reverse(trim(str).split(''));\n const values = map(chars, (char, i) => {\n const charValue = char.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0) + 1;\n return Math.pow(26, i) * charValue;\n });\n return foldl(values, (sum, v) => sum + v, 0);\n };\n const composeAlphabeticBase26 = value => {\n value--;\n if (value < 0) {\n return '';\n } else {\n const remainder = value % 26;\n const quotient = Math.floor(value / 26);\n const rest = composeAlphabeticBase26(quotient);\n const char = String.fromCharCode('A'.charCodeAt(0) + remainder);\n return rest + char;\n }\n };\n const isUppercase = str => /^[A-Z]+$/.test(str);\n const isLowercase = str => /^[a-z]+$/.test(str);\n const isNumeric = str => /^[0-9]+$/.test(str);\n const deduceListType = start => {\n if (isNumeric(start)) {\n return 2;\n } else if (isUppercase(start)) {\n return 0;\n } else if (isLowercase(start)) {\n return 1;\n } else if (isEmpty$1(start)) {\n return 3;\n } else {\n return 4;\n }\n };\n const parseStartValue = start => {\n switch (deduceListType(start)) {\n case 2:\n return Optional.some({\n listStyleType: Optional.none(),\n start\n });\n case 0:\n return Optional.some({\n listStyleType: Optional.some('upper-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 1:\n return Optional.some({\n listStyleType: Optional.some('lower-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 3:\n return Optional.some({\n listStyleType: Optional.none(),\n start: ''\n });\n case 4:\n return Optional.none();\n }\n };\n const parseDetail = detail => {\n const start = parseInt(detail.start, 10);\n if (is$2(detail.listStyleType, 'upper-alpha')) {\n return composeAlphabeticBase26(start);\n } else if (is$2(detail.listStyleType, 'lower-alpha')) {\n return composeAlphabeticBase26(start).toLowerCase();\n } else {\n return detail.start;\n }\n };\n\n const open = editor => {\n const currentList = getParentList(editor);\n if (!isOlNode(currentList) || isWithinNonEditableList(editor, currentList)) {\n return;\n }\n editor.windowManager.open({\n title: 'List Properties',\n body: {\n type: 'panel',\n items: [{\n type: 'input',\n name: 'start',\n label: 'Start list at number',\n inputMode: 'numeric'\n }]\n },\n initialData: {\n start: parseDetail({\n start: editor.dom.getAttrib(currentList, 'start', '1'),\n listStyleType: Optional.from(editor.dom.getStyle(currentList, 'list-style-type'))\n })\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: api => {\n const data = api.getData();\n parseStartValue(data.start).each(detail => {\n editor.execCommand('mceListUpdate', false, {\n attrs: { start: detail.start === '1' ? '' : detail.start },\n styles: { 'list-style-type': detail.listStyleType.getOr('') }\n });\n });\n api.close();\n }\n });\n };\n\n const queryListCommandState = (editor, listName) => () => {\n const parentList = getParentList(editor);\n return isNonNullable(parentList) && parentList.nodeName === listName;\n };\n const registerDialog = editor => {\n editor.addCommand('mceListProps', () => {\n open(editor);\n });\n };\n const register$2 = editor => {\n editor.on('BeforeExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', (ui, detail) => {\n toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', (ui, detail) => {\n toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', (ui, detail) => {\n toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', () => {\n flattenListSelection(editor);\n });\n registerDialog(editor);\n editor.addCommand('mceListUpdate', (ui, detail) => {\n if (isObject(detail)) {\n updateList(editor, detail);\n }\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n const isTextNode = node => node.type === 3;\n const isEmpty = nodeBuffer => nodeBuffer.length === 0;\n const wrapInvalidChildren = list => {\n const insertListItem = (buffer, refNode) => {\n const li = global.create('li');\n each$1(buffer, node => li.append(node));\n if (refNode) {\n list.insert(li, refNode, true);\n } else {\n list.append(li);\n }\n };\n const reducer = (buffer, node) => {\n if (isTextNode(node)) {\n return [\n ...buffer,\n node\n ];\n } else if (!isEmpty(buffer) && !isTextNode(node)) {\n insertListItem(buffer, node);\n return [];\n } else {\n return buffer;\n }\n };\n const restBuffer = foldl(list.children(), reducer, []);\n if (!isEmpty(restBuffer)) {\n insertListItem(restBuffer);\n }\n };\n const setup$1 = editor => {\n editor.on('PreInit', () => {\n const {parser} = editor;\n parser.addNodeFilter('ul,ol', nodes => each$1(nodes, wrapInvalidChildren));\n });\n };\n\n const setupTabKey = editor => {\n editor.on('keydown', e => {\n if (e.keyCode !== global$4.TAB || global$4.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n const setup = editor => {\n if (shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n setup$2(editor);\n };\n\n const setupToggleButtonHandler = (editor, listName) => api => {\n const toggleButtonHandler = e => {\n api.setActive(inList(e.parents, listName));\n api.setEnabled(!isWithinNonEditableList(editor, e.element) && editor.selection.isEditable());\n };\n api.setEnabled(editor.selection.isEditable());\n return setNodeChangeHandler(editor, toggleButtonHandler);\n };\n const register$1 = editor => {\n const exec = command => () => editor.execCommand(command);\n if (!editor.hasPlugin('advlist')) {\n editor.ui.registry.addToggleButton('numlist', {\n icon: 'ordered-list',\n active: false,\n tooltip: 'Numbered list',\n onAction: exec('InsertOrderedList'),\n onSetup: setupToggleButtonHandler(editor, 'OL')\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: setupToggleButtonHandler(editor, 'UL')\n });\n }\n };\n\n const setupMenuButtonHandler = (editor, listName) => api => {\n const menuButtonHandler = e => api.setEnabled(inList(e.parents, listName) && !isWithinNonEditableList(editor, e.element));\n return setNodeChangeHandler(editor, menuButtonHandler);\n };\n const register = editor => {\n const listProperties = {\n text: 'List properties...',\n icon: 'ordered-list',\n onAction: () => editor.execCommand('mceListProps'),\n onSetup: setupMenuButtonHandler(editor, 'OL')\n };\n editor.ui.registry.addMenuItem('listprops', listProperties);\n editor.ui.registry.addContextMenu('lists', {\n update: node => {\n const parentList = getParentList(editor, node);\n return isOlNode(parentList) ? ['listprops'] : [];\n }\n });\n };\n\n var Plugin = () => {\n global$7.add('lists', editor => {\n register$3(editor);\n setup$1(editor);\n if (!editor.hasPlugin('rtc', true)) {\n setup(editor);\n register$2(editor);\n } else {\n registerDialog(editor);\n }\n register$1(editor);\n register(editor);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\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 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNull = eq(null);\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isArrayOf = (value, pred) => {\n if (isArray(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 constant = value => {\n return () => {\n return value;\n };\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\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 nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const map = (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$1 = (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 foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\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\n const is = (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 someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('link_assume_external_targets', {\n processor: value => {\n const valid = isString(value) || isBoolean(value);\n if (valid) {\n if (value === true) {\n return {\n value: 1,\n valid\n };\n } else if (value === 'http' || value === 'https') {\n return {\n value,\n valid\n };\n } else {\n return {\n value: 0,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string or a boolean.'\n };\n }\n },\n default: false\n });\n registerOption('link_context_toolbar', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_list', { processor: value => isString(value) || isFunction(value) || isArrayOf(value, isObject) });\n registerOption('link_default_target', { processor: 'string' });\n registerOption('link_default_protocol', {\n processor: 'string',\n default: 'https'\n });\n registerOption('link_target_list', {\n processor: value => isBoolean(value) || isArrayOf(value, isObject),\n default: true\n });\n registerOption('link_rel_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_class_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_title', {\n processor: 'boolean',\n default: true\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_quicklink', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_attributes_postprocess', { processor: 'function' });\n };\n const assumeExternalTargets = option('link_assume_external_targets');\n const hasContextToolbar = option('link_context_toolbar');\n const getLinkList = option('link_list');\n const getDefaultLinkTarget = option('link_default_target');\n const getDefaultLinkProtocol = option('link_default_protocol');\n const getTargetList = option('link_target_list');\n const getRelList = option('link_rel_list');\n const getLinkClassList = option('link_class_list');\n const shouldShowLinkTitle = option('link_title');\n const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n const useQuickLink = option('link_quicklink');\n const attributesPostProcess = option('link_attributes_postprocess');\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (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 objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const isAnchor = elm => isNonNullable(elm) && elm.nodeName.toLowerCase() === 'a';\n const isLink = elm => isAnchor(elm) && !!getHref(elm);\n const collectNodesInRange = (rng, predicate) => {\n if (rng.collapsed) {\n return [];\n } else {\n const contents = rng.cloneContents();\n const firstChild = contents.firstChild;\n const walker = new global$3(firstChild, contents);\n const elements = [];\n let current = firstChild;\n do {\n if (predicate(current)) {\n elements.push(current);\n }\n } while (current = walker.next());\n return elements;\n }\n };\n const hasProtocol = url => /^\\w+:/i.test(url);\n const getHref = elm => {\n var _a, _b;\n return (_b = (_a = elm.getAttribute('data-mce-href')) !== null && _a !== void 0 ? _a : elm.getAttribute('href')) !== null && _b !== void 0 ? _b : '';\n };\n const applyRelTargetRules = (rel, isUnsafe) => {\n const rules = ['noopener'];\n const rels = rel ? rel.split(/\\s+/) : [];\n const toString = rels => global$2.trim(rels.sort().join(' '));\n const addTargetRules = rels => {\n rels = removeTargetRules(rels);\n return rels.length > 0 ? rels.concat(rules) : rules;\n };\n const removeTargetRules = rels => rels.filter(val => global$2.inArray(rules, val) === -1);\n const newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n return newRels.length > 0 ? toString(newRels) : '';\n };\n const trimCaretContainers = text => text.replace(/\\uFEFF/g, '');\n const getAnchorElement = (editor, selectedElm) => {\n selectedElm = selectedElm || getLinksInSelection(editor.selection.getRng())[0] || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return Optional.from(editor.dom.select('a[href]', selectedElm)[0]);\n } else {\n return Optional.from(editor.dom.getParent(selectedElm, 'a[href]'));\n }\n };\n const isInAnchor = (editor, selectedElm) => getAnchorElement(editor, selectedElm).isSome();\n const getAnchorText = (selection, anchorElm) => {\n const text = anchorElm.fold(() => selection.getContent({ format: 'text' }), anchorElm => anchorElm.innerText || anchorElm.textContent || '');\n return trimCaretContainers(text);\n };\n const getLinksInSelection = rng => collectNodesInRange(rng, isLink);\n const getLinks$1 = elements => global$2.grep(elements, isLink);\n const hasLinks = elements => getLinks$1(elements).length > 0;\n const hasLinksInSelection = rng => getLinksInSelection(rng).length > 0;\n const isOnlyTextSelected = editor => {\n const inlineTextElements = editor.schema.getTextInlineElements();\n const isElement = elm => elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase());\n const isInBlockAnchor = getAnchorElement(editor).exists(anchor => anchor.hasAttribute('data-mce-block'));\n if (isInBlockAnchor) {\n return false;\n }\n const rng = editor.selection.getRng();\n if (!rng.collapsed) {\n const elements = collectNodesInRange(rng, isElement);\n return elements.length === 0;\n } else {\n return true;\n }\n };\n const isImageFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n\n const getLinkAttrs = data => {\n const attrs = [\n 'title',\n 'rel',\n 'class',\n 'target'\n ];\n return foldl(attrs, (acc, key) => {\n data[key].each(value => {\n acc[key] = value.length > 0 ? value : null;\n });\n return acc;\n }, { href: data.href });\n };\n const handleExternalTargets = (href, assumeExternalTargets) => {\n if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n return assumeExternalTargets + '://' + href;\n }\n return href;\n };\n const applyLinkOverrides = (editor, linkAttrs) => {\n const newLinkAttrs = { ...linkAttrs };\n if (getRelList(editor).length === 0 && !allowUnsafeLinkTarget(editor)) {\n const newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n newLinkAttrs.rel = newRel ? newRel : null;\n }\n if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) {\n newLinkAttrs.target = getDefaultLinkTarget(editor);\n }\n newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor));\n return newLinkAttrs;\n };\n const updateLink = (editor, anchorElm, text, linkAttrs) => {\n text.each(text => {\n if (has(anchorElm, 'innerText')) {\n anchorElm.innerText = text;\n } else {\n anchorElm.textContent = text;\n }\n });\n editor.dom.setAttribs(anchorElm, linkAttrs);\n const rng = editor.dom.createRng();\n rng.setStartAfter(anchorElm);\n rng.setEndAfter(anchorElm);\n editor.selection.setRng(rng);\n };\n const createLink = (editor, selectedElm, text, linkAttrs) => {\n const dom = editor.dom;\n if (isImageFigure(selectedElm)) {\n linkImageFigure(dom, selectedElm, linkAttrs);\n } else {\n text.fold(() => {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n const end = editor.selection.getEnd();\n const rng = dom.createRng();\n rng.setStartAfter(end);\n rng.setEndAfter(end);\n editor.selection.setRng(rng);\n }, text => {\n editor.insertContent(dom.createHTML('a', linkAttrs, dom.encode(text)));\n });\n }\n };\n const linkDomMutation = (editor, attachState, data) => {\n const selectedElm = editor.selection.getNode();\n const anchorElm = getAnchorElement(editor, selectedElm);\n const linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n const attributesPostProcess$1 = attributesPostProcess(editor);\n if (isNonNullable(attributesPostProcess$1)) {\n attributesPostProcess$1(linkAttrs);\n }\n editor.undoManager.transact(() => {\n if (data.href === attachState.href) {\n attachState.attach();\n }\n anchorElm.fold(() => {\n createLink(editor, selectedElm, data.text, linkAttrs);\n }, elm => {\n editor.focus();\n updateLink(editor, elm, data.text, linkAttrs);\n });\n });\n };\n const unlinkSelection = editor => {\n const dom = editor.dom, selection = editor.selection;\n const bookmark = selection.getBookmark();\n const rng = selection.getRng().cloneRange();\n const startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody());\n const endAnchorElm = dom.getParent(rng.endContainer, 'a[href]', editor.getBody());\n if (startAnchorElm) {\n rng.setStartBefore(startAnchorElm);\n }\n if (endAnchorElm) {\n rng.setEndAfter(endAnchorElm);\n }\n selection.setRng(rng);\n editor.execCommand('unlink');\n selection.moveToBookmark(bookmark);\n };\n const unlinkDomMutation = editor => {\n editor.undoManager.transact(() => {\n const node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n unlinkSelection(editor);\n }\n editor.focus();\n });\n };\n const unwrapOptions = data => {\n const {\n class: cls,\n href,\n rel,\n target,\n text,\n title\n } = data;\n return filter({\n class: cls.getOrNull(),\n href,\n rel: rel.getOrNull(),\n target: target.getOrNull(),\n text: text.getOrNull(),\n title: title.getOrNull()\n }, (v, _k) => isNull(v) === false);\n };\n const sanitizeData = (editor, data) => {\n const getOption = editor.options.get;\n const uriOptions = {\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls')\n };\n const href = data.href;\n return {\n ...data,\n href: global$4.isDomSafe(href, 'a', uriOptions) ? href : ''\n };\n };\n const link = (editor, attachState, data) => {\n const sanitizedData = sanitizeData(editor, data);\n editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(sanitizedData)) : linkDomMutation(editor, attachState, sanitizedData);\n };\n const unlink = editor => {\n editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor);\n };\n const unlinkImageFigure = (editor, fig) => {\n var _a;\n const img = editor.dom.select('img', fig)[0];\n if (img) {\n const a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n (_a = a.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n const linkImageFigure = (dom, fig, attrs) => {\n var _a;\n const img = dom.select('img', fig)[0];\n if (img) {\n const a = dom.create('a', attrs);\n (_a = img.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n\n const getValue = item => isString(item.value) ? item.value : '';\n const getText = item => {\n if (isString(item.text)) {\n return item.text;\n } else if (isString(item.title)) {\n return item.title;\n } else {\n return '';\n }\n };\n const sanitizeList = (list, extractValue) => {\n const out = [];\n global$2.each(list, item => {\n const text = getText(item);\n if (item.menu !== undefined) {\n const items = sanitizeList(item.menu, extractValue);\n out.push({\n text,\n items\n });\n } else {\n const value = extractValue(item);\n out.push({\n text,\n value\n });\n }\n });\n return out;\n };\n const sanitizeWith = (extracter = getValue) => list => Optional.from(list).map(list => sanitizeList(list, extracter));\n const sanitize = list => sanitizeWith(getValue)(list);\n const createUi = (name, label) => items => ({\n name,\n type: 'listbox',\n label,\n items\n });\n const ListOptions = {\n sanitize,\n sanitizeWith,\n createUi,\n getValue\n };\n\n const isListGroup = item => hasNonNullableKey(item, 'items');\n const findTextByValue = (value, catalog) => findMap(catalog, item => {\n if (isListGroup(item)) {\n return findTextByValue(value, item.items);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const getDelta = (persistentText, fieldName, catalog, data) => {\n const value = data[fieldName];\n const hasPersistentText = persistentText.length > 0;\n return value !== undefined ? findTextByValue(value, catalog).map(i => ({\n url: {\n value: i.value,\n meta: {\n text: hasPersistentText ? persistentText : i.text,\n attach: noop\n }\n },\n text: hasPersistentText ? persistentText : i.text\n })) : Optional.none();\n };\n const findCatalog = (catalogs, fieldName) => {\n if (fieldName === 'link') {\n return catalogs.link;\n } else if (fieldName === 'anchor') {\n return catalogs.anchor;\n } else {\n return Optional.none();\n }\n };\n const init = (initialData, linkCatalog) => {\n const persistentData = {\n text: initialData.text,\n title: initialData.title\n };\n const getTitleFromUrlChange = url => {\n var _a;\n return someIf(persistentData.title.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.title).getOr(''));\n };\n const getTextFromUrlChange = url => {\n var _a;\n return someIf(persistentData.text.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.text).getOr(url.value));\n };\n const onUrlChange = data => {\n const text = getTextFromUrlChange(data.url);\n const title = getTitleFromUrlChange(data.url);\n if (text.isSome() || title.isSome()) {\n return Optional.some({\n ...text.map(text => ({ text })).getOr({}),\n ...title.map(title => ({ title })).getOr({})\n });\n } else {\n return Optional.none();\n }\n };\n const onCatalogChange = (data, change) => {\n const catalog = findCatalog(linkCatalog, change).getOr([]);\n return getDelta(persistentData.text, change, catalog, data);\n };\n const onChange = (getData, change) => {\n const name = change.name;\n if (name === 'url') {\n return onUrlChange(getData());\n } else if (contains([\n 'anchor',\n 'link'\n ], name)) {\n return onCatalogChange(getData(), name);\n } else if (name === 'text' || name === 'title') {\n persistentData[name] = getData()[name];\n return Optional.none();\n } else {\n return Optional.none();\n }\n };\n return { onChange };\n };\n const DialogChanges = {\n init,\n getDelta\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n const delayedConfirm = (editor, message, callback) => {\n const rng = editor.selection.getRng();\n global$1.setEditorTimeout(editor, () => {\n editor.windowManager.confirm(message, state => {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n const tryEmailTransform = data => {\n const url = data.href;\n const suggestMailTo = url.indexOf('@') > 0 && url.indexOf('/') === -1 && url.indexOf('mailto:') === -1;\n return suggestMailTo ? Optional.some({\n message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',\n preprocess: oldData => ({\n ...oldData,\n href: 'mailto:' + url\n })\n }) : Optional.none();\n };\n const tryProtocolTransform = (assumeExternalTargets, defaultLinkProtocol) => data => {\n const url = data.href;\n const suggestProtocol = assumeExternalTargets === 1 && !hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www(\\.|\\d\\.)/i.test(url);\n return suggestProtocol ? Optional.some({\n message: `The URL you entered seems to be an external link. Do you want to add the required ${ defaultLinkProtocol }:// prefix?`,\n preprocess: oldData => ({\n ...oldData,\n href: defaultLinkProtocol + '://' + url\n })\n }) : Optional.none();\n };\n const preprocess = (editor, data) => findMap([\n tryEmailTransform,\n tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n ], f => f(data)).fold(() => Promise.resolve(data), transform => new Promise(callback => {\n delayedConfirm(editor, transform.message, state => {\n callback(state ? transform.preprocess(data) : data);\n });\n }));\n const DialogConfirms = { preprocess };\n\n const getAnchors = editor => {\n const anchorNodes = editor.dom.select('a:not([href])');\n const anchors = bind(anchorNodes, anchor => {\n const id = anchor.name || anchor.id;\n return id ? [{\n text: id,\n value: '#' + id\n }] : [];\n });\n return anchors.length > 0 ? Optional.some([{\n text: 'None',\n value: ''\n }].concat(anchors)) : Optional.none();\n };\n const AnchorListOptions = { getAnchors };\n\n const getClasses = editor => {\n const list = getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Optional.none();\n };\n const ClassListOptions = { getClasses };\n\n const parseJson = text => {\n try {\n return Optional.some(JSON.parse(text));\n } catch (_a) {\n return Optional.none();\n }\n };\n const getLinks = editor => {\n const extractor = item => editor.convertURL(item.value || item.url || '', 'href');\n const linkList = getLinkList(editor);\n return new Promise(resolve => {\n if (isString(linkList)) {\n fetch(linkList).then(res => res.ok ? res.text().then(parseJson) : Promise.reject()).then(resolve, () => resolve(Optional.none()));\n } else if (isFunction(linkList)) {\n linkList(output => resolve(Optional.some(output)));\n } else {\n resolve(Optional.from(linkList));\n }\n }).then(optItems => optItems.bind(ListOptions.sanitizeWith(extractor)).map(items => {\n if (items.length > 0) {\n const noneItem = [{\n text: 'None',\n value: ''\n }];\n return noneItem.concat(items);\n } else {\n return items;\n }\n }));\n };\n const LinkListOptions = { getLinks };\n\n const getRels = (editor, initialTarget) => {\n const list = getRelList(editor);\n if (list.length > 0) {\n const isTargetBlank = is(initialTarget, '_blank');\n const enforceSafe = allowUnsafeLinkTarget(editor) === false;\n const safeRelExtractor = item => applyRelTargetRules(ListOptions.getValue(item), isTargetBlank);\n const sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Optional.none();\n };\n const RelOptions = { getRels };\n\n const fallbacks = [\n {\n text: 'Current window',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ];\n const getTargets = editor => {\n const list = getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(() => Optional.some(fallbacks));\n } else if (list === false) {\n return Optional.none();\n }\n return Optional.some(fallbacks);\n };\n const TargetOptions = { getTargets };\n\n const nonEmptyAttr = (dom, elem, name) => {\n const val = dom.getAttrib(elem, name);\n return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n };\n const extractFromAnchor = (editor, anchor) => {\n const dom = editor.dom;\n const onlyText = isOnlyTextSelected(editor);\n const text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n const url = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'href')));\n const target = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'target')));\n const rel = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'rel'));\n const linkClass = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'class'));\n const title = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'title'));\n return {\n url,\n text,\n title,\n target,\n rel,\n linkClass\n };\n };\n const collect = (editor, linkNode) => LinkListOptions.getLinks(editor).then(links => {\n const anchor = extractFromAnchor(editor, linkNode);\n return {\n anchor,\n catalogs: {\n targets: TargetOptions.getTargets(editor),\n rels: RelOptions.getRels(editor, anchor.target),\n classes: ClassListOptions.getClasses(editor),\n anchor: AnchorListOptions.getAnchors(editor),\n link: links\n },\n optNode: linkNode,\n flags: { titleEnabled: shouldShowLinkTitle(editor) }\n };\n });\n const DialogInfo = { collect };\n\n const handleSubmit = (editor, info) => api => {\n const data = api.getData();\n if (!data.url.value) {\n unlink(editor);\n api.close();\n return;\n }\n const getChangedValue = key => Optional.from(data[key]).filter(value => !is(info.anchor[key], value));\n const changedData = {\n href: data.url.value,\n text: getChangedValue('text'),\n target: getChangedValue('target'),\n rel: getChangedValue('rel'),\n class: getChangedValue('linkClass'),\n title: getChangedValue('title')\n };\n const attachState = {\n href: data.url.value,\n attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : noop\n };\n DialogConfirms.preprocess(editor, changedData).then(pData => {\n link(editor, attachState, pData);\n });\n api.close();\n };\n const collectData = editor => {\n const anchorNode = getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n const getInitialData = (info, defaultTarget) => {\n const anchor = info.anchor;\n const url = anchor.url.getOr('');\n return {\n url: {\n value: url,\n meta: { original: { value: url } }\n },\n text: anchor.text.getOr(''),\n title: anchor.title.getOr(''),\n anchor: url,\n link: url,\n rel: anchor.rel.getOr(''),\n target: anchor.target.or(defaultTarget).getOr(''),\n linkClass: anchor.linkClass.getOr('')\n };\n };\n const makeDialog = (settings, onSubmit, editor) => {\n const urlInput = [{\n name: 'url',\n type: 'urlinput',\n filetype: 'file',\n label: 'URL',\n picker_text: 'Browse links'\n }];\n const displayText = settings.anchor.text.map(() => ({\n name: 'text',\n type: 'input',\n label: 'Text to display'\n })).toArray();\n const titleText = settings.flags.titleEnabled ? [{\n name: 'title',\n type: 'input',\n label: 'Title'\n }] : [];\n const defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n const initialData = getInitialData(settings, defaultTarget);\n const catalogs = settings.catalogs;\n const dialogDelta = DialogChanges.init(initialData, catalogs);\n const body = {\n type: 'panel',\n items: flatten([\n urlInput,\n displayText,\n titleText,\n cat([\n catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),\n catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),\n catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),\n catalogs.link.map(ListOptions.createUi('link', 'Link list')),\n catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))\n ])\n ])\n };\n return {\n title: 'Insert/Edit Link',\n size: 'normal',\n body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onChange: (api, {name}) => {\n dialogDelta.onChange(api.getData, { name }).each(newData => {\n api.setData(newData);\n });\n },\n onSubmit\n };\n };\n const open = editor => {\n const data = collectData(editor);\n data.then(info => {\n const onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).then(spec => {\n editor.windowManager.open(spec);\n });\n };\n\n const register = editor => {\n editor.addCommand('mceLink', (_ui, value) => {\n if ((value === null || value === void 0 ? void 0 : value.dialog) === true || !useQuickLink(editor)) {\n open(editor);\n } else {\n editor.dispatch('contexttoolbar-show', { toolbarKey: 'quicklink' });\n }\n });\n };\n\n const setup$2 = editor => {\n editor.addShortcut('Meta+K', '', () => {\n editor.execCommand('mceLink');\n });\n };\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 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 value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\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 startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const appendClickRemove = (link, evt) => {\n document.body.appendChild(link);\n link.dispatchEvent(evt);\n document.body.removeChild(link);\n };\n const openLink = url => {\n const link = document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n const evt = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n document.dispatchEvent(evt);\n appendClickRemove(link, evt);\n };\n const hasOnlyAltModifier = e => {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n const gotoLink = (editor, a) => {\n if (a) {\n const href = getHref(a);\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 openLink(a.href);\n }\n }\n };\n const isSelectionOnImageWithEmbeddedLink = editor => {\n const rng = editor.selection.getRng();\n const node = rng.startContainer;\n return isLink(node) && rng.startContainer === rng.endContainer && editor.dom.select('img', node).length === 1;\n };\n const getLinkFromElement = (editor, element) => {\n const links = getLinks$1(editor.dom.getParents(element));\n return someIf(links.length === 1, links[0]);\n };\n const getLinkInSelection = editor => {\n const links = getLinksInSelection(editor.selection.getRng());\n return someIf(links.length > 0, links[0]).or(getLinkFromElement(editor, editor.selection.getNode()));\n };\n const getLinkFromSelection = editor => editor.selection.isCollapsed() || isSelectionOnImageWithEmbeddedLink(editor) ? getLinkFromElement(editor, editor.selection.getStart()) : getLinkInSelection(editor);\n const setup$1 = editor => {\n const selectedLink = value();\n const getSelectedLink = () => selectedLink.get().or(getLinkFromSelection(editor));\n const gotoSelectedLink = () => getSelectedLink().each(link => gotoLink(editor, link));\n editor.on('contextmenu', e => {\n getLinkFromElement(editor, e.target).each(selectedLink.set);\n });\n editor.on('SelectionChange', () => {\n if (!selectedLink.isSet()) {\n getLinkFromSelection(editor).each(selectedLink.set);\n }\n });\n editor.on('click', e => {\n selectedLink.clear();\n const links = getLinks$1(editor.dom.getParents(e.target));\n if (links.length === 1 && global.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, links[0]);\n }\n });\n editor.on('keydown', e => {\n selectedLink.clear();\n if (!e.isDefaultPrevented() && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n getSelectedLink().each(link => {\n e.preventDefault();\n gotoLink(editor, link);\n });\n }\n });\n return { gotoSelectedLink };\n };\n\n const openDialog = editor => () => {\n editor.execCommand('mceLink', false, { dialog: true });\n };\n const toggleState = (editor, toggler) => {\n editor.on('NodeChange', toggler);\n return () => editor.off('NodeChange', toggler);\n };\n const toggleLinkState = editor => api => {\n const updateState = () => {\n api.setActive(!editor.mode.isReadOnly() && isInAnchor(editor, editor.selection.getNode()));\n api.setEnabled(editor.selection.isEditable());\n };\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleLinkMenuState = editor => api => {\n const updateState = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleRequiresLinkState = editor => api => {\n const hasLinks$1 = parents => hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());\n const parents = editor.dom.getParents(editor.selection.getStart());\n const updateEnabled = parents => {\n api.setEnabled(hasLinks$1(parents) && editor.selection.isEditable());\n };\n updateEnabled(parents);\n return toggleState(editor, e => updateEnabled(e.parents));\n };\n const setupButtons = (editor, openLink) => {\n editor.ui.registry.addToggleButton('link', {\n icon: 'link',\n tooltip: 'Insert/edit link',\n shortcut: 'Meta+K',\n onAction: openDialog(editor),\n onSetup: toggleLinkState(editor)\n });\n editor.ui.registry.addButton('openlink', {\n icon: 'new-tab',\n tooltip: 'Open link',\n onAction: openLink.gotoSelectedLink,\n onSetup: toggleRequiresLinkState(editor)\n });\n editor.ui.registry.addButton('unlink', {\n icon: 'unlink',\n tooltip: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleRequiresLinkState(editor)\n });\n };\n const setupMenuItems = (editor, openLink) => {\n editor.ui.registry.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'new-tab',\n onAction: openLink.gotoSelectedLink,\n onSetup: toggleRequiresLinkState(editor)\n });\n editor.ui.registry.addMenuItem('link', {\n icon: 'link',\n text: 'Link...',\n shortcut: 'Meta+K',\n onAction: openDialog(editor),\n onSetup: toggleLinkMenuState(editor)\n });\n editor.ui.registry.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleRequiresLinkState(editor)\n });\n };\n const setupContextMenu = editor => {\n const inLink = 'link unlink openlink';\n const noLink = 'link';\n editor.ui.registry.addContextMenu('link', {\n update: element => {\n const isEditable = editor.dom.isEditable(element);\n if (!isEditable) {\n return '';\n }\n return hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;\n }\n });\n };\n const setupContextToolbars = (editor, openLink) => {\n const collapseSelectionToEnd = editor => {\n editor.selection.collapse(false);\n };\n const onSetupLink = buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setEnabled(isInAnchor(editor, node) && editor.selection.isEditable());\n return noop;\n };\n const getLinkText = value => {\n const anchor = getAnchorElement(editor);\n const onlyText = isOnlyTextSelected(editor);\n if (anchor.isNone() && onlyText) {\n const text = getAnchorText(editor.selection, anchor);\n return someIf(text.length === 0, value);\n } else {\n return Optional.none();\n }\n };\n editor.ui.registry.addContextForm('quicklink', {\n launch: {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n onSetup: toggleLinkState(editor)\n },\n label: 'Link',\n predicate: node => hasContextToolbar(editor) && isInAnchor(editor, node),\n initValue: () => {\n const elm = getAnchorElement(editor);\n return elm.fold(constant(''), getHref);\n },\n commands: [\n {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n primary: true,\n onSetup: buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setActive(isInAnchor(editor, node));\n return toggleLinkState(editor)(buttonApi);\n },\n onAction: formApi => {\n const value = formApi.getValue();\n const text = getLinkText(value);\n const attachState = {\n href: value,\n attach: noop\n };\n link(editor, attachState, {\n href: value,\n text,\n title: Optional.none(),\n rel: Optional.none(),\n target: Optional.from(getDefaultLinkTarget(editor)),\n class: Optional.none()\n });\n collapseSelectionToEnd(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: formApi => {\n unlink(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'new-tab',\n tooltip: 'Open link',\n onSetup: onSetupLink,\n onAction: formApi => {\n openLink.gotoSelectedLink();\n formApi.hide();\n }\n }\n ]\n });\n };\n const setup = editor => {\n const openLink = setup$1(editor);\n setupButtons(editor, openLink);\n setupMenuItems(editor, openLink);\n setupContextMenu(editor);\n setupContextToolbars(editor, openLink);\n };\n\n var Plugin = () => {\n global$5.add('link', editor => {\n register$1(editor);\n register(editor);\n setup(editor);\n setup$2(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const fireInsertCustomChar = (editor, chr) => {\n return editor.dispatch('insertCustomChar', { chr });\n };\n\n const insertChar = (editor, chr) => {\n const evtChr = fireInsertCustomChar(editor, chr).chr;\n editor.execCommand('mceInsertContent', false, evtChr);\n };\n\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 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isArray$1 = isType('array');\n const isNull = eq(null);\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n\n const constant = value => {\n return () => {\n return value;\n };\n };\n const never = constant(false);\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 nativePush = Array.prototype.push;\n const map = (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 = (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 findUntil = (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 = (xs, pred) => {\n return findUntil(xs, pred, never);\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 = (xs, f) => flatten(map(xs, f));\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n const charMapProcessor = value => isFunction(value) || isArray$1(value);\n registerOption('charmap', { processor: charMapProcessor });\n registerOption('charmap_append', { processor: charMapProcessor });\n };\n const getCharMap$1 = option('charmap');\n const getCharMapAppend = option('charmap_append');\n\n const isArray = global.isArray;\n const UserDefined = 'User Defined';\n const getDefaultCharMap = () => {\n return [\n {\n name: 'Currency',\n characters: [\n [\n 36,\n 'dollar sign'\n ],\n [\n 162,\n 'cent sign'\n ],\n [\n 8364,\n 'euro sign'\n ],\n [\n 163,\n 'pound sign'\n ],\n [\n 165,\n 'yen sign'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 8352,\n 'euro-currency sign'\n ],\n [\n 8353,\n 'colon sign'\n ],\n [\n 8354,\n 'cruzeiro sign'\n ],\n [\n 8355,\n 'french franc sign'\n ],\n [\n 8356,\n 'lira sign'\n ],\n [\n 8357,\n 'mill sign'\n ],\n [\n 8358,\n 'naira sign'\n ],\n [\n 8359,\n 'peseta sign'\n ],\n [\n 8360,\n 'rupee sign'\n ],\n [\n 8361,\n 'won sign'\n ],\n [\n 8362,\n 'new sheqel sign'\n ],\n [\n 8363,\n 'dong sign'\n ],\n [\n 8365,\n 'kip sign'\n ],\n [\n 8366,\n 'tugrik sign'\n ],\n [\n 8367,\n 'drachma sign'\n ],\n [\n 8368,\n 'german penny symbol'\n ],\n [\n 8369,\n 'peso sign'\n ],\n [\n 8370,\n 'guarani sign'\n ],\n [\n 8371,\n 'austral sign'\n ],\n [\n 8372,\n 'hryvnia sign'\n ],\n [\n 8373,\n 'cedi sign'\n ],\n [\n 8374,\n 'livre tournois sign'\n ],\n [\n 8375,\n 'spesmilo sign'\n ],\n [\n 8376,\n 'tenge sign'\n ],\n [\n 8377,\n 'indian rupee sign'\n ],\n [\n 8378,\n 'turkish lira sign'\n ],\n [\n 8379,\n 'nordic mark sign'\n ],\n [\n 8380,\n 'manat sign'\n ],\n [\n 8381,\n 'ruble sign'\n ],\n [\n 20870,\n 'yen character'\n ],\n [\n 20803,\n 'yuan character'\n ],\n [\n 22291,\n 'yuan character, in hong kong and taiwan'\n ],\n [\n 22278,\n 'yen/yuan character variant one'\n ]\n ]\n },\n {\n name: 'Text',\n characters: [\n [\n 169,\n 'copyright sign'\n ],\n [\n 174,\n 'registered sign'\n ],\n [\n 8482,\n 'trade mark sign'\n ],\n [\n 8240,\n 'per mille sign'\n ],\n [\n 181,\n 'micro sign'\n ],\n [\n 183,\n 'middle dot'\n ],\n [\n 8226,\n 'bullet'\n ],\n [\n 8230,\n 'three dot leader'\n ],\n [\n 8242,\n 'minutes / feet'\n ],\n [\n 8243,\n 'seconds / inches'\n ],\n [\n 167,\n 'section sign'\n ],\n [\n 182,\n 'paragraph sign'\n ],\n [\n 223,\n 'sharp s / ess-zed'\n ]\n ]\n },\n {\n name: 'Quotations',\n characters: [\n [\n 8249,\n 'single left-pointing angle quotation mark'\n ],\n [\n 8250,\n 'single right-pointing angle quotation mark'\n ],\n [\n 171,\n 'left pointing guillemet'\n ],\n [\n 187,\n 'right pointing guillemet'\n ],\n [\n 8216,\n 'left single quotation mark'\n ],\n [\n 8217,\n 'right single quotation mark'\n ],\n [\n 8220,\n 'left double quotation mark'\n ],\n [\n 8221,\n 'right double quotation mark'\n ],\n [\n 8218,\n 'single low-9 quotation mark'\n ],\n [\n 8222,\n 'double low-9 quotation mark'\n ],\n [\n 60,\n 'less-than sign'\n ],\n [\n 62,\n 'greater-than sign'\n ],\n [\n 8804,\n 'less-than or equal to'\n ],\n [\n 8805,\n 'greater-than or equal to'\n ],\n [\n 8211,\n 'en dash'\n ],\n [\n 8212,\n 'em dash'\n ],\n [\n 175,\n 'macron'\n ],\n [\n 8254,\n 'overline'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 166,\n 'broken bar'\n ],\n [\n 168,\n 'diaeresis'\n ],\n [\n 161,\n 'inverted exclamation mark'\n ],\n [\n 191,\n 'turned question mark'\n ],\n [\n 710,\n 'circumflex accent'\n ],\n [\n 732,\n 'small tilde'\n ],\n [\n 176,\n 'degree sign'\n ],\n [\n 8722,\n 'minus sign'\n ],\n [\n 177,\n 'plus-minus sign'\n ],\n [\n 247,\n 'division sign'\n ],\n [\n 8260,\n 'fraction slash'\n ],\n [\n 215,\n 'multiplication sign'\n ],\n [\n 185,\n 'superscript one'\n ],\n [\n 178,\n 'superscript two'\n ],\n [\n 179,\n 'superscript three'\n ],\n [\n 188,\n 'fraction one quarter'\n ],\n [\n 189,\n 'fraction one half'\n ],\n [\n 190,\n 'fraction three quarters'\n ]\n ]\n },\n {\n name: 'Mathematical',\n characters: [\n [\n 402,\n 'function / florin'\n ],\n [\n 8747,\n 'integral'\n ],\n [\n 8721,\n 'n-ary sumation'\n ],\n [\n 8734,\n 'infinity'\n ],\n [\n 8730,\n 'square root'\n ],\n [\n 8764,\n 'similar to'\n ],\n [\n 8773,\n 'approximately equal to'\n ],\n [\n 8776,\n 'almost equal to'\n ],\n [\n 8800,\n 'not equal to'\n ],\n [\n 8801,\n 'identical to'\n ],\n [\n 8712,\n 'element of'\n ],\n [\n 8713,\n 'not an element of'\n ],\n [\n 8715,\n 'contains as member'\n ],\n [\n 8719,\n 'n-ary product'\n ],\n [\n 8743,\n 'logical and'\n ],\n [\n 8744,\n 'logical or'\n ],\n [\n 172,\n 'not sign'\n ],\n [\n 8745,\n 'intersection'\n ],\n [\n 8746,\n 'union'\n ],\n [\n 8706,\n 'partial differential'\n ],\n [\n 8704,\n 'for all'\n ],\n [\n 8707,\n 'there exists'\n ],\n [\n 8709,\n 'diameter'\n ],\n [\n 8711,\n 'backward difference'\n ],\n [\n 8727,\n 'asterisk operator'\n ],\n [\n 8733,\n 'proportional to'\n ],\n [\n 8736,\n 'angle'\n ]\n ]\n },\n {\n name: 'Extended Latin',\n characters: [\n [\n 192,\n 'A - grave'\n ],\n [\n 193,\n 'A - acute'\n ],\n [\n 194,\n 'A - circumflex'\n ],\n [\n 195,\n 'A - tilde'\n ],\n [\n 196,\n 'A - diaeresis'\n ],\n [\n 197,\n 'A - ring above'\n ],\n [\n 256,\n 'A - macron'\n ],\n [\n 198,\n 'ligature AE'\n ],\n [\n 199,\n 'C - cedilla'\n ],\n [\n 200,\n 'E - grave'\n ],\n [\n 201,\n 'E - acute'\n ],\n [\n 202,\n 'E - circumflex'\n ],\n [\n 203,\n 'E - diaeresis'\n ],\n [\n 274,\n 'E - macron'\n ],\n [\n 204,\n 'I - grave'\n ],\n [\n 205,\n 'I - acute'\n ],\n [\n 206,\n 'I - circumflex'\n ],\n [\n 207,\n 'I - diaeresis'\n ],\n [\n 298,\n 'I - macron'\n ],\n [\n 208,\n 'ETH'\n ],\n [\n 209,\n 'N - tilde'\n ],\n [\n 210,\n 'O - grave'\n ],\n [\n 211,\n 'O - acute'\n ],\n [\n 212,\n 'O - circumflex'\n ],\n [\n 213,\n 'O - tilde'\n ],\n [\n 214,\n 'O - diaeresis'\n ],\n [\n 216,\n 'O - slash'\n ],\n [\n 332,\n 'O - macron'\n ],\n [\n 338,\n 'ligature OE'\n ],\n [\n 352,\n 'S - caron'\n ],\n [\n 217,\n 'U - grave'\n ],\n [\n 218,\n 'U - acute'\n ],\n [\n 219,\n 'U - circumflex'\n ],\n [\n 220,\n 'U - diaeresis'\n ],\n [\n 362,\n 'U - macron'\n ],\n [\n 221,\n 'Y - acute'\n ],\n [\n 376,\n 'Y - diaeresis'\n ],\n [\n 562,\n 'Y - macron'\n ],\n [\n 222,\n 'THORN'\n ],\n [\n 224,\n 'a - grave'\n ],\n [\n 225,\n 'a - acute'\n ],\n [\n 226,\n 'a - circumflex'\n ],\n [\n 227,\n 'a - tilde'\n ],\n [\n 228,\n 'a - diaeresis'\n ],\n [\n 229,\n 'a - ring above'\n ],\n [\n 257,\n 'a - macron'\n ],\n [\n 230,\n 'ligature ae'\n ],\n [\n 231,\n 'c - cedilla'\n ],\n [\n 232,\n 'e - grave'\n ],\n [\n 233,\n 'e - acute'\n ],\n [\n 234,\n 'e - circumflex'\n ],\n [\n 235,\n 'e - diaeresis'\n ],\n [\n 275,\n 'e - macron'\n ],\n [\n 236,\n 'i - grave'\n ],\n [\n 237,\n 'i - acute'\n ],\n [\n 238,\n 'i - circumflex'\n ],\n [\n 239,\n 'i - diaeresis'\n ],\n [\n 299,\n 'i - macron'\n ],\n [\n 240,\n 'eth'\n ],\n [\n 241,\n 'n - tilde'\n ],\n [\n 242,\n 'o - grave'\n ],\n [\n 243,\n 'o - acute'\n ],\n [\n 244,\n 'o - circumflex'\n ],\n [\n 245,\n 'o - tilde'\n ],\n [\n 246,\n 'o - diaeresis'\n ],\n [\n 248,\n 'o slash'\n ],\n [\n 333,\n 'o macron'\n ],\n [\n 339,\n 'ligature oe'\n ],\n [\n 353,\n 's - caron'\n ],\n [\n 249,\n 'u - grave'\n ],\n [\n 250,\n 'u - acute'\n ],\n [\n 251,\n 'u - circumflex'\n ],\n [\n 252,\n 'u - diaeresis'\n ],\n [\n 363,\n 'u - macron'\n ],\n [\n 253,\n 'y - acute'\n ],\n [\n 254,\n 'thorn'\n ],\n [\n 255,\n 'y - diaeresis'\n ],\n [\n 563,\n 'y - macron'\n ],\n [\n 913,\n 'Alpha'\n ],\n [\n 914,\n 'Beta'\n ],\n [\n 915,\n 'Gamma'\n ],\n [\n 916,\n 'Delta'\n ],\n [\n 917,\n 'Epsilon'\n ],\n [\n 918,\n 'Zeta'\n ],\n [\n 919,\n 'Eta'\n ],\n [\n 920,\n 'Theta'\n ],\n [\n 921,\n 'Iota'\n ],\n [\n 922,\n 'Kappa'\n ],\n [\n 923,\n 'Lambda'\n ],\n [\n 924,\n 'Mu'\n ],\n [\n 925,\n 'Nu'\n ],\n [\n 926,\n 'Xi'\n ],\n [\n 927,\n 'Omicron'\n ],\n [\n 928,\n 'Pi'\n ],\n [\n 929,\n 'Rho'\n ],\n [\n 931,\n 'Sigma'\n ],\n [\n 932,\n 'Tau'\n ],\n [\n 933,\n 'Upsilon'\n ],\n [\n 934,\n 'Phi'\n ],\n [\n 935,\n 'Chi'\n ],\n [\n 936,\n 'Psi'\n ],\n [\n 937,\n 'Omega'\n ],\n [\n 945,\n 'alpha'\n ],\n [\n 946,\n 'beta'\n ],\n [\n 947,\n 'gamma'\n ],\n [\n 948,\n 'delta'\n ],\n [\n 949,\n 'epsilon'\n ],\n [\n 950,\n 'zeta'\n ],\n [\n 951,\n 'eta'\n ],\n [\n 952,\n 'theta'\n ],\n [\n 953,\n 'iota'\n ],\n [\n 954,\n 'kappa'\n ],\n [\n 955,\n 'lambda'\n ],\n [\n 956,\n 'mu'\n ],\n [\n 957,\n 'nu'\n ],\n [\n 958,\n 'xi'\n ],\n [\n 959,\n 'omicron'\n ],\n [\n 960,\n 'pi'\n ],\n [\n 961,\n 'rho'\n ],\n [\n 962,\n 'final sigma'\n ],\n [\n 963,\n 'sigma'\n ],\n [\n 964,\n 'tau'\n ],\n [\n 965,\n 'upsilon'\n ],\n [\n 966,\n 'phi'\n ],\n [\n 967,\n 'chi'\n ],\n [\n 968,\n 'psi'\n ],\n [\n 969,\n 'omega'\n ]\n ]\n },\n {\n name: 'Symbols',\n characters: [\n [\n 8501,\n 'alef symbol'\n ],\n [\n 982,\n 'pi symbol'\n ],\n [\n 8476,\n 'real part symbol'\n ],\n [\n 978,\n 'upsilon - hook symbol'\n ],\n [\n 8472,\n 'Weierstrass p'\n ],\n [\n 8465,\n 'imaginary part'\n ]\n ]\n },\n {\n name: 'Arrows',\n characters: [\n [\n 8592,\n 'leftwards arrow'\n ],\n [\n 8593,\n 'upwards arrow'\n ],\n [\n 8594,\n 'rightwards arrow'\n ],\n [\n 8595,\n 'downwards arrow'\n ],\n [\n 8596,\n 'left right arrow'\n ],\n [\n 8629,\n 'carriage return'\n ],\n [\n 8656,\n 'leftwards double arrow'\n ],\n [\n 8657,\n 'upwards double arrow'\n ],\n [\n 8658,\n 'rightwards double arrow'\n ],\n [\n 8659,\n 'downwards double arrow'\n ],\n [\n 8660,\n 'left right double arrow'\n ],\n [\n 8756,\n 'therefore'\n ],\n [\n 8834,\n 'subset of'\n ],\n [\n 8835,\n 'superset of'\n ],\n [\n 8836,\n 'not a subset of'\n ],\n [\n 8838,\n 'subset of or equal to'\n ],\n [\n 8839,\n 'superset of or equal to'\n ],\n [\n 8853,\n 'circled plus'\n ],\n [\n 8855,\n 'circled times'\n ],\n [\n 8869,\n 'perpendicular'\n ],\n [\n 8901,\n 'dot operator'\n ],\n [\n 8968,\n 'left ceiling'\n ],\n [\n 8969,\n 'right ceiling'\n ],\n [\n 8970,\n 'left floor'\n ],\n [\n 8971,\n 'right floor'\n ],\n [\n 9001,\n 'left-pointing angle bracket'\n ],\n [\n 9002,\n 'right-pointing angle bracket'\n ],\n [\n 9674,\n 'lozenge'\n ],\n [\n 9824,\n 'black spade suit'\n ],\n [\n 9827,\n 'black club suit'\n ],\n [\n 9829,\n 'black heart suit'\n ],\n [\n 9830,\n 'black diamond suit'\n ],\n [\n 8194,\n 'en space'\n ],\n [\n 8195,\n 'em space'\n ],\n [\n 8201,\n 'thin space'\n ],\n [\n 8204,\n 'zero width non-joiner'\n ],\n [\n 8205,\n 'zero width joiner'\n ],\n [\n 8206,\n 'left-to-right mark'\n ],\n [\n 8207,\n 'right-to-left mark'\n ]\n ]\n }\n ];\n };\n const charmapFilter = charmap => {\n return global.grep(charmap, item => {\n return isArray(item) && item.length === 2;\n });\n };\n const getCharsFromOption = optionValue => {\n if (isArray(optionValue)) {\n return charmapFilter(optionValue);\n }\n if (typeof optionValue === 'function') {\n return optionValue();\n }\n return [];\n };\n const extendCharMap = (editor, charmap) => {\n const userCharMap = getCharMap$1(editor);\n if (userCharMap) {\n charmap = [{\n name: UserDefined,\n characters: getCharsFromOption(userCharMap)\n }];\n }\n const userCharMapAppend = getCharMapAppend(editor);\n if (userCharMapAppend) {\n const userDefinedGroup = global.grep(charmap, cg => cg.name === UserDefined);\n if (userDefinedGroup.length) {\n userDefinedGroup[0].characters = [\n ...userDefinedGroup[0].characters,\n ...getCharsFromOption(userCharMapAppend)\n ];\n return charmap;\n }\n return charmap.concat({\n name: UserDefined,\n characters: getCharsFromOption(userCharMapAppend)\n });\n }\n return charmap;\n };\n const getCharMap = editor => {\n const groups = extendCharMap(editor, getDefaultCharMap());\n return groups.length > 1 ? [{\n name: 'All',\n characters: bind(groups, g => g.characters)\n }].concat(groups) : groups;\n };\n\n const get = editor => {\n const getCharMap$1 = () => {\n return getCharMap(editor);\n };\n const insertChar$1 = chr => {\n insertChar(editor, chr);\n };\n return {\n getCharMap: getCharMap$1,\n insertChar: insertChar$1\n };\n };\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 last = (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 contains = (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 fromCodePoint = String.fromCodePoint;\n\n const charMatches = (charCode, name, lowerCasePattern) => {\n if (contains(fromCodePoint(charCode).toLowerCase(), lowerCasePattern)) {\n return true;\n } else {\n return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\\s+/g, ''), lowerCasePattern);\n }\n };\n const scan = (group, pattern) => {\n const matches = [];\n const lowerCasePattern = pattern.toLowerCase();\n each(group.characters, g => {\n if (charMatches(g[0], g[1], lowerCasePattern)) {\n matches.push(g);\n }\n });\n return map(matches, m => ({\n text: m[1],\n value: fromCodePoint(m[0]),\n icon: fromCodePoint(m[0])\n }));\n };\n\n const patternName = 'pattern';\n const open = (editor, charMap) => {\n const makeGroupItems = () => [\n {\n label: 'Search',\n type: 'input',\n name: patternName\n },\n {\n type: 'collection',\n name: 'results'\n }\n ];\n const makeTabs = () => map(charMap, charGroup => ({\n title: charGroup.name,\n name: charGroup.name,\n items: makeGroupItems()\n }));\n const makePanel = () => ({\n type: 'panel',\n items: makeGroupItems()\n });\n const makeTabPanel = () => ({\n type: 'tabpanel',\n tabs: makeTabs()\n });\n const currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');\n const scanAndSet = (dialogApi, pattern) => {\n find(charMap, group => group.name === currentTab.get()).each(f => {\n const items = scan(f, pattern);\n dialogApi.setData({ results: items });\n });\n };\n const SEARCH_DELAY = 40;\n const updateFilter = last(dialogApi => {\n const pattern = dialogApi.getData().pattern;\n scanAndSet(dialogApi, pattern);\n }, SEARCH_DELAY);\n const body = charMap.length === 1 ? makePanel() : makeTabPanel();\n const initialData = {\n pattern: '',\n results: scan(charMap[0], '')\n };\n const bridgeSpec = {\n title: 'Special Character',\n size: 'normal',\n body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData,\n onAction: (api, details) => {\n if (details.name === 'results') {\n insertChar(editor, details.value);\n api.close();\n }\n },\n onTabChange: (dialogApi, details) => {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: (dialogApi, changeData) => {\n if (changeData.name === patternName) {\n updateFilter.throttle(dialogApi);\n }\n }\n };\n const dialogApi = editor.windowManager.open(bridgeSpec);\n dialogApi.focus(patternName);\n };\n\n const register$1 = (editor, charMap) => {\n editor.addCommand('mceShowCharmap', () => {\n open(editor, charMap);\n });\n };\n\n const init = (editor, all) => {\n editor.ui.registry.addAutocompleter('charmap', {\n trigger: ':',\n columns: 'auto',\n minChars: 2,\n fetch: (pattern, _maxResults) => new Promise((resolve, _reject) => {\n resolve(scan(all, pattern));\n }),\n onAction: (autocompleteApi, rng, value) => {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n const onSetupEditable = editor => api => {\n const nodeChanged = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n editor.on('NodeChange', nodeChanged);\n nodeChanged();\n return () => {\n editor.off('NodeChange', nodeChanged);\n };\n };\n const register = editor => {\n const onAction = () => editor.execCommand('mceShowCharmap');\n editor.ui.registry.addButton('charmap', {\n icon: 'insert-character',\n tooltip: 'Special character',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n editor.ui.registry.addMenuItem('charmap', {\n icon: 'insert-character',\n text: 'Special character...',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n };\n\n var Plugin = () => {\n global$1.add('charmap', editor => {\n register$2(editor);\n const charMap = getCharMap(editor);\n register$1(editor, charMap);\n register(editor);\n init(editor, charMap[0]);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"charmap\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/charmap')\n// ES2015:\n// import 'tinymce/plugins/charmap'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const eq = t => a => t === a;\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\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 constant = value => {\n return () => {\n return value;\n };\n };\n const never = constant(false);\n\n const findUntil = (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$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\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\n typeof window !== 'undefined' ? window : Function('return this;')();\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 = (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$2(group(1), group(2));\n };\n const detect$3 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$3,\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$1(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$2 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$2(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$2(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 contains = (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\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(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(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(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(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: '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$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 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$1,\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({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = 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,\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$1 = (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$1 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect = () => platform();\n\n const isMacOS = () => detect().os.isMacOS();\n const isiOS = () => detect().os.isiOS();\n\n const getPreventClicksOnLinksScript = () => {\n const isMacOSOrIOS = isMacOS() || isiOS();\n const fn = isMacOSOrIOS => {\n document.addEventListener('click', e => {\n for (let elm = e.target; elm; elm = elm.parentNode) {\n if (elm.nodeName === 'A') {\n const anchor = elm;\n const href = anchor.getAttribute('href');\n if (href && href.startsWith('#')) {\n e.preventDefault();\n const targetElement = document.getElementById(href.substring(1));\n if (targetElement) {\n targetElement.scrollIntoView({ behavior: 'smooth' });\n }\n return;\n }\n const isMetaKeyPressed = isMacOSOrIOS ? e.metaKey : e.ctrlKey && !e.altKey;\n if (!isMetaKeyPressed) {\n e.preventDefault();\n }\n }\n }\n }, false);\n };\n return ``;\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const getContentStyle = option('content_style');\n const shouldUseContentCssCors = option('content_css_cors');\n const getBodyClass = option('body_class');\n const getBodyId = option('body_id');\n\n const getPreviewHtml = editor => {\n var _a;\n let headHtml = '';\n const encode = editor.dom.encode;\n const contentStyle = (_a = getContentStyle(editor)) !== null && _a !== void 0 ? _a : '';\n headHtml += ``;\n const cors = shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global.each(editor.contentCSS, url => {\n headHtml += '';\n });\n if (contentStyle) {\n headHtml += '';\n }\n const bodyId = getBodyId(editor);\n const bodyClass = getBodyClass(editor);\n const directionality = editor.getBody().dir;\n const dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n const previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + getPreventClicksOnLinksScript() + '' + '';\n return previewHtml;\n };\n\n const open = editor => {\n const content = getPreviewHtml(editor);\n const dataApi = editor.windowManager.open({\n title: 'Preview',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n name: 'preview',\n type: 'iframe',\n sandboxed: true,\n transparent: false\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: { preview: content }\n });\n dataApi.focus('close');\n };\n\n const register$1 = editor => {\n editor.addCommand('mcePreview', () => {\n open(editor);\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mcePreview');\n editor.ui.registry.addButton('preview', {\n icon: 'preview',\n tooltip: 'Preview',\n onAction,\n context: 'any'\n });\n editor.ui.registry.addMenuItem('preview', {\n icon: 'preview',\n text: 'Preview',\n onAction,\n context: 'any'\n });\n };\n\n var Plugin = () => {\n global$1.add('preview', editor => {\n register$1(editor);\n register(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"preview\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/preview')\n// ES2015:\n// import 'tinymce/plugins/preview'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('allow_html_in_named_anchor', {\n processor: 'boolean',\n default: false\n });\n };\n const allowHtmlInNamedAnchor = option('allow_html_in_named_anchor');\n\n const namedAnchorSelector = 'a:not([href])';\n const isEmptyString = str => !str;\n const getIdFromAnchor = elm => {\n const id = elm.getAttribute('id') || elm.getAttribute('name');\n return id || '';\n };\n const isAnchor = elm => elm.nodeName.toLowerCase() === 'a';\n const isNamedAnchor = elm => isAnchor(elm) && !elm.getAttribute('href') && getIdFromAnchor(elm) !== '';\n const isEmptyNamedAnchor = elm => isNamedAnchor(elm) && !elm.firstChild;\n\n const removeEmptyNamedAnchorsInSelection = editor => {\n const dom = editor.dom;\n global$1(dom).walk(editor.selection.getRng(), nodes => {\n global.each(nodes, node => {\n if (isEmptyNamedAnchor(node)) {\n dom.remove(node, false);\n }\n });\n });\n };\n const isValidId = id => /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n const getNamedAnchor = editor => editor.dom.getParent(editor.selection.getStart(), namedAnchorSelector);\n const getId = editor => {\n const anchor = getNamedAnchor(editor);\n if (anchor) {\n return getIdFromAnchor(anchor);\n } else {\n return '';\n }\n };\n const createAnchor = (editor, id) => {\n editor.undoManager.transact(() => {\n if (!allowHtmlInNamedAnchor(editor)) {\n editor.selection.collapse(true);\n }\n if (editor.selection.isCollapsed()) {\n editor.insertContent(editor.dom.createHTML('a', { id }));\n } else {\n removeEmptyNamedAnchorsInSelection(editor);\n editor.formatter.remove('namedAnchor', undefined, undefined, true);\n editor.formatter.apply('namedAnchor', { value: id });\n editor.addVisual();\n }\n });\n };\n const updateAnchor = (editor, id, anchorElement) => {\n anchorElement.removeAttribute('name');\n anchorElement.id = id;\n editor.addVisual();\n editor.undoManager.add();\n };\n const insert = (editor, id) => {\n const anchor = getNamedAnchor(editor);\n if (anchor) {\n updateAnchor(editor, id, anchor);\n } else {\n createAnchor(editor, id);\n }\n editor.focus();\n };\n\n const insertAnchor = (editor, newId) => {\n if (!isValidId(newId)) {\n editor.windowManager.alert('ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n return false;\n } else {\n insert(editor, newId);\n return true;\n }\n };\n const open = editor => {\n const currentId = getId(editor);\n editor.windowManager.open({\n title: 'Anchor',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n name: 'id',\n type: 'input',\n label: 'ID',\n placeholder: 'example'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { id: currentId },\n onSubmit: api => {\n if (insertAnchor(editor, api.getData().id)) {\n api.close();\n }\n }\n });\n };\n\n const register$1 = editor => {\n editor.addCommand('mceAnchor', () => {\n open(editor);\n });\n };\n\n const isNamedAnchorNode = node => isEmptyString(node.attr('href')) && !isEmptyString(node.attr('id') || node.attr('name'));\n const isEmptyNamedAnchorNode = node => isNamedAnchorNode(node) && !node.firstChild;\n const setContentEditable = state => nodes => {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (isEmptyNamedAnchorNode(node)) {\n node.attr('contenteditable', state);\n }\n }\n };\n const setup = editor => {\n editor.on('PreInit', () => {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n\n const registerFormats = editor => {\n editor.formatter.register('namedAnchor', {\n inline: 'a',\n selector: namedAnchorSelector,\n remove: 'all',\n split: true,\n deep: true,\n attributes: { id: '%value' },\n onmatch: (node, _fmt, _itemName) => {\n return isNamedAnchor(node);\n }\n });\n };\n\n const onSetupEditable = editor => api => {\n const nodeChanged = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n editor.on('NodeChange', nodeChanged);\n nodeChanged();\n return () => {\n editor.off('NodeChange', nodeChanged);\n };\n };\n const register = editor => {\n const onAction = () => editor.execCommand('mceAnchor');\n editor.ui.registry.addToggleButton('anchor', {\n icon: 'bookmark',\n tooltip: 'Anchor',\n onAction,\n onSetup: buttonApi => {\n const unbindSelectorChanged = editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind;\n const unbindEditableChanged = onSetupEditable(editor)(buttonApi);\n return () => {\n unbindSelectorChanged();\n unbindEditableChanged();\n };\n }\n });\n editor.ui.registry.addMenuItem('anchor', {\n icon: 'bookmark',\n text: 'Anchor...',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n };\n\n var Plugin = () => {\n global$2.add('anchor', editor => {\n register$2(editor);\n setup(editor);\n register$1(editor);\n register(editor);\n editor.on('PreInit', () => {\n registerFormats(editor);\n });\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"anchor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/anchor')\n// ES2015:\n// import 'tinymce/plugins/anchor'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\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 var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\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 isString = isType$1('string');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const constant = value => {\n return () => {\n return value;\n };\n };\n const always = constant(true);\n\n const punctuationStr = `[~\\u2116|!-*+-\\\\/:;?@\\\\[-\\`{}\\u00A1\\u00AB\\u00B7\\u00BB\\u00BF;\\u00B7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]`;\n\n const punctuation$1 = constant(punctuationStr);\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 punctuation = punctuation$1;\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const nativeSlice = Array.prototype.slice;\n const nativePush = Array.prototype.push;\n const map = (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 = (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 groupBy = (xs, f) => {\n if (xs.length === 0) {\n return [];\n } else {\n let wasType = f(xs[0]);\n const r = [];\n let group = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n const foldl = (xs, f, acc) => {\n each(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n\n const hasOwnProperty = Object.hasOwnProperty;\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isText$1 = isType(TEXT);\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 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n\n const fromHtml = (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(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = 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 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom,\n fromPoint\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(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n const spot = (element, offset) => ({\n element,\n offset\n });\n const leaf = (element, offset) => {\n const cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n const before = (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 append = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap = (element, wrapper) => {\n before(element, wrapper);\n append(wrapper, element);\n };\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 = NodeValue(isText$1, 'text');\n const get$1 = element => api.get(element);\n\n const compareDocumentPosition = (a, b, match) => {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n const documentPositionPreceding = (a, b) => {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_PRECEDING);\n };\n\n const descendants = (scope, selector) => all(selector, scope);\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n const isSimpleBoundary = (dom, node) => dom.isBlock(node) || has(dom.schema.getVoidElements(), node.nodeName);\n const isContentEditableFalse = (dom, node) => !dom.isEditable(node);\n const isContentEditableTrueInCef = (dom, node) => dom.getContentEditable(node) === 'true' && node.parentNode && !dom.isEditable(node.parentNode);\n const isHidden = (dom, node) => !dom.isBlock(node) && has(dom.schema.getWhitespaceElements(), node.nodeName);\n const isBoundary = (dom, node) => isSimpleBoundary(dom, node) || isContentEditableFalse(dom, node) || isHidden(dom, node) || isContentEditableTrueInCef(dom, node);\n const isText = node => node.nodeType === 3;\n const nuSection = () => ({\n sOffset: 0,\n fOffset: 0,\n elements: []\n });\n const toLeaf = (node, offset) => leaf(SugarElement.fromDom(node), offset);\n const walk = (dom, walkerFn, startNode, callbacks, endNode, skipStart = true) => {\n let next = skipStart ? walkerFn(false) : startNode;\n while (next) {\n const isCefNode = isContentEditableFalse(dom, next);\n if (isCefNode || isHidden(dom, next)) {\n const stopWalking = isCefNode ? callbacks.cef(next) : callbacks.boundary(next);\n if (stopWalking) {\n break;\n } else {\n next = walkerFn(true);\n continue;\n }\n } else if (isSimpleBoundary(dom, next)) {\n if (callbacks.boundary(next)) {\n break;\n }\n } else if (isText(next)) {\n callbacks.text(next);\n }\n if (next === endNode) {\n break;\n } else {\n next = walkerFn(false);\n }\n }\n };\n const collectTextToBoundary = (dom, section, node, rootNode, forwards) => {\n var _a;\n if (isBoundary(dom, node)) {\n return;\n }\n const rootBlock = (_a = dom.getParent(rootNode, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n const walker = new global(node, rootBlock);\n const walkerFn = forwards ? walker.next.bind(walker) : walker.prev.bind(walker);\n walk(dom, walkerFn, node, {\n boundary: always,\n cef: always,\n text: next => {\n if (forwards) {\n section.fOffset += next.length;\n } else {\n section.sOffset += next.length;\n }\n section.elements.push(SugarElement.fromDom(next));\n }\n });\n };\n const collect = (dom, rootNode, startNode, endNode, callbacks, skipStart = true) => {\n const walker = new global(startNode, rootNode);\n const sections = [];\n let current = nuSection();\n collectTextToBoundary(dom, current, startNode, rootNode, false);\n const finishSection = () => {\n if (current.elements.length > 0) {\n sections.push(current);\n current = nuSection();\n }\n return false;\n };\n walk(dom, walker.next.bind(walker), startNode, {\n boundary: finishSection,\n cef: node => {\n finishSection();\n if (callbacks) {\n sections.push(...callbacks.cef(node));\n }\n return false;\n },\n text: next => {\n current.elements.push(SugarElement.fromDom(next));\n if (callbacks) {\n callbacks.text(next, current);\n }\n }\n }, endNode, skipStart);\n if (endNode) {\n collectTextToBoundary(dom, current, endNode, rootNode, true);\n }\n finishSection();\n return sections;\n };\n const collectRangeSections = (dom, rng) => {\n const start = toLeaf(rng.startContainer, rng.startOffset);\n const startNode = start.element.dom;\n const end = toLeaf(rng.endContainer, rng.endOffset);\n const endNode = end.element.dom;\n return collect(dom, rng.commonAncestorContainer, startNode, endNode, {\n text: (node, section) => {\n if (node === endNode) {\n section.fOffset += node.length - end.offset;\n } else if (node === startNode) {\n section.sOffset += start.offset;\n }\n },\n cef: node => {\n const sections = bind(descendants(SugarElement.fromDom(node), '*[contenteditable=true]'), e => {\n const ceTrueNode = e.dom;\n return collect(dom, ceTrueNode, ceTrueNode);\n });\n return sort(sections, (a, b) => documentPositionPreceding(a.elements[0].dom, b.elements[0].dom) ? 1 : -1);\n }\n }, false);\n };\n const fromRng = (dom, rng) => rng.collapsed ? [] : collectRangeSections(dom, rng);\n const fromNode = (dom, node) => {\n const rng = dom.createRng();\n rng.selectNode(node);\n return fromRng(dom, rng);\n };\n const fromNodes = (dom, nodes) => bind(nodes, node => fromNode(dom, node));\n\n const find$2 = (text, pattern, start = 0, finish = text.length) => {\n const regex = pattern.regex;\n regex.lastIndex = start;\n const results = [];\n let match;\n while (match = regex.exec(text)) {\n const matchedText = match[pattern.matchIndex];\n const matchStart = match.index + match[0].indexOf(matchedText);\n const matchFinish = matchStart + matchedText.length;\n if (matchFinish > finish) {\n break;\n }\n results.push({\n start: matchStart,\n finish: matchFinish\n });\n regex.lastIndex = matchFinish;\n }\n return results;\n };\n const extract = (elements, matches) => {\n const nodePositions = foldl(elements, (acc, element) => {\n const content = get$1(element);\n const start = acc.last;\n const finish = start + content.length;\n const positions = bind(matches, (match, matchIdx) => {\n if (match.start < finish && match.finish > start) {\n return [{\n element,\n start: Math.max(start, match.start) - start,\n finish: Math.min(finish, match.finish) - start,\n matchId: matchIdx\n }];\n } else {\n return [];\n }\n });\n return {\n results: acc.results.concat(positions),\n last: finish\n };\n }, {\n results: [],\n last: 0\n }).results;\n return groupBy(nodePositions, position => position.matchId);\n };\n\n const find$1 = (pattern, sections) => bind(sections, section => {\n const elements = section.elements;\n const content = map(elements, get$1).join('');\n const positions = find$2(content, pattern, section.sOffset, content.length - section.fOffset);\n return extract(elements, positions);\n });\n const mark = (matches, replacementNode) => {\n eachr(matches, (match, idx) => {\n eachr(match, pos => {\n const wrapper = SugarElement.fromDom(replacementNode.cloneNode(false));\n set(wrapper, 'data-mce-index', idx);\n const textNode = pos.element.dom;\n if (textNode.length === pos.finish && pos.start === 0) {\n wrap(pos.element, wrapper);\n } else {\n if (textNode.length !== pos.finish) {\n textNode.splitText(pos.finish);\n }\n const matchNode = textNode.splitText(pos.start);\n wrap(SugarElement.fromDom(matchNode), wrapper);\n }\n });\n });\n };\n const findAndMark = (dom, pattern, node, replacementNode) => {\n const textSections = fromNode(dom, node);\n const matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n return matches.length;\n };\n const findAndMarkInSelection = (dom, pattern, selection, replacementNode) => {\n const bookmark = selection.getBookmark();\n const nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n const textSections = nodes.length > 0 ? fromNodes(dom, nodes) : fromRng(dom, selection.getRng());\n const matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n selection.moveToBookmark(bookmark);\n return matches.length;\n };\n\n const getElmIndex = elm => {\n return elm.getAttribute('data-mce-index');\n };\n const markAllMatches = (editor, currentSearchState, pattern, inSelection) => {\n const marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n const node = editor.getBody();\n done(editor, currentSearchState, false);\n if (inSelection) {\n return findAndMarkInSelection(editor.dom, pattern, editor.selection, marker);\n } else {\n return findAndMark(editor.dom, pattern, node, marker);\n }\n };\n const unwrap = node => {\n var _a;\n const parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node);\n };\n const findSpansByIndex = (editor, index) => {\n const spans = [];\n const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex === null || !nodeIndex.length) {\n continue;\n }\n if (nodeIndex === index.toString()) {\n spans.push(nodes[i]);\n }\n }\n }\n return spans;\n };\n const moveSelection = (editor, currentSearchState, forward) => {\n const searchState = currentSearchState.get();\n let testIndex = searchState.index;\n const dom = editor.dom;\n if (forward) {\n if (testIndex + 1 === searchState.count) {\n testIndex = 0;\n } else {\n testIndex++;\n }\n } else {\n if (testIndex - 1 === -1) {\n testIndex = searchState.count - 1;\n } else {\n testIndex--;\n }\n }\n dom.removeClass(findSpansByIndex(editor, searchState.index), 'mce-match-marker-selected');\n const spans = findSpansByIndex(editor, testIndex);\n if (spans.length) {\n dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n editor.selection.scrollIntoView(spans[0]);\n return testIndex;\n }\n return -1;\n };\n const removeNode = (dom, node) => {\n const parent = node.parentNode;\n dom.remove(node);\n if (parent && dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n const escapeSearchText = (text, wholeWord) => {\n const escapedText = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&').replace(/\\s/g, '[^\\\\S\\\\r\\\\n\\\\uFEFF]');\n const wordRegex = '(' + escapedText + ')';\n return wholeWord ? `(?:^|\\\\s|${ punctuation() })` + wordRegex + `(?=$|\\\\s|${ punctuation() })` : wordRegex;\n };\n const find = (editor, currentSearchState, text, matchCase, wholeWord, inSelection) => {\n const selection = editor.selection;\n const escapedText = escapeSearchText(text, wholeWord);\n const isForwardSelection = selection.isForward();\n const pattern = {\n regex: new RegExp(escapedText, matchCase ? 'g' : 'gi'),\n matchIndex: 1\n };\n const count = markAllMatches(editor, currentSearchState, pattern, inSelection);\n if (global$2.browser.isSafari()) {\n selection.setRng(selection.getRng(), isForwardSelection);\n }\n if (count) {\n const newIndex = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n index: newIndex,\n count,\n text,\n matchCase,\n wholeWord,\n inSelection\n });\n }\n return count;\n };\n const next = (editor, currentSearchState) => {\n const index = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n ...currentSearchState.get(),\n index\n });\n };\n const prev = (editor, currentSearchState) => {\n const index = moveSelection(editor, currentSearchState, false);\n currentSearchState.set({\n ...currentSearchState.get(),\n index\n });\n };\n const isMatchSpan = node => {\n const matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n const replace = (editor, currentSearchState, text, forward, all) => {\n const searchState = currentSearchState.get();\n const currentIndex = searchState.index;\n let currentMatchIndex, nextIndex = currentIndex;\n forward = forward !== false;\n const node = editor.getBody();\n const nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n let matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === searchState.index) {\n if (text.length) {\n nodes[i].innerText = text;\n unwrap(nodes[i]);\n } else {\n removeNode(editor.dom, nodes[i]);\n }\n while (nodes[++i]) {\n matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n if (matchIndex === currentMatchIndex) {\n removeNode(editor.dom, nodes[i]);\n } else {\n i--;\n break;\n }\n }\n if (forward) {\n nextIndex--;\n }\n } else if (currentMatchIndex > currentIndex) {\n nodes[i].setAttribute('data-mce-index', String(currentMatchIndex - 1));\n }\n }\n currentSearchState.set({\n ...searchState,\n count: all ? 0 : searchState.count - 1,\n index: nextIndex\n });\n if (forward) {\n next(editor, currentSearchState);\n } else {\n prev(editor, currentSearchState);\n }\n return !all && currentSearchState.get().count > 0;\n };\n const done = (editor, currentSearchState, keepEditorSelection) => {\n let startContainer;\n let endContainer;\n const searchState = currentSearchState.get();\n const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex !== null && nodeIndex.length) {\n if (nodeIndex === searchState.index.toString()) {\n if (!startContainer) {\n startContainer = nodes[i].firstChild;\n }\n endContainer = nodes[i].firstChild;\n }\n unwrap(nodes[i]);\n }\n }\n currentSearchState.set({\n ...searchState,\n index: -1,\n count: 0,\n text: ''\n });\n if (startContainer && endContainer) {\n const rng = editor.dom.createRng();\n rng.setStart(startContainer, 0);\n rng.setEnd(endContainer, endContainer.data.length);\n if (keepEditorSelection !== false) {\n editor.selection.setRng(rng);\n }\n return rng;\n } else {\n return undefined;\n }\n };\n const hasNext = (editor, currentSearchState) => currentSearchState.get().count > 1;\n const hasPrev = (editor, currentSearchState) => currentSearchState.get().count > 1;\n\n const get = (editor, currentState) => {\n const done$1 = keepEditorSelection => {\n return done(editor, currentState, keepEditorSelection);\n };\n const find$1 = (text, matchCase, wholeWord, inSelection = false) => {\n return find(editor, currentState, text, matchCase, wholeWord, inSelection);\n };\n const next$1 = () => {\n return next(editor, currentState);\n };\n const prev$1 = () => {\n return prev(editor, currentState);\n };\n const replace$1 = (text, forward, all) => {\n return replace(editor, currentState, text, forward, all);\n };\n return {\n done: done$1,\n find: find$1,\n next: next$1,\n prev: prev$1,\n replace: replace$1\n };\n };\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 value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const open = (editor, currentSearchState) => {\n const dialogApi = value();\n editor.undoManager.add();\n const selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n const updateButtonStates = api => {\n api.setEnabled('next', hasNext(editor, currentSearchState));\n api.setEnabled('prev', hasPrev(editor, currentSearchState));\n };\n const updateSearchState = api => {\n const data = api.getData();\n const current = currentSearchState.get();\n currentSearchState.set({\n ...current,\n matchCase: data.matchcase,\n wholeWord: data.wholewords,\n inSelection: data.inselection\n });\n };\n const disableAll = (api, disable) => {\n const buttons = [\n 'replace',\n 'replaceall',\n 'prev',\n 'next'\n ];\n const toggle = name => api.setEnabled(name, !disable);\n each(buttons, toggle);\n };\n const toggleNotFoundAlert = (isVisible, api) => {\n api.redial(getDialogSpec(isVisible, api.getData()));\n };\n const focusButtonIfRequired = (api, name) => {\n if (global$2.browser.isSafari() && global$2.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {\n api.focus(name);\n }\n };\n const reset = api => {\n done(editor, currentSearchState, false);\n disableAll(api, true);\n updateButtonStates(api);\n };\n const doFind = api => {\n const data = api.getData();\n const last = currentSearchState.get();\n if (!data.findtext.length) {\n reset(api);\n return;\n }\n if (last.text === data.findtext && last.matchCase === data.matchcase && last.wholeWord === data.wholewords) {\n next(editor, currentSearchState);\n } else {\n const count = find(editor, currentSearchState, data.findtext, data.matchcase, data.wholewords, data.inselection);\n if (count <= 0) {\n toggleNotFoundAlert(true, api);\n }\n disableAll(api, count === 0);\n }\n updateButtonStates(api);\n };\n const initialState = currentSearchState.get();\n const initialData = {\n findtext: selectedText,\n replacetext: '',\n wholewords: initialState.wholeWord,\n matchcase: initialState.matchCase,\n inselection: initialState.inSelection\n };\n const getPanelItems = error => {\n const items = [\n {\n type: 'label',\n label: 'Find',\n for: 'findtext',\n items: [{\n type: 'bar',\n items: [\n {\n type: 'input',\n name: 'findtext',\n maximized: true,\n inputMode: 'search'\n },\n {\n type: 'button',\n name: 'prev',\n text: 'Previous',\n icon: 'action-prev',\n enabled: false,\n borderless: true\n },\n {\n type: 'button',\n name: 'next',\n text: 'Next',\n icon: 'action-next',\n enabled: false,\n borderless: true\n }\n ]\n }]\n },\n {\n type: 'input',\n name: 'replacetext',\n label: 'Replace with',\n inputMode: 'search'\n }\n ];\n if (error) {\n items.push({\n type: 'alertbanner',\n level: 'error',\n text: 'Could not find the specified string.',\n icon: 'warning'\n });\n }\n return items;\n };\n const getDialogSpec = (showNoMatchesAlertBanner, initialData) => ({\n title: 'Find and Replace',\n size: 'normal',\n body: {\n type: 'panel',\n items: getPanelItems(showNoMatchesAlertBanner)\n },\n buttons: [\n {\n type: 'menu',\n name: 'options',\n icon: 'preferences',\n tooltip: 'Preferences',\n align: 'start',\n items: [\n {\n type: 'togglemenuitem',\n name: 'matchcase',\n text: 'Match case'\n },\n {\n type: 'togglemenuitem',\n name: 'wholewords',\n text: 'Find whole words only'\n },\n {\n type: 'togglemenuitem',\n name: 'inselection',\n text: 'Find in selection'\n }\n ]\n },\n {\n type: 'custom',\n name: 'find',\n text: 'Find',\n primary: true\n },\n {\n type: 'custom',\n name: 'replace',\n text: 'Replace',\n enabled: false\n },\n {\n type: 'custom',\n name: 'replaceall',\n text: 'Replace all',\n enabled: false\n }\n ],\n initialData,\n onChange: (api, details) => {\n if (showNoMatchesAlertBanner) {\n toggleNotFoundAlert(false, api);\n }\n if (details.name === 'findtext' && currentSearchState.get().count > 0) {\n reset(api);\n }\n },\n onAction: (api, details) => {\n const data = api.getData();\n switch (details.name) {\n case 'find':\n doFind(api);\n break;\n case 'replace':\n if (!replace(editor, currentSearchState, data.replacetext)) {\n reset(api);\n } else {\n updateButtonStates(api);\n }\n break;\n case 'replaceall':\n replace(editor, currentSearchState, data.replacetext, true, true);\n reset(api);\n break;\n case 'prev':\n prev(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'next':\n next(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'matchcase':\n case 'wholewords':\n case 'inselection':\n toggleNotFoundAlert(false, api);\n updateSearchState(api);\n reset(api);\n break;\n }\n focusButtonIfRequired(api, details.name);\n },\n onSubmit: api => {\n doFind(api);\n focusButtonIfRequired(api, 'find');\n },\n onClose: () => {\n editor.focus();\n done(editor, currentSearchState);\n editor.undoManager.add();\n }\n });\n dialogApi.set(editor.windowManager.open(getDialogSpec(false, initialData), { inline: 'toolbar' }));\n };\n\n const register$1 = (editor, currentSearchState) => {\n editor.addCommand('SearchReplace', () => {\n open(editor, currentSearchState);\n });\n };\n\n const showDialog = (editor, currentSearchState) => () => {\n open(editor, currentSearchState);\n };\n const register = (editor, currentSearchState) => {\n editor.ui.registry.addMenuItem('searchreplace', {\n text: 'Find and replace...',\n shortcut: 'Meta+F',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search'\n });\n editor.ui.registry.addButton('searchreplace', {\n tooltip: 'Find and replace',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search',\n shortcut: 'Meta+F'\n });\n editor.shortcuts.add('Meta+F', '', showDialog(editor, currentSearchState));\n };\n\n var Plugin = () => {\n global$3.add('searchreplace', editor => {\n const currentSearchState = Cell({\n index: -1,\n count: 0,\n text: '',\n matchCase: false,\n wholeWord: false,\n inSelection: false\n });\n register$1(editor, currentSearchState);\n register(editor, currentSearchState);\n return get(editor, currentSearchState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"searchreplace\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/searchreplace')\n// ES2015:\n// import 'tinymce/plugins/searchreplace'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\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 var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const fireVisualBlocks = (editor, state) => {\n editor.dispatch('VisualBlocks', { state });\n };\n\n const toggleVisualBlocks = (editor, pluginUrl, enabledState) => {\n const dom = editor.dom;\n dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n enabledState.set(!enabledState.get());\n fireVisualBlocks(editor, enabledState.get());\n };\n\n const register$2 = (editor, pluginUrl, enabledState) => {\n editor.addCommand('mceVisualBlocks', () => {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n });\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('visualblocks_default_state', {\n processor: 'boolean',\n default: false\n });\n };\n const isEnabledByDefault = option('visualblocks_default_state');\n\n const setup = (editor, pluginUrl, enabledState) => {\n editor.on('PreviewFormats AfterPreviewFormats', e => {\n if (enabledState.get()) {\n editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n }\n });\n editor.on('init', () => {\n if (isEnabledByDefault(editor)) {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n }\n });\n };\n\n const toggleActiveState = (editor, enabledState) => api => {\n api.setActive(enabledState.get());\n const editorEventCallback = e => api.setActive(e.state);\n editor.on('VisualBlocks', editorEventCallback);\n return () => editor.off('VisualBlocks', editorEventCallback);\n };\n const register = (editor, enabledState) => {\n const onAction = () => editor.execCommand('mceVisualBlocks');\n editor.ui.registry.addToggleButton('visualblocks', {\n icon: 'visualblocks',\n tooltip: 'Show blocks',\n onAction,\n onSetup: toggleActiveState(editor, enabledState),\n context: 'any'\n });\n editor.ui.registry.addToggleMenuItem('visualblocks', {\n text: 'Show blocks',\n icon: 'visualblocks',\n onAction,\n onSetup: toggleActiveState(editor, enabledState),\n context: 'any'\n });\n };\n\n var Plugin = () => {\n global.add('visualblocks', (editor, pluginUrl) => {\n register$1(editor);\n const enabledState = Cell(false);\n register$2(editor, pluginUrl, enabledState);\n register(editor, enabledState);\n setup(editor, pluginUrl, enabledState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"visualblocks\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualblocks')\n// ES2015:\n// import 'tinymce/plugins/visualblocks'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const setContent = (editor, html) => {\n editor.focus();\n editor.undoManager.transact(() => {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n const getContent = editor => {\n return editor.getContent({ source_view: true });\n };\n\n const open = editor => {\n const editorContent = getContent(editor);\n editor.windowManager.open({\n title: 'Source Code',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n type: 'textarea',\n name: 'code'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { code: editorContent },\n onSubmit: api => {\n setContent(editor, api.getData().code);\n api.close();\n }\n });\n };\n\n const register$1 = editor => {\n editor.addCommand('mceCodeEditor', () => {\n open(editor);\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mceCodeEditor');\n editor.ui.registry.addButton('code', {\n icon: 'sourcecode',\n tooltip: 'Source code',\n onAction\n });\n editor.ui.registry.addMenuItem('code', {\n icon: 'sourcecode',\n text: 'Source code',\n onAction\n });\n };\n\n var Plugin = () => {\n global.add('code', editor => {\n register$1(editor);\n register(editor);\n return {};\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\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 var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const get$5 = fullscreenState => ({ isFullscreen: () => fullscreenState.get() !== null });\n\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 isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = 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\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 function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\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 nativePush = Array.prototype.push;\n const map = (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$1 = (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 filter$1 = (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 findUntil = (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$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map(xs, f));\n const get$4 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$4(xs, 0);\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\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\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 unbindable = () => singleton(s => s.unbind());\n const value = () => {\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 = (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\n const keys = Object.keys;\n const each = (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\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\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$1 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const get$3 = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const remove = (element, key) => {\n element.dom.removeAttribute(key);\n };\n\n const supports = element => element.dom.classList !== undefined;\n\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const contains = (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\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml = (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(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = 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 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const is = (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$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parents = (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$2 = element => {\n const filterSelf = elements => filter$1(elements, x => !eq(element, x));\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\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 (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(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(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 const getBody = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n 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(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const set = (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(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$2 = (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(dom) ? dom.style.getPropertyValue(property) : '';\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 = (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(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 filter = always;\n const bind$1 = (element, event, handler) => bind$2(element, event, filter, handler);\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 = (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$2(group(1), group(2));\n };\n const detect$3 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$3,\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$1(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$2 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$2(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$2(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 normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(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(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(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(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: '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$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 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$1,\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({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = 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,\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$1 = (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$1 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect = () => platform();\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 get$1 = _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\n const get = _win => {\n const win = _win === undefined ? window : _win;\n if (detect().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$1(SugarElement.fromDom(doc));\n return get(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 const bind = (name, callback, _win) => get(_win).map(visualViewport => {\n const handler = e => callback(fromRawEvent(e));\n visualViewport.addEventListener(name, handler);\n return { unbind: () => visualViewport.removeEventListener(name, handler) };\n }).getOrThunk(() => ({ unbind: noop }));\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n const fireFullscreenStateChanged = (editor, state) => {\n editor.dispatch('FullscreenStateChanged', { state });\n editor.dispatch('ResizeEditor');\n };\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('fullscreen_native', {\n processor: 'boolean',\n default: false\n });\n };\n const getFullscreenNative = option('fullscreen_native');\n\n const getFullscreenRoot = editor => {\n const elem = SugarElement.fromDom(editor.getElement());\n return getShadowRoot(elem).map(getShadowHost).getOrThunk(() => getBody(owner(elem)));\n };\n const getFullscreenElement = root => {\n if (root.fullscreenElement !== undefined) {\n return root.fullscreenElement;\n } else if (root.msFullscreenElement !== undefined) {\n return root.msFullscreenElement;\n } else if (root.webkitFullscreenElement !== undefined) {\n return root.webkitFullscreenElement;\n } else {\n return null;\n }\n };\n const getFullscreenchangeEventName = () => {\n if (document.fullscreenElement !== undefined) {\n return 'fullscreenchange';\n } else if (document.msFullscreenElement !== undefined) {\n return 'MSFullscreenChange';\n } else if (document.webkitFullscreenElement !== undefined) {\n return 'webkitfullscreenchange';\n } else {\n return 'fullscreenchange';\n }\n };\n const requestFullscreen = sugarElem => {\n const elem = sugarElem.dom;\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n } else if (elem.msRequestFullscreen) {\n elem.msRequestFullscreen();\n } else if (elem.webkitRequestFullScreen) {\n elem.webkitRequestFullScreen();\n }\n };\n const exitFullscreen = sugarDoc => {\n const doc = sugarDoc.dom;\n if (doc.exitFullscreen) {\n doc.exitFullscreen();\n } else if (doc.msExitFullscreen) {\n doc.msExitFullscreen();\n } else if (doc.webkitCancelFullScreen) {\n doc.webkitCancelFullScreen();\n }\n };\n const isFullscreenElement = elem => elem.dom === getFullscreenElement(owner(elem).dom);\n\n const ancestors$1 = (scope, predicate, isRoot) => filter$1(parents(scope, isRoot), predicate);\n const siblings$1 = (scope, predicate) => filter$1(siblings$2(scope), predicate);\n\n const all = selector => all$1(selector);\n const ancestors = (scope, selector, isRoot) => ancestors$1(scope, e => is(e, selector), isRoot);\n const siblings = (scope, selector) => siblings$1(scope, e => is(e, selector));\n\n const attr = 'data-ephox-mobile-fullscreen-style';\n const siblingStyles = 'display:none!important;';\n const ancestorPosition = 'position:absolute!important;';\n const ancestorStyles = 'top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;';\n const bgFallback = 'background-color:rgb(255,255,255)!important;';\n const isAndroid = global$1.os.isAndroid();\n const matchColor = editorBody => {\n const color = get$2(editorBody, 'background-color');\n return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback;\n };\n const clobberStyles = (dom, container, editorBody) => {\n const gatherSiblings = element => {\n return siblings(element, '*:not(.tox-silver-sink)');\n };\n const clobber = clobberStyle => element => {\n const styles = get$3(element, 'style');\n const backup = styles === undefined ? 'no-styles' : styles.trim();\n if (backup === clobberStyle) {\n return;\n } else {\n set$1(element, attr, backup);\n setAll(element, dom.parseStyle(clobberStyle));\n }\n };\n const ancestors$1 = ancestors(container, '*');\n const siblings$1 = bind$3(ancestors$1, gatherSiblings);\n const bgColor = matchColor(editorBody);\n each$1(siblings$1, clobber(siblingStyles));\n each$1(ancestors$1, clobber(ancestorPosition + ancestorStyles + bgColor));\n const containerStyles = isAndroid === true ? '' : ancestorPosition;\n clobber(containerStyles + ancestorStyles + bgColor)(container);\n };\n const restoreStyles = dom => {\n const clobberedEls = all('[' + attr + ']');\n each$1(clobberedEls, element => {\n const restore = get$3(element, attr);\n if (restore && restore !== 'no-styles') {\n setAll(element, dom.parseStyle(restore));\n } else {\n remove(element, 'style');\n }\n remove(element, attr);\n });\n };\n\n const DOM = global$2.DOM;\n const getScrollPos = () => getBounds(window);\n const setScrollPos = pos => window.scrollTo(pos.x, pos.y);\n const viewportUpdate = get().fold(() => ({\n bind: noop,\n unbind: noop\n }), visualViewport => {\n const editorContainer = value();\n const resizeBinder = unbindable();\n const scrollBinder = unbindable();\n const refreshScroll = () => {\n document.body.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n };\n const refreshVisualViewport = () => {\n window.requestAnimationFrame(() => {\n editorContainer.on(container => setAll(container, {\n top: visualViewport.offsetTop + 'px',\n left: visualViewport.offsetLeft + 'px',\n height: visualViewport.height + 'px',\n width: visualViewport.width + 'px'\n }));\n });\n };\n const update = first(() => {\n refreshScroll();\n refreshVisualViewport();\n }, 50);\n const bind$1 = element => {\n editorContainer.set(element);\n update.throttle();\n resizeBinder.set(bind('resize', update.throttle));\n scrollBinder.set(bind('scroll', update.throttle));\n };\n const unbind = () => {\n editorContainer.on(() => {\n resizeBinder.clear();\n scrollBinder.clear();\n });\n editorContainer.clear();\n };\n return {\n bind: bind$1,\n unbind\n };\n });\n const toggleFullscreen = (editor, fullscreenState) => {\n const body = document.body;\n const documentElement = document.documentElement;\n const editorContainer = editor.getContainer();\n const editorContainerS = SugarElement.fromDom(editorContainer);\n const sinkContainerS = nextSibling(editorContainerS).filter(elm => isHTMLElement(elm) && has(elm, 'tox-silver-sink'));\n const fullscreenRoot = getFullscreenRoot(editor);\n const fullscreenInfo = fullscreenState.get();\n const editorBody = SugarElement.fromDom(editor.getBody());\n const isTouch = global$1.deviceType.isTouch();\n const editorContainerStyle = editorContainer.style;\n const iframe = editor.iframeElement;\n const iframeStyle = iframe === null || iframe === void 0 ? void 0 : iframe.style;\n const handleClasses = handler => {\n handler(body, 'tox-fullscreen');\n handler(documentElement, 'tox-fullscreen');\n handler(editorContainer, 'tox-fullscreen');\n getShadowRoot(editorContainerS).map(root => getShadowHost(root).dom).each(host => {\n handler(host, 'tox-fullscreen');\n handler(host, 'tox-shadowhost');\n });\n };\n const cleanup = () => {\n if (isTouch) {\n restoreStyles(editor.dom);\n }\n handleClasses(DOM.removeClass);\n viewportUpdate.unbind();\n Optional.from(fullscreenState.get()).each(info => info.fullscreenChangeHandler.unbind());\n };\n if (!fullscreenInfo) {\n const fullscreenChangeHandler = bind$1(owner(fullscreenRoot), getFullscreenchangeEventName(), _evt => {\n if (getFullscreenNative(editor)) {\n if (!isFullscreenElement(fullscreenRoot) && fullscreenState.get() !== null) {\n toggleFullscreen(editor, fullscreenState);\n }\n }\n });\n const newFullScreenInfo = {\n scrollPos: getScrollPos(),\n containerWidth: editorContainerStyle.width,\n containerHeight: editorContainerStyle.height,\n containerTop: editorContainerStyle.top,\n containerLeft: editorContainerStyle.left,\n iframeWidth: iframeStyle.width,\n iframeHeight: iframeStyle.height,\n fullscreenChangeHandler,\n sinkCssPosition: sinkContainerS.map(elm => get$2(elm, 'position'))\n };\n if (isTouch) {\n clobberStyles(editor.dom, editorContainerS, editorBody);\n }\n iframeStyle.width = iframeStyle.height = '100%';\n editorContainerStyle.width = editorContainerStyle.height = '';\n handleClasses(DOM.addClass);\n sinkContainerS.each(elm => {\n set(elm, 'position', 'fixed');\n });\n viewportUpdate.bind(editorContainerS);\n editor.on('remove', cleanup);\n fullscreenState.set(newFullScreenInfo);\n if (getFullscreenNative(editor)) {\n requestFullscreen(fullscreenRoot);\n }\n fireFullscreenStateChanged(editor, true);\n } else {\n fullscreenInfo.fullscreenChangeHandler.unbind();\n if (getFullscreenNative(editor) && isFullscreenElement(fullscreenRoot)) {\n exitFullscreen(owner(fullscreenRoot));\n }\n iframeStyle.width = fullscreenInfo.iframeWidth;\n iframeStyle.height = fullscreenInfo.iframeHeight;\n editorContainerStyle.width = fullscreenInfo.containerWidth;\n editorContainerStyle.height = fullscreenInfo.containerHeight;\n editorContainerStyle.top = fullscreenInfo.containerTop;\n editorContainerStyle.left = fullscreenInfo.containerLeft;\n lift2(sinkContainerS, fullscreenInfo.sinkCssPosition, (elm, val) => {\n set(elm, 'position', val);\n });\n cleanup();\n setScrollPos(fullscreenInfo.scrollPos);\n fullscreenState.set(null);\n fireFullscreenStateChanged(editor, false);\n editor.off('remove', cleanup);\n }\n };\n\n const register$1 = (editor, fullscreenState) => {\n editor.addCommand('mceFullScreen', () => {\n toggleFullscreen(editor, fullscreenState);\n });\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const setup = (editor, fullscreenState) => {\n editor.on('init', () => {\n editor.on('keydown', e => {\n if (e.keyCode === global.TAB && !(e.metaKey || e.ctrlKey) && fullscreenState.get()) {\n e.preventDefault();\n }\n });\n });\n };\n\n const makeSetupHandler = (editor, fullscreenState) => api => {\n api.setActive(fullscreenState.get() !== null);\n const editorEventCallback = e => api.setActive(e.state);\n editor.on('FullscreenStateChanged', editorEventCallback);\n return () => editor.off('FullscreenStateChanged', editorEventCallback);\n };\n const register = (editor, fullscreenState) => {\n const onAction = () => editor.execCommand('mceFullScreen');\n editor.ui.registry.addToggleMenuItem('fullscreen', {\n text: 'Fullscreen',\n icon: 'fullscreen',\n shortcut: 'Meta+Shift+F',\n onAction,\n onSetup: makeSetupHandler(editor, fullscreenState),\n context: 'any'\n });\n editor.ui.registry.addToggleButton('fullscreen', {\n tooltip: 'Fullscreen',\n icon: 'fullscreen',\n onAction,\n onSetup: makeSetupHandler(editor, fullscreenState),\n shortcut: 'Meta+Shift+F',\n context: 'any'\n });\n };\n\n var Plugin = () => {\n global$3.add('fullscreen', editor => {\n const fullscreenState = Cell(null);\n if (editor.inline) {\n return get$5(fullscreenState);\n }\n register$2(editor);\n register$1(editor, fullscreenState);\n register(editor, fullscreenState);\n setup(editor, fullscreenState);\n editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen');\n return get$5(fullscreenState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"fullscreen\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullscreen')\n// ES2015:\n// import 'tinymce/plugins/fullscreen'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\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 = type => value => typeOf(value) === type;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\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 nativePush = Array.prototype.push;\n const each$1 = (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 flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n\n 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 keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (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 get$1 = (obj, key) => {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('audio_template_callback', { processor: 'function' });\n registerOption('video_template_callback', { processor: 'function' });\n registerOption('iframe_template_callback', { processor: 'function' });\n registerOption('media_live_embeds', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_filter_html', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_url_resolver', { processor: 'function' });\n registerOption('media_alt_source', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_poster', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_dimensions', {\n processor: 'boolean',\n default: true\n });\n };\n const getAudioTemplateCallback = option('audio_template_callback');\n const getVideoTemplateCallback = option('video_template_callback');\n const getIframeTemplateCallback = option('iframe_template_callback');\n const hasLiveEmbeds = option('media_live_embeds');\n const shouldFilterHtml = option('media_filter_html');\n const getUrlResolver = option('media_url_resolver');\n const hasAltSource = option('media_alt_source');\n const hasPoster = option('media_poster');\n const hasDimensions = option('media_dimensions');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n const DOM$1 = global$4.DOM;\n const trimPx = value => value.replace(/px$/, '');\n const getEphoxEmbedData = node => {\n const style = node.attr('style');\n const styles = style ? DOM$1.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source: node.attr('data-ephox-embed-iri'),\n altsource: '',\n poster: '',\n width: get$1(styles, 'max-width').map(trimPx).getOr(''),\n height: get$1(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n const htmlToData = (html, schema) => {\n let data = {};\n const parser = global$3({\n validate: false,\n forced_root_block: false\n }, schema);\n const rootNode = parser.parse(html);\n for (let node = rootNode; node; node = node.walk()) {\n if (node.type === 1) {\n const name = node.name;\n if (node.attr('data-ephox-embed-iri')) {\n data = getEphoxEmbedData(node);\n break;\n } else {\n if (!data.source && name === 'param') {\n data.source = node.attr('movie');\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$5.extend(node.attributes.map, data);\n }\n if (name === 'source') {\n if (!data.source) {\n data.source = node.attr('src');\n } else if (!data.altsource) {\n data.altsource = node.attr('src');\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = node.attr('src');\n }\n }\n }\n }\n data.source = data.source || data.src || '';\n data.altsource = data.altsource || '';\n data.poster = data.poster || '';\n return data;\n };\n\n const guess = url => {\n var _a;\n const mimes = {\n mp3: 'audio/mpeg',\n m4a: 'audio/x-m4a',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n const fileEnd = (_a = url.toLowerCase().split('.').pop()) !== null && _a !== void 0 ? _a : '';\n return get$1(mimes, fileEnd).getOr('');\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n const Parser = (schema, settings = {}) => global$3({\n forced_root_block: false,\n validate: false,\n allow_conditional_comments: true,\n ...settings\n }, schema);\n\n const DOM = global$4.DOM;\n const addPx = value => /^[0-9.]+$/.test(value) ? value + 'px' : value;\n const updateEphoxEmbed = (data, node) => {\n const style = node.attr('style');\n const styleMap = style ? DOM.parseStyle(style) : {};\n if (isNonNullable(data.width)) {\n styleMap['max-width'] = addPx(data.width);\n }\n if (isNonNullable(data.height)) {\n styleMap['max-height'] = addPx(data.height);\n }\n node.attr('style', DOM.serializeStyle(styleMap));\n };\n const sources = [\n 'source',\n 'altsource'\n ];\n const updateHtml = (html, data, updateAll, schema) => {\n let numSources = 0;\n let sourceCount = 0;\n const parser = Parser(schema);\n parser.addNodeFilter('source', nodes => numSources = nodes.length);\n const rootNode = parser.parse(html);\n for (let node = rootNode; node; node = node.walk()) {\n if (node.type === 1) {\n const name = node.name;\n if (node.attr('data-ephox-embed-iri')) {\n updateEphoxEmbed(data, node);\n break;\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n node.attr('width', data.width);\n node.attr('height', data.height);\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n node.attr('poster', data.poster);\n node.attr('src', null);\n for (let index = numSources; index < 2; index++) {\n if (data[sources[index]]) {\n const source = new global$2('source', 1);\n source.attr('src', data[sources[index]]);\n source.attr('type', data[sources[index] + 'mime'] || null);\n node.append(source);\n }\n }\n break;\n case 'iframe':\n node.attr('src', data.source);\n break;\n case 'object':\n const hasImage = node.getAll('img').length > 0;\n if (data.poster && !hasImage) {\n node.attr('src', data.poster);\n const img = new global$2('img', 1);\n img.attr('src', data.poster);\n img.attr('width', data.width);\n img.attr('height', data.height);\n node.append(img);\n }\n break;\n case 'source':\n if (sourceCount < 2) {\n node.attr('src', data[sources[sourceCount]]);\n node.attr('type', data[sources[sourceCount] + 'mime'] || null);\n if (!data[sources[sourceCount]]) {\n node.remove();\n continue;\n }\n }\n sourceCount++;\n break;\n case 'img':\n if (!data.poster) {\n node.remove();\n }\n break;\n }\n }\n }\n }\n }\n return global$1({}, schema).serialize(rootNode);\n };\n\n const urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)\\?h=(\\w+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)\\?h=(\\w+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?h=$3&title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'maps.google.com/maps/ms?msid=$2&output=embed\"',\n allowFullscreen: false\n },\n {\n regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n },\n {\n regex: /dai\\.ly\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n }\n ];\n const getProtocol = url => {\n const protocolMatches = url.match(/^(https?:\\/\\/|www\\.)(.+)$/i);\n if (protocolMatches && protocolMatches.length > 1) {\n return protocolMatches[1] === 'www.' ? 'https://' : protocolMatches[1];\n } else {\n return 'https://';\n }\n };\n const getUrl = (pattern, url) => {\n const protocol = getProtocol(url);\n const match = pattern.regex.exec(url);\n let newUrl = protocol + pattern.url;\n if (isNonNullable(match)) {\n for (let i = 0; i < match.length; i++) {\n newUrl = newUrl.replace('$' + i, () => match[i] ? match[i] : '');\n }\n }\n return newUrl.replace(/\\?$/, '');\n };\n const matchPattern = url => {\n const patterns = urlPatterns.filter(pattern => pattern.regex.test(url));\n if (patterns.length > 0) {\n return global$5.extend({}, patterns[0], { url: getUrl(patterns[0], url) });\n } else {\n return null;\n }\n };\n\n const getIframeHtml = (data, iframeTemplateCallback) => {\n if (iframeTemplateCallback) {\n return iframeTemplateCallback(data);\n } else {\n const allowFullscreen = data.allowfullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n }\n };\n const getFlashHtml = data => {\n let html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n const getAudioHtml = (data, audioTemplateCallback) => {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n const getVideoHtml = (data, videoTemplateCallback) => {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n const dataToHtml = (editor, dataIn) => {\n var _a;\n const data = global$5.extend({}, dataIn);\n if (!data.source) {\n global$5.extend(data, htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema));\n if (!data.source) {\n return '';\n }\n }\n if (!data.altsource) {\n data.altsource = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source = editor.convertURL(data.source, 'source');\n data.altsource = editor.convertURL(data.altsource, 'source');\n data.sourcemime = guess(data.source);\n data.altsourcemime = guess(data.altsource);\n data.poster = editor.convertURL(data.poster, 'poster');\n const pattern = matchPattern(data.source);\n if (pattern) {\n data.source = pattern.url;\n data.type = pattern.type;\n data.allowfullscreen = pattern.allowFullscreen;\n data.width = data.width || String(pattern.w);\n data.height = data.height || String(pattern.h);\n }\n if (data.embed) {\n return updateHtml(data.embed, data, true, editor.schema);\n } else {\n const audioTemplateCallback = getAudioTemplateCallback(editor);\n const videoTemplateCallback = getVideoTemplateCallback(editor);\n const iframeTemplateCallback = getIframeTemplateCallback(editor);\n data.width = data.width || '300';\n data.height = data.height || '150';\n global$5.each(data, (value, key) => {\n data[key] = editor.dom.encode('' + value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data, iframeTemplateCallback);\n } else if (data.sourcemime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.sourcemime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n\n const isMediaElement = element => element.hasAttribute('data-mce-object') || element.hasAttribute('data-ephox-embed-iri');\n const setup$2 = editor => {\n editor.on('mousedown', e => {\n const previewObj = editor.dom.getParent(e.target, '.mce-preview-object');\n if (previewObj && editor.dom.getAttrib(previewObj, 'data-mce-selected') === '2') {\n e.stopImmediatePropagation();\n }\n });\n editor.on('click keyup touchend', () => {\n const selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectResized', e => {\n const target = e.target;\n if (target.getAttribute('data-mce-object')) {\n let html = target.getAttribute('data-mce-html');\n if (html) {\n html = unescape(html);\n target.setAttribute('data-mce-html', escape(updateHtml(html, {\n width: String(e.width),\n height: String(e.height)\n }, false, editor.schema)));\n }\n }\n });\n };\n\n const cache = {};\n const embedPromise = (data, dataToHtml, handler) => {\n return new Promise((res, rej) => {\n const wrappedResolve = response => {\n if (response.html) {\n cache[data.source] = response;\n }\n return res({\n url: data.source,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source]) {\n wrappedResolve(cache[data.source]);\n } else {\n handler({ url: data.source }).then(wrappedResolve).catch(rej);\n }\n });\n };\n const defaultPromise = (data, dataToHtml) => Promise.resolve({\n html: dataToHtml(data),\n url: data.source\n });\n const loadedData = editor => data => dataToHtml(editor, data);\n const getEmbedHtml = (editor, data) => {\n const embedHandler = getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n const isCached = url => has(cache, url);\n\n const extractMeta = (sourceInput, data) => get$1(data, sourceInput).bind(mainData => get$1(mainData, 'meta'));\n const getValue = (data, metaData, sourceInput) => prop => {\n const getFromData = () => get$1(data, prop);\n const getFromMetaData = () => get$1(metaData, prop);\n const getNonEmptyValue = c => get$1(c, 'value').bind(v => v.length > 0 ? Optional.some(v) : Optional.none());\n const getFromValueFirst = () => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(() => Optional.from(child)));\n const getFromMetaFirst = () => getFromMetaData().orThunk(() => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child) : Optional.from(child)));\n return { [prop]: (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr('') };\n };\n const getDimensions = (data, metaData) => {\n const dimensions = {};\n get$1(data, 'dimensions').each(dims => {\n each$1([\n 'width',\n 'height'\n ], prop => {\n get$1(metaData, prop).orThunk(() => get$1(dims, prop)).each(value => dimensions[prop] = value);\n });\n });\n return dimensions;\n };\n const unwrap = (data, sourceInput) => {\n const metaData = sourceInput && sourceInput !== 'dimensions' ? extractMeta(sourceInput, data).getOr({}) : {};\n const get = getValue(data, metaData, sourceInput);\n return {\n ...get('source'),\n ...get('altsource'),\n ...get('poster'),\n ...get('embed'),\n ...getDimensions(data, metaData)\n };\n };\n const wrap = data => {\n const wrapped = {\n ...data,\n source: { value: get$1(data, 'source').getOr('') },\n altsource: { value: get$1(data, 'altsource').getOr('') },\n poster: { value: get$1(data, 'poster').getOr('') }\n };\n each$1([\n 'width',\n 'height'\n ], prop => {\n get$1(data, prop).each(value => {\n const dimensions = wrapped.dimensions || {};\n dimensions[prop] = value;\n wrapped.dimensions = dimensions;\n });\n });\n return wrapped;\n };\n const handleError = editor => error => {\n const errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n editor.notificationManager.open({\n type: 'error',\n text: errorMessage\n });\n };\n const getEditorData = editor => {\n const element = editor.selection.getNode();\n const snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n const data = htmlToData(snippet, editor.schema);\n const getDimensionsOfElement = () => {\n if (isEmbedIframe(data.source, data.type)) {\n const rect = editor.dom.getRect(element);\n return {\n width: rect.w.toString().replace(/px$/, ''),\n height: rect.h.toString().replace(/px$/, '')\n };\n } else {\n return {};\n }\n };\n const dimensions = getDimensionsOfElement();\n return {\n embed: snippet,\n ...data,\n ...dimensions\n };\n };\n const addEmbedHtml = (api, editor) => response => {\n if (isString(response.url) && response.url.trim().length > 0) {\n const html = response.html;\n const snippetData = htmlToData(html, editor.schema);\n const nuData = {\n ...snippetData,\n source: response.url,\n embed: html\n };\n api.setData(wrap(nuData));\n }\n };\n const selectPlaceholder = (editor, beforeObjects) => {\n const afterObjects = editor.dom.select('*[data-mce-object]');\n for (let i = 0; i < beforeObjects.length; i++) {\n for (let y = afterObjects.length - 1; y >= 0; y--) {\n if (beforeObjects[i] === afterObjects[y]) {\n afterObjects.splice(y, 1);\n }\n }\n }\n editor.selection.select(afterObjects[0]);\n };\n const handleInsert = (editor, html) => {\n const beforeObjects = editor.dom.select('*[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n const isEmbedIframe = (url, mediaDataType) => isNonNullable(mediaDataType) && mediaDataType === 'ephox-embed-iri' && isNonNullable(matchPattern(url));\n const shouldInsertAsNewIframe = (prevData, newData) => {\n const hasDimensionsChanged = (prevData, newData) => prevData.width !== newData.width || prevData.height !== newData.height;\n return hasDimensionsChanged(prevData, newData) && isEmbedIframe(newData.source, prevData.type);\n };\n const submitForm = (prevData, newData, editor) => {\n var _a;\n newData.embed = shouldInsertAsNewIframe(prevData, newData) && hasDimensions(editor) ? dataToHtml(editor, {\n ...newData,\n embed: ''\n }) : updateHtml((_a = newData.embed) !== null && _a !== void 0 ? _a : '', newData, false, editor.schema);\n if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) {\n handleInsert(editor, newData.embed);\n } else {\n getEmbedHtml(editor, newData).then(response => {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n const showDialog = editor => {\n const editorData = getEditorData(editor);\n const currentData = Cell(editorData);\n const initialData = wrap(editorData);\n const handleSource = (prevData, api) => {\n const serviceData = unwrap(api.getData(), 'source');\n if (prevData.source !== serviceData.source) {\n addEmbedHtml(win, editor)({\n url: serviceData.source,\n html: ''\n });\n getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }\n };\n const handleEmbed = api => {\n var _a;\n const data = unwrap(api.getData());\n const dataFromEmbed = htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema);\n api.setData(wrap(dataFromEmbed));\n };\n const handleUpdate = (api, sourceInput, prevData) => {\n const dialogData = unwrap(api.getData(), sourceInput);\n const data = shouldInsertAsNewIframe(prevData, dialogData) && hasDimensions(editor) ? {\n ...dialogData,\n embed: ''\n } : dialogData;\n const embed = dataToHtml(editor, data);\n api.setData(wrap({\n ...data,\n embed\n }));\n };\n const mediaInput = [{\n name: 'source',\n type: 'urlinput',\n filetype: 'media',\n label: 'Source',\n picker_text: 'Browse files'\n }];\n const sizeInput = !hasDimensions(editor) ? [] : [{\n type: 'sizeinput',\n name: 'dimensions',\n label: 'Constrain proportions',\n constrain: true\n }];\n const generalTab = {\n title: 'General',\n name: 'general',\n items: flatten([\n mediaInput,\n sizeInput\n ])\n };\n const embedTextarea = {\n type: 'textarea',\n name: 'embed',\n label: 'Paste your embed code below:'\n };\n const embedTab = {\n title: 'Embed',\n items: [embedTextarea]\n };\n const advancedFormItems = [];\n if (hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'altsource',\n type: 'urlinput',\n filetype: 'media',\n label: 'Alternative source URL'\n });\n }\n if (hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'urlinput',\n filetype: 'image',\n label: 'Media poster (Image URL)'\n });\n }\n const advancedTab = {\n title: 'Advanced',\n name: 'advanced',\n items: advancedFormItems\n };\n const tabs = [\n generalTab,\n embedTab\n ];\n if (advancedFormItems.length > 0) {\n tabs.push(advancedTab);\n }\n const body = {\n type: 'tabpanel',\n tabs\n };\n const win = editor.windowManager.open({\n title: 'Insert/Edit Media',\n size: 'normal',\n body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: api => {\n const serviceData = unwrap(api.getData());\n submitForm(currentData.get(), serviceData, editor);\n api.close();\n },\n onChange: (api, detail) => {\n switch (detail.name) {\n case 'source':\n handleSource(currentData.get(), api);\n break;\n case 'embed':\n handleEmbed(api);\n break;\n case 'dimensions':\n case 'altsource':\n case 'poster':\n handleUpdate(api, detail.name, currentData.get());\n break;\n }\n currentData.set(unwrap(api.getData()));\n },\n initialData\n });\n };\n\n const get = editor => {\n const showDialog$1 = () => {\n showDialog(editor);\n };\n return { showDialog: showDialog$1 };\n };\n\n const register$1 = editor => {\n const showDialog$1 = () => {\n showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog$1);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const isLiveEmbedNode = node => {\n const name = node.name;\n return name === 'iframe' || name === 'video' || name === 'audio';\n };\n const getDimension = (node, styles, dimension, defaultValue = null) => {\n const value = node.attr(dimension);\n if (isNonNullable(value)) {\n return value;\n } else if (!has(styles, dimension)) {\n return defaultValue;\n } else {\n return null;\n }\n };\n const setDimensions = (node, previewNode, styles) => {\n const useDefaults = previewNode.name === 'img' || node.name === 'video';\n const defaultWidth = useDefaults ? '300' : null;\n const fallbackHeight = node.name === 'audio' ? '30' : '150';\n const defaultHeight = useDefaults ? fallbackHeight : null;\n previewNode.attr({\n width: getDimension(node, styles, 'width', defaultWidth),\n height: getDimension(node, styles, 'height', defaultHeight)\n });\n };\n const appendNodeContent = (editor, nodeName, previewNode, html) => {\n const newNode = Parser(editor.schema).parse(html, { context: nodeName });\n while (newNode.firstChild) {\n previewNode.append(newNode.firstChild);\n }\n };\n const createPlaceholderNode = (editor, node) => {\n const name = node.name;\n const placeHolder = new global$2('img', 1);\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n setDimensions(node, placeHolder, {});\n placeHolder.attr({\n 'style': node.attr('style'),\n 'src': global.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n const createPreviewNode = (editor, node) => {\n var _a;\n const name = node.name;\n const previewWrapper = new global$2('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': node.attr('style'),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n const styles = editor.dom.parseStyle((_a = node.attr('style')) !== null && _a !== void 0 ? _a : '');\n const previewNode = new global$2(name, 1);\n setDimensions(node, previewNode, styles);\n previewNode.attr({\n src: node.attr('src'),\n style: node.attr('style'),\n class: node.attr('class')\n });\n if (name === 'iframe') {\n previewNode.attr({\n allowfullscreen: node.attr('allowfullscreen'),\n frameborder: '0',\n sandbox: node.attr('sandbox'),\n referrerpolicy: node.attr('referrerpolicy')\n });\n } else {\n const attrs = [\n 'controls',\n 'crossorigin',\n 'currentTime',\n 'loop',\n 'muted',\n 'poster',\n 'preload'\n ];\n each$1(attrs, attrName => {\n previewNode.attr(attrName, node.attr(attrName));\n });\n const sanitizedHtml = previewWrapper.attr('data-mce-html');\n if (isNonNullable(sanitizedHtml)) {\n appendNodeContent(editor, name, previewNode, unescape(sanitizedHtml));\n }\n }\n const shimNode = new global$2('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n const retainAttributesAndInnerHtml = (editor, sourceNode, targetNode) => {\n var _a;\n const attribs = (_a = sourceNode.attributes) !== null && _a !== void 0 ? _a : [];\n let ai = attribs.length;\n while (ai--) {\n const attrName = attribs[ai].name;\n let attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style' && !startsWith(attrName, 'data-mce-')) {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n const serializer = global$1({ inner: true }, editor.schema);\n const tempNode = new global$2('div', 1);\n each$1(sourceNode.children(), child => tempNode.append(child));\n const innerHtml = serializer.serialize(tempNode);\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(innerHtml));\n targetNode.empty();\n }\n };\n const isPageEmbedWrapper = node => {\n const nodeClass = node.attr('class');\n return isString(nodeClass) && /\\btiny-pageembed\\b/.test(nodeClass);\n };\n const isWithinEmbedWrapper = node => {\n let tempNode = node;\n while (tempNode = tempNode.parent) {\n if (tempNode.attr('data-ephox-embed-iri') || isPageEmbedWrapper(tempNode)) {\n return true;\n }\n }\n return false;\n };\n const placeHolderConverter = editor => nodes => {\n let i = nodes.length;\n let node;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (isLiveEmbedNode(node) && hasLiveEmbeds(editor)) {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPreviewNode(editor, node));\n }\n } else {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPlaceholderNode(editor, node));\n }\n }\n }\n };\n\n const parseAndSanitize = (editor, context, html) => {\n const getEditorOption = editor.options.get;\n const sanitize = getEditorOption('xss_sanitization');\n const validate = shouldFilterHtml(editor);\n return Parser(editor.schema, {\n sanitize,\n validate\n }).parse(html, { context });\n };\n\n const setup$1 = editor => {\n editor.on('PreInit', () => {\n const {schema, serializer, parser} = editor;\n const boolAttrs = schema.getBoolAttrs();\n each$1('webkitallowfullscreen mozallowfullscreen'.split(' '), name => {\n boolAttrs[name] = {};\n });\n each({ embed: ['wmode'] }, (attrs, name) => {\n const rule = schema.getElementRule(name);\n if (rule) {\n each$1(attrs, attr => {\n rule.attributes[attr] = {};\n rule.attributesOrder.push(attr);\n });\n }\n });\n parser.addNodeFilter('iframe,video,audio,object,embed', placeHolderConverter(editor));\n serializer.addAttributeFilter('data-mce-object', (nodes, name) => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (!node.parent) {\n continue;\n }\n const realElmName = node.attr(name);\n const realElm = new global$2(realElmName, 1);\n if (realElmName !== 'audio') {\n const className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1 && node.firstChild) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n const attribs = (_a = node.attributes) !== null && _a !== void 0 ? _a : [];\n let ai = attribs.length;\n while (ai--) {\n const attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n const innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n const fragment = parseAndSanitize(editor, realElmName, unescape(innerHtml));\n each$1(fragment.children(), child => realElm.append(child));\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('SetContent', () => {\n const dom = editor.dom;\n each$1(dom.select('span.mce-preview-object'), elm => {\n if (dom.select('span.mce-shim', elm).length === 0) {\n dom.add(elm, 'span', { class: 'mce-shim' });\n }\n });\n });\n };\n\n const setup = editor => {\n editor.on('ResolveName', e => {\n let name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n\n const onSetupEditable = editor => api => {\n const nodeChanged = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n editor.on('NodeChange', nodeChanged);\n nodeChanged();\n return () => {\n editor.off('NodeChange', nodeChanged);\n };\n };\n const register = editor => {\n const onAction = () => editor.execCommand('mceMedia');\n editor.ui.registry.addToggleButton('media', {\n tooltip: 'Insert/edit media',\n icon: 'embed',\n onAction,\n onSetup: buttonApi => {\n const selection = editor.selection;\n buttonApi.setActive(isMediaElement(selection.getNode()));\n const unbindSelectorChanged = selection.selectorChangedWithUnbind('img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]', buttonApi.setActive).unbind;\n const unbindEditable = onSetupEditable(editor)(buttonApi);\n return () => {\n unbindSelectorChanged();\n unbindEditable();\n };\n }\n });\n editor.ui.registry.addMenuItem('media', {\n icon: 'embed',\n text: 'Media...',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n };\n\n var Plugin = () => {\n global$6.add('media', editor => {\n register$2(editor);\n register$1(editor);\n register(editor);\n setup(editor);\n setup$1(editor);\n setup$2(editor);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.2 (2025-03-19)\n */\n\n(function () {\n 'use strict';\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 var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const fireResizeEditor = editor => editor.dispatch('ResizeEditor');\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('autoresize_overflow_padding', {\n processor: 'number',\n default: 1\n });\n registerOption('autoresize_bottom_margin', {\n processor: 'number',\n default: 50\n });\n };\n const getMinHeight = option('min_height');\n const getMaxHeight = option('max_height');\n const getAutoResizeOverflowPadding = option('autoresize_overflow_padding');\n const getAutoResizeBottomMargin = option('autoresize_bottom_margin');\n\n const isFullscreen = editor => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n const toggleScrolling = (editor, state) => {\n const body = editor.getBody();\n if (body) {\n body.style.overflowY = state ? '' : 'hidden';\n if (!state) {\n body.scrollTop = 0;\n }\n }\n };\n const parseCssValueToInt = (dom, elm, name, computed) => {\n var _a;\n const value = parseInt((_a = dom.getStyle(elm, name, computed)) !== null && _a !== void 0 ? _a : '', 10);\n return isNaN(value) ? 0 : value;\n };\n const shouldScrollIntoView = trigger => {\n if ((trigger === null || trigger === void 0 ? void 0 : trigger.type.toLowerCase()) === 'setcontent') {\n const setContentEvent = trigger;\n return setContentEvent.selection === true || setContentEvent.paste === true;\n } else {\n return false;\n }\n };\n const resize = (editor, oldSize, trigger, getExtraMarginBottom) => {\n var _a;\n const dom = editor.dom;\n const doc = editor.getDoc();\n if (!doc) {\n return;\n }\n if (isFullscreen(editor)) {\n toggleScrolling(editor, true);\n return;\n }\n const docEle = doc.documentElement;\n const resizeBottomMargin = getExtraMarginBottom ? getExtraMarginBottom() : getAutoResizeOverflowPadding(editor);\n const minHeight = (_a = getMinHeight(editor)) !== null && _a !== void 0 ? _a : editor.getElement().offsetHeight;\n let resizeHeight = minHeight;\n const marginTop = parseCssValueToInt(dom, docEle, 'margin-top', true);\n const marginBottom = parseCssValueToInt(dom, docEle, 'margin-bottom', true);\n let contentHeight = docEle.offsetHeight + marginTop + marginBottom + resizeBottomMargin;\n if (contentHeight < 0) {\n contentHeight = 0;\n }\n const containerHeight = editor.getContainer().offsetHeight;\n const contentAreaHeight = editor.getContentAreaContainer().offsetHeight;\n const chromeHeight = containerHeight - contentAreaHeight;\n if (contentHeight + chromeHeight > minHeight) {\n resizeHeight = contentHeight + chromeHeight;\n }\n const maxHeight = getMaxHeight(editor);\n if (maxHeight && resizeHeight > maxHeight) {\n resizeHeight = maxHeight;\n toggleScrolling(editor, true);\n } else {\n toggleScrolling(editor, false);\n }\n const old = oldSize.get();\n if (old.set) {\n editor.dom.setStyles(editor.getDoc().documentElement, { 'min-height': 0 });\n editor.dom.setStyles(editor.getBody(), { 'min-height': 'inherit' });\n }\n if (resizeHeight !== old.totalHeight && (contentHeight - resizeBottomMargin !== old.contentHeight || !old.set)) {\n const deltaSize = resizeHeight - old.totalHeight;\n dom.setStyle(editor.getContainer(), 'height', resizeHeight + 'px');\n oldSize.set({\n totalHeight: resizeHeight,\n contentHeight,\n set: true\n });\n fireResizeEditor(editor);\n if (global.browser.isSafari() && (global.os.isMacOS() || global.os.isiOS())) {\n const win = editor.getWin();\n win.scrollTo(win.pageXOffset, win.pageYOffset);\n }\n if (editor.hasFocus() && shouldScrollIntoView(trigger)) {\n editor.selection.scrollIntoView();\n }\n if ((global.browser.isSafari() || global.browser.isChromium()) && deltaSize < 0) {\n resize(editor, oldSize, trigger, getExtraMarginBottom);\n }\n }\n };\n const setup = (editor, oldSize) => {\n const getExtraMarginBottom = () => getAutoResizeBottomMargin(editor);\n editor.on('init', e => {\n const overflowPadding = getAutoResizeOverflowPadding(editor);\n const dom = editor.dom;\n dom.setStyles(editor.getDoc().documentElement, { height: 'auto' });\n if (global.browser.isEdge() || global.browser.isIE()) {\n dom.setStyles(editor.getBody(), {\n 'paddingLeft': overflowPadding,\n 'paddingRight': overflowPadding,\n 'min-height': 0\n });\n } else {\n dom.setStyles(editor.getBody(), {\n paddingLeft: overflowPadding,\n paddingRight: overflowPadding\n });\n }\n resize(editor, oldSize, e, getExtraMarginBottom);\n });\n editor.on('NodeChange SetContent keyup FullscreenStateChanged ResizeContent', e => {\n resize(editor, oldSize, e, getExtraMarginBottom);\n });\n };\n\n const register = (editor, oldSize) => {\n editor.addCommand('mceAutoResize', () => {\n resize(editor, oldSize);\n });\n };\n\n var Plugin = () => {\n global$1.add('autoresize', editor => {\n register$1(editor);\n if (!editor.options.isSet('resize')) {\n editor.options.set('resize', false);\n }\n if (!editor.inline) {\n const oldSize = Cell({\n totalHeight: 0,\n contentHeight: 0,\n set: false\n });\n register(editor, oldSize);\n setup(editor, oldSize);\n }\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"autoresize\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autoresize')\n// ES2015:\n// import 'tinymce/plugins/autoresize'\nrequire('./plugin.js');","import tinymce from 'tinymce';\n\nimport 'tinymce/icons/default';\n\nimport 'tinymce/themes/silver';\nimport 'tinymce/models/dom';\n\nimport 'tinymce/skins/ui/oxide/skin.css';\n\nimport 'tinymce/plugins/advlist';\nimport 'tinymce/plugins/autolink';\nimport 'tinymce/plugins/lists';\nimport 'tinymce/plugins/link';\nimport 'tinymce/plugins/charmap';\nimport 'tinymce/plugins/preview';\nimport 'tinymce/plugins/anchor';\nimport 'tinymce/plugins/searchreplace';\nimport 'tinymce/plugins/visualblocks';\nimport 'tinymce/plugins/code';\nimport 'tinymce/plugins/fullscreen';\nimport 'tinymce/plugins/media';\nimport 'tinymce/plugins/autoresize';\n\nimport contentUiSkinCss from 'tinymce/skins/ui/oxide/content.css?inline';\nimport contentCss from 'tinymce/skins/content/default/content.css?inline';\n\nimport { tinyMceHTMLCleaner } from \"@/entrypoints/tiny-mce-html-cleaner\";\nimport resized from \"@/javascript/components/events/resized\";\n\nconst getConfig = (options = {}) => {\n const tinymceOptions = JSON.parse(options.tinymceOptions || '{}')\n\n const customContentCss = document.querySelector('meta[name=\"tinymce_custom_css\"]').content\n const config = {\n license_key: 'gpl',\n menubar: false,\n plugins: \"advlist autolink lists link charmap preview anchor searchreplace code media autoresize\",\n paste_block_drop: false,\n max_height: 600,\n min_height: 50,\n toolbar: \"undo redo | blocks | bold italic | bullist numlist outdent indent | link\",\n toolbar_mode: \"sliding\",\n content_css: false,\n skin: false,\n content_style: contentUiSkinCss.toString() + '\\n' + contentCss.toString(),\n readonly: tinymceOptions.disabled || false,\n target: options.target,\n content_css: customContentCss\n }\n\n return config\n}\n\n/* Initialize TinyMCE */\nexport function render (content) {\n const tinymceElements = [...content.querySelectorAll('[data-tinymce]')]\n const promises = tinymceElements\n .filter((elem) => !elem.tinyMceInitated )\n .map((elem) => {\n elem.tinyMceInitated = true\n elem.tinyMceHTMLCleaner = new tinyMceHTMLCleaner()\n try {\n tinymce.remove(`#${elem.id}`)\n } catch (error) {}\n const config = getConfig({target: elem, tinymceOptions: elem.dataset.tinymceOptions})\n config.paste_preprocess = (editor, args) => {\n args.content = elem.tinyMceHTMLCleaner.clean(args.content)\n return args.content\n }\n tinymce.init(config)\n .then((elems) => elems)\n .then((editors) => {\n editors.forEach((editor) => {\n editor.getWin().addEventListener('resize', () => {\n resized(editor.iframeElement)\n })\n })\n })\n })\n\n return Promise.all(\n promises\n )\n}\n"],"names":["typeOf$1","x","t","isEquatableType","sort$1","xs","compareFn","clone","contramap","eqa","f","eq$2","y","tripleEq","eqString","eqArray","len","i","eqSortedArray","eqRecord","kx","ky","q","eqAny","tx","ty","getPrototypeOf$2","hasProto","v","constructor","predicate","_a","typeOf","proto","isType$1","type","value","isSimpleType","eq$1","a","is$4","isObject","isString","isPlainObject","isArray$1","isNull","isBoolean","isUndefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","noop","compose","fa","fb","args","compose1","fbc","fab","constant","identity","tripleEquals","b","curry","fn","initialArgs","restArgs","all","not","die","msg","apply$1","call","never","always","Optional","tag","onNone","onSome","mapper","binder","replacement","thunk","message","worker","nativeSlice","nativeIndexOf","nativePush","rawIndexOf","ts","indexOf$1","r","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","sort","comparator","copy","get$b","head","last$2","from","findMap","arr","unique$1","isDuplicated","keys","hasOwnProperty$1","each$d","obj","props","k","map$2","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","bifilter","filter$4","mapToArray","name","values","get$a","key","has$2","hasNonNullableKey","equal$1","eq","stringArray","isArrayLike","o","isArray","toArray$1","array","l","each$c","cb","s","n","map$1","callback","out","item","index","filter$3","indexOf","reduce","collection","iteratee","accumulator","thisArg","findIndex$1","last$1","cached","called","DeviceType","os","browser","userAgent","mediaMatch","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","firstMatch","regexes","find$1","agent","group","nu$3","detect$4","versionRegexes","cleanedAgent","unknown$2","major","minor","Version","detectBrowser$1","browsers","userAgentData","uaBrand","lcBrand","info","detect$3","candidates","candidate","detectBrowser","version","detectOs","oses","removeFromStart","str","numChars","checkRange","substr","start","removeLeading","prefix","startsWith","contains$1","end","idx","endsWith","suffix","blank","trim$4","lTrim","rTrim","isNotEmpty","isEmpty$3","repeat","count","toInt","radix","num","normalVersionRegex","checkContains","target","uastring","PlatformInfo","edge","chromium","ie","opera","firefox","safari","unknown$1","nu$2","current","isBrowser","Browser","windows","ios","android","linux","macos","solaris","freebsd","chromeos","unknown","nu$1","isOS","OperatingSystem","PlatformDetection","userAgentDataOpt","deviceType","query","platform$4","detect$1","platform$3","browser$3","os$1","windowsPhone","Env","whiteSpaceRegExp$1","trim$3","is$3","makeMap$4","items","delim","map","resolvedItems","hasOwnProperty","extend$3","exts","ext","walk$4","Tools","path","d","url","cacheSuffix","is$2","lhs","rhs","left","equals","lift2","cat","push","oa","ob","lift3","oc","someIf","Global","parts","scope","resolve$2","p","unsafe","getOrDie","actual","getPrototypeOf$1","sandHTMLElement","isPrototypeOf","COMMENT","DOCUMENT","DOCUMENT_FRAGMENT","ELEMENT","TEXT","element","type$1","isType","isComment$1","isHTMLElement$1","isElement$7","isText$c","isDocument$2","isDocumentFragment$1","isTag","e","rawSet","dom","set$4","setAll$1","attrs","get$9","getOpt","has$1","remove$9","hasNone","clone$4","attr","read$4","add$4","id","nu","remove$8","supports","get$8","add$3","clazz","remove$7","toggle$2","add$2","cleanClass","remove$6","toggle$1","result","has","fromHtml$1","html","div","fromDom$2","fromTag","node","fromText","text","SugarElement","docElm","toArray","recurse","cur","is$1","selector","elem","bypassSelector","base","one","e1","e2","contains","d1","d2","owner$1","documentOrOwner","dos","documentElement","defaultView","parent","parentElement","parents$1","isRoot","stop","ret","rawParent","siblings","filterSelf","elements","children$1","prevSibling","nextSibling","prevSiblings","nextSiblings","child$1","cs","firstChild","lastChild","childNodesCount","getHead","doc","isShadowRoot","getRootNode","getStyleContainer","getContentContainer","getShadowRoot","getShadowHost","getOriginalEventTarget","event","el","isOpenShadowHost","composedPath","inBody","ClosestOrAncestor","is","ancestor","ancestor$4","closest$4","test","sibling$1","child","descendant$2","descend","res","ancestor$3","descendant$1","closest$3","closest$2","isEditable$2","assumeEditable","editable","getRaw$1","set$3","isSupported","internalSet","property","internalRemove","set$2","setAll","css","get$7","getUnsafeProperty","getRaw","raw","getAllRaw","ruleName","remove$5","reflow","before$3","marker","after$4","append$1","prepend","wrap$2","wrapper","after$3","append","empty","rogue","remove$4","unwrap","children","fromHtml","fromDom$1","nodes","get$6","set$1","content","docDom","fragment","contentElements","getOuter","container","mkEvent","prevent","kill","fromRawEvent","rawEvent","handle$1","filter","handler","useCapture","wrapped","unbind","bind$2","top","SugarPosition","boxPosition","box","firstDefinedOrZero","absolute","body","win","scrollTop","scrollLeft","clientTop","clientLeft","viewport","get$5","_DOC","to","intoView","alignToTop","get$4","_win","bounds","width","height","getBounds","scroll","visualViewport","descendants$1","descendants","ancestor$2","sibling","descendant","DomTreeWalker","startNode","rootNode","shallow","startName","siblingName","zeroWidth","nbsp","isZwsp$2","char","removeZwsp","whiteSpaceRegExp","isWhitespaceText","isZwsp$1","c","isCollapsibleWhitespace$1","isNewLineChar","isNewline","normalize$4","tabSpaces","isStartOfContent","isEndOfContent","tabSpace","normalizedText","isNodeType","isRestrictedNode","isElement$6","isHTMLElement","isSVGElement","matchNodeName","lowerCasedName","matchNodeNames","names","lowerCasedNames","nodeName","matchStyleValues","computed","hasAttribute","attrName","isBogus$1","isBogusAll","isTable$2","hasContentEditableState","isTextareaOrInput","isText$b","isCData","isPi","isComment","isDocument$1","isDocumentFragment","isBr$6","isImg","isContentEditableTrue$3","isContentEditableFalse$b","isEditingHost","isTableCell$3","isTableCellOrCaption","isMedia$2","isListItem$2","isDetails","isSummary$1","defaultOptionValues","hasWhitespacePreserveParent","schema","rootElement","whitespaceElements","isNamedAnchor","isNonEmptyElement$1","isBookmark","hasNonEditableParent","isWhitespace$1","isText$a","options","isContentNode","isEmptyNode","targetNode","opts","brCount","walker","bogusValue","isEmpty$2","elm","isContent$1","Cell","initial","singleton","doRevoke","subject","revoke","repeatable","delay","intervalId","functionToRepeat","value$2","nodeNameToNamespaceType","lowerCaseName","isNonHtmlElementRootName","isNonHtmlElementRoot","toScopeType","namespaceElements","createNamespaceTracker","currentScope","scopeNode","transparentBlockAttr","elementNames","makeSelectorFromSchemaMap","escapedName","ns","updateTransparent","blocksSelector","transparent","updateBlockStateOnChildren","transparentSelector","trimEdge","leftSide","childPropertyName","split$2","parentElm","splitElm","range","parentNode","beforeFragment","afterFragment","splitInvalidChildren","transparentBlocks","blocksElements","isBlock","transparentBlock","parentBlock","invalidChildren","stateScope","unwrapInvalidChildren","isTransparentBlock","block","isTransparentInline","updateChildren","updateElement","isTransparentElement","updateCaret","root","caretParent","parents","hasBlockAttr","isTransparentElementName","isTransparentAstBlock","browser$2","firstElement","getTableCaptionDeltaY","caption","bodyTop","captionTop","captionHeight","hasChild","getPos","rootElm","pos","offsetParent","castOffsetParent","StyleSheetLoader","documentOrShadowRoot","settings","idCount","loadedStates","edos","_setReferrerPolicy","referrerPolicy","_setContentCssCors","contentCssCors","addStyle","removeStyle","styleContainer","getOrCreateState","load","success","failure","link","urlWithSuffix","state","resolve","callbacks","status","passed","failed","linkElem","loadRawCss","styleElem","loadAll","urls","results","unload","instance","referenceElement","rootDom","sl","isSpan","isInlineContent","surroundedByInlineContent","prev","next","prevIsInline","nextIsInline","isBookmarkNode$2","isKeepTextNode","isKeepElement","isDocument","trimNode","currentChildren","makeMap$3","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","baseEntities","reverseEntities","nativeDecode","buildEntitiesLookup","lookup","itemList","chr","entity","namedEntities","encodeRaw","encodeAllRaw","encodeNumeric","encodeNamed","entities","resolveEntities","Entities","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","numeric","split$1","patternToRegExp","isRegExp$1","deepCloneElementRule","helper","parseCustomElementsRules","customElementRegExp","rule","matches","cloneName","getGlobalAttributeSet","getElementSetsAsStrings","blockContent","phrasingContent","flowContent","getElementSets","toArr","cachedSets","getElementsPreset","makeSchema","globalAttributes","addElement","attributes","add","childNames","ni","allAttributes","addAttrs","schemaItem","prefixToOperation","parseValidChild","validChildRegExp","parseValidChildrenRules","childRuleRegExp","operation","validChildren","validChild","parseValidElementsAttrDataIntoElement","attrData","targetElement","attrRuleRegExp","hasPatternsRegExp","attributesOrder","attrType","attrPrefix","attrPattern","cloneAttributesInto","parseValidElementsRules","globalElement","validElements","elementRuleRegExp","elementName","outputName","attrsPrefix","mapCache","makeMap$2","each$b","extend$2","explode$2","createMap","defaultValue","extendWith","getTextRootBlockElements","compileElementMap","mode","styles","Schema","patternElements","customElementsMap","specialElements","createLookupTable","option","newValue","schemaType","schemaItems","validStyles","invalidStyles","validClasses","whitespaceElementsMap","selfClosingElementsMap","voidElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","headings","textBlockElementsMap","blockElementsMap","textInlineElementsMap","transparentElementsMap","wrapBlockElementsMap","addValidElements","aliasName","patternElement","setValidElements","addCustomElement","spec","_b","inline","customRule","processAttrName","globalAttrs","preset","customElementChildren","processNodeName","processPreset","elmName","addCustomElementsFromString","customElements","addCustomElements","addValidChildren","getElementRule","setup","_val","getValidStyles","getInvalidStyles","getValidClasses","getBoolAttrs","getBlockElements","getTextBlockElements","getTextInlineElements","getVoidElements","getSelfClosingElements","getNonEmptyElements","getMoveCaretBeforeOnEnterElements","getWhitespaceElements","getTransparentElements","getWrapBlockElements","getSpecialElements","isValidChild","isValid","attrPatterns","isInline","isWrapper","getCustomElements","hexColour","normalizeHex","hex","toHex","component","fromRgba","rgbaColour","rgbRegex","rgbaRegex","red","green","blue","alpha","fromStringValues","g","getColorFormat","colorString","fromString","rgbaString","rgbMatch","rgbaMatch","toString","rgba","rgbaToHexString","color","h","Styles","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","encodingItems","self","isEncoded","urlConverter","urlConverterScope","compress","noJoin","right","bottom","canCompress","compress2","encode","decode","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","match","url2","url3","str2","scriptUrl","serializeStyles","elemName","validStyleList","styleList","styleMap","deprecated","isNativeEvent","hasIsDefaultPrevented","needsNormalizing","clone$3","originalEvent","data","keyArg","normalize$3","fallbackTarget","eventExpandoPrefix","mouseEventRe","addEvent","capture","removeEvent","isMouseEvent","fix","eventDoc","mouseEvent","bindOnReady","eventUtils","isDocReady","readyHandler","EventUtils","callbackList","defaultNativeHandler","evt","namesList","nativeHandler","fakeName","eventMap","ci","newCallbackList","each$a","grep","internalStyleName","numericalCssMap","legacySetAttribute","camelCaseToHyphens","findNodeIndex","normalized","lastNodeType","tempNode","nodeType","updateInternalStyleAttr","rawValue","convertStyleToString","cssValue","cssName","applyStyle$1","$elm","normalizedName","setupAttrHooks","getContext","keepValues","keepUrlHook","sugarElm","internalName","attrHooks","DOMUtils","addedStyles","files","counter","stdMode","boxModel","styleSheetLoader","boundEvents","events","get","_get","getAttrib","defaultVal","hook","getAttribs","setAttrib","run","val","originalValue","deep","getRoot","getViewPort","argWin","vp","getPos$1","setStyle","setStyles","stylesArg","getStyle","getSize","w","getRect","size","elms","getParents","collect","resolvedRoot","selectorVal","getParent","_findSib","func","getNext","getPrev","isParentNode","select","context","setAttribs","setHTML","create","newElm","createHTML","outHtml","createFragment","frag","remove","keepChildren","$node","removeAllAttribs","parseStyle","cssText","serializeStyle","styleElm","loadCSS","toggleClass","cls","classes","addClass","removeClass","hasClass","show","hide","isHidden","uniqueId","getOuterHTML","setOuterHTML","insertAfter","reference","referenceNode","replace","oldElm","replacee","rename","attrNode","findCommonAncestor","ps","pe","isEmpty","createRng","split","replacementElm","bind","rv","boundTarget","boundName","boundFunc","dispatch","fire","getContentEditable","contentEditable","_","DOM$b","QUEUED","LOADING","LOADED","FAILED","ScriptLoader","reject","cleanup","done","error","queue","scripts","execCallbacks","processResults","failures","reason","processQueue","nextQueuedItem","uniqueScripts","firstIndex","isRaw","isTokenised","currentCode","getLanguageData","I18n","newCode","code","langData","lcNames","translation","lcName","getLangData","textStr","removeContext","substitued","$1","$2","dir","AddOnManager","_listeners","runListeners","matchedListeners","listener","isLoaded","isAdded","loadLanguagePack","languages","language","wrappedLanguages","requireLangPack","waitFor","addOn","createUrl","baseUrl","dep","addOnUrl","urlString","first$1","rate","timer","last","cancel","ancestor$1","annotation","dataAnnotation","dataAnnotationId","dataAnnotationActive","dataAnnotationClasses","dataAnnotationAttributes","isRoot$1","identify","editor","annotationName","rng","an","newStart","uid","findMarkers","isAnnotation","isBogusElement","findAll","markers","directory","m","nodesAlready","setup$y","registry","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","toggleActiveAttr","onNodeChange","annotations","setup$x","dataAnnotation$1","identifyParserNode","removeDirectAnnotation","customAttrNames","customClasses","classList","newClassList","create$b","clamp$2","min","max","random","unique","generate$1","time","random$1","remove$3","clone$2","original","isDeep","shallow$1","deep$1","shallowAs","mutate","TextWalker","isBoundary","walk","direction","TextSeeker","isBlockBoundary","offset","process","newOffset","api$1","getOption","get$3","set","tableCells","tableSections","textBlocks","listItems$1","lists","wsElements","lazyLookup","isTable$1","isBr$5","isTextBlock$2","isList","isListItem$1","isTableSection","isTableCell$2","isWsPreserveElement","getLastChildren$1","rawNode","removeTrailingBr","allBrs","brs","createPaddingBr","br","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","ZWSP$1","isZwsp","trim$2","insert$5","isElement$5","isText$9","isCaretContainerBlock$1","isCaretContainerInline","isCaretContainer$2","hasContent","insertInline$1","before","textNode","endsWithCaretContainer$1","startsWithCaretContainer$1","isBeforeInline","isAfterInline","insertBlock","blockName","blockNode","trimBogusBr","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","round$2","clone$1","rect","collapse","toStart","isEqual","rect1","rect2","isValidOverflow","overflowY","isAbove$1","halfHeight","isBelow$1","containsXY","clientX","clientY","boundingClientRectFromRects","rects","prevRect","distanceToRectEdgeFromXY","cx","cy","overlapY","r1","r2","getSelectedNode","startContainer","startOffset","getNode$1","childNodes","safeOffset","getNodeUnsafe","extendingChars","isExtendingChar","ch","or","and","isContentEditableTrue$2","isContentEditableFalse$a","isBr$4","isText$8","isInvalidTextElement","isAtomicInline","isTable","isCaretContainer$1","isCaretCandidate$3","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic$1","isEditableCaretCandidate$1","isElement$4","isCaretCandidate$2","isBlock$2","isFloated","isValidElementCaretCandidate","isNotPre","isText$7","isBr$3","nodeIndex$1","resolveIndex$1","createRange$1","isWhiteSpace$1","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","nbsp$1","clientRect","getBoundingClientRectWebKitText","sc","ec","so","eo","newRng","getBoundingClientRect$1","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","addUniqueAndValidRect","addCharacterOffset","beforeNode","CaretPosition","isAtStart","isAtEnd","toRange","getClientRects","isVisible","getNode","pos1","pos2","trimEmptyTextNode$1","insertNode","insertFragment","rangeInsertNode","isText$6","isBogus","nodeIndex","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","parentsUntil$1","create$a","outputOffset","resolvePathItem","findTextPosition","targetOffset","dataLen","resolve$1","paths","nodeOffset","isContentEditableFalse$9","getNormalizedTextOffset$1","trim","trimmedOffset","getPoint","point","after","getLocation","selection","forward","fakeCaret","findIndex","moveEndPoint$1","normalizeTableCellSelection","findSibling","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","collapsed","rng2","endBookmarkNode","startBookmarkNode","getBookmark$3","getUndoBookmark","value$1","applyHelper","constHelper","outputHelper","output","_onError","onValue","Result","onError","_onValue","optional","err","Adt","cases","constructors","adt","acase","keys$1","argLength","foldArgs","branches","branchKeys","reqKey","label","partition$1","errors","isInlinePattern","pattern","isBlockPattern","hasBlockTrigger","trigger","normalizePattern","formatOrCmd","onFormat","onCommand","formats","format","cmd","command","commandValue","getBlockPatterns","patterns","getInlinePatterns","createPatternSet","dynamicPatternsLookup","filterByTrigger","fromRawPatterns","fromRawPatternsLookup","lookupFn","ctx","rawPatterns","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","fireObjectResizeStart","origin","fireObjectResized","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","fireFormatApply","vars","fireFormatRemove","fireBeforeSetContent","fireSetContent","fireBeforeGetContent","fireGetContent","fireAutocompleterStart","fireAutocompleterUpdate","fireAutocompleterUpdateActiveRange","fireAutocompleterEnd","firePastePreProcess","internal","firePastePostProcess","firePastePlainTextToggle","fireEditableRootStateChange","fireDisabledStateChange","deviceDetection$1","DOM$a","getHash","isRegExp","stringOrObjectProcessor","bodyOptionProcessor","valid","bodyObj","register$7","registerOption","isInline$1","isDisabled$1","_ctx","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","hasHiddenInput","shouldPatchSubmit","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","getCustomUndoRedoLevels","shouldDisableNodeChange","isReadOnly$1","hasEditableRoot$1","hasContentCssCors","getPlugins","getExternalPlugins$1","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","getIframeAriaText","getSetupCallback","getInitInstanceCallback","getUrlConverterCallback","getAutoFocus","shouldBrowserSpellcheck","getProtect","shouldPasteBlockDrop","shouldPasteDataImages","getPastePreProcess","getPastePostProcess","getNewDocumentContent","getPasteWebkitStyles","shouldPasteRemoveWebKitStyles","shouldPasteMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getPasteTabSpaces","shouldAllowHtmlDataUrls","getTextPatterns","getTextPatternsLookup","getNonEditableClass","getEditableClass","getNonEditableRegExps","shouldPreserveCData","shouldHighlightOnFocus","shouldSanitizeXss","shouldUseDocumentWrite","hasTextPatternsLookup","getFontStyleValues","getFontSizeClasses","isEncodingXml","getAllowedImageFileTypes","hasTableTabNavigation","getDetailsInitialState","getDetailsSerializedState","shouldSandboxIframes","getSandboxIframesExclusions","shouldConvertUnsafeEmbeds","getLicenseKey","getApiKey","isElement$3","isText$5","removeNode$1","trimCount","trimmedText","deleteZwspChars","removeUnchanged","remove$2","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","isContentEditableFalse$8","isMedia$1","isTableCell$1","inlineFakeCaretSelector","getAbsoluteClientRect","scrollX","scrollY","rootRect","margin","trimInlineCaretContainers","fakeCaretTargetNodes","FakeCaret","hasFocus","lastVisualCaret","cursorInterval","caretBlock","caret","startBlink","isInlineFakeCaretTarget","caretState","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableTrue$1","isContentEditableFalse$7","isMedia","isBlockLike","isCaretContainer","isCaretContainerBlock","isElement$2","isText$4","isCaretCandidate$1","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","isCefOrCaretContainer","getEditingHost","isCETrue","getParentBlock$3","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","before$2","after$2","normalizeRange","leanLeft","leanRight","location","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","isContentEditableFalse$6","isText$3","isElement$1","isBr$2","isCaretCandidate","isAtomic","isEditableCaretCandidate","getParents$3","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition$1","startPos","innerNode","rootContentEditableFalseElm","CaretWalker","walkToPositionIn","position","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigate","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID","isCaretNode","getParentCaretContainer","currentNode","isStringPathBookmark","bookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","isForwardBookmark","addBogus","resolveCaretPositionBookmark","endPos","insertZwsp","isEmpty$1","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","restoreEndPoint","markerParent","keep","otherMarker","resolvePaths","resolveId","spos","epos","resolveIndex","getBookmark$2","moveToBookmark","isBookmarkNode$1","isNbsp","expected","isWhiteSpace","isContent","getRanges$1","ranges","getSelectedNodes","hasMultipleRanges","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","selectedCells","getCellsFromEditor","getClosestTable","cell","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","endNode","moveEndPoint","hasAnyRanges","sel","runOnRanges","executor","fakeSelectionNodes","fakeNodeRng","preserve","fillBookmark","isNode","isElementNode$1","isElementDirectlySelected","selectedAttr","preserveSelection","action","shouldMoveStart","selectedNodeBeforeAction","isSelectedBeforeNodeNoneditable","moveStartToNearestText","selectedNode","isWhiteSpaceNode$1","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","ed","allowSpaces","isEmptyTextNode$1","isWrapNoneditableTarget","baseDataSelector","formatNoneditableSelector","isWrappableNoneditable","replaceVars","isEq$5","str1","normalizeStyleValue","strValue","style","getTextDecoration","decoration","getParents$2","isFormatPredicate","formatName","isVariableFormatName","isVariableValue","field","fieldValues","areSimilarFormats","otherFormatName","validKeys","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","isBlockFormat","isWrappingBlockFormat","isNonWrappingBlockFormat","isSelectorFormat","isInlineFormat","isMixedFormat","shouldExpandToSelector","getEmptyCaretContainers","isCaretContainerEmpty","isEmptyCaretFormatElement","isBookmarkNode","getParents$1","isWhiteSpaceNode","isTextBlock","isBogusBr","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","closestRoot","textSeeker","textOffset","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","expandToBlock","isSelfOrParentBookmark","expandRng","expandOptions","includeTrailingSpace","editableHost","endContainer","endOffset","walk$3","exclude","firstNode","lastNode","collectSiblings","findEndPoint","walkBoundary","startPoint","endPoint","validBlocks","isZeroWidth","wrapName","applyWordGrab","applyAnnotation","masterUId","decorate","directAnnotation","otherData","attributeNames","makeAnnotation","eDoc","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","elems","processElement","processNodes","annotateWithBookmark","initialRng","hasFakeSelection","masterUid","selectionRng","Annotator","changes","removeAnnotations","BookmarkManager","isXYWithinRange","getDocument","focus$1","preventScroll","hasFocus$1","active$1","search","SimRange","soffset","finish","foffset","adt$3","cata","onBefore","onOn","onAfter","getStart$2","situ","before$1","on","after$1","Situ","adt$2","exactFromRange","simRange","getStart$1","startSitu","_finishSitu","_soffset","_finish","_foffset","domRange","relative","exact","getWin","SimSelection","clamp$1","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","readRange","getBookmark$1","validate","bookmarkToNativeRng","store","newBookmark","getRng","restore","FocusManager","className","wrappedSetTimeout","wrappedSetInterval","Delay","isManualNodeChange","registerPageMouseUp","throttledStore","mouseUpPage","registerMouseUp","_e","registerEditorEvents","register$6","documentFocusInHandler","DOM$9","isEditorUIElement","isEditorContentAreaElement","isUIElement","customSelector","getActiveElement","registerEvents$1","editorManager","toggleContentAreaOnFocus","contentArea","focusedEditor","activeEditor","unregisterDocumentEvents","setup$w","getContentEditableHost","hasContentEditableFalseParent$1","getCollapsedNode","getFocusInElement","normalizeSelection","caretPos","focusBody","hasElementFocus","hasIframeFocus","hasInlineFocus","rawBody","hasUiFocus","hasEditorOrUiFocus","focusEditor","restoreBookmark","bookmarkRng","contentEditableHost","activateEditor","focus","skipFocus","VK","elementSelectionAttr","controlElmSelector","abs","round$1","resizeHandles","isTouchEvent","ControlSelection","editableDoc","rootDocument","selectedElm","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","startX","startY","startW","startH","ratio","resizeStarted","startScrollWidth","startScrollHeight","isImage","isEventOnImageOutsideRange","touch","contextMenuSelectImage","getResizeTargets","isResizable","createGhostElement","rowSelect","tableElm","tr","cells","setSizeProp","targets","setGhostElmSize","ghostElm","resizeGhostElement","deltaX","deltaY","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","showResizeRect","targetElm","unbindResizeHandleEvents","selectedElmX","selectedElmY","targetWidth","targetHeight","hideResizeRect","handle","startDrag","handleElm","throttledShowResizeRect","removeSelected","isChildOrEqual","updateResizeRect","controlElm","selectedValue","img","disableGeckoResize","startElm","setStart","setFinish","relativeToNative","finishSitu","exactToNative","adt$1","fromRange","getRanges","doDiagnose","rev","diagnose","caretPositionFromPoint","caretRangeFromPoint","availableSearch","fromPoint$1","beforeSpecial","name$1","preprocessRelative","preprocessExact","preprocess","fromElements","toNative","getDomRange","filtered","getAtPoint","fromPoint","isEq$4","rng1","findParent","hasParent$1","hasParentWithName","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","splitText","newContainer","RangeUtils","rangeLike","newRange","normalizedRng","api","getOffset","aggregate","properties","cumulativeInclusions","get$2","walkUp","navigation","rest","pathTo","Navigation","find","frames","loc","excludeFromDescend","fireScrollIntoViewEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","createMarker$1","span","elementMarker","withMarker","preserveWith","_s","applyWithMarker","withScrollEvents","withElement","startElement","endElement","scrollToMarker","viewHeight","intoWindowIfNeeded","viewportBottom","markerTop","markerBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","viewportBounds","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollElementIntoView","scrollRangeIntoView","isEditableRange","getEndpointElement","real","getStart","getEnd","skipEmptyTextNodes","forwards","orig","getSelectedBlocks","endElm","selectedBlocks","processRanges","typeLookup","walk$2","isEmptyTextNode","isNonEmptyElement","AstNode","selfAttrs","cloneAttrs","selfAttr","refNode","whitespace","unescapedTextParents","containsZwsp","getTemporaryNodeSelector","tempAttrs","getTemporaryNodes","createZwspCommentWalker","createUnescapedZwspTextWalker","hasZwspComment","hasUnescapedZwspText","hasTemporaryNode","trimTemporaryNodes","emptyAllNodeValuesInWalker","curr","emptyZwspComments","emptyUnescapedZwspTexts","trim$1","conditionalTrims","trimmed","cloned","condition","cleanupBogusElements","bogusElements","cleanupInputNames","inputs","input","trimEmptyContents","emptyRegExp","getPlainTextContent","offscreenDiv","getContentFromBody","getContentInternal","makeMap$1","Writer","indent","indentBefore","indentAfter","htmlOutput","HtmlSerializer","writer","handlers","sortedAttrs","elementRule","attrValue","nonInheritableStyles","conditionalNonInheritableStyles","shorthandStyleProps","getStyles$1","getStyleProps","isNonInheritableStyle","isConditionalNonInheritableStyle","hasNonInheritableStyles","hasConditionalNonInheritableStyles","getLonghandStyleProps","prop","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","nodeValue","parentValue","nodeStyleProp","propExists","longhandProps","isChar","delta","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","dropLast","parentsUntil","parentsAndSelf","navigateIgnoreEmptyTextNodes","isBlock$1","getClosestBlock$1","isAtBeforeAfterBlockBoundary","newPos","fromBlock","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isBr$1","findBr","parentBlocks","isBeforeBr$1","isAfterBr","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","isCefBlock","isSiblingCefBlock","isBeforeCefBlock","nextPos","isNextCefBlock","isAfterCefBlock","prevPos","isPrevCefBlock","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","needsToBeNbsp","isNbspAt","isWhiteSpaceAt","hasNbsp","normalizeNbspMiddle","chars","normalizeNbspAtStart","makeNbsp","firstPos","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","lastPos","normalizeNbsps$1","normalizeNbspsInEditor","normalize$1","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","newNode","removeNode","needsReposition","reposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition","findCaretPosOutsideElmAfterDelete","setSelection$1","eqRawNode","paddEmptyBlock","preserveEmptyCaret","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement$2","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","strongRtl","hasStrongRtl","isInlineTarget","isRtl","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","execCommandIgnoreInputEvents","inputBlocker","execEditorDeleteCommand","execNativeDeleteCommand","execNativeForwardDeleteCommand","isBeforeRoot","isTextBlockOrListItem","getParentBlock$2","paddEmptyBody","moveSelection","willDeleteLastPositionInElement","fromPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","freefallRtl","deleteRangeContents","lastBlock","additionalCleanupNodes","isRootFromElement","getTableCells","table","getTable$1","selectionInTableWithNestedTable","details","startTable","endTable","isStartTableParentOfEndTable","isEndTableParentOfStartTable","adjustQuirksInDetails","getTableDetailsFromRange","isStartInTable","isEndInTable","isSameTable","tableCellRng","tableSelection","deleteAction","getClosestCell$1","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","isSingleCellTable","rows","getCellRng","startCell","endCell","getCellRangeFromStartTable","getCellRangeFromEndTable","getTableSelectionFromCellRng","getTableSelections","selectionDetails","sameTableSelection","startTableSelection","endTableSelection","getCellIndex","getSelectedCells","startIndex","endIndex","isSingleCellTableContentSelected","optCellRng","unselectCells","otherContentRng","handleSingleTable","handleMultiTable","startTableSelectedCells","endTableSelectedCells","getActionFromRange","cleanCells","getOutsideBlock","handleEmptyBlock","startInTable","emptyBlock","deleteContentInsideCell","isFirstCellInSelection","insideTableRng","deleteCellContents","collapseAndRestoreCellSelection","emptySingleTableCells","outsideDetails","editorRng","cellsToClean","outsideBlock","endPointCell","emptyMultiTableCells","startTableCells","endTableCells","betweenRng","startTableCellsToClean","endTableCellsToClean","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange$3","getParentCell","deleteBetweenCells","fromCell","toCell","isDeleteOfLastCharPos","fromCaption","first","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","deleteCaret$3","backspaceDelete$b","getContentEditableRoot$1","internalAttributesPrefixes","each$9","ElementUtils","internalAttributes","compare","attribs","isAttributeInternal","compareObjects","obj1","obj2","attributeName","isHeading","isSummary","traverse","matchNode$1","nodeFilters","attributeFilters","nl","ai","al","findMatchingNodes","childNode","runFilters","matchRecord","filteringAttributes","filter$2","paddEmptyNode","astNode","isPaddedWithNbsp","hasOnlyChild","isPadded","nonEmptyElements","isLineBreakNode","findClosestEditingHost","editableNode","removeOrUnwrapInvalidNode","originalNodeParent","cleanInvalidNodes","onCreate","textBlockElements","nonSplittableElements","fixed","isSplittableElement","newParent","isInvalid","hasClosest","parentName","createRange","normalizeBlockSelectionRange","newEndPos","normalize","hasOnlyOneChild$1","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","isListFragment","cleanupDomFragment","domFragment","toDomFragment","serializer","listItems","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","newCaretPos","findLastOf","insertMiddle","li","insertBefore$2","insertAfter$2","insertAtCaret$1","liTarget","liElms","BEGINNING","END","isAt","caretWalker","newPosNode","mergeableWrappedElements","shouldPasteContentOnly","isPastingSingleElement","isWrappedElement","isContentEditable","isPastingInTheSameBlockTag","isPastingInContentEditable","isTableCell","isTableCellContentSelected","isEditableEmptyBlock","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","merge","textInlineElements","elementUtils","fragmentSelector","fragments","hasOneChild","isOverridden","oldStyles","newStyles","overriddenByAllChildren","identicalToParent","conflictWithInsertedParent","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","_c","nextRng","parentEditableElm","findNextCaretRng","isCell","deleteSelectedContent","findMarkerNode","markerNode","notHeadingsInSummary","insertHtmlAtCaret","parser","bookmarkHtml","caretElement","parserArgs","editingHost","toExtract","isTreeNode","setEditorHtml","noSelection","setContentString","padd","forcedRootBlockName","trimmedHtml","setContentTree","setContentInternal","ensureIsRoot","transform","transformed","closest$1","isEq$3","matchesUnInheritedFormatSelector","matchParents","similar","matchedNode","matchNode","matchName","matchItems","itemName","matchAttributes","expectedValue","isEmptyValue","match$2","matchAll","matchedFormatNames","checkedMap","closest","rawElm","canApply","matchAllOnNode","formatNames","matchSimilar","ZWSP","importNode","ownerDocument","findFirstTextNode","createCaretContainer","fill","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","cleanFormatNode","formatter","validFormats","matchedFormats","fmtName","clonedFormatNode","normalizeNbsps","normalizeNbspsBetween","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","parentsAfter","newCaretContainer","cleanedFormatNode","caretTextNode","disableCaretContainer","keyCode","endsWithNbsp","setup$v","createCaretFormat","innerMost","replaceWithCaretFormat","createCaretFormatAtStart$1","isFormatElement","inlineElements","postProcessHooks","isPre","addPostProcessHook","postProcess$1","hasPreSibling","blocks","pre","joinPre","pre1","pre2","sPre2","preBlocks","listItemStyles","hasListStyles","fmt","findExpandedListItemFormat","getExpandedListItemFormat","isRngStartAtStartOfElement","isRngEndAtEndOfElement","isEditableListItem","getFullySelectedBlocks","middle","getFullySelectedListItems","getPartiallySelectedListItems","each$8","isElementNode","findElementSibling","mergeSiblingsNodes","isPrevEditable","isNextEditable","tmpSibling","mergeSiblings","clearChildStyles","_value","processChildElements","unwrapEmptySpan","hasStyle","applyStyle","removeResult","MCE_ATTR_RE","each$7","isEq$2","isTableCellOrRow","isChildOfInlineParent","getContainer","lastIdx","normalizeTableSelection","wrap$1","wrapWithSiblings","isColorFormatAndAnchor","rootBlockElm","forcedRootBlock","processFormatAttrOrStyle","removeEmptyStyleAttributeIfNeeded","removeStyles","compareNode","stylesModified","styleName","styleValue","normalizedStyleValue","removeListStyleFormats","liFmt","removeNodeFormatInternal","preserveAttributes","attrsToPreserve","currentValue","valueOut","findFormatRoot","formatRoot","removeNodeFormatFromClone","newName","wrapAndSplit","lastClone","firstClone","formatRootParent","removeFormatInternal","splitToFormatRoot","isRemoveBookmarkNode","removeFormatOnNode","removeNodeFormat","currentNodeMatches","removeRngStyle","removeFormat$1","each$6","mergeTextDecorationsAndColor","processTextDecorationsAndColor","parentTextDecoration","mergeBackgroundColorAndFontSize","hasFontSize","mergeSubSup","inverseTagDescendants","mergeWithChildren","mergeWithParents","each$5","canFormatBR","validBRParentElements","hasCaretNodeSibling","applyStyles","styleVal","applyFormatAction","isCollapsed","setElementFormat","applyNodeStyle","found","createWrapElement","wrapElm","applyRngStyle","nodeSpecific","isMatchingWrappingBlock","canRenameBlock","isEditableDescendant","isValidBlockFormatForNode","canWrapNode","isWrappableNoneditableElm","isValidWrapNode","isCaret","isCorrectFormatForNode","currentWrapElm","lastContentEditable","contentEditableValue","getChildCount","mergeStyles","childCount","fake","applyFormat$1","hasVars","setup$u","registeredFormatListeners","updateAndFireChangeCallbacks","nodeOrRange","fallbackElement","matchingNode","matchingFormat","registeredCallbacks","runIfChanged","isSet","addListeners","formatChangeItems","getCurrent","toAppendTo","removeListeners","formatChangedInternal","toggle","explode$1","create$8","filters","newCallbacks","removeAttrs","addFontToSpansFilter","domParser","fontSizes","face","addStrikeFilter","convertToSTag","addFilters","register$5","blobUriToBlob","extractBase64Data","decodeData","parseDataUri","uri","base64Encoded","decodedData","extractedData","buildBlob","dataUriToBlob","uriToBlob","blobToDataUri","blob","reader","count$1","uniqueId$1","processDataUri","dataUri","base64Only","generateBlobInfo","base64","createBlobInfo$1","blobCache","blobInfo","dataUriToBlobInfo","imageToBlobInfo","imageSrc","invalidDataUri","hostCaptureRegex","extractHost","ms","sandboxIframe","iframeNode","exclusions","host","isMimeType","mime","getEmbedType","createSafeEmbed","src","sandboxIframes","sandboxIframesExclusions","embed","isBogusImage","isInternalImageSource","registerBase64ImageFilter","processImage","inputSrc","register$4","appendRel","rel","addNoOpener","newRel","classValue","validClassesMap","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create$7","apply","construct","fun","thisValue","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","_len","_key","_len2","_key2","addToSet","transformCaseFunc","lcElement","cleanArray","object","newObject","lookupGetter","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","ATTR_NAME","policyName","_createHooksMap","createDOMPurify","window","DOMPurify","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","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","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","parentTagName","_forceRemove","_removeAttribute","_initDocument","dirty","leadingWhitespace","dirtyPayload","_createNodeIterator","_isClobbered","_isNode","_executeHooks","_sanitizeElements","_isBasicCustomElement","childClone","expr","_isValidAttribute","lcTag","_sanitizeAttributes","hookEvent","namespaceURI","initValue","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","entryPoint","hookFunction","purify","each$4","queryParts","DEFAULT_PORTS","safeSvgDataUrlElements","blockSvgDataUris","allowSvgDataUrls","decodeUri","encodedUri","isInvalidUri","decodedUri","URI","uriComponents","baseUri","isProtocolRelative","urlMatch","part","pathMatch","relativeUri","tu","uu","noHost","absoluteUri","defaultPort","breakPoint","normalizedBase","nb","normalizedPath","baseParts","pathParts","outPath","noProtoHost","filteredUrlAttrs","internalElementAttr","processNode","_d","lcTagName","isInternalElement","bogus","processAttr","ele","shouldKeepAttribute","isBooleanAttribute","isRequiredAttributeOfInternalElement","filterAttributes","setupPurify","namespaceTracker","purify$1","getPurifyConfig","mimeType","config","sanitizeSvgElement","xlinkAttrs","sanitizeMathmlElement","allowedEncodings","hasAllowedEncodings","hasValidEncoding","encoding","keepElement","mkSanitizeNamespaceElement","namespaceType","getSanitizer","_mimeType","makeMap","extend$1","transferChildren","nativeParent","nsSanitizer","isSpecial","nativeChild","walkTree","preprocessors","postprocessors","traverseOrder","postprocess","whitespaceCleaner","blockElements","textRootBlockElements","allWhiteSpaceRegExp","startWhiteSpaceRegExp","endWhiteSpaceRegExp","hasWhitespaceParent","isTextRootBlockEmpty","isAtEdgeOfBlock","neighbour","isNodeEmpty","getRootBlockName","DomParser","nodeFilterRegistry","attributeFilterRegistry","defaultedSettings","sanitizer","parseAndSanitizeWithContext","rootName","isSpecialRoot","makeWrap","addNodeFilter","getNodeFilters","removeNodeFilter","addAttributeFilter","getAttributeFilters","removeAttributeFilter","findInvalidChildren","isWrappableNode","addRootBlocks","rootBlockName","rootBlockNode","rootBlock","exports","whitespacePre","whitespacePost","invalidFinder","matchFinder","topLevelChildren","otherChildren","serializeContent","withSerializedContent","fireEvent","parserSettings","serializedContent","eventArgs","makeParserSettings","preProcessGetContent","postProcessGetContent","preProcessSetContent","processedEventArgs","postProcessSetContent","tableModel","tableRow","cellPosition","getSpan","td","fillout","rowspan","colspan","y2","x2","cellExists","skipCellsX","getWidth","row","findElementPos","extractRows","sx","sy","ex","ey","newRows","slice","subTable","createDomTable","tableElement","tableBody","modelRowsToDomRows","fromDom","toDom","subsection","findParentListContainer","getFullySelectedListWrappers","_li","listCont","listElm","listStyles","_style","wrap","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","firstCell","lastCell","fullTableModel","sectionedTableModel","getSelectionFragment","read$3","isCollapsibleWhitespace","getInnerText","bin","getContextNodeName","parentBlockOpt","getTextContent","contextNodeName","rangeContentClone","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","extractSelectedContent","setupArgs$3","getSelectedContentInternal","defaultedArgs","updatedArgs","KEEP","INSERT","DELETE","diff","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","script","getMiddleSnake","j","i2","buildSnake","sum","getOuterHtml","insertAt","removeAt","applyDiff","read$2","trimZwsp","write","currentFragments","lazyTempDocument","hasIframes","createFragmentedLevel","createCompleteLevel","createFromEditor","applyToEditor","level","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$1","isUnlocked","locks","setTyping","undoManager","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange$1","beforeBookmark","addUndoLevel$1","currentLevel","newLevel","lastLevel","bm","customUndoRedoLevels","clear$1","extra$1","callback1","callback2","redo$1","undo$1","reset$1","hasUndo$1","hasRedo$1","transact$1","ignore$1","addVisualInternal","matchedElm","makePlainAdaptor","makeRtcAdaptor","rtcEditor","defaultVars","init","autocompleter","_undoManager","_locks","_index","_node","_similar","_rfl","_details","_format","makeNoopAdaptor","nul","isRtc","getRtcSetup","rtcPlugin","setup$t","editorCast","getRtcInstanceWithFallback","getRtcInstanceWithError","rtcInstance","beforeChange","addUndoLevel","undo","redo","clear","reset","hasUndo","hasRedo","transact","ignore","extra","matchFormat","matchAllFormats","matchNodeFormat","canApplyFormat","closestFormat","applyFormat","removeFormat","toggleFormat","formatChanged","getContent$2","setContent$2","insertContent$1","getSelectedContent","addVisual$1","bindEvents","getContent$1","removeEmpty","walkPastBookmark","merge$1","outer","inner","outerElm","oldLength","normalizeTextIfRequired","mergeAndNormalizeText","outerNode","rngSetContent","prevText","nextText","setupArgs$2","cleanContent","contextBlock","contextArgs","setContent$1","cleanedContent","deleteFromCallbackMap","SelectorChanged","selectorChangedData","currentSelectors","findMatchingNode","matchedSelectors","isAttachedToDom","isValidRange","EditorSelection","selectedRange","explicitRange","selectorChangedWithUnbind","setCursorLocation","setRng","getContent","setContent","getRng$1","getEnd$1","getBookmark","bookmarkManager","select$1","getSel","isEditable","fakeSelectedElements","tryCompareBoundaryPoints","how","sourceRange","destinationRange","setNode","getSelectedBlocks$1","isForward","anchorNode","focusNode","anchorRange","focusRange","scrollContainer","controlSelection","htmlParser","prevName","lastParent","register$3","trimTrailingBr","isBr","brNode1","brNode2","preProcess$1","oldDoc","clonedNode","impl","shouldFireEvent","process$1","addTempAttr","postProcess","getHtmlFromNode","parseHtml","serializeNode","toHtml","DomSerializerImpl","serialize","DomSerializer","domSerializer","defaultFormat$1","setupArgs$1","defaultFormat","setupArgs","removedOptions","deprecatedOptions","removedPlugins","deprecatedPlugins","getMatchingOptions","searchingFor","settingNames","setting","getRemovedOptions","getDeprecatedOptions","getMatchingPlugins","plugins","pluginNames","plugin","getRemovedPlugins","getDeprecatedPlugins","entry","logRemovedWarnings","rawOptions","normalizedOptions","hasRemovedPlugins","hasRemovedOptions","isLegacyMobileTheme","listJoiner","themesMessage","pluginsMessage","optionsMessage","getPluginDescription","logDeprecatedWarnings","hasDeprecatedPlugins","hasDeprecatedOptions","logWarnings","DOM$8","restoreOriginalStyles","safeDestroy","clearDomReferences","restoreForm","form","remove$1","_selectionOverrides","editorUpload","destroy","automatic","IconManager","iconPack","ModelManager","getProp","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect","isInsideElementContentArea","bodyElm","clientWidth","clientHeight","transpose","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","NotificationManagerImpl","unimplemented","NotificationManager","notifications","getImplementation","theme","getTopNotification","notification","addNotification","closeNotification","otherNotification","open","close","getNotifications","serviceMessage","isF12","notificationApi","PluginManager","ThemeManager","WindowManagerImpl","WindowManager","dialogs","funcBind","fireOpenEvent","dialog","fireCloseEvent","addDialog","closeDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","openDialog","params","openUrl","alert","windowManagerImpl","confirm","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","themeLoadError","modelLoadError","pluginInitError","initError","console","removeFakeSelection","setEditorCommandState","setCommonEditorCommands","restoreFakeSelection","disableEditor","enableEditor","isDisabled","internalContentEditableAttr","switchOffContentEditableTrue","switchOnContentEditableTrue","toggleDisabled","registerDisabledContentFilters","registerFilters","isClickEvent","allowedEvents","isAllowedEventInDisabledMode","getAnchorHrefOpt","processDisabledEvents","href","targetEl","registerDisabledModeEventHandlers","registerEventsAndFilters$1","isContentCssSkinName","toContentSkinResourceName","isBundledCssSkinName","getContentCssUrls","transformToUrls","getFontCssUrls","cssLinks","skinUrl","contentCssFile","appendContentCssFromSettings","getAllImages","ImageScanner","uploadStatus","cachedPromises","images","promises","imageInfo","newPromise","UploadStatus","blobUriStatuses","createStatus","resultUri","hasBlobUri","blobUri","seed","rnd","uuid","BlobCache","cache","mimeToExt","filename","toBlobInfo","findFirst","cachedBlobInfo","Uploader","pendingPromises","pathJoin","path1","path2","defaultHandler","progress","xhr","json","formData","uploadHandler","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","percent","isDefaultHandler","pendingUploadBlobInfo","uploadBlobs","blobInfos","createUploader","ImageUploader","uploader","showNotification","isEmptyForPadding","addPaddingToEmpty","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","replaceImageUriInView","image","uploadImages","scanForImages","imageInfos","imagesToRemove","shouldDispatchChange","filteredResult","uploadInfo","removed","sugarElement","parentOpt","uploadImagesAuto","isValidDataUriImage","imgElm","addFilter","resultItem","replaceBlobUris","get$1","strike","_fmt","_itemName","genericBase","cellBase","cellFormats","FormatRegistry","register","unregister","each$3","isPreviewItem","parsedSelectorToHtml","ancestry","createElement","sItem","getRequiredParent","elmRule","parentsRequired","wrapInHtml","ancestors","parentCandidate","ancestorName","parentRequired","siblingElm","parentSiblings","parseSelectorItem","$0","$3","$4","parseSelector","getCssText","previewCss","previewStyles","removeVars","getComputedStyle","preview","previewFrag","previewElm","rawParentFontSize","parentFontSize","setup$s","Formatter","formatChangeState","shouldIgnoreCommand","registerEvents","isFirstTypedCharacter","addNonTypingUndoLevel","isMeta","modKey","isInsertReplacementText","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","setup$r","placeholder","updatePlaceholder","showPlaceholder","blockPosition","blockBoundary","getBlockPosition","containerElm","isNotAncestorial","isDifferentBlocks","getClosestHost","hasSameHost","isEditable$1","hasValidBlocks","isValidBlock","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$1","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","newFromBlockDescendants","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$a","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$2","backspaceDelete$9","_forward","showCaret","scrollIntoView","getNodeRange","selectNode","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","trimEmptyTextNode","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","deleteBoundaryText","getNextPosFn","isBeforeFn","nextCaretPosition","normalizedNextCaretPosition","backspaceDelete$8","getEdgeCefPosition","atStart","isCefAtEdgeSelected","isCompoundElement","DeleteAction","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","read","deleteElement$1","moveToElement","moveToPosition","getAncestorCe","backspaceDeleteCaret","deleteOffscreenSelection","backspaceDeleteRange","paddEmptyElement","backspaceDelete$7","isTextEndpoint","endpoint","isElementEndpoint","createMarker","getEndpoint","resolveBookmark","backspaceDelete$6","startBlock","endBlock","deleteCaret$2","backspaceDelete$5","isText$2","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertBefore$1","insertAfter$1","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","getElement","readLocation","getName","outside","inside","isEq","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation$1","hasSelectionModifyApi","moveRel","moveByWord","BreakType","flip","positions","walk$1","getBreakType","currentPos","getPositionsUntil","breakType","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","newRect","lastDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","isAtFirstLine","isAtLastLine","getFirstLinePositions","getLastLinePositions","getClosestPositionAbove","getClosestPositionBelow","isContentEditableFalse$5","distanceToRectLeft$1","distanceToRectRight$1","isNodeClientRect","findClosestClientRect","oldClientRect","oldDistance","newDistance","getNodeClientRects","toArrayWithNode","VDirection","findUntil","walkUntil","isAboveFn","isBeflowFn","line","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","downUntil","getLastClientRect","positionsUntil","isBelowFn","isAboveLine","isLine","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","isElement","rangeIsInContainerBlock","moveVertically","caretClientRect","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","lineInfo","moveToLineEndPoint$3","isElementPosition","setCaretPosition","setSelected","renderCaretLocation","getPositionFromRange","findLocation","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","caretValue","renderInsideInlineCaret","inlines","_inline","move$3","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope","backspaceDeleteCollapsed","toPosition","backspaceDelete$4","hasMultipleChildren","getParentsUntil","hasOnlyOneChild","getParentInlinesUntilMultichildInline","getParentInlines","getFormatNodes","parentInlines","isFormatElement$1","getFormatNodesAtStart","deleteLastPosition","deleteCaret$1","isBrInEmptyElement","isEmptyCaret","createCaretFormatAtStart","updateCaretFormat","updateFormats","missingFormats","rangeStartsAtTextContainer","rangeStartsAtStartOfTextContainer","rangeStartParentIsFormatElement","startParent","rangeStartAndEndHaveSameParent","endParent","rangeEndsAtEndOfEndContainer","rangeEndsAtEndOfStartContainer","rangeEndsAfterEndOfStartContainer","rangeEndsAtOrAfterEndOfStartContainer","requiresDeleteRangeOverride","deleteRange$1","backspaceDelete$3","hasAncestorInlineCaret","hasAncestorInlineCaretAtStart","requiresRefreshCaretOverride","refreshCaret","deleteElement","deleteCaret","isNearMedia","backspaceDelete$2","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","unit","parsedValue","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentation","indentUnit","indentValue","outdent","backspaceDelete$1","findAction","deleteCommand","forwardDeleteCommand","setup$q","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","isFarEnough","distX","distY","setup$p","startData","longpressFired","debounceLongpress","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","createRootBlock","rootNodeName","insertEmptyLine","setup$o","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","convertRegExpsToNonEditable","nonEditableRegExps","isValidContent","re","setup$n","contentEditableAttrName","editClass","nonEditClass","hasEditClass","hasNonEditClass","findBlockCaretContainer","showBlockCaretContainer","blockCaretContainer","handleBlockContainer","setup$m","isContentEditableFalse$4","moveToCeFalseHorizontally","moveToCeFalseVertically","createTextBlock","textBlock","exitPreBlock","getVisualCaretPosition$1","newBlock","getHorizontalRange","getVerticalRange","down","flipDirection","moveH$2","moveV$4","moveToLineEndPoint$1","selectToEndPoint","curRng","isTarget","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","moveV$3","moveUp","summary","moveDown","move$2","moveV$2","baseKeyPattern","defaultPatterns","defaultDelayedPatterns","matchesEvent","match$1","matchDelayed","execute","executeWithDelayedAction","moveH$1","moveV$1","moveToLineEndPoint","CellLocation","firstLayer","filterFirstLayer","lookup$1","tags","isRootOrUpperTable","isEligible","newIndex","detect","isTextNodeWithCursorPosition","isContentEditableFalse$3","elementsWithCursorPosition","isCursorPosition","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","newDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","isAbove","isBelow","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","getClosestAbovePosition","getClosestBelowPosition","getTable","previous","renderBlock","insertFn","navigateVertically","move$1","mover","moveH","moveV","getCellFirstCursorPosition","tabGo","_current","isCellInEditableTable","tabForward","isCellEditable","tabBackward","isEditableHTMLElement","handleTab","rootElements","executeKeydownOverride$4","isMac","setup$l","DOM$7","alwaysNext","textBefore","textAfter","scanLeft","scanRight","repeatLeft","isValidTextRange","getText","isWhitespace","stripTrigger","findTrigger","includeWhitespace","firstChar","initRange","buffer","findTriggerIndex","spot","isText$1","toLast","toLeaf","isPreviousCharContent","leaf","_element","isStartOfWord","getTriggerContext","database","getDatabase","lookupWithContext","fetchOptions","startText","autocompleters","lookupData","ac","SimpleResultType","fold$1","partition","mapError","bind$1","bindError","svalue","serror","SimpleResult","formatObj","formatErrors","es","getErrorInfo","missingRequired","missingKey","missingBranch","branch","custom","chooseFrom","choose$1","chosen","old","deepMerge","baseMerge","merger","objects","curObject","required","defaultedThunk","fallbackThunk","defaulted$1","fallback","asOption","mergeValues","mergeErrors","ResultCombine","partitions","field$1","newKey","presence","customField$1","instantiator","fold","ifField","ifCustom","validator","extract","anyValue$1","requiredAccess","bundle","fallbackAccess","optionAccess","optionDefaultedAccess","opt","extractField","av","bundleAsOption","optValue","ov","extractFields","fields","objOf","_okey","_presence","_instantiator","arrOf","oneOf","rawF","arrOfObj","valueOf","extractValue","errs","asRaw","formatError","errInfo","choose","anyValue","typedValue","expectedType","actualType","number","string","boolean","functionProcessor","customField","validateEnum","requiredOf","requiredString","requiredStringEnum","requiredFunction","requiredArrayOf","optionOf","optionString","optionFunction","defaulted","defaultedOf","defaultedNumber","defaultedString","defaultedStringEnum","defaultedBoolean","defaultedFunction","defaultedArrayOf","fetch$1","onAction","onSetup","optionalText","optionalIcon","optionalTooltip","optionalLabel","active","enabled","primary","defaultedColumns","defaultedType","autocompleterSchema","createAutocompleter","baseToolbarButtonFields","baseToolbarToggleButtonFields","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","baseContextFormFields","contextFormFields","contextSliderFormFields","contextSizeInputFormFields","register$2","popups","dataset","popup","triggers","datasetValues","dv","setupEditorInput","update","setup$k","activeAutocompleter","uiActive","isActive","cancelIfNecessary","commenceIfNecessary","getAutocompleters","doLookup","newContext","lookupInfo","isRangeInsideOrEqual","innerRange","outerRange","startComparison","endComparison","readActiveRange","selRange","_ui","isSafari","emptyNodeContents","isEntireNodeSelected","getParentDetailsElementAtPos","isInDetailsElement","getDetailsElements","startDetails","endDetails","startSummary","isCaretInTheBeginningOf","isCaretInTheEndOf","isCaretAtStartOfSummary","detailsElements","isCaretAtEndOfSummary","isCaretInFirstPositionInBody","isCaretInLastPositionInBody","setCaretToPosition","moveCaretToDetailsPos","isPartialDelete","containsStart","containsEnd","startInSummary","endInSummary","isPartiallySelectedDetailsElements","shouldPreventDeleteIntoDetails","granularity","parentDetailsAtCaret","inEmptyParentBlock","isFirstBlock","isLastBlock","parentDetailsAtNewPos","shouldPreventDeleteSummaryAction","detailElements","shouldPreventDeleteAction","handleDeleteActionSafari","anchorOffset","focusOffset","applySelection","updateSelection","appendAllChildNodes","backspaceDelete","createAndFireInputEvent","eventType","inputType","specifics","overrides","fireInputEvent","fireBeforeInputEvent","platform$2","isMacOSOriOS","isFirefox","executeKeydownOverride$3","unmodifiedGranularity","getModifiedGranularity","isWord","applyAction","executeKeyupOverride","isBackspaceKeydown","setup$j","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot","editableRoot","getParentBlock$1","getParentBlockName","isListItemParentBlock","applyAttributes","forcedRootBlockAttrs","attrStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","createNewBlock","keepStyles","newBlockName","parentBlockName","getDetailsRoot","isAtDetailsEdge","isLastEmptyBlockInDetails","shiftKey","insertNewLine","hasFirstChild","isFirstChild","hasParent","isListBlock","isListItem","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","getStyles","insert$4","containerParent","parentBlockStyles","tmpRng","previousChildren","isWithinNonEditableList","parentList","isEmptyAnchor","containerAndPreviousSiblingName","containerAndNextSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","wrapSelfAndSiblingsInDefaultBlock","startNodeName","startNodeParent","addBrToBlockIfNeeded","shouldEndContainer","optionValue","blockbreak","isAfterLastNodeInContainer","isCef","collapsedAndCef","createNewBlock$1","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","containerBlockName","ctrlKey","liBlock","parentBlockParent","afterTable","parentBlockSugar","prevBrOpt","hasRightSideContent","moveSelectionToBr","brElm","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","linebreak","anchorLocation","matchesSelector","shouldInsertBr","shouldBlockNewLine$1","newLineAction","shouldBlockNewLine","_shiftKey","inListBlock","requiredState","inBlock","inCefBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre","inBrContext","hasShiftKey","_editor","canInsertIntoEditableRoot","rootEditable","isInRootWithEmptyOrCEF","isCefOpt","predicates","getAction","insertBreak","insert$1","logicalAction","platform$1","isIOSSafari","handleEnterKeyEvent","isCaretAfterKoreanCharacter","koreanCharRegex","setup$i","iOSSafariKeydownBookmark","iOSSafariKeydownOverride","iOSSafariKeyupOverride","executeKeydownOverride$2","setup$h","setup$g","platform","executeKeyupAction","stopImmediatePropagation","isPageUpDown","setNodeChangeBlocker","blocked","setup$f","isValidContainer","isInEditableRange","setup$e","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","insertSpaceOrNbspAtPosition","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","setSelection","isInsideSummary","domUtils","insertSpaceOrNbspAtSelection","insertSpaceInSummaryAtSelectionOnFirefox","insertSpaceThunk","executeKeydownOverride$1","setup$d","tableTabNavigation","executeKeydownOverride","setup$c","setup$b","NodeChange","lastRng","nativeRng","fakeRng","currentPath","imageId","getDragImage","transfer","dt","setDragImage","imageData","eventId","getEvent","mkSetEventFn","setEvent","setDragstartEvent","setDropEvent","setDragendEvent","isInDragStartEvent","createEmptyFileList","modeId","getMode","mkSetModeFn","setMode$1","setReadWriteMode","setReadOnlyMode","setProtectedMode","checkMode","expectedMode","isInReadWriteMode","isInProtectedMode","normalizeItems","dataTransfer","itemsImpl","validDropEffects","validEffectAlloweds","createDataTransfer","dataTransferImpl","dropEffect","effectAllowed","effect","allowed","cloneDataTransfer","originalMode","file","getHtmlData","setHtmlData","internalMimeType","internalHtmlMime","internalMark","mark","unmark","isMarked","isPlainText","openContainer","rootTag","rootAttrs","toBlockElements","tagOpen","tagClose","paragraphs","stitch","pasteBinDefaultContent","create$6","lastRngCell","pasteBinElm","getEl","pasteBinClone","isPasteBin","getHtml","copyAndRemove","toElm","fromElm","pasteBinClones","dirtyWrappers","cleanWrapper","isDefaultPasteBinContent","PasteBin","filter$1","innerText","voidElements","ignoreElements","trimHtml","s1","s2","createIdGenerator","getImageMimeType","lowerExt","mimeOverrides","preProcess","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","filterContent","preProcessArgs","filteredContent","pasteHtml$1","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","createLink","linkSelection","insertImage","smartInsertContent","insertContent","pasteAsText","createPasteDataTransfer","doPaste","shouldSimulateInputEvent","doPasteAction","pasteHtml","internalFlag","pasteText","encodedText","getDataTransferItems","contentType","hasContentType","clipboardContent","hasHtmlOrText","extractFilename","createBlobInfo","useFileName","pasteImage","imageItem","existingBlobInfo","isClipboardEvent","readFilesAsDataUris","allowedExtensions","extension","getImagesFromDataTransfer","pasteImageData","fileResults","isBrokenAndroidClipboardEvent","isKeyboardPasteEvent","insertClipboardContent","plainTextMode","isInternal","isPlainTextHtml","isAbsoluteUrl$1","registerEventHandlers","pasteBin","pasteFormat","keyboardPastePlainTextState","getLastRng","registerDataImageFilter","isWebKitFakeUrl","isDataUri","isPasteInsert","registerEventsAndFilters","togglePlainTextPaste","register$1","ui","setHtml5Clipboard","clipboardData","setClipboardData","offscreenRange","getData","isTableSelection","hasSelectedContent","cut","getCaretRangeFromEvent","isPlainTextFileUrl","plainTextContent","setFocusedRange","hasImage","needsCustomInternalDrop","dropContent","parentTransparent","setupSummaryDeleteByDragFix","hasNoSummary","brokenDetailElements","setup$a","draggingInternallyState","internalContent","needsInternalDrop","isInternalDrop","trimmedContent","setup$9","processEvent","addPreProcessFilter","filterFunc","rgbRegExp","rgbToHex","removeWebKitStyles","webKitStylesOption","webKitStyles","inputStyles","outputStyles","inputValue","compareInput","outputStyle","setup$8","setup$7","preventSummaryToggle","filterDetails","initialStateOption","serializedStateOption","setup$6","isText","isContentEditableFalse$2","isContentEditableTrue","getClosestScope","getClosestCef","findEdgeCaretCandidate","findClosestBlockRange","startRng","clickNode","cef","onTripleClickSelect","setup$5","FakeCaretPosition","distanceToRectLeft","distanceToRectRight","isInsideY","collidesY","isOverlapping","overlap","splitRectsPerAxis","intersectingRects","boundingRect","horizontal","vertical","clientInfo","horizontalDistance","_y","closestChildCaretCandidateNodeRect","findCloserTextNode","caretCandidateRect","tryFindSecondBestTextNode","sndClosest","distance","findClosestCaretCandidateNodeRect","sortedRects","horizontalRects","verticalRects","above","below","traverseUp","prevScope","isDragGhostContainer","childNodesWithoutGhost","uncheckedChildren","newScope","closestCaretCandidateNodeRect","ownerDoc","closestFakeCaretCandidate","getAbsolutePosition","docElem","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","getTargetProps","makeDndEventFromMouseEvent","makeDndEvent","makeDataTransferCopyForDragEvent","makeDragEvent","dataTransferForDispatch","scrollPixelsPerInterval","scrollIntervalValue","mouseRangeToTriggerScrollInsideEditor","mouseRangeToTriggerScrollOutsideEditor","isContentEditableFalse$1","isDraggable","isValidDropTarget","dragElement","createGhost","clonedElm","appendGhostToBody","scrollEditor","amount","scrollRight","scrollUp","scrollDown","moveGhost","maxX","maxY","mouseY","mouseX","contentAreaContainer","mouseEventOriginatedFromWithinTheEditor","overflowX","outerMouseY","outerMouseX","removeElement","removeElementWithPadding","isLeftMouseButtonPressed","applyRelPos","ceElm","elmPos","placeCaretAt","caretInfo","dispatchDragEvent","move","throttledPlaceCaretAt","state_","movement","targetPos","getRawTarget","drop","dropTarget","removeDragState","stopDragging","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","blockUnsupportedFileDrop","preventFileDrop","preventFileDropIfUIElement","editorRoot","eventNames","init$2","setup$4","renderFocusCaret","setup$3","isContentEditableFalse","getContentEditableRoot","SelectionOverrides","realSelectionId","selectedElement","isFakeSelectionElement","isFakeSelectionTargetElement","setRange","removeElementSelection","contentEditableRoot","setElementSelection","hideFakeCaret","closestContentEditable","normalizeVoidElementSelection","isRangeInCaretContainer","isWithinCaretContainer","setupOffscreenSelection","targetClone","realSelectionContainer","selectElement","nodeElm","afterNode","getNormalizedTextOffset","generatePath","generatePathRange","resolvePath","nodePath","optNode","resolvePathRange","generatePathRangeFromRange","cleanEmptyNodes","deleteRng","clean","getParentBlock","resolveFromDynamicPatterns","patternSet","beforeText","dynamicPatterns","getBeforeText","newMarker","rangeFromMarker","markerPrefix","pathRange","textEnd","textStart","startParentNode","endParentNode","removeMarker","isReplacementPattern","matchesPattern","patternContent","searchText","startEndIndex","findPatternStartFromSpot","startPattern","startPatternIndex","nextSpot","findPatternStart","requireGap","startRange","findPattern$3","normalizedMatches","endPathRng","resultsOpt","findPatternsRec","startPathRng","endSpot","patternsWithoutCurrent","applyPattern$2","patternRange","applyReplacementPattern","markerRange","applyPatternWithContent","startMarker","endMarker","markerEndRange","markerStartRange","patternMarker","addMarkers","matchesWithEnds","sortPatterns$1","getBestMatches","matchesWithSortedPatterns","hasSameMatches","sortedMatch","findPatterns$2","applyMatches$2","matchesWithMarkers","stripPattern$1","createApplyPattern","stripPattern","isBlockFormatName","formatSet","sortPatterns","findPattern$2","sortedPatterns","nuText","createFindPatterns","findPattern","skipFullMatch","startsWithSingleSpace","applyPattern$1","textContent","findPattern$1","findPatterns$1","getMatches$1","dynamicPatternSet","inlineMatches","blockMatches","applyMatches$1","applyPattern","findPatterns","getMatches","applyMatches","handleEnter","handleInlineKey","handleBlockPatternOnSpace","checkKeyEvent","codes","checkKeyCode","checkCharCode","setup$2","charCodes","keyCodes","getPatternSet","hasDynamicPatterns","handleInlineTrigger","setup$1","Quirks","each","BACKSPACE","isGecko","isWebKit","isiOS","isDefaultPrevented","emptyEditorWhenDeleting","serializeRng","contents","allContentsSelected","allRng","allSelection","selectAll","documentElementEditingFocus","removeHrOnBackspace","previousSibling","selectControlElements","visualAidsAnchorClass","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","isAllContentSelected","showBrokenImageIcon","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","refreshContentEditable","setupRtc","isGplKey","isValidGeneratedKey","validateLicenseKey","validateEditorLicenseKey","licenseKey","DOM$6","appendStyle","getRootName","removeUndefined","mkParserSettings","mkSchemaSettings","mkSerializerSettings","createParser","autoFocus","moveSelectionToFirstCaretPosition","initEditor","initInstanceCallback","getStyleSheetLoader$1","makeStylesheetLoadingPromises","framedFonts","bundledCss","normalCss","loadContentCss","fontCss","removeCss","loaded","contentCssText","allStylesheets","contentStyle","preInit","directionality","protect","loadInitialContent","initEditorWithInitialContent","startProgress","canceled","progressTimeout","contentBodyLoaded","setupRtcThunk","cancelProgress","_rtcMode","DOM$5","createIframeElement","title","customAttrs","tabindex","iframe","getIframeHtml","iframeHTML","bodyId","bodyClass","translatedAriaText","createIframe","boxInfo","iframeTitle","translatedTitle","ifr","setupIframeBody","ready","init$1","DOM$4","initPlugin","initializedPlugins","Plugin","pluginUrl","pluginInstance","trimLegacyPrefix","initPlugins","initIcons","iconPackName","currentIcons","loadIcons","svgData","icon","initTheme","Theme","initModel","model","Model","renderFromLoadedTheme","render","renderThemeFalse","renderFromThemeFunc","createThemeFalseResult","renderThemeFalseIframe","iframeContainer","renderThemeUi","augmentEditorUiApi","uiApiFacade","renderInfo","DOM$3","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","loadTheme","themeUrl","loadModel","modelUrl","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","defaultIconsUrl","customIconsUrl","urlMeta","loadPlugins","loadPlugin","isThemeLoaded","isModelLoaded","loadScripts","getStyleSheetLoader","snapshot","setEditableRoot","hasEditableRoot","sectionResult","sections","deviceDetection","normalizePlugins","trimmedPlugins","extractSections","getSection","defaults","sectionOptions","hasSection","getSectionConfig","getMobileOverrideOptions","mobileOptions","getExternalPlugins","overrideOptions","userDefinedExternalPlugins","combinePlugins","forcedPlugins","getPlatformPlugins","isMobileDevice","desktopPlugins","mobilePlugins","processPlugins","defaultOverrideOptions","mobileConfig","platformPlugins","combinedPlugins","isOnMobile","combineOptions","defaultOptions","deviceOverrideOptions","extendedOptions","normalizeOptions","copiedOptions","addVisual","registerExecCommands$2","toggleAlign","align","registerQueryStateCommands","alignStates","registerCommands$a","registerCommands$9","trimOrPadLeftRight","processValue$1","trimOrPad","insertAtCaret","insertedContent","registerCommands$8","_command","legacyPropNames","isFont","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","fontFamily","getComputedFontProp","getFontProp","getFontSize","getFontFamily","findFirstCaretElement","getCaretElement","bindRange","mapRange","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","font","fonts","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","lineHeightQuery","specifiedStyle","computedStyle","lineHeight","fontSize","lineHeightAction","registerExecCommands$1","lang","registerQueryValueCommands","isFormatMatch","registerCommands$7","registerCommands$6","registerCommands$5","registerCommands$4","applyLinkToSelection","linkDetails","anchor","getTopParentBlock","topParentBlock","insert","insertBefore","registerCommands$3","registerCommands$2","registerCommands$1","registerExecCommands","registerCommands","selectionSafeCommands","isSelectionSafeCommand","EditorCommands","lowerCaseCommand","commandList","commands","nativeEvents","EventDispatcher","wrappedCallback","currentName","bindingName","filteredHandlers","binding","getEventDispatcher","Observable","bubble","dispatcherArgs","DOM$2","customEventRootDelegates","getEventTarget","eventName","eventRoot","isListening","bindEventDelegate","eventRootElm","delegate","editors","EditorObservable","stringListProcessor","getBuiltInProcessor","processValue","isBuiltInSpec","getErrorMessage","additionalText","isValidResult","processor","processDefaultValue","create$5","initialOptions","rawInitialOptions","setValue","isRegistered","registered","setContentEditable","toggleReadOnly","isReadOnly","registerReadOnlyInputBlockers","undoLevel","defaultModes","switchToMode","activeMode","availableModes","oldMode","newMode","setMode","registerMode","create$4","each$2","explode","keyCodeLookup","modifierNames","isModifier","parseShortcut","shortcut","Shortcuts","cmdFunc","shortcuts","create$3","buttons","menuItems","icons","contextMenus","contextToolbars","contexts","sidebars","views","addDefaulted","addIcon","addContext","bridge","DOM$1","extend","each$1","Editor","setupCallback","loadArgs","getArgs","saveArgs","initialContent","oldState","urlConverterCallback","urlObject","DOM","boundGlobalEvents","beforeUnloadDelegate","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","isQuirksMode","baseURL","documentBaseURL","srcScript","pluginBaseUrls","pluginBaseUrl","pluginName","invalidInlineTargets","isInvalidInlineTarget","createId","execCallback","findTargets","provideResults","initEditors","initCount","createEditor","existingEditor","editorId","editorOptions","FakeClipboard","dataValue","FakeClipboardItem","round","relativePosition","targetW","targetH","relChars","create$2","findBestRelativePosition","constrainRect","rels","inflate","intersect","cropRect","x1","y1","clamp","clampRect","fixedSize","cx2","cy2","underflowX1","underflowY1","overflowX2","overflowY2","Rect","awaiter","resolveCb","rejectCb","timeout","complete","completer","Resource","tasks","resultFns","resources","loadErrMsg","runErrMsg","task","waiter","storage","localStorage","LocalStorage","publicApi","tinymce$1","exportToModuleLoaders","tinymce","module","require$$0","noarg","constant$1","range$2","chunk$1","partition$3","find$5","pure$2","get$i","find$4","get$h","sequence","mapFrom","addToEnd","ensureTrailing","toFloat","fromHtml$2","path$1","getOrDie$1","name$3","all$3","owner$4","child$2","isInShadowRoot","getBody","set$9","get$g","set$8","setOptions","get$f","isValidValue$1","Dimension","api$2","get$e","getOuter$2","setMax$1","inclusions","absMax","r$1","absolute$3","viewport$1","set$7","get$d","getOuter$1","setMax","find$3","nu$d","unknown$3","nu$c","nu$b","fromRawEvent$1","capture$1","append$2","prepend$1","appendAt","get$c","bounds$1","getBounds$3","pointed","box$1","xy","absolute$2","constrain","constraint","constrainByMany","constraints","singleton$1","destroyable","unbindable","value$4","global$a","value$3","error$1","field$2","required$2","mergeWithThunk","baseThunk","mergeWith","mergeValues$1","mergeErrors$1","nu$a","unsupportedFields","unsupported","valueThunk","getDelegate","getSetKeys","objOfOnly","fieldNames","setOf$1","validateKeys","validatedKeys","vk","_desc","getP","isPostMessageable","postMessageable","choose$2","arrOfVal","setOf","extraction","asRawOrDie$1","thunkOf","required$1","requiredNumber","forbid","_v","requiredObjOf","objSchema","requiredArrayOfObj","objFields","option$3","optionNumber","optionStringEnum","optionArrayOf","optionObjOf","optionObjOfOnly","defaultedPostMsg","defaultedObjOf","exclude$1","wrapAll$1","keyvalues","kv","wrapAll","consolidate","objs","isSource","simulatedEvent","defaultEventHandler","nu$9","all$2","any","fuse$1","can","abort","touchstart","touchmove","touchend","touchcancel","mousedown","mousemove","mouseout","mouseup","mouseover","focusin","focusout","keydown","keyup","change","click","transitioncancel","transitionend","transitionstart","selectstart","prefixName","alloy","focus$4","postBlur","postPaste","receive","execute$5","focusItem","tap","longpress","sandboxClose","typeaheadCancel","systemInit","documentTouchmove","documentTouchend","windowScroll","windowResize","attachedToDom","detachedFromDom","dismissRequested","repositionRequested","focusShifted","slotVisibility","externalElementScroll","changeTab","dismissTab","highlight$1","dehighlight$1","emit","dispatchWith","emitWith","emitExecute","retargetAndDispatchWith","dispatchEvent","derive$2","configs","preventDefault","run$1","runActionExtra","runOnName","runOnSourceName","redirectToUid","redirectee","redirectToPart","detail","partName","runWithTarget","ev","cutter","stopper","runOnSource","runOnAttached","runOnDetached","runOnInit","runOnExecute$1","markAsBehaviourApi","apiName","apiFunction","openBracketIndex","parameters","cleanParameters","markAsExtraApi","extraName","markAsSketchApi","nu$8","defnA","mod","executeEvent","bConfig","bState","loadEvent","_simulatedEvent","apis","configSchema","schemaSchema","doCreate","createModes$1","modes","wrapApi","bName","revokeBehaviour","getConfig","wrappedApis","apiF","me","extraF","prepared","behaviourInfo","exhibitor","NoState","nu$7","derive$1","capabilities","simpleSchema","modeSchema","createModes","toggle$5","toggle$4","add$1","toggle$3","hasAll","getNative","NuPositionCss","toPx","toOptions","applyPositionCss","getOffsetParent","offsetParent$1","getOrigin","appear","contextualInfo","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","forceTopPosition","winBox","leftX","forceBottomPosition","getDockedLeftPosition","tryDockingPosition","isVisibleForModes","getXYForRestoring","priorY","scrollEnv","getXYForSaving","getPrior","storePrior","decision","storePriorIfNone","revertToOriginal","offsetBox","scrollDelta","_left","_top","_right","_bottom","tryMorphToOriginal","tryDecisionToFixedMorph","tryMorphToFixed","tryMorphToOriginalOrUpdateFixed","tryMorph","calculateMorphToOriginal","forceDockWith","getDecision","morphToStatic","morphToCoord","isDocked","updateVisibility","morphToDocked","contextInfo","applyFixedMorph","morph","applyMorph","refreshInternal","resetInternal","staticOrAbsoluteMorph","refresh$4","reset$2","forceDockWithDecision","forceDockToTop","forceDockToBottom","DockingApis","ActiveDocking","dockInfo","dockState","set$6","EventConfiguration","eventConfig","makeEventLogger","initialTarget","startTime","_name","purpose","finishTime","noLogger","logger","getTrace","lines","ignoreEvent","monitorEvent","menuFields","itemFields","itemSchema$3","_initSize","itemMarkers","tieredMenuMarkers","markers$1","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","output$1","initSize","DockingSchema","DockingState","docked","visible","initialBounds","readState","Docking","isRecursive","originator","events$h","DefaultEvents","cycleBy","generate$6","prefix$1","idAttr$1","idAttr","writeOnly","generate$5","make$8","NoContextApi","getComp","getMessage","warn","premadeTag","premade$1","comp","isPremade","getPremade","makeApi","generateFrom$1","validated","optBlobThunk","getBehaviours$3","bData","getData$2","byInnerKey","indexKey","chain","combine$2","baseMod","behaviours","modsByBehaviour","behaviour","byAspect","modification","combineObjects","combinedClasses","combinedAttributes","combinedStyles","sortKeys","keyName","order","sorted","aKey","bKey","aIndex","bIndex","uncurried","curried","curryArgs","descHandler","extraArgs","getCurried","behaviourTuple","nameToHandlers","groupByEvents","behaviourEvents","combine$1","eventOrder","byEventName","combineGroups","assemble","rawHandler","missingOrderError","tuples","fuse","sortedTuples","assembled","baseBehaviour","schema$z","toInfo","toDefinition","toModification","toEvents","set$5","determineObsoleted","oldObsoleted","newObs","oldTag","ensureInDom","obsoleted","obs","patchChildrenWith","builtChildren","patchSpecChild","build","childComp","patchSpecChildren","specs","patchDomChildren","optObsoleted","diffKeyValueSet","newObj","oldObj","newKeys","oldKeys","toRemove","toSet","reconcileToDom","definition","existingAttributes","attrsToSet","attrsToRemove","updateAttrs","existingStyles","stylesToSet","stylesToRemove","updateStyles","existingClasses","classesToRemove","classesToAdd","updateClasses","updateHtml","updateValue","valueElement","introduceToDom","attemptPatch","hasMixedChildren","renderToDom","canBePatched","getBehaviours$2","generateFrom","generate$4","getDomDefinition","bList","infoModification","baseModification","getEvents","baseEvents","build$2","getMe","systemApi","bBlob","modDefinition","subcomponents","connect","newApi","disconnect","syncComponents","subs","hasConfigured","getApis","behaviourName","buildSubcomponents","components","build$1","buildOrPatch","buildFromSpec","userSpec","specEvents","completeSpec","text$2","external$1","extSpec","uids","isSketchSpec$1","userSpecWithUid","premade","attribute","queryElem","manager","ariaId","isAriaPartOf","owner","isPartOf$1","nu$6","placement","boundsRestriction","labelPrefix","alwaysFit","adt$a","cata$2","southeast","southwest","northeast","northwest","south","north","east","west","cataVertical","cataHorizontal","southeast$3","southwest$3","northeast$3","northwest$3","south$3","north$3","east$3","west$3","getRestriction","restriction","restrictions","adjustBounds","bubbleOffset","applyRestriction","isVerticalAxis","adjustedLeft","adjustedTop","adjustedRight","adjustedBottom","labelPrefix$2","eastX$1","middleX$1","westX$1","northY$2","southY$2","centreY$1","eastEdgeX$1","westEdgeX$1","southeast$2","bubbles","southwest$2","northeast$2","northwest$2","north$2","south$2","east$2","west$2","all$1","allRtl$1","aboveOrBelow","aboveOrBelowRtl","belowOrAbove","belowOrAboveRtl","chooseChannels","channels","ActiveReceiving","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","ReceivingSchema","Receiving","ActivePosition","posConfig","focus$3","blur$1","preserve$1","refocus","focused","oldFocus","newFocus","adt$9","positionWithDirection","posName","decisionRect","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","none","toBox","optBounds","translate$2","removeScroll","outerScroll","cata$1","onRelative","onFixed","relative$1","fixed$1","anchorBox","placementAttribute","setPlacement$1","getPlacement","adt$8","determinePosition","boundsX","boundsY","boundsRight","boundsBottom","xInBounds","yInBounds","originInBounds","rightInBounds","bottomInBounds","sizeInBounds","visibleW","visibleH","calcReposition","restrictedX","restrictedY","restrictedWidth","restrictedHeight","calcMaxSizes","upAvailable","downAvailable","maxHeight","westAvailable","eastAvailable","attempt","adjustedBounds","newX","newY","fits","fittedBox","isPartlyVisible","maxWidth","attempts","elementBox","panelWidth","panelHeight","attemptBestFit","layout","attemptLayout","newReposition","newVisibleW","newVisibleH","newIsVisible","bestNext","timerAttr","isTransitioning$1","transition","shouldApplyTransitionCss","lastPlacement","placer","hasChanges","intermediate","getTransitionDuration","times","parse","duration","dur","setupTransitionListeners","transitionEnd","transitionCancel","isSourceTransition","pseudoElement","transitionDone","transitionStart","startTransitioning","timerId","applyTransitionCss","shouldTransition","intermediatePosition","intermediateCssOptions","elementSize","setClasses","classInfo","setHeight","maxHeightFunction","setWidth","maxWidthFunction","position$2","positionCss","setPlacement","setMaxHeight","anchored","available","expandable$1","defaultOr","dephault","simple","layouts","go","allAlignments","nu$5","xOffset","yOffset","insetModifier","insetXOffset","insetYOffset","getClasses","make","xDelta","yDelta","alignmentsOn","alignmentsOff","nu$4","onDirection","isLtr","getDirection","AttributeValue","Attribute","isBottomToTopDir","schema$y","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","customRtl","ltr","rtl","placement$4","anchorInfo","hotspot","HotspotAnchor","placement$3","MakeshiftAnchor","adt$7","toFixed","toAbsolute","points","sumAsFixed","sumAsAbsolute","screen","absolute$1","hasSameOwner","frame","frameOwner","compOwner","getRootPoint","getBox","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","layoutsRtl","placement$2","nodeBox","NodeAnchor","adt$6","on$1","adt$5","range$1","toRect","getFirstRect$1","getBounds$2","adt$4","asLtrRange","makeRange","same","getNativeSelection","firstRng","doGetExact","getExact","getFirstRect","getBounds$1","descendOnce$1","descendOnce","isSimRange","getAnchorSelection","modStart","modFinish","placement$1","selectionBox","zeroWidth$1","rawRect","selectionRect","SelectionAnchor","labelPrefix$1","eastX","westX","northY$1","southY$1","southeast$1","southwest$1","northeast$1","northwest$1","allRtl","submenuInfo","SubmenuAnchor","AnchorSchema","TransitionSchema","PositionSchema","PlacementSchema","getFixedOrigin","getRelativeOrigin","place","anchoring","placee","lastPlace","position$1","posState","placementSpec","optWithinBounds","positionWithinBounds","placeeDetail","anchorage","placeeState","oldVisibility","newState","vis","PositionApis","pConfig","_pState","PositioningState","Positioning","isConnected","fireDetaching","fireAttaching","virtualAttach","virtualDetach","attach$1","detachChildren$1","replaceChildren","newSpecs","buildNewChildren","newChildren","deleted","virtualReplaceChildren","existingComps","deletedComp","attach","attachWith","insertion","doDetach","detach","parent$1","detachChildren","attachSystem","guiSystem","attachSystemWith","attachSystemAfter","inserter","detachSystem","rebuild","sandbox","sConfig","sState","_data","built","open$1","openWhileCloaked","transaction","cloak","decloak","close$1","isOpen$1","_sandbox","_sConfig","isPartOf","getState$2","cssKey","oldValue","_sState","sink","hasPosition","SandboxApis","ActiveSandbox","sandboxConfig","sandboxState","SandboxSchema","SandboxState","Sandboxing","dismissPopups","repositionPopups","mouseReleased","schema$x","receivingChannel$1","rawSpec","fe","schema$w","receivingChannel","onLoad$5","repConfig","repState","onUnload$2","RepresentApis","ActiveRepresenting","_se","memory$1","isNotSet","manual","dataByValue","dataByText","itemString","currentDataByValue","currentDataByText","newDataByValue","newDataByText","meta","RepresentState","setValue$2","getValue$2","onLoad$4","onUnload$1","DatasetStore","getValue$1","_repState","setValue$1","onLoad$3","ManualStore","getValue","onLoad$2","initVal","onUnload","MemoryStore","RepresentSchema","Representing","source","forbidden","augment","SketchBehaviours","_placeholder","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","substitute","req","childSpecs","substituted","valuesThunk","substituteAll","oneReplace","replacements","used","substitutePlaces","ph","outcome","single$2","multiple","fFactory","fSchema","fName","fPname","typeSpec","fGroupSchema","fDefaults","fOverrides","requiredSpec","externalSpec","optionalSpec","groupSpec","asNamedPart","name$2","asCommon","convert","adtConstructor","partSchema","external","PartType","combine","partSpec","partValidated","internals","externals","_partSpec","_partValidated","units","u","generate$3","np","doGenerateOne","pname","generateOne$1","schemas","substitutes","components$1","getPart","partKey","getPartOrDie","getParts","partKeys","system","pk","getAllParts","pUid","_k","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","partSchemas","partUidsSchemas","asRawOrDie","baseS","single$1","factory","specWithUid","supplyUid","composite$1","partUidsSchema","hasUid","isSketchSpec","singleSchema","compositeSchema","single","rawConfig","sketch","extraApis","composite","ComposeApis","composeConfig","_composeState","ComposeSchema","Composing","nativeDisabled","onLoad$1","disableConfig","disableState","disable","enable","hasNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","_disableState","disableClass","DisableApis","disabled","ActiveDisable","DisableSchema","Disabling","dehighlightAllExcept","hConfig","hState","skip","highlighted","skipComp","dehighlightAll","dehighlight","isHighlighted","highlight","highlightFirst","getFirst","firstComp","highlightLast","getLast","lastComp","highlightAt","getByIndex","highlightBy","getCandidates","queryTarget","getHighlighted","_hState","getDelta$2","selected","dest","getPrevious","HighlightApis","HighlightSchema","Highlighting","TAB","ENTER","ESCAPE","SPACE","LEFT","UP","RIGHT","DOWN","cyclePrev","tryPrev","cycleNext","tryNext","inSet","preds","isShift$1","isControl","isNotShift","transitions","reportFocusShifting","prevFocus","dom$2","focusee","highlights","FocusInsideModes","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusIn","tryGoInsideComponent","isEnterOrSpace","keyboardEvents","cyclicField","tabbingConfig","findInitial","tabstops","visibles","findCurrent","isTabstop","_tabbingState","goFromTabstop","stopIndex","cycle","tabstop","goBackwards","goForwards","goFromPseudoTabstop","exit","AcyclicType","CyclicType","doDefaultExecute","defaultExecute","stopEventForFirefox","_component","schema$v","execute$4","executeConfig","getKeydownRules$5","_executeState","spaceExec","enterExec","downExec","execKeys","getKeyupRules$5","ExecutionType","flatgrid$1","dimensions","numRows","numColumns","KeyingState","useH","use","west$1","moveLeft","moveRight","east$1","useV","north$1","south$1","isHidden$1","locate","locateVisible","withGrid","numCols","oldRow","oldColumn","address","cycleHorizontal$1","colsInRow","newColumn","cycleVertical$1","newRow","newCol","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","schema$u","focusIn$4","gridConfig","_gridState","findCurrent$1","execute$3","doMove$2","gridState","identified","doEscape$1","moveLeft$3","moveRight$3","moveNorth$1","moveSouth$1","getKeydownRules$4","getKeyupRules$4","FlatgridType","getNewIndex","isDisabledButton","tryNewIndex","horizontalWithoutCycles","prevIndex","oldCandidate","onNewIndex","_oldCandidate","schema$t","flowConfig","execute$2","focusIn$3","_state","moveLeft$2","moveRight$2","doMove$1","flowState","doEscape","getKeydownRules$3","_flowState","westMovers","eastMovers","getKeyupRules$3","FlowType","matrix","rowIndex","columnIndex","cycleHorizontal","startCol","deltaCol","newColIndex","cycleVertical","colIndex","startRow","deltaRow","nextRowIndex","colsInNextRow","nextColIndex","moveHorizontal","moveVertical","cycleRight","cycleLeft","cycleUp","cycleDown","moveLeft$1","moveRight$1","moveUp$1","moveDown$1","schema$s","focusIn$2","matrixConfig","selectors","execute$1","toMatrix","doMove","ifCycle","ifMove","inRow","cellsInRow","allRows","moveNorth","moveSouth","getKeydownRules$2","getKeyupRules$2","MatrixType","schema$r","menuConfig","focusIn$1","fireShiftTab","menuState","fireTab","getKeydownRules$1","getKeyupRules$1","MenuType","schema$q","specialInfo","SpecialType","acyclic","cyclic","flow","flatgrid","execution","menu","special","KeyboardBranches","isFlatgridState","keyState","Keying","keyConfig","sendFocusIn","withoutReuse","withReuse","virtualReplace","replaceeIndex","childSpec","replaceConfig","replaceState","appendee","prependee","removee","_replaceConfig","replaceAt","replacer","ReplaceApis","replaceePred","Replacing","events$c","eventHandlers","focus$2","focusConfig","FocusApis","ActiveFocus","FocusSchema","Focusing","SetupBehaviourCellState","initialState","updateAriaState","toggleConfig","toggleState","ariaInfo","updateClass","off","isOn","onLoad","ToggleApis","ActiveToggle","updatePressed","updateExpanded","updateSelected","updateChecked","ToggleSchema","Toggling","pointerEvents","onClick","events$9","optAction","executeHandler","hoverEvent","focusEvent","toggledEvent","onHover","onFocus$1","onToggled","hover","toggled","getItemRole","toggling","getTogglingSpec","tConfig","isOption","builder$2","role","schema$p","builder$1","schema$o","owner$2","parts$h","builder","focusWidget","widget","onHorizontalArrow","_widget","schema$n","itemSchema$2","configureGrid","movementInfo","configureMatrix","configureMenu","parts$g","itemInfo","schema$m","deselectOtherRadioItems","checkedRadioItems","make$7","_spec","_externals","Menu","transpose$1","trace","byItem","byMenu","triggerItem","triggerMenu","generate$2","menus","expansions","menuPaths","_triggerItem","submenu","init$b","isClear","setMenuBuilt","menuName","setContents","sPrimary","sMenus","sExpansions","sPaths","getTriggeringItem","menuValue","getTriggerData","getItemByValue","getPreparedMenu","triggeringItemValue","triggeredItem","getTriggeringPath","itemValue","extraPath","lookupItem","revPath","menuIndex","expand","refresh","lookupMenu","extractPreparedMenu","menuValues","prep","LayeredState","onMenuItemHighlightedEvent","onMenuItemDehighlightedEvent","HighlightOnOpen","make$6","_rawUiSpec","submenuParentItems","buildMenus","primaryName","makeSketch","menuComp","itemComp","layeredState","componentMap","toDirectory","getItemValue","_container","_menuName","setActiveMenu","setActiveMenuAndItem","getMenus","mv","closeOthers","others","getSubmenuParents","parentItems","updateAriaExpansions","expanded","updateMenuPath","latestMenuName","menuPrep","activeMenu","ExpandHighlightDecision","buildIfRequired","expandRight","activeMenuPrep","collapseLeft","updateView","onRight","onLeft","onEscape","keyOnItem","tmenu","tmenuComp","se","getActiveItem","collapseMenuApi","currentItem","highlightPrimary","extractMenuFromContainer","allMenus","preparedMenus","triggeringPath","primaryMenu","_keyInfo","collapseItem$1","tieredData","singleData","collapseItem","tieredMenu","makeMenu","menuSandbox","menuSpec","lazySink","isFirstTierSubmenu","triggeringPaths","getSubmenuLayouts","submenuTriggers","st","submenuLayouts","factory$o","isPartOfRelated","thing","showAt","showWithinBounds","showMenuAt","showMenuWithinBounds","InlineView","global$9","global$8","global$7","global$6","ToolbarMode$1","ToolbarMode","ToolbarLocation$1","ToolbarLocation","option$2","wrapOptional","register$f","stringOrFalseProcessor","stringOrNumberProcessor","getHeightOption","getWidthOption","getMinWidthOption","getMinHeightOption","getMaxWidthOption","getMaxHeightOption","getUserStyleFormats","shouldMergeStyleFormats","shouldAutoHideStyleFormats","getContentLanguages","getRemovedMenuItems","getToolbarMode","getToolbarGroups","getToolbarLocation","fixedContainerSelector","fixedToolbarContainerTarget","isToolbarPersist","getStickyToolbarOffset","getMenubar","getToolbar","getFilePickerCallback","getFilePickerValidatorHandler","getFontSizeInputDefaultUnit","getFilePickerTypes","useTypeaheadUrls","getAnchorTop","getAnchorBottom","isDraggableModal$1","useStatusBar","useElementPath","useBranding","getResize","getPasteAsText","getSidebarShow","promotionEnabled","useHelpAccessibility","getDefaultFontStack","getSkin","isSkinDisabled","isMenubarEnabled","getSkinUrl","skin","getSkinUrlOption","getLineHeightFormats","isToolbarEnabled","toolbar","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsOption","toolbars","toolbarArray","isToolbarLocationBottom","fixedContainerTarget","useFixedContainer","getUiContainer","isDistractionFree","isStickyToolbar","isSplitUiMode","Options","nonScrollingOverflows","isScrollingOverflowValue","isScroller","isFullscreen","popupSinkElem","ancestorsScrollers","scrollers","detectWhenSplitUiMode","getBoundsFrom","scrollableBoxes","Button","lookupAttr","getModAttributes","roleAttrs","getAttrs","record","anyInSystem","ActiveTabstopping","tabConfig","TabstopSchema","Tabstopping","ExclusivityChannel","ShowTooltipEvent","HideTooltipEvent","ImmediateHideTooltipEvent","ImmediateShowTooltipEvent","hideAllExclusive","_tConfig","_tState","TooltippingApis","tState","tooltip","ActiveTooltipping","tooltipConfig","TooltippingSchema","TooltippingState","clearTimer","resetTimer","setToEnabled","Tooltipping","create$1","text$1","sanitizeHtmlString","global$5","rtlTransform","defaultIconName","defaultIcon","getIconName","rtlName","lookupIcon","iconProvider","getOr","fallbackIcon","needsRtlTransform","iconName","addFocusableBehaviour","renderIcon$3","rtlIconClasses","iconHtml","render$3","renderFirst","iconNames","notificationIconMap","Notification","notificationTextId","memBannerText","renderPercentBar","renderPercentText","memBannerProgress","banner","iconChoices","memButton","notificationIconSpec","notificationBodySpec","extras","uiMothership","notificationRegion","sharedBackstage","getBoundsContainer","clampComponentsToBounds","closeCallback","isEditorOrUIFocused","removeNotificationAndReposition","region","manageRegionVisibility","editorOrUiFocused","handleEmptyRegion","handleRegionWithChildren","editorOrUIFocused","shouldApplyDocking","notificationSpec","notificationWrapper","anchorOverrides","AutocompleterEditorEvents","redirectKeyToItem","getItem","ItemResponse","ItemResponse$1","navClass","selectableClass","colorClass","presetClasses","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","containerClass","containerColumnClass","containerRowClass","containerAlignRightClass","containerAlignLeftClass","containerValignTopClass","containerValignMiddleClass","containerValignBottomClass","classForPreset","presets","forMenu","menuClasses","dom$1","hasIcons","columns","schema$l","focusBehaviours","factory$l","Input","refetchTriggerEvent","redirectMenuItemInteractionEvent","menuSearcherClass","findWithinSandbox","sandboxComp","inputElem","findWithinMenu","restoreState","inputComp","searcherState","saveState","fetchPattern","selectionStart","selectionEnd","setActiveDescendant","renderMenuSearcher","handleByBrowser","handleByHighlightedItem","eventData","customSearcherEventsName","searchResultsClass","augmentWithAria","chunk","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","insertItemsPlaceholder","initItems","onItem","rawItems","enrichedItems","_item","forCollection","_hasIcons","forCollectionWithSearchResults","ariaControlsSearchResults","forCollectionWithSearchField","searchField","forHorizontalCollection","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_menuLayout","structure","createPartialMenuWithAlloyItems","menuLayout","getNormalStructure","getSubmenuItems","onItemAction","optionalName","optionalRole","optionalShortcut","optionalSelect","borderless","defaultedMeta","defaultedOnAction","generatedName","namePrefix","generatedValue","valuePrefix","separatorMenuItemSchema","createSeparatorMenuItem","autocompleterItemSchema","createSeparatorItem","createAutocompleterItem","toolbarButtonSchema","createToolbarButton","toggleButtonSchema","createToggleButton","contextFormSchema","createContextForm","contextToolbarSchema","toolbarGroupBackToSpec","toolbarGroup","contextToolbarToSpec","contextToolbar","createContextToolbar","cardImageFields","cardImageSchema","cardTextFields","cardTextSchema","itemSchema$1","cardContainerSchema","commonMenuItemFields","cardMenuItemSchema","createCardMenuItem","choiceMenuItemSchema","createChoiceMenuItem","baseFields","insertTableFields","colorSwatchFields","fancyMenuItemSchema","createFancyMenuItem","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","detectSize","selectorClass","columnLength","thisTop","cTop","namedEvents","SimpleBehaviours","escape","DisablingConfigs","runWithApi","onControlAttached","editorOffCell","onDestroy","onControlDetached","getApi","onContextFormControlDetached","valueState","UiStateChannel","messageSetDisabled","messageSetEnabled","messageInit","modeContextMessages","broadcastEvents","uiRefs","messageType","outerContainer","motherships","setupEventsForUi","toggleOnReceive","contextType","shouldDisable","onMenuItemExecute","itemResponse","menuItemEventOrder","componentRenderPipeline","renderCommonItem","providersBackstage","buildData","convertText","updated","segment","renderIcon$2","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderContainer","directionClass","alignClass","renderImage","alt","renderColorStructure","providerBackstage","colorPickerCommand","removeColorCommand","iconSvg","common","baseDom","renderItemDomStructure","ariaLabel","domTitle","renderNormalItemStructure","renderIcons","iconSpec","renderIcon","renderEmptyIcon","leftIcon","checkmark","textRender","renderItemStructure","tooltipBehaviour","tooltipText","tooltipWorker","_tooltip","encodeText","replaceText","matchText","translated","encoded","escapedMatchRegex","renderAutocompleteItem","useText","onItemValueHandler","tooltipString","_api","render$2","renderCardMenuItem","renderChoiceItem","isSelected","optTooltipping","parts$f","shorthandRegex","longformRegex","isHexString","fromString$1","getLongForm","extractValues","longForm","splitForm","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fireSkinLoaded$1","fireSkinLoadError$1","fireResizeEditor","fireResizeContent","fireScrollContent","fireTextColorChange","fireAfterProgressState","fireResolveName","fireToggleToolbarDrawer","fireStylesTextUpdate","fireAlignTextUpdate","fireFontSizeTextUpdate","fireFontSizeInputTextUpdate","fireBlocksTextUpdate","fireFontFamilyTextUpdate","fireToggleSidebar","fireToggleView","fireContextToolbarClose","fireContextFormSlideBack","composeUnbinders","onSetupEditableToggle","onSetupEvent","onSetupFormatToggle","boundFormatChangeCallback","onSetupStateToggle","unbindEditableToogle","unbindFormatToggle","handleEvent","onActionToggleFormat$1","rawItem","onActionExecCommand","global$4","cacheStorage","ColorCache","storageId","storageString","localstorage","list","getCacheForId","currentData","legacyDefault","getCurrentColors","addColor","hsvColour","fromRgb","minRGB","maxRGB","hexToHsv","hsvToHex","anyToHex","canvas","canvasContext","foregroundId","backgroundId","fallbackCols","mapColors","colorMap","mapColorsRaw","colors","option$1","fallbackColor","register$e","colorProcessor","colorProcessorRaw","colorColsProcessor","calcCols","defaultCols","getColors$2","calculatedCols","getColorCols$1","hasCustomColors$1","getDefaultForegroundColor","getDefaultBackgroundColor","defaultBackgroundColor","isValidBackgroundColor","getClosestCssBackgroundColorValue","getCurrentColor","cssRgbValue","getAdditionalColors","hasCustom","applyColor","onChoice","colorPickerDialog","colorOpt","getColors$1","getFetch$1","setIconColor","splitButtonApi","newColor","setTooltip","buttonApi","optCurrentHex","getToolTipText","lastColor","tooltipPrefix","colorText","registerTextColorButton","_splitButtonApi","registerTextColorMenuItem","onSubmit","initialData","register$d","fallbackColorForeground","fallbackColorBackground","lastForeColor","lastBackColor","createPartialChoiceMenu","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","deriveCollectionMovement","renderColorSwatchItem","backstage","getColorItems","widgetSpec","useCustomColors","cellOverEvent","cellExecuteEvent","makeAnnouncementText","col","makeCell","emitCellOver","makeCells","getCellLabel","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","fancyMenuItems","emptyLabelText","memLabel","renderFancyMenuItem","renderNestedItem","downwardsCaret","underlinePath","translatedTooltip","renderNormalItem","renderSeparatorItem","renderToggleMenuItem","autocomplete","separator$3","normal","nested","fancy","card","CouplingApis","coupleConfig","coupleState","CouplingSchema","CouplingState","coupled","lookupCoupled","coupledName","getOrCreate","getExisting","Coupling","baseFn","nCallback","isReady","cbs","LazyValue","errorReporter","make$5","aFutureB","futureB","Future","partType$1","getAnchor","fetch","mapFetch","fetcher","openF","highlightOnOpen","futureData","getLazySink","getSink","tdata","listRole","onOpenSync","_onOpenSync","_highlightOnOpen","togglePopup","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox$1","ariaControls","onOpen","onClose","repositionMenus","sandboxFields","schema$k","parts$e","factory$k","switchToMenu","togglePopup$1","dropdownComp","triggerExecute","Dropdown","identifyMenuLayout","searchMode","handleRefetchTrigger","originalSandboxComp","dropdown","optSearcherState","newSandboxComp","handleRedirectToMenuItem","getActiveMenuItemFrom","activeItem","getSearchResults","activeMenuComp","updateAriaOnHighlight","resultsElem","controlledId","updateAriaOnDehighlight","focusSearchField","searcherComp","getSearchPattern","FocusMode","createMenuItemFromBridge","isHorizontalMenu","parseForHorizontalMenu","menuitem","createAutocompleteItems","highlightOn","createPartialMenu","itemHasIcon","createItem","createTieredDataFrom","partialMenu","createInlineMenuFrom","focusMode","rangeToSimRange","Autocompleter","autocompleterId","processingAction","activeState","activeRange","isMenuOpen","hideIfNecessary","editorBody","ariaOwnsAttr","getMenu","getCombinedItems","choices","itemMeta","autocompleterApi","display","ld","updateDisplay","combinedItems","cloneAutocompleterToEditorDoc","autocompleterUiApi","DelayedFunction","ref","monitor","longpress$1","handleTouchstart","handleTouchmove","handleTouchend","isSame","isDangerous","rawSettings","tapEvent","simpleEvents","tapStopped","pasteTimeout","onPaste","onKeydown","onFocusIn","focusoutTimeout","onFocusOut","derive","rawTarget","fromSource","fromExternal","doTriggerHandler","handlerInfo","doTriggerOnUntilStopped","triggerHandler","broadcast","listeners","_logger","triggerUntilStopped","triggerOnUntilStopped","eventHandler","broadcastHandler","EventRegistry","registerId","findHandler","handlersById","_eventName","isAboveRoot","Registry","readOrTag","failOnDuplicate","tagId","conflict","Container","domWithoutAttributes","takeover","domEvents","_alloyId","getByUid","getByDom","addToWorld","removeFromWorld","broadcast$1","broadcastOn","broadcastEvent","broadcastData","receivers","receiver","renderBar","schema$j","parts$d","excludeFactory","factory$i","descriptor","descriptorId","FormField","global$3","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel$3","formChangeEvent","formInputEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderCollection","getIcon","runOnItem","disabledClass","htmlLines","itemText","iconContent","mapItemName","tgt","collectionEvents","currentActive","iterCollectionItems","childElm","ariaElements","isAriaElement","markValid","invalidConfig","notifyInfo","markInvalid","invalidState","_invalidState","validatorInfo","InvalidateApis","ActiveInvalidate","InvalidateSchema","Invalidating","ActiveUnselecting","Unselecting","renderPanelButton","colorInputChangeEvent","colorSwatchChangeEvent","colorPickerCancelEvent","renderColorInput","colorInputBackstage","emitSwatchChange","colorBit","memColorButton","valueOpt","colorButton","_field","labelPart","edgePart","det","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","isShift","spectrumPart","setValueFrom","spectrum","SliderParts","sliderChangeEvent","isTouchEvent$2","getEventSource","touchEvent","minX","minY","min1X","min1Y","max1X","max1Y","xRange","yRange","halfX","halfY","step","useMultiplier","snap","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","xyValue","fireSliderChange$3","setToTLEdgeXY","setToTEdge","setToTEdgeXY","setToTREdgeXY","setToREdge","setToREdgeXY","setToBREdgeXY","setToBEdge","setToBEdgeXY","setToBLEdgeXY","setToLEdge","setToLEdgeXY","reduceBy","increaseBy","capValue","snapValueOf","extraValue","remainder","adjustment","rawSteps","maxSteps","numSteps","findOffsetOf","findValueOf","hasMinEdge","hasMaxEdge","minBound","maxBound","screenRange","capMin","capMax","findOffsetOfValue$2","maxOffset","centerMinEdge","centerMaxEdge","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$2","findValueOfOffset$1","setValueFrom$2","xValue","setToMin$2","setToMax$2","moveBy$2","handleMovement$2","getValueFromEvent$2","findOffsetOfValue$1","minEdge","maxEdge","findPositionOfValue$1","slider","setPositionFromValue$2","thumb","edges","thumbRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","HorizontalModel","fireSliderChange$1","findValueOfOffset","setValueFrom$1","yValue","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue","findPositionOfValue","setPositionFromValue$1","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange","sliderValue","moveBy","isVerticalMovement","handleMovement","setToMin","mX","mY","setToMax","getValueFromEvent","setPositionFromValue","xPos","yPos","thumbXRadius","thumbYRadius","onUp","onDown","edgeActions","TwoDModel","SliderSchema","Slider","getThumb","getSpectrum","getLeftEdge","getRightEdge","getTopEdge","getBottomEdge","modelDetail","changeValue","resetToMin","resetToMax","fireOnChoose","wasDown","onDragStart","onDragEnd","getInitial","fieldsUpdate","sliderUpdate","paletteUpdate","sliderFactory","translate","getClass","_thumb","schema$i","getPartName$1","sketch$1","fSpec","fieldParts","make$4","toResult","resPs","resPThunk","pName","Form","validInput","invalidInput","validatingInput","translatePrefix","uninitiatedTooltipApi","rgbFormFactory","onValidHexx","onInvalidHexx","tooltipGetConfig","makeIcon","setTooltipEnabled","tooltipApi","invalidation","renderTextField","description","helptext","errorId","memInvalidIcon","memStatus","comps","concats","copyRgbToHex","hexField","copyRgbToForm","rgb","memPreview","updatePreview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","paletteFactory","setColour","grdWhite","grdBlack","setPaletteHue","setPaletteThumb","_detail","getInitialValue","onChange","onInit","_slider","sliderBehaviours","_apis","makeFactory","rgbForm","sbPalette","hueSliderToDegrees","hueDegreesToSlider","memSlider","memPalette","memRgb","updatePalette","_hex","palette","updateFields","updateSlider","updatePaletteThumb","updateState","runUpdates","updates","onPaletteUpdate","oldHue","newHsv","newHex","onSliderUpdate","oldRgb","oldHsv","onFieldsUpdate","ComposingConfigs","mem","processors","memento","rawProcessors","other","withComp","optInitialValue","getter","setter","initialValue","domHtml","memory","english","translate$1","renderColorPicker","errId","colourPickerFactory","onInvalidHex","memPicker","picker","valOpt","global$2","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","focusBehaviour","onFocusFn","ta","ea","cvalue","global$1","browseFilesEvent","filterByExtension","allowedImageFileTypes","isFileInAllowedTypes","renderDropZone","actions","onDrop","transferEvent","onSelect","handleFiles","memInput","renderGrid","adaptable","newArgs","tempArgs","beforeObject","afterObject","craftWithClasses","craft","containerClasses","triggerTab","onFocus","targetComp","isPseudoStop","dialogChannel","titleChannel","bodyChannel","footerChannel","bodySendMessageChannel","dialogFocusShiftedChannel","isSafariOrFirefox","isChromium","isElementScrollAtBottom","scrollHeight","scrollToY","getScrollingElement","writeValue","iframeElement","fallbackFn","lastScrollTop","isScrollAtBottom","scrollAfterWrite","writeValueThrottler","interval","getDynamicSource","stream","cachedValue","_frameComponent","frameComponent","setSrcdocValue","throttler","renderIFrame","baseClass","opaqueClass","containerBorderedClass","sourcing","calculateImagePosition","imageWidth","imageHeight","zoom","zoomToFit","panel","panelW","panelH","renderImagePreview","cachedData","memImage","memContainer","translatedData","z","applyFramePositioning","cachedWidth","cachedHeight","imageComponent","fakeValidatedData","renderLabel$2","backstageShared","getCompByName","centerClass","endClass","labelComp","internalToolbarButtonExecute","onToolbarButtonExecute","itemApi","commonButtonDisplayEvent","toolbarButtonEventOrder","forceInitialSize","renderIcon$1","iconsProvider","renderIconFromPack$1","renderReplaceableIconFromPack","renderLabel$1","updateMenuText","updateMenuIcon","renderCommonDropdown","btnName","optMemDisplayText","optMemDisplayIcon","onLeftOrRightInMenu","ariaLabelAttribute","fixWidthBehaviourName","customEventsName","displayText","displayIcon","itemCompCausingCollapse","nowActiveMenuComp","isMenuItemReference","isSeparator$2","isExpandingMenuItem","separator$2","unwrapReferences","realItems","getFromExpandingItem","submenuItems","newMenus","newExpansions","generateValueIfRequired","itemWithValue","newData","getSearchModeForField","searchSettings","getSearchModeForResults","mainMenuSearchMode","mainMenu","submenuSearchMode","submenus","isSingleListItem","dataAttribute","fetchItems","hasNestedItems","findItemByValue","renderListBox","initialItem","sketchSpec","listBoxWrap","renderPanel","factory$h","initialValues","firstOption","HtmlSelect","renderSelectBox","translatedOptions","chevron","selectWrap","schema$h","getField","coupledPart","selfName","otherName","lock","parts$c","factory$g","FormCoupledInputs","formatSize","unitDec","maxDecimal","numText","parseSize","sizeText","convertUnit","inInch","supported","noSizeConversion","_input","ratioSizeConversion","scale","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","toggleOnReceive$1","translatedLabel","pLock","formGroup","getFieldPart","isField1","getLabel","widthField","heightField","_lock","newSize","optCurrent","optOther","value1","value2","renderSlider","renderTable","renderTh","renderHeader","header","renderTd","renderTr","renderRows","baseInputBehaviours","validatingBehaviours","vl","inputMode","inputAttributes","pTextField","extraClasses2","renderInput","renderTextarea","getAnimationRoot","slideConfig","getDimensionProperty","getDimension","disableTransitions","setShrunk","setGrown","doImmediateShrink","slideState","_calculatedSize","doStartShrink","calculatedSize","doStartSmartShrink","doStartGrow","wasShrinking","beforeSize","fullSize","refresh$3","grow","shrink","immediateShrink","hasGrown","hasShrunk","isGrowing","_slideState","isShrinking","SlidingApis","ActiveSliding","SlidingSchema","SlidingState","Sliding","getMenuButtonApi","renderMenuButton","tabstopping","fetchContext","getFetch","getButton","getMenuItemAction","getMenuItemSetup","renderLabel","renderCustomStateIcon","leafLabelEventsId","renderLeafLabel","onLeafAction","treeId","selectedId","internalMenuButton","btn","button","isLeftArrowKey","isRightArrowKey","dirComp","dirLabelElement","extraAttributes","renderIconFromPack","directoryLabelEventsId","renderDirectoryLabel","noChildren","toggleExpandChildren","directoryEle","directoryComp","willExpand","parentDirElement","parentDirLabelElement","renderDirectoryChildren","expandedIds","renderDirectory","directoryEventsId","labelTabstopping","expandedIdsCell","computedChildrenComponents","childrenVisible","_cmp","childrenComp","treeEventsId","renderTree","onToggleExpand","defaultExpandedIds","selectedIdCell","ActiveStreaming","streamConfig","streamState","throttle","_config","StreamingState","streamInfo","sInfo","StreamingSchema","Streaming","setValueFromItem","itemData","setCursorAtEnd","setSelectionOn","setSelectionToEnd","attemptSelectOver","inputDisplay","itemExecute","make$3","navigateList","highlighter","focusBehaviours$1","getActiveMenu","typeaheadCustomEvents","previousValue","pv","sandboxIsOpen","typeaheadComp","_typeaheadComp","typeahead","schema$g","parts$b","_tmenu","selectOverTextInInput","_menu","Typeahead","resA","whenError","whenValue","errorThunk","timedOut","FutureResult","future","promise","renderCommonSpec","actionOpt","domFinal","renderIconButtonSpec","tooltipAttributes","calculateClassesFromButtonType","buttonType","renderButtonSpec","translatedText","optTooltip","renderButton$1","buttonSpec","isMenuFooterButtonSpec","isNormalFooterButtonSpec","isToggleButtonSpec","renderToggleButton","providers","optMemIcon","memIcon","newIcon","buttonTypeClasses","showIconAndText","translatedTextComponed","iconButtonSpec","renderFooterButton","menuButtonSpec","fixedSpec","renderDialogButton","separator$1","toMenuItem","staticMenuItem","toMenuItems","filterLinkTargets","filteredTargets","headerTargets","linkInfo","anchorTargets","anchorTargetTop","anchorTargetBottom","historyTargets","history","joinMenuLists","filterByQuery","term","lowerCaseTerm","getItems","fileType","urlBackstage","urlInputValue","renderUrlInput","updateHistory","urlEntry","typeaheadSpec","memUrlBox","_newValue","invalidComp","validation","trimmedValue","_entry","optUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","chosenData","renderAlertBanner","renderCheckbox","toggleCheckboxHandler","memIcons","renderHtmlPanel","make$2","dialogData","makeIframe","iframeSpec","factories","noFormParts","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","westEdgeX","middleX","eastEdgeX","northY","southY","centreY","lookupPreserveLayout","lookupFlippedLayout","bubbleAlignments$2","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","lazyUseEditableAreaAnchor","editableAreaAnchor","standardAnchor","getInlineBottomDialogAnchor","lazyBottomAnchorBar","getBannerAnchor","getCursorAnchor","bodyElement","selectionTableCellRange","getNodeAnchor$1","getAnchors","isToolbarTop","useFixedToolbarContainer","colorPicker","hasCustomColors","getColors","getColorCols","ColorInputBackstage","isDraggableModal","DialogBackstage","HeaderBackstage","isNestedFormat","isFormatReference","defaultStyleFormats","isNestedFormats","mapFormats","userFormats","formatNameWithPrefix","registerCustomFormats","registerFormats","customFormats","getStyleFormats","registeredUserFormats","isSeparator$1","processBasic","isSelectedFor","getPreviewFor","register$b","enrichSupported","enrichMenu","newItems","doEnrich","enrichCustom","newItem","init$6","settingsFormats","eventsFormats","replaceSettings","enriched","modifications","fromSettings","fromEvents","TooltipsBackstage","numActiveTooltips","alreadyShowingTooltips","getComponents","isChildOfContentEditableTrue","getElementText","getOrGenerateId","isAnchor","isValidAnchor","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","getAnchorTargets","getTargetElements","hasTitle","LinkTargets","STORAGE_KEY","HISTORY_LENGTH","isHttpUrl","isArrayOfUrl","isRecordOfUrlArray","getAllHistory","unparsedHistory","setAllHistory","getHistory","addToHistory","itemsWithoutUrl","isTruthy","getPicker","getPickerTypes","optFileTypes","_picker","types","getPickerSetting","filetype","pickerTypes","getUrlPicker","getTextSetting","getLinkInformation","getValidationHandler","UrlInputBackstage","init$5","lazySinks","contextMenuState","specContext","enabledInContext","urlinput","colorinput","dialogSettings","isContextMenuOpen","setContextMenuState","commonBackstage","popupBackstage","dialogBackstage","mothership","uiMotherships","channel","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onContentMousedown","loopEditor","onWindowScroll","onWindowResize","onElementScroll","onEditorResize","onEditorProgress","onDismissPopups","gui","parts$a","partType","schema$f","itemsPart","parts$9","factory$f","_external","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","itemsToRemove","builtLists","CustomList","schema$e","parts$8","factory$e","setGroups","groups","getGroupContainer","Toolbar","isDocked$1","getBehaviours$1","StaticHeader","toolbarHeightChange","visibility","editorStickyOnClass","editorStickyOffClass","scrollFromBehindHeader","containerHeader","scrollPos","markerElement","markerPos","markerHeight","editorHeaderPos","editorHeaderHeight","editorHeaderTop","editorHeaderBottom","editorHeaderDockedAtTop","editorHeaderDockedAtBottom","isDockedMode","updateIframeContentFlow","getOccupiedHeight","parentElem","padding","parentWidth","updateSinkVisibility","sinkElem","updateEditorClasses","editorContainer","restoreFocus","headerElem","focusedElem","activeElm","findFocusedElem","lazyHeader","getIframeBehaviours","getBehaviours","focusedElm","runOnSinkElement","onDockingSwitch","additionalBehaviours","headerHeight","boxHeight","topBound","constrainedBounds","constrainedBoundsY","boundsWithoutOffset","StickyHeader","groupToolbarButtonSchema","createGroupToolbarButton","baseMenuButtonFields","MenuButtonSchema","createMenuButton","splitButtonSchema","createSplitButton","SilverMenubar","setMenus","activeButton","hoveredButton","activeComp","hoveredComp","promotionMessage","promotionLink","renderPromotion","schema$d","getPartName","sSpec","make$1","getSlotNames","getSlot","onSlot","def","slot","onSlots","doShowing","doShow","doHide","isShowing","hideSlot","hideSlots","hideAllSlots","showSlot","SlotContainer","sidebarSchema","createSidebar","handleToggle","makePanels","panelConfigs","bridged","sidepanel","sidePanelSpec","makeSidebar","slotContainer","setSidebar","sidebar","showSidebar","configKey","updateSidebarRoleOnToggle","sidebarState","toggleSidebar","whichSidebar","fixSize","autoSize","renderSidebar","BlockingApis","getBusySpec","blockerBehaviours","blockSpec","blocker","blockingConfig","blockingState","BlockingSchema","BlockingState","blockWith","Blocking","getBusySpec$1","_root","_behaviours","focusBusyComponent","throbber","toggleEditorTabIndex","tabIndexAttr","dataTabIndexAttr","tabIndex","toggleThrobber","throbberFocus","busyComp","renderThrobber","isFocusEvent","isPasteBinTarget","lazyThrobber","throbberState","stealFocus","within","withinWidth","apportion","total","parray","toUnit","fitLast","overflow","overflower","fitAll","tryFit","divide","setGroups$1","storedGroups","bGroups","findFocusedComp","refresh$2","setOverflow","builtGroups","overflowGroup","focusedComp","availableWidth","overflows","schema$c","schema$b","parts$7","expandable","schema$a","parts$6","shouldSkipFocus","toggleWithoutFocusing","toolbarSandbox","bounder","makeSandbox","FloatingToolbarButton","schema$9","parts$5","factory$b","ToolbarGroup","buildGroups","refresh$1","memFloatingToolbarButton","overflowGroups","floatingToolbarButton","factory$a","SplitFloatingToolbar","schema$8","parts$4","isOpen","toggleToolbar","oveflowButton","overf","factory$9","toolbarToggleEvent","doSetGroups","_button","SplitSlidingToolbar","renderToolbarGroupCommon","renderToolbarGroup","getToolbarBehaviours","toolbarSpec","modeName","onAttached","renderMoreToolbarCommon","renderFloatingMoreToolbar","baseSpec","overflowXOffset","headerBounds","docBounds","renderSlidingMoreToolbar","renderToolbar","baseButtonFields","normalButtonFields","toggleButtonFields","schemaWithoutGroupButton","groupFields","viewButtonSchema","viewSchema","createView","renderButton","isToggleButton","setIcon","setActive","optTranslatedText","optTranslatedTextComponed","ariaLabelAttributes","optIconSpec","hasIconAndText","renderViewButton","renderButtonsGroup","renderViewHeader","hasGroups","endButtons","btnspec","renderViewPane","factory$8","_comp","View","makeViews","viewConfigs","internalViewConfig","makeSlotContainer","getCurrentName","hideContainer","showContainer","makeViewInstanceApi","runOnPaneWithInstanceApi","view","pane","runOnShow","runOnHide","ViewWrapper","showMainView","hideMainView","optCurrentSlotName","isTogglingCurrentView","editorCont","factory$6","toolbarDrawerOpenState","toggleStatusbar","statusBar","renderedGroups","mToolbar","renderedToolbars","menubar","partMenubar","toolbarFactory","partMultipleToolbar","_mToolbar","tc","partToolbar","renderer","partHeader","partPromotion","partSocket","partSidebar","partThrobber","partViewWrapper","renderEditorContainer","partEditorContainer","OuterContainer","defaultMenubar","defaultMenus","removedMenuItems","removedMenuItem","parseItemsString","identifyMenus","rawMenuData","userDefinedMenus","validMenus","isDefaultMenu","menuData","isNotSeparator","fireSkinLoaded","fireSkinLoadError","getSkinResourceIdentifier","loadStylesheet","stylesheetUrl","skinIdentifierToResourceKey","identifier","getResourceValue","resourceKey","determineCSSDecision","filenameBase","resourceValue","loadUiSkins","loader","loadShadowDomUiSkins","loadUiContentCSS","loadUrlSkin","loadSkin","makeTooltipText","labelWithPlaceholder","generateSelectItems","generateItem","response","invalid","si","validateItems","preItems","getStyleItems","createMenuItems","createSelectButton","getTooltip","textUpdateEventName","rawFormats","buildBasicStaticDataset","Delimiter","delimiter","buildBasicSettingsDataset","settingName","menuTitle$4","getTooltipPlaceholder$4","fallbackAlignment","alignMenuItems","getSpec$4","getMatchingValue","updateSelectMenuIcon","alignment","createAlignButton","createAlignMenu","findNearest","menuTitle$3","getTooltipPlaceholder$3","fallbackFormat","getSpec$3","updateSelectMenuText","createBlocksButton","createBlocksMenu","menuTitle$2","getTooltipPlaceholder$2","systemFont","systemStackFonts","splitFonts","matchesStack","stack","isSystemFontStack","userStack","getSpec$2","getFirstFont","getCurrentValue","matchOpt","createFontFamilyButton","createFontFamilyMenu","decimalDigits","exponentPart","dot","float","isUnit","accepted","check","unitRaw","normalise","Keys","createBespokeNumberInput","currentComp","getValueFromCurrentComp","alloyComp","customEvents","fromInput","focusBack","lenghtDelta","oldStart","oldEnd","decrease","increase","goToParent","focusInput","makeStepperButton","editorOffCellStepButton","altExecuting","memMinus","memPlus","buttonNode","wrapperComp","menuTitle$1","getTooltipPlaceholder$1","fallbackFontSize","legacyFontSizes","keywordFontSizes","precision","factor","toPt","toLegacy","getSpec$1","pt","legacy","createFontSizeButton","getConfigFromUnit","baseConfig","isValidValue","getNumberInputSpec","updateFunction","parsedText","defaultUnit","createFontSizeInputButton","createFontSizeMenu","menuTitle","getTooltipPlaceholder","getSpec","getFormatItems","flattenedItems","createStylesButton","createStylesMenu","schema$7","arrowPart","arrow","buttonPart","splitDropdown","parts$3","factory$5","openMenu","executeOnButton","buttonEvents","SplitDropdown","getButtonApi","getToggleApi","getTooltipAttributes","focusButtonEvent","renderCommonStructure","optIcon","optText","renderFloatingToolbarButton","identifyButtons","specialisation","renderCommonToolbarButton","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","buttonComp","defaultToolbar","renderFromBridge","bridgeBuilder","extractFrom","bespokeButtons","removeUnusedDefaults","filteredItemGroups","subItem","convertStringToolbar","strToolbar","groupsStrings","isToolbarGroupSettingArray","createToolbar","toolbarConfig","lookupButton","toolbarItem","allowToolbarGroups","prefixes","toolbarGroups","setToolbar","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents$1","contentWindow","initialDocEle","lastWindowDimensions","lastDocumentDimensions","resizeWindow","resizeDocument","docEle","elementLoad","attachUiMotherships","uiRoot","Iframe","mainUi","lastToolbarWidth","eTargetNode","socket","limit","unbinder","toolbarMode","refreshDrawer","parseToInt","numToPx","calcCappedSize","minSize","maxSize","minOverride","maxOverride","getHeight","baseHeight","minHeight","getHeightWithFallback","baseWidth","minWidth","getWidthWithFallback","maximumDistanceToEdge","InlineHeader","floatContainer","isSticky","editorMaxWidthOpt","headerBackstage","isPositionedAtTop","minimumToolbarWidth","isSplitToolbar","calcToolbarOffset","tbar","calcMode","toolbarHeight","targetBounds","docHeight","setupMode","verticalDir","updateChromeWidth","updateChromePosition","isOuterContainerWidthRestored","prevScroll","getOffsetParent$1","getLeft","getTop","topValue","widthProperties","toolbarWidth","baseProperties","repositionPopups$1","restoreOuterContainerWidth","stickyAction","currentScroll","optScroll","doUpdateMode","fc","currentMode","getTargetPosAndBounds","setupEvents","toolbarPersist","prevPosAndBounds","resizeContent","prevBounds","hasResized","lastScrollX","updateUi","newScrollX","_args","Inline","uiContainer","LazyUiReferences","dialogUi","popupUi","optDialogMothership","optPopupMothership","dm","pm","showContextToolbarEvent","hideContextToolbarEvent","contextFormInputSelector","contextbar","focusParent","forwardSlideEvent","backSlideEvent","changeSlideEvent","resizingClass","renderContextToolbar","currentWidth","newWidth","oldContents","getFormApi","focusfallbackElement","runOnExecute","formApi","renderContextButton","renderContextToggleButton","generateOne","generate","mementos","compInSystem","renderContextFormSizeInput","onEnter","focussableWrapper","focusableWrapper","focussableInput","controlLifecycleHandlers","createContextFormFieldFromParts","renderContextFormSliderInput","renderContextFormTextInput","getFormApi$1","closestFocussable","buildInitGroup","startCommands","endCommands","commandParts","buildInitGroups","ContextForm","toolbarType","isVerticalOverlap","threshold","getRangeRect","leaf$1","getSelectionBounds","bodyPos","getAnchorElementBounds","lastElement","getHorizontalBounds","contentAreaBox","getVerticalBounds","isToolbarLocationTop","headerBox","isToolbarBelowContentArea","isToolbarAbove","containerBounds","getContextToolbarBounds","toolbarOrMenubarEnabled","bubbleSize$1","bubbleAlignments$1","isEntireElementSelected","preservePosition","currentPosition","shouldUseInsetLayouts","determineInsetLayout","selectionBounds","isSameAnchorElement","yBounds","contextbarHeight","getAnchorSpec$2","mobile","smartInsetLayout","newAnchor","getInsetLayouts","getAnchorLayout","matchTargetWith","ctxs","toolbarApi","filterByPositionForStartNode","doesPositionExist","filterToolbarsByPosition","hasSelectionToolbars","hasNodeToolbars","nodeToolbars","selectionToolbars","filterByPositionForAncestorNode","findPosition","matchStartNode","nodeCandidates","editorCandidates","nodeMatches","editorMatches","matchAncestor","scopes","ancestorElem","contextForms","rootElem","isOutsideRoot","categorise","forms","inNodeScope","inEditorScope","formNavigators","lookupTable","registerForm","contextForm","launch","registerToolbar","transitionClass","register$a","registryContextToolbars","lastTrigger","lastContextPosition","canLaunchToolbar","isSameLaunchElement","shouldContextToolbarHide","contextToolbarBounds","anchorBounds","hideOrRepositionIfNecessary","contextBarEle","wrapInPopDialog","getScopes","alloySpec","buildToolbar","buildContextToolbarGroups","allButtons","buildContextFormGroups","initGroups","anchorLayout","launchContext","launchContextToolbar","isDragging","register$9","registerController","getMenuItems","oldApi","unbindWatcher","lineHeightSpec","languageSpec","customCode","register$8","onSetupOutdentState","registerButtons$2","makeSetupHandler","pastePlainTextToggleHandler","onActionToggleFormat","registerFormatButtons","_idx","registerCommandButtons","registerCommandToggleButtons","registerButtons$1","registerMenuItems$2","onSetupUndoRedoState","registerMenuItems$1","registerButtons","onSetupVisualAidState","registerMenuItems","registerToolbarButton","patchPipeConfig","shouldNeverUseNative","getAvoidOverlapSelector","isContextMenuDisabled","getContextMenu","contextMenu","dx","dy","isTouchEvent$1","fromPageXY","fromClientXY","transposeContentAreaContainer","containerPos","getPointAnchor","getSelectionAnchor","getNodeAnchor","getAnchorSpec$1","anchorType","initAndShow$1","buildMenu","contextmenu","anchorSpec","bubbleSize","bubbleAlignments","isTouchWithinSelection","rngRect","setupiOSOverrides","originalSelection","selectionReset","unbindEventListeners","preventMousedown","clearSelectionReset","getAnchorSpec","highlightImmediately","initAndShow","isMacOS","isAndroid","shouldHighlightImmediately","openiOS","separator","makeContextItem","commonMenuItem","commonItem","addContextMenuGroup","groupItems","generateContextMenu","allItems","isNativeOverrideKeyEvent","isTriggeredByKeyboard","getSelectedElement","getAnchorType","hideContextMenu","showContextMenu","hideEvents","subtract","asFixed","coord","asAbsolute","asOffset","withinRange","coord1","coord2","getDeltas","toStyles","stylesOpt","absorb","partialCoord","originalCoord","absorbOne","stencil","optX","optY","parseAttrToInt","snapsInfo","getCoords","snapInfo","moveOrSnap","newCoord","findClosestSnap","findSnap","fixedCoord","spanned","stopDrag","findMatchingSnap","snaps","sensor","deltas","bestDeltas","currAvg","bestAvg","snapTo$1","DraggingApis","dragConfig","snapPin","initialAttribute","resetZIndex","zIndex","changeZIndex","zindex","instigate","anyComponent","discard","createComponent","blockerClass","blockerEvents","SnapSchema","schema$6","getCurrentCoord","clampCoords","coords","absoluteCoord","newCoords","offset$1","calcNewCoord","optSnaps","currentCoord","snapping","dragBy","calcStartData","dragState","dragMode","dragStartData","dlt","updateStartState","init$3","dragApi","MouseData","events$3","stop$1","delayDrop","schema$5","getDataFrom","touches","TouchData","events$2","blockerSingleton","stopBlocking","schema$4","events$1","schema$3","DraggingBranches","DragState","calculateDelta","dragEvent","nuData","setStartData","getStartData","Dragging","snapWidth","snapOffset","calcSnap","selectorOpt","selectorHandle","sensorLeft","sensorTop","sensorWidth","sensorHeight","getSnapsConfig","getSnapPoints","isSameCell","cellOpt","currentTd","createSelector","tlTds","brTds","finishCell","getTopLeftSnap","memTopLeft","getTopLeftSnaps","getBottomRightSnap","memBottomRight","getBottomRightSnaps","topLeftSnaps","bottomRightSnaps","bottomRight","showOrHideHandle","cellRect","viewportHeight","aboveViewport","belowViewport","snapTo","getSnapConfig","snapTopLeft","snapLastTopLeft","snapBottomRight","snapLastBottomRight","domToSugar","otherCells","Logo","describedBy","describedElement","describeElement","describeId","renderElementPath","renderElement","_btn","renderDivider","renderPathData","updatePath","newPath","ResizeTypes","getDimensions","resizeType","originalHeight","originalWidth","resize","dim","getResizeType","keyboardHandler","renderResizeHandler","resizeLabel","_target","renderWordCount","replaceCountText","currentVal","renderStatusbar","renderBranding","renderHelpAccessibility","shortcutText","renderRightContainer","getTextComponents","shouldRenderHelp","shouldRenderElementPath","shouldRenderRightContainer","getTextComponentClasses","flexStart","flexEnd","spaceAround","container3Columns","resizeHandler","getLazyMothership","setupForTheme","lazyUiRefs","lazyMothership","lazyDialogMothership","lazyPopupMothership","deviceClasses","isToolbarBottom","memAnchorBar","memBottomAnchorBar","lazyDialogSinkResult","lazyPopupSinkResult","lazyAnchorBar","lazyToolbar","backstages","makeHeaderPart","verticalDirAttributes","hasMultipleToolbar","hasToolbar","hasMenubar","shouldHavePromotion","makePromotion","hasAnyContents","getPartToolbar","menubarCollection","makeSidebarDefinition","renderDialogUi","isGridUiContainer","sinkSpec","reactiveWidthSpec","renderPopupUi","renderMainUi","sidebarContainer","statusbar","editorComponents","setEditorSize","parsedHeight","parsedWidth","setupShortcutsAndCommands","renderUIWithRefs","toolbarGroupButtonConfig","toolbarOpt","reuseDialogUiForPopuUi","renderUI","labelledBy","labelledElement","labelElement","labelId","schema$2","basic","parts$2","factory$4","dialogComp","showDialog","externalBlocker","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","titleElm","ModalDialog","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseFooterButtonFields","dialogFooterButtonFields","normalFooterButtonFields","menuFooterButtonFields","toggleButtonSpecFields","dialogFooterButtonSchema","alertBannerFields","alertBannerSchema","createBarFields","itemsField","buttonFields","buttonSchema","formComponentFields","formComponentWithLabelFields","checkboxFields","checkboxSchema","checkboxDataProcessor","collectionFields","collectionSchema","collectionDataProcessor","colorInputFields","colorInputSchema","colorInputDataProcessor","colorPickerSchema","colorPickerDataProcessor","customEditorFields","customEditorFieldsOld","customEditorSchema","customEditorDataProcessor","dropZoneFields","dropZoneSchema","dropZoneDataProcessor","createGridFields","htmlPanelFields","htmlPanelSchema","iframeFields","iframeSchema","iframeDataProcessor","imagePreviewSchema","imagePreviewDataProcessor","inputFields","inputSchema","inputDataProcessor","createLabelFields","listBoxSingleItemFields","listBoxNestedItemFields","listBoxItemSchema","listBoxFields","listBoxSchema","listBoxDataProcessor","selectBoxFields","selectBoxSchema","selectBoxDataProcessor","sizeInputFields","sizeInputSchema","sizeInputDataProcessor","sliderFields","sliderSchema","sliderInputDataProcessor","tableFields","tableSchema","textAreaFields","textAreaSchema","textAreaDataProcessor","baseTreeItemFields","treeItemLeafSchema","treeItemDirectoryFields","treeItemDirectorySchema","treeItemSchema","treeFields","treeSchema","urlInputFields","urlInputSchema","urlInputDataProcessor","createItemsField","itemSchema","sErr","passValue","panelSchema","panelFields","tabFields","tabPanelFields","tabPanelSchema","dialogButtonFields","dialogButtonSchema","dialogSchema","createDialog","urlDialogButtonSchema","urlDialogSchema","createUrlDialog","getAllObjects","isNamedItem","dataProcessors","getDataProcessor","getNamedItems","createDataValidator","namedItems","internalDialog","dataValidator","DialogManager","ActiveReflecting","reflectingConfig","reflectingState","renderComponents","newComponents","rawData","ReflectingApis","reflectState","ReflectingSchema","ReflectingState","Reflecting","toValidValues","renderBodyPanel","memForm","formValue","factory$3","TabButton","schema$1","tabsPart","barDetail","dismissTab$1","tabbar","changeTab$1","parts$1","factory$2","tab","Tabbar","factory$1","Tabview","barPart","viewPart","tabValue","tabview","tabData","changeTabBy","section","byPred","tabKey","TabSection","measureHeights","allTabs","tabviewComp","_tab","getMaxHeight","heights","getMaxTabviewHeight","tablist","documentElement$1","isFixed","tabviewHeight","currentTabHeight","dialogTopMargin","dialogBottomMargin","chromeHeight","showTab","setTabviewHeight","updateTabviewHeight","dialogBody","maxTabHeight","getTabview","smartMode","oldHeight","newHeight","SendDataToSectionChannel","SendDataToViewChannel","renderTabPanel","storedValue","updateDataWithForm","validData","setDataOnForm","oldTab","tabMode","_viewItems","tsection","renderBody","dialogId","contentId","ariaAttrs","incoming","ariaAttributes","renderInlineBody","renderModalBody","bodySpec","renderIframeBody","hiddenHeader","pClose","pUntitled","pBodyMessage","pFooter","pFooterGroup","startButtons","renderDialog$1","dialogClass","blockerBackdropClass","scrollLockClass","renderClose","renderTitle","titleId","renderDragHandle","renderInlineHeader","renderModalHeader","pTitle","pHandle","getHeader","bs","getEventExtras","lazyDialog","blockEvent","fullscreenClass","largeDialogClass","mediumDialogClass","getDialogSizeClass","updateDialogSizeClass","dialogSizeClass","toggleFullscreen","currentSize","currentSizeClass","renderModalDialog","dialogEvents","mapMenuButtons","menuItemStates","mapItems","extractCellsToObject","innerAcc","initCommonEvents","fireApiEvent","_event","initUrlDialog","getInstanceApi","withSpec","currentDialog","initDialog","currentDialogInit","makeButton","footerButtons","buttonName","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","access","validateData$1","dialogState","getDialogApi","doRedial","withRoot","instanceApi","valueComp","representedValues","menuItemCurrentState","prevData","mergedData","newInternalData","tabSection","dialogInit","storedMenuButtons","renderDialog","dialogSize","getCompByName$1","modalAccess","dialogSizeClasses","objOfCells","footer","getForm","outerForm","toggleFullscreen$1","renderInlineDialog","refreshDocking","dialogLabelId","dialogContentId","memHeader","memBody","storagedMenuButtons","optMemFooter","inlineClass","memFooter","global","getUrlDialogApi","SUPPORTED_MESSAGE_ACTIONS","isSupportedMessage","isCustomMessage","handleMessage","renderUrlDialog","iframeUri","iframeDomain","messageHandlerUnbinder","iframeEle","iframeWin","alertDialog","memFooterClose","titleSpec","closeSpec","footerCloseButton","confirmDialog","memFooterYes","footerNo","footerYesButton","validateData","isAlertOrConfirmDialog","inlineAdditionalBehaviours","isStickyToolbar$1","closeWindow","openInlineDialog","openBottomInlineDialog","openModalDialog","openModalUrlDialog","internalInitialData","config$1","windowParams","inlineDialog","inlineDialogComp","getInlineDialogBounds","optScrollingContext","registerOptions","popupSinkBounds","renderModeUI","renderResult","windowMgr","getNotificationManagerImpl","children$2","after$5","copy$2","cloneChildren","mutate$1","validSectionList","isValidSection","grid","column","detailnew","isNew","extended","isLocked","rowdetail","rowdetailnew","elementnew","rowcells","finishRow","finishCol","columnext","colgroup","body$1","getBody$1","ancestors$4","ancestors$3","bindFrom","getRaw$2","copy$1","sourceDom","targetDom","getAttrValue","hasColspan","cellOrCol","hasRowspan","getCssValue","cells$1","columns$1","columnGroups","columnGroup","rows$1","fromRowsOrColGroups","getParentSection","fromTable$1","fromPastedRows","detect$5","detect$2","toNumber","px","calcContentBoxSize","upper","lower","paddingUpper","paddingLower","borderUpper","borderLower","getCalculatedWidth","boxSizing","getHeight$1","getInnerWidth","getInner","getRuntime$1","addCells","gridRow","existingCells","newCells","setCells","addCell","mutateCell","mapCells","getCell","getCellElement","cellLength","extractGridDetails","cloneRow","cloneCell","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getLockedColumnsFromGrid","locked","lockedArr","getAt","warehouse","findItem","filterItems","generateColumns","rowData","columnsGroup","lockedColumns","maxRows","maxColumns","rowCount","colgroupRows","currentRow","rowCell","occupiedColumnPosition","occupiedRowPosition","rowPosition","columnPosition","newpos","colgroups","Warehouse","isValidCell","cols","rowsArr","decide","getBlock","getFallback","deduce","aa","getRuntime","rowInfo","colInfo","rtlEdge","ltrEdge","getTop$1","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","isCol$2","isRow$2","getPercentSize","outerGetter","innerGetter","relativeParent","setPixelWidth","setPercentageWidth","removeHeight","getHeightValue","normalizePixelSize","getTotalHeight","getRawWidth$1","getRawHeight$1","getPercentageWidth","getPixelWidth$1","getGenericWidth","setGenericWidth","getPixelTableWidth","getPixelTableHeight","getPercentTableWidth","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","percentageBasedSizeRegex","isCol$1","getRawW","getRawH","justCols","isValidColumn","supportsColWidths","backups","getWidthFrom","columnCells","colFilter","getDeduced","deduced","getRawWidths","getPercentageWidths","tableSize","cellWidth","getPixelWidths","getHeightFrom","rowCells","getPixelHeights","getRawHeights","widthLookup","noneSize","zero","percentageSize","getFloatWidth","_delta","pixelSize","chooseSize","TableSize","statsStruct","minRow","minCol","maxRow","maxCol","allCells","findSelectedStats","house","totalColumns","endRow","endCol","seenSelected","fillInGaps","stats","totalRows","replica","widthDelta","emptyRows","getTableWidthDelta","colWidths","allColsWidth","extract$1","selectedSelector","replicaHouse","replicaStats","unselectedCells","descendantRtl","transferableAttributes","createCell","createCol","createColgroup","createRow$1","replace$1","pasteReplace","cloneFormats","oldCell","newCell","firstText","formatSelector","clonedFormat","cloneAppropriateAttributes","validAttributes","cellOperations","formatsToClone","cloneCss","paste$1","defaultWidth","getPixelForcedWidth","determineDefaultTableStyles","defaultStyles","isTableResponsiveForced","shouldStyleWithCss","isTablePixelsForced","determineDefaultTableAttributes","defaultAttributes","getTableCloneElements","hasTableObjectResizing","objectResizing","getTableHeaderType","getTableColumnResizingBehaviour","isPreserveTableColumnResizing","isResizeTableColumnResizing","getTableSizingMode","isTablePercentagesForced","hasTableResizeBars","shouldMergeContentOnPaste","getTableDefaultAttributes","getTableDefaultStyles","tableUseColumnGroup","getUiMode","getIsRoot","removeDataStyle","removeStyleAttribute","getSelectionStart","getPixelWidth","getPixelHeight","getRawValue","getRawWidth","getRawHeight","isPercentage$1","isPixel","isInEditableContext$1","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","isWithin","isRectangular","isRect","detailIsWithin","detailA","detailB","getAnyBox","startCoords","finishCoords","getBox$1","intercepts$1","parentCell","innerCell","isContainedBy","c1","c2","deltaColumn","getWarehouse","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","getLanguage","universe","look","tail","oneAll","unsafeOne","commonElement","ancestors$2","ps1","ps2","prune","ind","pruned1","pruned2","shared","sharedOne$1","ancestors$1","universe$3","sharedOne","_universe","rootTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve$1","sels","boxes","lastSelectedSelector","getEdges","firstSelectedSelector","expandTo","shiftSelection","retrieve","retrieveBox","sectionSelector","firstAncestor","lastAncestor","fA","lA","unmergable","hasSpan","hasRowOrColSpan","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","paste","clipboard","generators","pasteRows","_cell","getSelectionCellFallback","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","getCellsFromFakeSelection","extractSelected","serializeElements","replicaElements","multiCellContext","scan$1","toEnd","freefallRtl$2","freefallRtl$1","universe$2","halve","main","surround","sizes","clampDeltaHelper","minCellSize","clampNegativeDelta","clampDelta","resizeTable","calcFixedDeltas","clampedDelta","calcRelativeDeltas","newThis","calcLeftEdgeDeltas","isRelative","resizer","_prev","totalWidth","pixelDelta","newSizes","preserveTable","isLastColumn","maxDelta","_minCellSize","_totalWidth","_pixelDelta","_isRelative","getGridSize","isHeaderCell","isHeaderCells","getRowHeaderType","isHeaderRow","getRowType","findCommonCellType","headerCells","findCommonRowType","rowTypes","hasHeader","hasFooter","hasBody","findTableRowHeaderType","rowType","transformCell","substitution","transformRow","fixedCell","sectionCells","TableSection","setIfNot","generateSection","sectionName","newSection","render$1","syncRows","gridSection","syncColGroup","colGroup","renderSection","sectionElems","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","columnGroupsSection","clonedCell","getColumn","getRow","findDiff","subgrid","isColRow","toDetails","seen","updateSeen","toGrid","colgroupCols","rowDetail","fromWarehouse","toDetailList","findInWarehouse","extractCells","cell$1","lc","postAction","genWrappers","tableSection","newElements","tableSizing","resizing","onPasteByEditor","onMergable","_warehouse","onUnmergable","onCells","onUnlockedCells","isUnlockedTableCell","allUnlocked","onUnlockedMergable","mergeable","onUnlockedUnmergable","merge$2","unmerge","currentCell","currentCellElm","isToReplace","uniqueCells","splitCols","prevCell","splitRows","rowPrevCells","sub","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","measureWidth","colLengthA","colLengthB","measureHeight","rowLengthA","rowLengthB","generateElements","generator","rowFill","exampleRow","colFill","lockedColFill","colNum","newChild","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","mergeTables","gridBRows","mergeHeight","mergeWidth","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","getValidStartAddress","currentStartAddress","gridColLength","adjustedRowAddress","possibleColAddresses","validColAddress","getLockedColumnsWithinBounds","validStartAddress","lockedColumnsWithinBounds","fittedGrid","newLockedColumnsWithinBounds","insertCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","insertRowAt","example","getElementFor","withinSpan","insertColumnAt","deleteColumnsAt","deleteRowsAt","notInStartRow","notInStartColumn","isDuplicatedCell","rowReplacerPredicate","targetRow","columnHeaders","_rowIndex","columnReplacePredicate","targetColumn","rowHeaders","_colIndex","determineScope","applyScope","isInHeader","getScope","rowScopeGenerator","columnScopeGenerator","replaceIn","genScope","shouldReplace","getColumnCells","getRowCells","replaceColumns","indexes","shouldReplaceCell","scopeGenerator","replaceRows","newGrid","replaceCells","targetCells","ColumnContext","neighbours","determine","onOnly","onMiddle","measures","recalculateWidthForCells","widths","recalculateWidthForColumns","matchRowHeight","sumUp","recalculate","recalculateAndApply","adjustWidth","clampedStep","newWidths","adjustHeight","newHeights","newRowSizes","adjustAndRedistributeWidths$1","_table","resizeBehaviour","tablePixelWidth","adjustWidthTo","_info","uniqueColumns","currentDetail","isCol","isColgroup","isRow$1","elementToData","toData","nuCell","nuRow","recent","transform$1","makeNew","getScopeAttribute","Generators","getScopeProperty","stringAttributes","baseScope","blockList","isList$1","isEmptyTag$1","universe$1","advancedBr","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","cursor","findEditableCursorPosition","elementFromGrid","cursorElement","uniqueRows","opInsertRowsBefore","targetIndex","opInsertRowsAfter","newG","opInsertColumnsBefore","extractDetail","opInsertColumnsAfter","opMakeColumnsHeader","initialGrid","columnIndexes","opMakeCellsHeader","opUnmakeColumnsHeader","opUnmakeCellsHeader","makeRowsSection","rowIndexes","opMakeRowsHeader","opMakeRowsBody","opMakeRowsFooter","opEraseColumns","_comparator","_genWrappers","maxColIndex","opEraseRows","maxRowIndex","opMergeCells","opUnmergeCells","opPasteCells","pasteDetails","wh","gridifyRows","opPasteColsBefore","mergedGrid","opPasteColsAfter","opPasteRowsBefore","opPasteRowsAfter","opGetColumnsType","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","opGetCellsType","opGetRowsType","minRowRange","maxRowRange","selectedRows","adjustAndRedistributeWidths","firstColumnIsLocked","lastColumnIsLocked","getColumnsWidth","uniqueCols","colWidth","insertColumnsExtractor","eraseColumnsExtractor","pasteColumnsExtractor","headerCellGenerator","bodyCellGenerator","insertRowsBefore","insertRowsAfter","insertColumnsBefore","insertColumnsAfter","eraseColumns","eraseRows","makeColumnsHeader","unmakeColumnsHeader","makeRowsHeader","makeRowsBody","makeRowsFooter","makeCellsHeader","unmakeCellsHeader","mergeCells","unmergeCells","pasteCells","pasteColsBefore","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnsType","getCellsType","getRowsType","fireNewRow","fireNewCell","fireTableModified","fireTableSelectionChange","fireTableSelectionClear","styleModified","structureModified","styleAndStructureModified","TableActions","cellSelectionHandler","isTableBody","lastRowGuard","lastColumnGuard","colMutationOp","getTableSectionType","setSelectionFromAction","des","guard","noEvents","deleteRow","deleteColumn","insertRowsBefore$1","insertRowsAfter$1","insertColumnsBefore$1","insertColumnsAfter$1","mergeCells$1","unmergeCells$1","pasteColsBefore$1","pasteColsAfter$1","pasteRowsBefore$1","pasteRowsAfter$1","pasteCells$1","makeCellsHeader$1","unmakeCellsHeader$1","makeColumnsHeader$1","unmakeColumnsHeader$1","makeRowsHeader$1","makeRowsBody$1","makeRowsFooter$1","constrainSpan","currentColspan","isColInRange","generateColGroup","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateRows","cellsToCopy","copiedCells","fakeTR","copyCols","fakeColGroups","fakeRows","copyRows","slicedGrid","filteredGrid","slicedDetails","validateFor","rawAmount","Size","redistributeToPercent","pc","redistributeToPx","newTotalWidth","redistributeEmpty","newWidthType","pixels","redistributeValues","_pc","redistribute$1","newType","floats","roundDown","floored","redistributeToW","redistributeToColumns","redistributeToH","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","nuWidths","totalHeight","oldHeights","nuHeights","isPercentSizing","isPixelSizing","isNoneSizing","cleanupLegacyAttributes","convertToPercentSizeWidth","convertToPixelSizeWidth","convertToPixelSizeHeight","convertToNoneSizeWidth","rowElements","DefaultRenderOptions","tableHeaderCell","tableCell","tableColumn","createRow","createGroupRow","createRows","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","thead","theadRows","tbody","tbodyRows","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","colHeaders","insertTable","checkInput","headerRows","headerColumns","tableTypeBase","tableTypeRow","tableTypeColumn","setData","fakeClipboardItem","clearData","setRows","rowsOpt","clearRows","getRows","setColumns","columnsOpt","clearColumns","getColumns","getSelectionStartCellOrCaption","getSelectionStartCell","eraseTable","cellOrCaption","setSizingMode","sizing","getTableFromCell","performActionOnSelection","toggleTableClass","toggleTableCellClass","formatterAction","toggleCaption","postExecute","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","actOnType","getFormatName","validArgs","registerQueryCommands","lookupOnSelection","Response","selectNodeContents","selectNodeContentsUsing","Situs","convertToRange","makeSitus","sync","selectRange","cellSel","newSels","backtrack","_direction","sidestep","advance","successors","succ","Walkers","hone","isLeaf","seekLeft$1","seekRight$1","seekLeft","seekRight","beforeBounds","afterBounds","isRow","BeforeAfter","beforeOffset","afterOffset","afterCell","beforeCell","_sharedRow","onSuccess","onFailedUp","onFailedDown","inParent","indexInParent","gatherer","cand","gather","handleBr","handleParent","adjacent","tryBr","analysis","_message","getBottom","getPartialBox","toCaret","getElemBox","getBoxAt","getEntireBox","JUMP_SIZE","NUM_RETRIES","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","upMovement","higherCaret","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","guess","newCaret","checkScroll","adjusted","retry","moved","Retries","MAX_RETRIES","findSpot","brNeighbour","tryCursor","situs","tryAgain","tryAt","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","findCell","isInEditableContext","MouseSelection","clearstate","singleCell","isNonEditableCell","isCellClosestContentEditable","up","isKey","keycode","isUp","isDown","isNavigation","by","doSetNativeRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setExact","setRelative","setToElement","selectNodeContents$1","WindowBridge","exactAdt","rc","mouse","isEditableNode","isEditableSelection","keyboard","clearToNavigate","realEvent","update$1","removeClasses","SelectionAnnotation","addSelectionClass","removeSelectionClasses","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","clearBeforeUpdate","onMultiple","onSingle","Selections","lazyRoot","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","upOrLeftCells","downOrRightCells","hasInternalTarget","TableCellSelectionHandler","cellSelection","cellsDom","otherCellsDom","cellArr","syncSelection","mouseHandlers","keyHandlers","handleResponse","wrappedEvent","isLeftMouse","isLeftButtonPressed","dragStart","mouseDown","mouseOver","mouseUp","doubleTap","lastTarget","lastTimeStamp","lT","lTS","Event","typeDefs","reqMessage","unsuppMessage","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","DragMode","DragSink","DragApi","InDrag","onEvent","NoDrag","Movement","noDragState","inDragState","mutation","throttledDrop","runIfActive","namespace","dashNamespace","Blocker","MouseDrag","mdown","mup","mmove","mout","Mutation","BarMutation","bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","resizableRows","resizableColumns","resizableCols","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","warhouse","resizableRowBars","resizableRowPositions","_pos","barIndex","resizableColBars","resizableColPositions","bars","isRowBar","isColBar","resizeBarDragging","BarManager","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","oldX","findClosestEditableTable","destroy$1","tbl","TableResize","lazySizing","hdirection","vdirection","ResizeWire","chrome","dragContainer","createContainer","getInlineResizeWire","isSplitUiMode$1","barResizerPrefix","syncTableCellPixels","computedWidth","isCornerResize","getCornerLocation","TableResizeHandler","tableResize","resizeWire","startRawW","startRawH","lazyResizingBehaviour","getNumColumns","getNumRows","afterCornerResize","isRightEdgeResize","isNorthEdgeResize","percentW","targetPercentW","sz","rawWire","rawTable","showResizeBars","hideResizeBars","setupTable","DomModel","applyListFormat","listName","getNumberStyles","getBulletStyles","isCustomList","isChildOfBody","regex","isListNode","isTableCellNode","inList","getSelectedStyleType","isWithinNonEditable","setNodeChangeHandler","nodeChangeHandler","initialNode","styleValueToText","updateButtonState","addSplitButton","listStyleTypeAliases","stylesContainsAliasMap","alias","iconStyle","listStyle","addButton","addControl","getAutoLinkPattern","getDefaultLinkTarget","getDefaultLinkProtocol","allowUnsafeLinkTarget","isTextNode","isBracketOrSpace","hasProtocol","isPunctuation","findChar","tempOffset","parseCurrentLine","autoLinkPattern","startSpot","convertToLink","defaultLinkTarget","handleSpacebar","handleBracket","groupBy","wasType","isTextNode$1","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isVoid","keepBookmarks","shouldIndentOnTab","contentNode","blockAttrs","hasContentNode","splitList","removeAndKeepBookmarks","bookmarks","isDescriptionDetail","isDescriptionTerm","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","getNormalizedPoint","outRng","rangeStart","rangeEnd","listNames","listSelector","getParentList","getClosestListHost","isParentListSelected","findSubLists","getSelectedSubLists","findParentListItemsNodes","listItemsElms","parentLi","getSelectedListItems","getSelectedDlItems","getClosestEditingHost","parentTableCell","isListHost","isNotForcedRootBlock","isListInsideAnLiWithFirstAndLastNotListElement","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getParentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","listRoots","selectionIsWithinNonEditableList","fireListEvent","hasFirstChildList","hasLastChildList","isEntryList","isEntryComment","isEntryFragment","isIndented","cloneItemContent","createEntry","depth","joinSegment","joinSegments","segments","appendSegments","head$1","createSegment","listType","createSegments","populateSegments","normalizeSegment","appendItem","writeShallow","cast","newCast","writeDeep","composeList","firstCommentEntryOpt","firstCommentEntry","fistCast","indentEntry","cloneListProperties","cleanListProperties","closestSiblingEntry","normalizeEntries","matchingEntry","parseSingleItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","parseItem","parsedSiblings","liChild","newDepth","parseLists","initialDepth","outdentedComposer","normalizedEntries","listItemAttrs","indentedComposer","composeEntries","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","selectionIndentation","isHandled","handleIndentation","indentListSelection","outdentListSelection","flattenListSelection","createBookmark","setupEndPoint","offsetNode","listToggleActionFromListName","updateListStyle","updateListAttrs","updateListWithDetails","getEndPointNode","findBlockAncestor","findBetterContainer","getSelectedTextBlocks","hasCompatibleStyle","sib","sibStyle","detailStyle","getRootSearchStart","applyList","listItemName","selectedTextBlocks","listBlock","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","liSibling","updateList$1","newList","updateCustomList","toggleMultipleLists","parentIsList","hasListStyleDetail","allLists","toggleSingleList","toggleList","selectedSubLists","normalizeList","normalizeLists","findNextCaretContainer","nonEmptyBlocks","hasOnlyOneBlockChild","isUnwrappable","unwrapSingleBlockChild","moveChildren","mergeLiElements","listNode","ul","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","otherLi","willMergeParentIntoChild","commonAncestorParent","removeBlock","backspaceDeleteIntoListCaret","nextCaretContainer","findValidElement","findRoot","otherLiCell","caretCell","hasListSelection","shouldFireInput","inputHandler","updateList","parseAlphabeticBase26","charValue","composeAlphabeticBase26","quotient","isUppercase","isLowercase","isNumeric","deduceListType","parseStartValue","parseDetail","currentList","queryListCommandState","registerDialog","nodeBuffer","wrapInvalidChildren","insertListItem","reducer","restBuffer","setupTabKey","setupToggleButtonHandler","toggleButtonHandler","exec","setupMenuButtonHandler","listProperties","assumeExternalTargets","hasContextToolbar","getLinkList","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","useQuickLink","attributesPostProcess","isLink","getHref","collectNodesInRange","applyRelTargetRules","isUnsafe","addTargetRules","removeTargetRules","newRels","trimCaretContainers","getAnchorElement","getLinksInSelection","isImageFigure","isInAnchor","getAnchorText","anchorElm","getLinks$1","hasLinks","hasLinksInSelection","isOnlyTextSelected","inlineTextElements","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","updateLink","linkImageFigure","linkDomMutation","attachState","attributesPostProcess$1","unlinkSelection","startAnchorElm","endAnchorElm","unlinkDomMutation","unlinkImageFigure","unwrapOptions","sanitizeData","uriOptions","sanitizedData","unlink","fig","sanitizeList","sanitizeWith","extracter","ListOptions","isListGroup","findTextByValue","catalog","persistentText","hasPersistentText","findCatalog","catalogs","DialogChanges","linkCatalog","persistentData","getTitleFromUrlChange","getTextFromUrlChange","onUrlChange","onCatalogChange","delayedConfirm","tryEmailTransform","oldData","tryProtocolTransform","defaultLinkProtocol","DialogConfirms","AnchorListOptions","anchorNodes","anchors","ClassListOptions","parseJson","LinkListOptions","extractor","linkList","optItems","RelOptions","isTargetBlank","enforceSafe","safeRelExtractor","fallbacks","TargetOptions","nonEmptyAttr","extractFromAnchor","linkClass","DialogInfo","linkNode","links","handleSubmit","getChangedValue","changedData","pData","collectData","getInitialData","defaultTarget","makeDialog","urlInput","titleText","dialogDelta","appendClickRemove","openLink","hasOnlyAltModifier","gotoLink","isSelectionOnImageWithEmbeddedLink","getLinkFromElement","getLinkInSelection","getLinkFromSelection","selectedLink","getSelectedLink","gotoSelectedLink","toggler","toggleLinkState","toggleLinkMenuState","toggleRequiresLinkState","hasLinks$1","updateEnabled","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","getLinkText","onlyText","fireInsertCustomChar","insertChar","evtChr","charMapProcessor","getCharMap$1","getCharMapAppend","UserDefined","getDefaultCharMap","charmapFilter","charmap","getCharsFromOption","extendCharMap","userCharMap","userCharMapAppend","userDefinedGroup","cg","getCharMap","fromCodePoint","charMatches","charCode","lowerCasePattern","patternName","charMap","makeGroupItems","makeTabs","charGroup","makePanel","makeTabPanel","currentTab","scanAndSet","dialogApi","updateFilter","bridgeSpec","changeData","_maxResults","_reject","autocompleteApi","onSetupEditable","nodeChanged","getPreventClicksOnLinksScript","isMacOSOrIOS","getPreviewHtml","headHtml","cors","dirAttr","allowHtmlInNamedAnchor","namedAnchorSelector","isEmptyString","getIdFromAnchor","isEmptyNamedAnchor","removeEmptyNamedAnchorsInSelection","isValidId","getNamedAnchor","getId","createAnchor","updateAnchor","anchorElement","insertAnchor","newId","currentId","isNamedAnchorNode","isEmptyNamedAnchorNode","unbindSelectorChanged","unbindEditableChanged","punctuation$1","punctuation","compareDocumentPosition","documentPositionPreceding","isSimpleBoundary","isContentEditableTrueInCef","nuSection","walkerFn","skipStart","collectTextToBoundary","finishSection","collectRangeSections","ceTrueNode","fromRng","fromNode","fromNodes","matchedText","matchStart","matchFinish","nodePositions","matchIdx","replacementNode","findAndMark","textSections","findAndMarkInSelection","getElmIndex","markAllMatches","currentSearchState","findSpansByIndex","spans","searchState","testIndex","escapeSearchText","wholeWord","wordRegex","matchCase","escapedText","isForwardSelection","isMatchSpan","matchIndex","currentIndex","currentMatchIndex","nextIndex","keepEditorSelection","hasNext","hasPrev","currentState","selectedText","updateButtonStates","updateSearchState","disableAll","toggleNotFoundAlert","getDialogSpec","focusButtonIfRequired","doFind","getPanelItems","showNoMatchesAlertBanner","fireVisualBlocks","toggleVisualBlocks","enabledState","isEnabledByDefault","toggleActiveState","editorEventCallback","editorContent","fullscreenState","siblings$2","fireFullscreenStateChanged","getFullscreenNative","getFullscreenRoot","getFullscreenElement","getFullscreenchangeEventName","requestFullscreen","sugarElem","exitFullscreen","sugarDoc","isFullscreenElement","siblings$1","siblingStyles","ancestorPosition","ancestorStyles","bgFallback","matchColor","clobberStyles","gatherSiblings","clobber","clobberStyle","backup","bgColor","restoreStyles","clobberedEls","getScrollPos","setScrollPos","viewportUpdate","resizeBinder","scrollBinder","refreshScroll","refreshVisualViewport","editorContainerS","sinkContainerS","fullscreenRoot","fullscreenInfo","editorContainerStyle","iframeStyle","handleClasses","fullscreenChangeHandler","_evt","newFullScreenInfo","getAudioTemplateCallback","getVideoTemplateCallback","getIframeTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","trimPx","getEphoxEmbedData","htmlToData","mimes","fileEnd","Parser","addPx","updateEphoxEmbed","sources","updateAll","numSources","sourceCount","urlPatterns","getProtocol","protocolMatches","getUrl","protocol","newUrl","matchPattern","iframeTemplateCallback","allowFullscreen","getFlashHtml","getAudioHtml","audioTemplateCallback","getVideoHtml","videoTemplateCallback","dataToHtml","dataIn","isMediaElement","previewObj","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","dims","errorMessage","getEditorData","snippet","isEmbedIframe","addEmbedHtml","selectPlaceholder","beforeObjects","afterObjects","handleInsert","mediaDataType","shouldInsertAsNewIframe","submitForm","editorData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","sizeInput","generalTab","embedTab","advancedFormItems","advancedTab","tabs","showDialog$1","isLiveEmbedNode","dimension","setDimensions","previewNode","useDefaults","fallbackHeight","defaultHeight","appendNodeContent","createPlaceholderNode","placeHolder","retainAttributesAndInnerHtml","createPreviewNode","previewWrapper","sanitizedHtml","shimNode","sourceNode","innerHtml","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","parseAndSanitize","getEditorOption","sanitize","boolAttrs","realElmName","realElm","unbindEditable","getMinHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","toggleScrolling","parseCssValueToInt","shouldScrollIntoView","setContentEvent","oldSize","getExtraMarginBottom","resizeBottomMargin","resizeHeight","marginTop","marginBottom","contentHeight","containerHeight","contentAreaHeight","deltaSize","overflowPadding","tinymceOptions","customContentCss","contentUiSkinCss","contentCss","tinyMceHTMLCleaner","resized"],"mappings":"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CACE,KACA,WACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,qBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,YACD,EACD,CACE,MACA,eACD,EACD,CACE,MACA,gBACD,EACD,CACE,MACA,yCACD,EACD,CACE,MACA,gCACd,CACA,CACS,EACD,CACE,KAAM,OACN,WAAY,CACV,CACE,IACA,gBACD,EACD,CACE,IACA,iBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,gBACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,YACD,EACD,CACE,KACA,QACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,gBACD,EACD,CACE,KACA,kBACD,EACD,CACE,IACA,cACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,mBACd,CACA,CACS,EACD,CACE,KAAM,aACN,WAAY,CACV,CACE,KACA,2CACD,EACD,CACE,KACA,4CACD,EACD,CACE,IACA,yBACD,EACD,CACE,IACA,0BACD,EACD,CACE,KACA,4BACD,EACD,CACE,KACA,6BACD,EACD,CACE,KACA,4BACD,EACD,CACE,KACA,6BACD,EACD,CACE,KACA,6BACD,EACD,CACE,KACA,6BACD,EACD,CACE,GACA,gBACD,EACD,CACE,GACA,mBACD,EACD,CACE,KACA,uBACD,EACD,CACE,KACA,0BACD,EACD,CACE,KACA,SACD,EACD,CACE,KACA,SACD,EACD,CACE,IACA,QACD,EACD,CACE,KACA,UACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,2BACD,EACD,CACE,IACA,sBACD,EACD,CACE,IACA,mBACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,aACD,EACD,CACE,KACA,YACD,EACD,CACE,IACA,iBACD,EACD,CACE,IACA,eACD,EACD,CACE,KACA,gBACD,EACD,CACE,IACA,qBACD,EACD,CACE,IACA,iBACD,EACD,CACE,IACA,iBACD,EACD,CACE,IACA,mBACD,EACD,CACE,IACA,sBACD,EACD,CACE,IACA,mBACD,EACD,CACE,IACA,yBACd,CACA,CACS,EACD,CACE,KAAM,eACN,WAAY,CACV,CACE,IACA,mBACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,gBACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,wBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,oBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,YACD,EACD,CACE,IACA,UACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,OACD,EACD,CACE,KACA,sBACD,EACD,CACE,KACA,SACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,qBACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,OACd,CACA,CACS,EACD,CACE,KAAM,iBACN,WAAY,CACV,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,UACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,QACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,QACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACd,CACA,CACS,EACD,CACE,KAAM,UACN,WAAY,CACV,CACE,KACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,KACA,kBACD,EACD,CACE,IACA,uBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,gBACd,CACA,CACS,EACD,CACE,KAAM,SACN,WAAY,CACV,CACE,KACA,iBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,wBACD,EACD,CACE,KACA,sBACD,EACD,CACE,KACA,yBACD,EACD,CACE,KACA,wBACD,EACD,CACE,KACA,yBACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,uBACD,EACD,CACE,KACA,yBACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,6BACD,EACD,CACE,KACA,8BACD,EACD,CACE,KACA,SACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,oBACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,uBACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,oBACD,EACD,CACE,KACA,oBACd,CACA,CACA,CACO,EAEGC,EAAgBC,IACblkD,GAAO,KAAKkkD,GAASlwW,IACnBX,GAAQW,EAAI,GAAKA,GAAK,SAAW,CACzC,EAEGmwW,GAAqB/6N,IACrB/1I,GAAQ+1I,EAAW,EACd66N,EAAc76N,EAAW,EAE9B,OAAOA,IAAgB,WAClBA,GAAa,EAEf,CAAE,EAELg7N,GAAgB,CAAChwU,GAAQ8vU,KAAY,CACzC,MAAMG,GAAcR,GAAazvU,EAAM,EACnCiwU,KACFH,GAAU,CAAC,CACP,KAAMH,GACN,WAAYI,GAAmBE,EAAW,CACtD,CAAW,GAEL,MAAMC,GAAoBR,GAAiB1vU,EAAM,EACjD,GAAIkwU,GAAmB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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]}