{"version":3,"file":"plugin-CM8VlnwY.js","sources":["../../../node_modules/tinymce/tinymce.js","../../../node_modules/tinymce/models/dom/model.js","../../../node_modules/tinymce/icons/default/icons.js","../../../node_modules/tinymce/skins/content/default/content.js","../../../node_modules/tinymce/themes/silver/theme.js","../../../node_modules/tinymce/plugins/autoresize/plugin.js","../../../node_modules/tinymce/plugins/wordcount/plugin.js"],"sourcesContent":["/**\n * TinyMCE version 7.7.1 (2025-03-05)\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()) {\n return Optional.none();\n }\n editor.execCommand('mceTableInsertRowAfter');\n return tabForward(editor, isRoot, current);\n });\n };\n const tabForward = (editor, isRoot, cell) => tabGo(editor, isRoot, next(cell, isEditable$2));\n const tabBackward = (editor, isRoot, cell) => tabGo(editor, isRoot, prev(cell, isEditable$2));\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.1',\n releaseDate: '2025-03-05',\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","/**\n * TinyMCE version 7.7.1 (2025-03-05)\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","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});","tinymce.Resource.add('content/default/content.css', `body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\"0\"]):not([style*=border-width]) td,table[border]:not([border=\"0\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\"0\"]):not([style*=border-style]) td,table[border]:not([border=\"0\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\"0\"]):not([style*=border-color]) td,table[border]:not([border=\"0\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}`)","/**\n * TinyMCE version 7.7.1 (2025-03-05)\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\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, focusfallbackElement) => {\n const valueState = value$4();\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 if (!valueState.isSet()) {\n valueState.set(Representing.getValue(input));\n }\n emit(input, sandboxClose());\n },\n back: () => {\n if (!valueState.isSet()) {\n valueState.set(Representing.getValue(input));\n }\n emit(input, backSlideEvent);\n },\n getValue: () => {\n return valueState.get().getOrThunk(() => Representing.getValue(input));\n },\n setValue: value => {\n if (valueState.isSet()) {\n valueState.set(value);\n } else {\n Representing.setValue(input, value);\n }\n }\n };\n };\n\n const runOnExecute = (memInput, original) => run$1(internalToolbarButtonExecute, (comp, se) => {\n const input = memInput.get(comp);\n const formApi = getFormApi(input, comp.element);\n original.onAction(formApi, se.event.buttonApi);\n });\n const renderContextButton = (memInput, button, providers) => {\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)]);\n };\n const renderContextToggleButton = (memInput, button, providers) => {\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)]);\n };\n const isToggleButton = button => button.type === 'contextformtogglebutton';\n const generateOne = (memInput, button, providersBackstage) => {\n if (isToggleButton(button)) {\n return renderContextToggleButton(memInput, button, providersBackstage);\n } else {\n return renderContextButton(memInput, button, providersBackstage);\n }\n };\n const generate = (memInput, buttons, providersBackstage) => {\n const mementos = map$2(buttons, button => record(generateOne(memInput, button, providersBackstage)));\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) => {\n const {width, height} = ctx.initValue();\n let converter = noSizeConversion;\n const enabled = true;\n const ratioEvent = generate$6('ratio-event');\n const getApi = getFormApi;\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 onControlDetached({ getApi }, editorOffCell)\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(getFormApi(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) => {\n const editorOffCell = Cell(noop);\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: getFormApi,\n onBeforeSetup: Keying.focusIn\n }, editorOffCell),\n onControlDetached({ getApi: getFormApi }, editorOffCell),\n run$1(input(), comp => {\n ctx.onInput(getFormApi(comp));\n })\n ])\n ])\n });\n return createContextFormFieldFromParts(pLabel, pField, providers);\n };\n\n const renderContextFormTextInput = (ctx, providers, onEnter) => {\n const editorOffCell = Cell(noop);\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), closestFocussable => getFormApi(comp, closestFocussable));\n },\n onBeforeSetup: Keying.focusIn\n }, editorOffCell),\n onControlDetached({ getApi: getFormApi }, editorOffCell),\n run$1(input(), comp => {\n ctx.onInput(getFormApi(comp));\n })\n ])\n ])\n });\n return createContextFormFieldFromParts(pLabel, pField, providers);\n };\n\n const buildInitGroup = (f, ctx, providers) => {\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));\n const commandParts = partition$3(ctx.commands, command => command.align === 'start');\n const startCommands = generate(memInput, commandParts.pass, providers);\n const endCommands = generate(memInput, commandParts.fail, providers);\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","/**\n * TinyMCE version 7.7.1 (2025-03-05)\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","/**\n * TinyMCE version 7.7.1 (2025-03-05)\n */\n\n(function () {\n 'use strict';\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const eq = t => a => t === a;\n const isNull = eq(null);\n\n const identity = x => {\n return x;\n };\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\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 const regExps = {\n aletter: '[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05F3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24B6-\\u24E9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]',\n midnumlet: `[-'\\\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]`,\n midletter: '[:\\xB7\\xB7\\u05F4\\u2027\\uFE13\\uFE55\\uFF1A]',\n midnum: '[\\xB1+*/,;;\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B]',\n numeric: '[0-9\\u0660-\\u0669\\u066B\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]',\n cr: '\\\\r',\n lf: '\\\\n',\n newline: '[\\x0B\\f\\x85\\u2028\\u2029]',\n extend: '[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\uA672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]',\n format: '[\\xAD\\u0600-\\u0603\\u06DD\\u070F\\u17b4\\u17b5\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF\\uFFF9-\\uFFFB]',\n katakana: '[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32D0-\\u32FE\\u3300-\\u3357\\uff66-\\uff9d]',\n extendnumlet: '[=_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f\\u2200-\\u22FF<>]',\n punctuation: punctuationStr\n };\n const characterIndices = {\n ALETTER: 0,\n MIDNUMLET: 1,\n MIDLETTER: 2,\n MIDNUM: 3,\n NUMERIC: 4,\n CR: 5,\n LF: 6,\n NEWLINE: 7,\n EXTEND: 8,\n FORMAT: 9,\n KATAKANA: 10,\n EXTENDNUMLET: 11,\n AT: 12,\n OTHER: 13\n };\n const SETS$1 = [\n new RegExp(regExps.aletter),\n new RegExp(regExps.midnumlet),\n new RegExp(regExps.midletter),\n new RegExp(regExps.midnum),\n new RegExp(regExps.numeric),\n new RegExp(regExps.cr),\n new RegExp(regExps.lf),\n new RegExp(regExps.newline),\n new RegExp(regExps.extend),\n new RegExp(regExps.format),\n new RegExp(regExps.katakana),\n new RegExp(regExps.extendnumlet),\n new RegExp('@')\n ];\n const EMPTY_STRING$1 = '';\n const PUNCTUATION$1 = new RegExp('^' + regExps.punctuation + '$');\n const WHITESPACE$1 = /^\\s+$/;\n\n const SETS = SETS$1;\n const OTHER = characterIndices.OTHER;\n const getType = char => {\n let type = OTHER;\n const setsLength = SETS.length;\n for (let j = 0; j < setsLength; ++j) {\n const set = SETS[j];\n if (set && set.test(char)) {\n type = j;\n break;\n }\n }\n return type;\n };\n const memoize = func => {\n const cache = {};\n return char => {\n if (cache[char]) {\n return cache[char];\n } else {\n const result = func(char);\n cache[char] = result;\n return result;\n }\n };\n };\n const classify = characters => {\n const memoized = memoize(getType);\n return map(characters, memoized);\n };\n\n const isWordBoundary = (map, index) => {\n const type = map[index];\n const nextType = map[index + 1];\n if (index < 0 || index > map.length - 1 && index !== 0) {\n return false;\n }\n if (type === characterIndices.ALETTER && nextType === characterIndices.ALETTER) {\n return false;\n }\n const nextNextType = map[index + 2];\n if (type === characterIndices.ALETTER && (nextType === characterIndices.MIDLETTER || nextType === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextNextType === characterIndices.ALETTER) {\n return false;\n }\n const prevType = map[index - 1];\n if ((type === characterIndices.MIDLETTER || type === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextType === characterIndices.ALETTER && prevType === characterIndices.ALETTER) {\n return false;\n }\n if ((type === characterIndices.NUMERIC || type === characterIndices.ALETTER) && (nextType === characterIndices.NUMERIC || nextType === characterIndices.ALETTER)) {\n return false;\n }\n if ((type === characterIndices.MIDNUM || type === characterIndices.MIDNUMLET) && nextType === characterIndices.NUMERIC && prevType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.NUMERIC && (nextType === characterIndices.MIDNUM || nextType === characterIndices.MIDNUMLET) && nextNextType === characterIndices.NUMERIC) {\n return false;\n }\n if ((type === characterIndices.EXTEND || type === characterIndices.FORMAT) && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA || nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT) || (nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT && (nextNextType === characterIndices.ALETTER || nextNextType === characterIndices.NUMERIC || nextNextType === characterIndices.KATAKANA || nextNextType === characterIndices.EXTEND || nextNextType === characterIndices.FORMAT)) && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTEND || type === characterIndices.FORMAT)) {\n return false;\n }\n if (type === characterIndices.CR && nextType === characterIndices.LF) {\n return false;\n }\n if (type === characterIndices.NEWLINE || type === characterIndices.CR || type === characterIndices.LF) {\n return true;\n }\n if (nextType === characterIndices.NEWLINE || nextType === characterIndices.CR || nextType === characterIndices.LF) {\n return true;\n }\n if (type === characterIndices.KATAKANA && nextType === characterIndices.KATAKANA) {\n return false;\n }\n if (nextType === characterIndices.EXTENDNUMLET && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTENDNUMLET)) {\n return false;\n }\n if (type === characterIndices.EXTENDNUMLET && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA)) {\n return false;\n }\n if (type === characterIndices.AT) {\n return false;\n }\n return true;\n };\n\n const EMPTY_STRING = EMPTY_STRING$1;\n const WHITESPACE = WHITESPACE$1;\n const PUNCTUATION = PUNCTUATION$1;\n const isProtocol = str => str === 'http' || str === 'https';\n const findWordEnd = (characters, startIndex) => {\n let i;\n for (i = startIndex; i < characters.length; i++) {\n if (WHITESPACE.test(characters[i])) {\n break;\n }\n }\n return i;\n };\n const findUrlEnd = (characters, startIndex) => {\n const endIndex = findWordEnd(characters, startIndex + 1);\n const peakedWord = characters.slice(startIndex + 1, endIndex).join(EMPTY_STRING);\n return peakedWord.substr(0, 3) === '://' ? endIndex : startIndex;\n };\n const findWordsWithIndices = (chars, sChars, characterMap, options) => {\n const words = [];\n const indices = [];\n let word = [];\n for (let i = 0; i < characterMap.length; ++i) {\n word.push(chars[i]);\n if (isWordBoundary(characterMap, i)) {\n const ch = sChars[i];\n if ((options.includeWhitespace || !WHITESPACE.test(ch)) && (options.includePunctuation || !PUNCTUATION.test(ch))) {\n const startOfWord = i - word.length + 1;\n const endOfWord = i + 1;\n const str = sChars.slice(startOfWord, endOfWord).join(EMPTY_STRING);\n if (isProtocol(str)) {\n const endOfUrl = findUrlEnd(sChars, i);\n const url = chars.slice(endOfWord, endOfUrl);\n Array.prototype.push.apply(word, url);\n i = endOfUrl;\n }\n if (sChars[i + 1] === '.' && /^([a-zA-Z]\\.)+$/.test(str + '.')) {\n word.push(chars[i + 1]);\n indices.push({\n start: startOfWord,\n end: endOfWord + 1\n });\n } else {\n indices.push({\n start: startOfWord,\n end: endOfWord\n });\n }\n words.push(word);\n }\n word = [];\n }\n }\n return {\n words,\n indices\n };\n };\n const getDefaultOptions = () => ({\n includeWhitespace: false,\n includePunctuation: false\n });\n const getWordsWithIndices = (chars, extract, options) => {\n options = {\n ...getDefaultOptions(),\n ...options\n };\n const extractedChars = map(chars, extract);\n const characterMap = classify(extractedChars);\n return findWordsWithIndices(chars, extractedChars, characterMap, options);\n };\n const getWords$1 = (chars, extract, options) => getWordsWithIndices(chars, extract, options).words;\n\n const getWords = getWords$1;\n\n const removeZwsp$1 = s => s.replace(/\\uFEFF/g, '');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n const getText = (node, schema) => {\n const blockElements = schema.getBlockElements();\n const voidElements = schema.getVoidElements();\n const isNewline = node => blockElements[node.nodeName] || voidElements[node.nodeName];\n const textBlocks = [];\n let txt = '';\n const treeWalker = new global$1(node, node);\n let tempNode;\n while (tempNode = treeWalker.next()) {\n if (tempNode.nodeType === 3) {\n txt += removeZwsp$1(tempNode.data);\n } else if (isNewline(tempNode) && txt.length) {\n textBlocks.push(txt);\n txt = '';\n }\n }\n if (txt.length) {\n textBlocks.push(txt);\n }\n return textBlocks;\n };\n\n const removeZwsp = text => text.replace(/\\u200B/g, '');\n const strLen = str => str.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n const countWords = (node, schema) => {\n const text = removeZwsp(getText(node, schema).join('\\n'));\n return getWords(text.split(''), identity).length;\n };\n const countCharacters = (node, schema) => {\n const text = getText(node, schema).join('');\n return strLen(text);\n };\n const countCharactersWithoutSpaces = (node, schema) => {\n const text = getText(node, schema).join('').replace(/\\s/g, '');\n return strLen(text);\n };\n\n const createBodyCounter = (editor, count) => () => count(editor.getBody(), editor.schema);\n const createSelectionCounter = (editor, count) => () => count(editor.selection.getRng().cloneContents(), editor.schema);\n const createBodyWordCounter = editor => createBodyCounter(editor, countWords);\n const get = editor => ({\n body: {\n getWordCount: createBodyWordCounter(editor),\n getCharacterCount: createBodyCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createBodyCounter(editor, countCharactersWithoutSpaces)\n },\n selection: {\n getWordCount: createSelectionCounter(editor, countWords),\n getCharacterCount: createSelectionCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createSelectionCounter(editor, countCharactersWithoutSpaces)\n },\n getCount: createBodyWordCounter(editor)\n });\n\n const open = (editor, api) => {\n editor.windowManager.open({\n title: 'Word Count',\n body: {\n type: 'panel',\n items: [{\n type: 'table',\n header: [\n 'Count',\n 'Document',\n 'Selection'\n ],\n cells: [\n [\n 'Words',\n String(api.body.getWordCount()),\n String(api.selection.getWordCount())\n ],\n [\n 'Characters (no spaces)',\n String(api.body.getCharacterCountWithoutSpaces()),\n String(api.selection.getCharacterCountWithoutSpaces())\n ],\n [\n 'Characters',\n String(api.body.getCharacterCount()),\n String(api.selection.getCharacterCount())\n ]\n ]\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }]\n });\n };\n\n const register$1 = (editor, api) => {\n editor.addCommand('mceWordCount', () => open(editor, api));\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 var global = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n const fireWordCountUpdate = (editor, api) => {\n editor.dispatch('wordCountUpdate', {\n wordCount: {\n words: api.body.getWordCount(),\n characters: api.body.getCharacterCount(),\n charactersWithoutSpaces: api.body.getCharacterCountWithoutSpaces()\n }\n });\n };\n\n const updateCount = (editor, api) => {\n fireWordCountUpdate(editor, api);\n };\n const setup = (editor, api, delay) => {\n const debouncedUpdate = first(() => updateCount(editor, api), delay);\n editor.on('init', () => {\n updateCount(editor, api);\n global.setEditorTimeout(editor, () => {\n editor.on('SetContent BeforeAddUndo Undo Redo ViewUpdate keyup', debouncedUpdate.throttle);\n }, 0);\n editor.on('remove', debouncedUpdate.cancel);\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mceWordCount');\n editor.ui.registry.addButton('wordcount', {\n tooltip: 'Word count',\n icon: 'character-count',\n onAction,\n context: 'any'\n });\n editor.ui.registry.addMenuItem('wordcount', {\n text: 'Word count',\n icon: 'character-count',\n onAction,\n context: 'any'\n });\n };\n\n var Plugin = (delay = 300) => {\n global$2.add('wordcount', editor => {\n const api = get(editor);\n register$1(editor, api);\n register(editor);\n setup(editor, api, delay);\n return api;\n });\n };\n\n Plugin();\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","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","tabForward","tabBackward","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","j","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","global$1","range$1","get$d","get$c","setOptions","all$1","owner","children$2","child$2","after$5","appendAt","copy$2","cloneChildren","mutate$1","validSectionList","isValidSection","grid","columns","address","column","detail","detailnew","isNew","extended","isLocked","rowdetail","section","rowdetailnew","elementnew","rowcells","startRow","startCol","finishRow","finishCol","columnext","colgroup","body$1","getBody$1","ancestors$4","ancestors$3","bindFrom","toFloat","getRaw$2","copy$1","source","sourceDom","targetDom","getAttrValue","hasColspan","cellOrCol","hasRowspan","getCssValue","minWidth","minHeight","cells$1","columns$1","columnGroups","columnGroup","rows$1","fromRowsOrColGroups","getParentSection","fromTable$1","fromPastedRows","detect$5","detect$2","Dimension","toNumber","px","calcContentBoxSize","upper","lower","paddingUpper","paddingLower","borderUpper","borderLower","getCalculatedWidth","boxSizing","getHeight$1","getInnerWidth","api$2","getOuter$2","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","columnIndex","colIndex","generate$2","list","access","lockedColumns","maxRows","maxColumns","rowCount","colgroupRows","currentRow","rowCell","occupiedColumnPosition","occupiedRowPosition","rowPosition","columnPosition","newpos","colgroups","Warehouse","isValidCell","cols","rowsArr","col","decide","getBlock","getFallback","deduce","aa","extras","onDirection","isLtr","getDirection","getOuter$1","getRuntime","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop$1","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","lines","cellOption","lastLine","negate","step","optElements","units","decimalDigits","exponentPart","dot","float","isUnit","accepted","check","parse","unitRaw","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","isCol$2","isRow$2","getPercentSize","outerGetter","innerGetter","relativeParent","setPixelWidth","setPercentageWidth","setHeight","removeHeight","getHeightValue","convert","getter","setter","newSize","total","normalizePixelSize","getTotalHeight","getRawWidth$1","getRawHeight$1","getPercentageWidth","getPixelWidth$1","getHeight","getGenericWidth","setGenericWidth","getPixelTableWidth","getPixelTableHeight","getPercentTableWidth","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","percentageBasedSizeRegex","isCol$1","getRawW","getRawH","justCols","isValidColumn","supportsColWidths","getDimension","cellOpt","backups","getWidthFrom","columnCells","colFilter","getDeduced","deduced","getRawWidths","getPercentageWidths","tableSize","cellWidth","getPixelWidths","getHeightFrom","rowCells","getPixelHeights","getRawHeights","widthLookup","noneSize","zero","percentageSize","getFloatWidth","_delta","currentWidth","change","newWidth","pixelSize","chooseSize","TableSize","statsStruct","minRow","minCol","maxRow","maxCol","allCells","findSelectedStats","house","isSelected","totalColumns","endRow","endCol","makeCell","seenSelected","rowIndex","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","attribute","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","fixedContainerSelector","fixedToolbarContainerTarget","fixedContainerTarget","useFixedContainer","getUiMode","isSplitUiMode","getBody","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","finishCell","startCoords","finishCoords","fc","getBox$1","moveBy$1","intercepts$1","parentCell","innerCell","isContainedBy","c1","c2","moveBy","deltaRow","deltaColumn","getWarehouse","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","getBox","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","other","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","lookupTable","rootTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve$1","sels","getLast","boxes","lastSelectedSelector","getEdges","firstSelectedSelector","expandTo","identified","shiftSelection","retrieve","retrieveBox","edges","sectionSelector","firstAncestor","lastAncestor","fA","lA","unmergable","hasSpan","hasRowOrColSpan","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","forMenu","paste","clipboard","generators","pasteRows","_cell","getSelectionCellFallback","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","getCellsFromFakeSelection","extractSelected","serializeElements","replicaElements","actions","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","comp","subgrid","isColRow","toDetails","seen","updateSeen","toGrid","colgroupCols","rowDetail","fromWarehouse","toDetailList","findInWarehouse","extractCells","cell$1","lc","adjustment","postAction","genWrappers","behaviours","tableSection","newElements","tableSizing","resizing","onPaste","onPasteByEditor","onMergable","_warehouse","onUnmergable","onCells","onUnlockedCells","isUnlockedTableCell","allUnlocked","onUnlockedMergable","mergeable","onUnlockedUnmergable","merge$2","unmerge","currentCell","currentCellElm","isToReplace","uniqueCells","splitCols","prevCell","substitute","splitRows","rowPrevCells","sub","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","measureWidth","colLengthA","colLengthB","measureHeight","rowLengthA","rowLengthB","generateElements","generator","rowFill","exampleRow","colFill","newChildren","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","newRow","getElementFor","withinSpan","insertColumnAt","deleteColumnsAt","deleteRowsAt","notInStartRow","notInStartColumn","isDuplicatedCell","rowReplacerPredicate","targetRow","columnHeaders","_rowIndex","columnReplacePredicate","targetColumn","rowHeaders","_colIndex","determineScope","applyScope","isInHeader","getScope","rowScopeGenerator","columnScopeGenerator","replaceIn","replacer","genScope","shouldReplace","getColumnCells","getRowCells","replaceColumns","indexes","shouldReplaceCell","scopeGenerator","replaceRows","newGrid","replaceCells","targetCells","ColumnContext","neighbours","determine","resize","onOnly","onLeft","onMiddle","onRight","measures","recalculateWidthForCells","widths","recalculateWidthForColumns","groups","matchRowHeight","heights","sumUp","recalculate","recalculateAndApply","adjustWidth","clampedStep","deltas","newWidths","dx","adjustHeight","newHeights","dy","newRowSizes","adjustAndRedistributeWidths$1","_table","resizeBehaviour","tablePixelWidth","adjustWidthTo","_info","uniqueColumns","currentDetail","isCol","isColgroup","isRow$1","elementToData","modification","toData","nuCell","nuRow","recent","transform$1","makeNew","getScopeAttribute","Generators","getScopeProperty","stringAttributes","baseScope","scopes","blockList","isList$1","isEmptyTag$1","universe$1","advancedBr","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","outcome","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","otherCells","fireTableSelectionClear","styleModified","structureModified","styleAndStructureModified","TableActions","resizeHandler","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","adt$5","validateFor","rawAmount","Size","redistributeToPercent","pc","redistributeToPx","newTotalWidth","scale","redistributeEmpty","newWidthType","pixels","redistributeValues","_pc","redistribute$1","newType","floats","roundDown","floored","scan","redistributeToW","redistributeToColumns","redistributeToH","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","nuWidths","newHeight","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","numRows","tbodyRows","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","colHeaders","insertTable","checkInput","headerRows","headerColumns","global","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","_data","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","actOnType","getFormatName","validArgs","registerQueryCommands","lookupOnSelection","adt$4","cata$1","Response","selectNodeContents","selectNodeContentsUsing","toRect","getFirstRect$1","asLtrRange","Situs","convertToRange","makeSitus","sync","selectRange","cellSel","selected","newSels","backtrack","_direction","transition","sidestep","advance","successors","go","rules","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","tgt","analysis","_message","translate","xDelta","yDelta","getTop","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","ltr","rtl","by","makeRange","same","getNativeSelection","doSetNativeRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setExact","setRelative","firstRng","doGetExact","setToElement","selectNodeContents$1","getExact","getFirstRect","WindowBridge","exactAdt","rc","mouse","isEditableNode","isEditableSelection","keyboard","clearToNavigate","realEvent","update$1","attempts","external","add$1","removeClasses","SelectionAnnotation","addSelectionClass","removeSelectionClasses","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","clearBeforeUpdate","onMultiple","onSingle","none","multiple","single","Selections","lazyRoot","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","upOrLeftCells","downOrRightCells","fromRawEvent$1","hasInternalTarget","TableCellSelectionHandler","cellSelection","cellsDom","otherCellsDom","cellArr","syncSelection","mouseHandlers","keyHandlers","external$1","handleResponse","response","keyup","wrappedEvent","keydown","isLeftMouse","isLeftButtonPressed","dragStart","mouseDown","mouseOver","mouseUp","doubleTap","lastTarget","lastTimeStamp","lT","lTS","Event","create$1","typeDefs","reqMessage","unsuppMessage","unsupported","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","sorted","handleUnsupported","baseWith","req","invalidKeys","handleExact","exactly","DragMode","DragSink","DragApi","InDrag","onEvent","NoDrag","Movement","noDragState","inDragState","dragState","mutation","sink","throttledDrop","mousemove","off","runIfActive","namespace","dashNamespace","Blocker","MouseDrag","dragApi","blocker","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","refresh","bars","isRowBar","isColBar","resizeBarDragging","BarManager","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","newX","oldX","mousedown","findClosestEditableTable","mouseover","destroy$1","refresh$1","tbl","TableResize","lazySizing","hdirection","vdirection","manager","_event","generate","ResizeWire","chrome","dragContainer","createContainer","getInlineResizeWire","isSplitUiMode$1","editorBody","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","noarg","constant$1","range$2","chunk$1","partition$3","find$5","pure$2","get$i","find$4","get$h","sequence","mapFrom","addToEnd","ensureTrailing","fromHtml$2","path$1","getOrDie$1","name$3","all$3","owner$4","isInShadowRoot","set$9","get$g","set$8","get$f","isValidValue$1","get$e","setMax$1","inclusions","absMax","r$1","absolute$3","viewport$1","set$7","setMax","find$3","nu$d","unknown$3","nu$c","nu$b","capture$1","append$2","prepend$1","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","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","mouseout","mouseup","focusin","focusout","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","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","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","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","isPremade","getPremade","makeApi","generateFrom$1","validated","optBlobThunk","getBehaviours$3","bData","getData$2","byInnerKey","indexKey","chain","combine$2","baseMod","modsByBehaviour","behaviour","byAspect","combineObjects","combinedClasses","combinedAttributes","combinedStyles","sortKeys","keyName","order","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","extSpec","uids","isSketchSpec$1","userSpecWithUid","premade","queryElem","ariaId","isAriaPartOf","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","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","toBox","optBounds","translate$2","removeScroll","outerScroll","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","newY","fits","fittedBox","isPartlyVisible","maxWidth","elementBox","panelWidth","panelHeight","attemptBestFit","layout","attemptLayout","newReposition","newVisibleW","newVisibleH","newIsVisible","bestNext","timerAttr","isTransitioning$1","shouldApplyTransitionCss","lastPlacement","placer","hasChanges","intermediate","getTransitionDuration","times","duration","dur","setupTransitionListeners","transitionEnd","transitionCancel","isSourceTransition","pseudoElement","transitionDone","transitionStart","startTransitioning","timerId","applyTransitionCss","shouldTransition","intermediatePosition","intermediateCssOptions","elementSize","setClasses","classInfo","maxHeightFunction","setWidth","maxWidthFunction","position$2","positionCss","setPlacement","setMaxHeight","anchored","available","expandable$1","defaultOr","dephault","simple","layouts","allAlignments","nu$5","xOffset","yOffset","insetModifier","insetXOffset","insetYOffset","getClasses","make","alignmentsOn","alignmentsOff","nu$4","AttributeValue","Attribute","isBottomToTopDir","schema$y","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","customRtl","placement$4","anchorInfo","hotspot","HotspotAnchor","placement$3","MakeshiftAnchor","adt$7","toFixed","toAbsolute","points","sumAsFixed","sumAsAbsolute","screen","absolute$1","hasSameOwner","frame","frameOwner","compOwner","getRootPoint","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","layoutsRtl","placement$2","nodeBox","NodeAnchor","adt$6","on$1","getBounds$2","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","deleted","virtualReplaceChildren","existingComps","deletedComp","attach","attachWith","insertion","doDetach","detach","parent$1","detachChildren","attachSystem","guiSystem","attachSystemWith","attachSystemAfter","inserter","detachSystem","rebuild","sandbox","sConfig","sState","built","open$1","openWhileCloaked","transaction","cloak","decloak","close$1","isOpen$1","_sandbox","_sConfig","isPartOf","getState$2","cssKey","oldValue","_sState","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","forbidden","augment","SketchBehaviours","_placeholder","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","childSpecs","substituted","valuesThunk","substituteAll","oneReplace","replacements","used","substitutePlaces","ph","single$2","fFactory","fSchema","fName","fPname","typeSpec","fGroupSchema","fDefaults","fOverrides","requiredSpec","externalSpec","optionalSpec","groupSpec","asNamedPart","name$2","asCommon","adtConstructor","partSchema","PartType","combine","partSpec","partValidated","internals","externals","_partSpec","_partValidated","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","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","lastComp","highlightAt","getByIndex","highlightBy","getCandidates","queryTarget","getHighlighted","_hState","getDelta$2","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","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","numColumns","KeyingState","useH","use","west$1","moveLeft","moveRight","east$1","useV","north$1","south$1","isHidden$1","locate","locateVisible","withGrid","numCols","oldRow","oldColumn","cycleHorizontal$1","colsInRow","newColumn","cycleVertical$1","newCol","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","schema$u","focusIn$4","gridConfig","_gridState","findCurrent$1","execute$3","doMove$2","gridState","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","cycleHorizontal","deltaCol","newColIndex","cycleVertical","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","ReplaceApis","replaceePred","Replacing","events$c","eventHandlers","focus$2","focusConfig","FocusApis","ActiveFocus","FocusSchema","Focusing","SetupBehaviourCellState","initialState","updateAriaState","toggleConfig","toggleState","ariaInfo","updateClass","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","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","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","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","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","getUiContainer","isDistractionFree","isStickyToolbar","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","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","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","menuClasses","dom$1","hasIcons","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","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","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","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","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","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","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","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","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","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","thumbRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","HorizontalModel","fireSliderChange$1","findValueOfOffset","setValueFrom$1","yValue","setToMin$1","setToMax$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue","findPositionOfValue","setPositionFromValue$1","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange","sliderValue","isVerticalMovement","handleMovement","setToMin","mX","mY","setToMax","getValueFromEvent","setPositionFromValue","xPos","yPos","thumbXRadius","thumbYRadius","onUp","onDown","edgeActions","TwoDModel","SliderSchema","Slider","getThumb","getSpectrum","modelDetail","changeValue","resetToMin","resetToMax","fireOnChoose","wasDown","onDragStart","onDragEnd","getInitial","fieldsUpdate","sliderUpdate","paletteUpdate","sliderFactory","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","withComp","optInitialValue","initialValue","domHtml","memory","english","translate$1","renderColorPicker","errId","colourPickerFactory","onInvalidHex","memPicker","picker","valOpt","global$2","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","focusBehaviour","onFocusFn","ta","ea","cvalue","browseFilesEvent","filterByExtension","allowedImageFileTypes","isFileInAllowedTypes","renderDropZone","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","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","toggleOnReceive$1","translatedLabel","pLock","formGroup","getFieldPart","isField1","getLabel","widthField","heightField","_lock","optCurrent","optOther","value1","value2","renderSlider","renderTable","renderTh","renderHeader","header","renderTd","renderTr","renderRows","baseInputBehaviours","validatingBehaviours","vl","inputMode","inputAttributes","pTextField","extraClasses2","renderInput","renderTextarea","getAnimationRoot","slideConfig","getDimensionProperty","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","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","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","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","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","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","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","baseHeight","getHeightWithFallback","baseWidth","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","topValue","widthProperties","toolbarWidth","baseProperties","repositionPopups$1","restoreOuterContainerWidth","stickyAction","currentScroll","optScroll","doUpdateMode","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","oldContents","getFormApi","focusfallbackElement","valueState","runOnExecute","formApi","renderContextButton","renderContextToggleButton","generateOne","mementos","compInSystem","renderContextFormSizeInput","onEnter","focussableWrapper","focusableWrapper","focussableInput","controlLifecycleHandlers","createContextFormFieldFromParts","renderContextFormSliderInput","renderContextFormTextInput","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","ancestorElem","contextForms","rootElem","isOutsideRoot","categorise","forms","inNodeScope","inEditorScope","formNavigators","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","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","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","dragMode","dragStartData","dlt","updateStartState","init$3","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","currentTd","createSelector","tlTds","brTds","getTopLeftSnap","memTopLeft","getTopLeftSnaps","getBottomRightSnap","memBottomRight","getBottomRightSnaps","topLeftSnaps","bottomRightSnaps","bottomRight","showOrHideHandle","cellRect","viewportHeight","aboveViewport","belowViewport","snapTo","getSnapConfig","snapTopLeft","snapLastTopLeft","snapBottomRight","snapLastBottomRight","domToSugar","Logo","describedBy","describedElement","describeElement","describeId","renderElementPath","renderElement","_btn","renderDivider","renderPathData","updatePath","newPath","ResizeTypes","getDimensions","resizeType","originalHeight","originalWidth","dim","getResizeType","keyboardHandler","renderResizeHandler","resizeLabel","_target","renderWordCount","replaceCountText","currentVal","renderStatusbar","renderBranding","renderHelpAccessibility","shortcutText","renderRightContainer","getTextComponents","shouldRenderHelp","shouldRenderElementPath","shouldRenderRightContainer","getTextComponentClasses","flexStart","flexEnd","spaceAround","container3Columns","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","byPred","tabKey","TabSection","measureHeights","allTabs","tabviewComp","_tab","getMaxHeight","getMaxTabviewHeight","tablist","documentElement$1","isFixed","tabviewHeight","currentTabHeight","dialogTopMargin","dialogBottomMargin","chromeHeight","showTab","setTabviewHeight","updateTabviewHeight","dialogBody","maxTabHeight","getTabview","smartMode","oldHeight","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","initUrlDialog","getInstanceApi","withSpec","currentDialog","initDialog","currentDialogInit","makeButton","footerButtons","buttonName","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","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","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","getMinHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","toggleScrolling","parseCssValueToInt","shouldScrollIntoView","setContentEvent","oldSize","getExtraMarginBottom","resizeBottomMargin","resizeHeight","marginTop","marginBottom","contentHeight","containerHeight","contentAreaHeight","deltaSize","overflowPadding","regExps","characterIndices","SETS$1","EMPTY_STRING$1","PUNCTUATION$1","WHITESPACE$1","SETS","OTHER","getType","setsLength","memoize","classify","characters","memoized","isWordBoundary","nextType","nextNextType","prevType","EMPTY_STRING","WHITESPACE","PUNCTUATION","isProtocol","findWordEnd","findUrlEnd","findWordsWithIndices","sChars","characterMap","words","indices","word","startOfWord","endOfWord","endOfUrl","getDefaultOptions","getWordsWithIndices","extractedChars","getWords","removeZwsp$1","txt","treeWalker","strLen","countWords","countCharacters","countCharactersWithoutSpaces","createBodyCounter","createSelectionCounter","createBodyWordCounter","fireWordCountUpdate","updateCount","debouncedUpdate"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}