{"version":3,"file":"plugin-aWvTAXR4.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.6.1 (2025-01-22)\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 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 (ex) {\n target[this.expando] = null;\n }\n }\n return this;\n }\n fire(target, name, args) {\n return this.dispatch(target, name, args);\n }\n dispatch(target, name, args) {\n if (!target || isText$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. 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 > 0;\n const isBackwards = direction => direction < 0;\n const skipCaretContainers = (walk, shallow) => {\n let node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock(node)) {\n return node;\n }\n }\n return null;\n };\n const findNode = (node, direction, predicateFn, rootNode, shallow) => {\n const walker = new DomTreeWalker(node, rootNode);\n const isCefOrCaretContainer = isContentEditableFalse$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 var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\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(HDirection.Forwards, CaretPosition.after(nextNode), root);\n }\n };\n const findCaretPosition$1 = (direction, startPos, root) => {\n let node;\n let nextNode;\n let innerNode;\n let caretPosition;\n if (!isElement$1(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n caretPosition = CaretPosition.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement$1(root.lastChild)) {\n return isBr$2(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n const container = caretPosition.container();\n let offset = caretPosition.offset();\n if (isText$3(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate(nextNode)) {\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, nextNode.data.length);\n }\n return CaretPosition.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate(nextNode)) {\n if (isBr$2(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (node && (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart())) {\n node = findNode(node, direction, always, root, true);\n if (isEditableCaretCandidate(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = node ? findNode(node, direction, isEditableCaretCandidate, root) : node;\n const rootContentEditableFalseElm = last$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(HDirection.Forwards, caretPosition, root);\n },\n prev: caretPosition => {\n return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n }\n });\n\n const walkToPositionIn = (forward, root, start) => {\n const position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n const afterElement = node => isBr$6(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n const isBeforeOrStart = position => {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate$3(position.getNode());\n }\n };\n const isAfterOrEnd = position => {\n if (CaretPosition.isTextPosition(position)) {\n const container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate$3(position.getNode(true));\n }\n };\n const isBeforeAfterSameElement = (from, to) => !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n const isAtBr = position => !CaretPosition.isTextPosition(position) && isBr$6(position.getNode());\n const shouldSkipPosition = (forward, from, to) => {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n const fromPosition = (forward, root, pos) => {\n const walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n const navigate = (forward, root, from) => fromPosition(forward, root, from).bind(to => {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Optional.some(to);\n }\n });\n const navigateIgnore = (forward, root, from, ignoreFilter) => navigate(forward, root, from).bind(pos => ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos));\n const positionIn = (forward, element) => {\n const startNode = forward ? element.firstChild : element.lastChild;\n if (isText$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 rootNode = dom.getParent(container, dom.isBlock) || body;\n const walk = (container, offset, pred) => {\n const textSeeker = TextSeeker(dom);\n const walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Optional.from(walker(container, offset, (text, textOffset) => {\n if (isBookmarkNode(text.parentNode)) {\n return -1;\n } else {\n lastTextNode = text;\n return pred(start, text, textOffset);\n }\n }, rootNode));\n };\n const spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(result => includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none());\n };\n const findSelectorEndPoint = (dom, formatList, rng, container, siblingName) => {\n const sibling = container[siblingName];\n if (isText$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) => {\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 (!formatList[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n const allowSpaces = isText$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, includeTrailingSpace = false) => {\n let {startContainer, startOffset, endContainer, endOffset} = rng;\n const format = formatList[0];\n if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode$1(startContainer, startOffset);\n if (isText$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, dom.getRoot(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(({container, offset}) => {\n startContainer = container;\n startOffset = offset;\n });\n const endPoint = findWordEndPoint(dom, dom.getRoot(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(({container, offset}) => {\n endContainer = container;\n endOffset = offset;\n });\n }\n if (isInlineFormat(format) || format.block_expand) {\n if (!isInlineFormat(format) || (!isText$b(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!isInlineFormat(format) || (!isText$b(endContainer) || endOffset === endContainer.data.length)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n if (shouldExpandToSelector(format)) {\n startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n }\n if (isBlockFormat(format) || isSelectorFormat(format)) {\n startContainer = findBlockEndPoint(dom, formatList, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(dom, formatList, endContainer, 'nextSibling');\n if (isBlockFormat(format)) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n if (isText$b(startContainer)) {\n startOffset = 0;\n }\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\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 (_) {\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 (ex) {\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 (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n const hasElementFocus = elm => hasFocus$1(elm) || search(elm).isSome();\n const hasIframeFocus = editor => isNonNullable(editor.iframeElement) && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n const hasInlineFocus = editor => {\n const rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n const hasUiFocus = editor => {\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(dos).filter(elem => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n };\n const hasFocus = editor => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n const hasEditorOrUiFocus = editor => hasFocus(editor) || hasUiFocus(editor);\n const focusEditor = editor => {\n const selection = editor.selection;\n const body = editor.getBody();\n let rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n 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, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n let width;\n let height;\n let startScrollWidth;\n let startScrollHeight;\n const isImage = elm => isNonNullable(elm) && (isImg(elm) || dom.is(elm, 'figure.image'));\n const isMedia = elm => isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n const isEventOnImageOutsideRange = (evt, range) => {\n if (isTouchEvent(evt)) {\n const touch = evt.touches[0];\n return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n }\n };\n const contextMenuSelectImage = evt => {\n const target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n const getResizeTargets = elm => {\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return [\n elm,\n elm.firstElementChild\n ];\n } else if (dom.is(elm, 'figure.image')) {\n return [elm.querySelector('img')];\n } else {\n return [elm];\n }\n };\n const isResizable = elm => {\n const selector = getObjectResizing(editor);\n if (!selector || 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 if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n resizeStarted = true;\n }\n };\n const endGhostResize = () => {\n const wasResizeStarted = resizeStarted;\n resizeStarted = false;\n if (wasResizeStarted) {\n setSizeProp(selectedElm, 'width', width);\n setSizeProp(selectedElm, 'height', height);\n }\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n dom.remove(resizeBackdrop);\n showResizeRect(selectedElm);\n if (wasResizeStarted) {\n fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n }\n editor.nodeChanged();\n };\n const showResizeRect = targetElm => {\n unbindResizeHandleEvents();\n const position = dom.getPos(targetElm, rootElement);\n const selectedElmX = position.x;\n const selectedElmY = position.y;\n const rect = targetElm.getBoundingClientRect();\n const targetWidth = rect.width || rect.right - rect.left;\n const targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n const e = editor.dispatch('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each$d(resizeHandles, (handle, name) => {\n const startDrag = e => {\n const target = getResizeTargets(selectedElm)[0];\n startX = e.screenX;\n startY = e.screenY;\n startW = target.clientWidth;\n startH = target.clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n selectedHandle.name = name;\n selectedHandle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n resizeBackdrop = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-backdrop',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(resizeBackdrop, {\n position: 'fixed',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%'\n });\n selectedElmGhost = createGhostElement(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 (ex) {\n }\n };\n editor.on('init', () => {\n disableGeckoResize();\n editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', updateResizeRect);\n editor.on('keyup compositionend', e => {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n updateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n const destroy = () => {\n throttledShowResizeRect.cancel();\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable,\n showResizeRect,\n hideResizeRect,\n updateResizeRect,\n destroy\n };\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n\n const adt$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 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 validInsertion = (editor, value, parentNode) => {\n var _a;\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n const node = parentNode.firstChild;\n const node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value, { no_events: true });\n }\n }\n };\n const trimBrsFromTableCell = (dom, elm, 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, 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, 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 (e) {\n return Optional.none();\n }\n }\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return Optional.some(new Blob([arr], { type }));\n };\n const dataUriToBlob = uri => {\n return new Promise((resolve, reject) => {\n parseDataUri(uri).bind(({type, data, base64Encoded}) => buildBlob(type, data, base64Encoded)).fold(() => reject('Invalid data URI'), resolve);\n });\n };\n const uriToBlob = url => {\n if (startsWith(url, 'blob:')) {\n return blobUriToBlob(url);\n } else if (startsWith(url, 'data:')) {\n return dataUriToBlob(url);\n } else {\n return Promise.reject('Unknown URI format');\n }\n };\n const blobToDataUri = blob => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result);\n };\n reader.onerror = () => {\n var _a;\n reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n\n let count$1 = 0;\n const uniqueId$1 = prefix => {\n return (prefix || 'blobid') + count$1++;\n };\n const processDataUri = (dataUri, base64Only, generateBlobInfo) => {\n return parseDataUri(dataUri).bind(({data, type, base64Encoded}) => {\n if (base64Only && !base64Encoded) {\n return Optional.none();\n } else {\n const base64 = base64Encoded ? data : btoa(data);\n return generateBlobInfo(base64, type);\n }\n });\n };\n const createBlobInfo$1 = (blobCache, blob, base64) => {\n const blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const dataUriToBlobInfo = (blobCache, dataUri, base64Only = false) => {\n return processDataUri(dataUri, base64Only, (base64, type) => Optional.from(blobCache.getByData(base64, type)).orThunk(() => buildBlob(type, base64).map(blob => createBlobInfo$1(blobCache, blob, base64))));\n };\n const imageToBlobInfo = (blobCache, imageSrc) => {\n const invalidDataUri = () => Promise.reject('Invalid data URI');\n if (startsWith(imageSrc, 'blob:')) {\n const blobInfo = blobCache.getByUri(imageSrc);\n if (isNonNullable(blobInfo)) {\n return Promise.resolve(blobInfo);\n } else {\n return uriToBlob(imageSrc).then(blob => {\n return blobToDataUri(blob).then(dataUri => {\n return processDataUri(dataUri, false, base64 => {\n return Optional.some(createBlobInfo$1(blobCache, blob, base64));\n }).getOrThunk(invalidDataUri);\n });\n });\n }\n } else if (startsWith(imageSrc, 'data:')) {\n return dataUriToBlobInfo(blobCache, imageSrc).fold(invalidDataUri, blobInfo => Promise.resolve(blobInfo));\n } else {\n return Promise.reject('Unknown image data format');\n }\n };\n\n const 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.1.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.7/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 arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\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 /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} 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 /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} 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 /**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} 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 /**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} 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 /**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} 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 /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} 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\n // SVG\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\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\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);\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 MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n\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 /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} 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\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 function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '3.1.7';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\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\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 = {};\n\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 /**\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\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\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\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\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\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\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\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\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\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\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\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\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\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\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\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\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\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\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\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\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\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\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} 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\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\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\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\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),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : 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 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\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\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\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\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\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\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\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\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\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 const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\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\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 /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} 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\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\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\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\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\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\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\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\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 /**\n * _forceRemove\n *\n * @param {Node} 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 /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} 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\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\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 /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} 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 /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\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\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\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\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\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\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\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\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\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} 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\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 /**\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 {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} 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 /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n const {\n attributes\n } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n\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\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 _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\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\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\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\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\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\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\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\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\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\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\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\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\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\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\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\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\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\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\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\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\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\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns 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\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\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 (ex) {\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 purify$1.addHook('uponSanitizeElement', (node, evt) => {\n var _a;\n const lcTagName = (_a = evt.tagName) !== null && _a !== void 0 ? _a : node.nodeName.toLowerCase();\n const allowedEncodings = settings.allow_mathml_annotation_encodings;\n if (lcTagName === 'annotation' && isArray$1(allowedEncodings) && allowedEncodings.length > 0) {\n const encoding = node.getAttribute('encoding');\n if (isString(encoding) && contains$2(allowedEncodings, encoding)) {\n evt.allowedTags[lcTagName] = true;\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 (ex) {\n return -1;\n }\n };\n const doc = win.document;\n if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n const bookmark = getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(r => processRanges(editor, [r])[0]).getOr(doc.createRange());\n }\n }\n try {\n const selection = getSel();\n if (selection && !isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = doc.createRange();\n }\n rng = processRanges(editor, [rng])[0];\n }\n } catch (ex) {\n }\n if (!rng) {\n rng = doc.createRange();\n }\n if (isDocument$1(rng.startContainer) && rng.collapsed) {\n const elm = dom.getRoot();\n rng.setStart(elm, 0);\n rng.setEnd(elm, 0);\n }\n if (selectedRange && explicitRange) {\n if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n rng = explicitRange;\n } else {\n selectedRange = null;\n explicitRange = null;\n }\n }\n return rng;\n };\n const setRng = (rng, forward) => {\n if (!isValidRange(rng)) {\n return;\n }\n const sel = getSel();\n const evt = editor.dispatch('SetSelectionRange', {\n range: rng,\n forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && (sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent)) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n const node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.nodeName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.dispatch('AfterSetSelectionRange', {\n range: rng,\n forward\n });\n };\n const setNode = elm => {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n const getNode$1 = () => getNode(editor.getBody(), getRng$1());\n const getSelectedBlocks$1 = (startElm, endElm) => getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n const isForward = () => {\n const sel = getSel();\n const anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n const focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n return true;\n }\n const anchorRange = dom.createRng();\n const focusRange = dom.createRng();\n try {\n anchorRange.setStart(anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange.setStart(focusNode, sel.focusOffset);\n focusRange.collapse(true);\n } catch (e) {\n return true;\n }\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n const normalize = () => {\n const rng = getRng$1();\n const sel = getSel();\n if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n const normRng = normalize$2(dom, rng);\n normRng.each(normRng => {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n const selectorChanged = (selector, callback) => {\n selectorChangedWithUnbind(selector, callback);\n return exports;\n };\n const getScrollContainer = () => {\n let scrollContainer;\n let node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n const scrollIntoView = (elm, alignToTop) => {\n if (isNonNullable(elm)) {\n scrollElementIntoView(editor, elm, alignToTop);\n } else {\n scrollRangeIntoView(editor, getRng$1(), alignToTop);\n }\n };\n const placeCaretAt = (clientX, clientY) => setRng(fromPoint(clientX, clientY, editor.getDoc()));\n const getBoundingClientRect = () => {\n const rng = getRng$1();\n return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n const destroy = () => {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n const expand = (options = { type: 'word' }) => setRng(RangeUtils(dom).expand(getRng$1(), options));\n const exports = {\n dom,\n win,\n serializer,\n editor,\n expand,\n collapse,\n setCursorLocation,\n getContent,\n setContent,\n getBookmark,\n moveToBookmark,\n select: select$1,\n isCollapsed,\n 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 (ex) {\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 ? HDirection.Forwards : HDirection.Backwards;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const nextCaretPosition = getNextPosFn(caretPosition);\n const normalizedNextCaretPosition = nextCaretPosition ? normalizePosition(forward, nextCaretPosition) : nextCaretPosition;\n if (!normalizedNextCaretPosition || !isMoveInsideSameBlock(caretPosition, normalizedNextCaretPosition)) {\n return Optional.none();\n } else if (isBeforeFn(normalizedNextCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, normalizedNextCaretPosition));\n }\n const peekCaretPosition = getNextPosFn(normalizedNextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(normalizedNextCaretPosition, peekCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition));\n }\n }\n return Optional.none();\n };\n const backspaceDelete$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 === HDirection.Backwards ? reverse(positions) : positions;\n const walk$1 = (direction, caretWalker, pos) => direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n const getBreakType = (scope, direction, currentPos, nextPos) => {\n if (isBr$6(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n const getPositionsUntil = (predicate, direction, scope, start) => {\n const caretWalker = CaretWalker(scope);\n let currentPos = start;\n const positions = [];\n while (currentPos) {\n const nextPos = walk$1(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (isBr$6(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n const breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType,\n breakAt: Optional.some(nextPos)\n };\n }\n positions.push(nextPos);\n currentPos = nextPos;\n }\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Eol,\n breakAt: Optional.none()\n };\n };\n const getAdjacentLinePositions = (direction, getPositionsUntilBreak, scope, start) => getPositionsUntilBreak(scope, start).breakAt.map(pos => {\n const positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n const findClosestHorizontalPositionFromPoint = (positions, x) => foldl(positions, (acc, newPos) => acc.fold(() => Optional.some(newPos), lastPos => lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), (lastRect, newRect) => {\n const lastDist = Math.abs(x - lastRect.left);\n const newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc)), Optional.none());\n const findClosestHorizontalPosition = (positions, pos) => head(pos.getClientRects()).bind(targetRect => findClosestHorizontalPositionFromPoint(positions, targetRect.left));\n const getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n const getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n const getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n const getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n const isAtFirstLine = (scope, pos) => getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n const isAtLastLine = (scope, pos) => getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n const getFirstLinePositions = scope => firstPositionIn(scope).map(pos => [pos].concat(getPositionsUntilNextLine(scope, pos).positions)).getOr([]);\n const getLastLinePositions = scope => lastPositionIn(scope).map(pos => getPositionsUntilPreviousLine(scope, pos).positions.concat(pos)).getOr([]);\n const getClosestPositionAbove = (scope, pos) => findClosestHorizontalPosition(getPositionsAbove(scope, pos), pos);\n const getClosestPositionBelow = (scope, pos) => findClosestHorizontalPosition(getPositionsBelow(scope, pos), pos);\n\n const isContentEditableFalse$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 === -1) {\n clientRects = clientRects.reverse();\n }\n for (let i = 0; i < clientRects.length; i++) {\n const clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, last$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 === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow$1;\n isAboveFn = isAbove$1;\n caretPosition = CaretPosition.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove$1;\n isAboveFn = isBelow$1;\n caretPosition = CaretPosition.before(node);\n }\n const targetClientRect = getLastClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n const rect = getLastClientRect(caretPosition);\n if (isAboveFn(rect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(rect, last$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 === HDirection.Forwards;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forwards ? isBefore : isAfter;\n if (!range.collapsed) {\n const node = getSelectedNode(range);\n if (isElement(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n } else if (isCefAtEdgeSelected(editor)) {\n const newRange = range.cloneRange();\n newRange.collapse(direction === HDirection.Backwards);\n return Optional.from(newRange);\n }\n }\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n let nextCaretPosition = getNextPosFn(caretPosition);\n const rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n if (!nextCaretPosition) {\n return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n } else {\n nextCaretPosition = normalizePosition(forwards, nextCaretPosition);\n }\n if (isBeforeFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n }\n const peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n }\n return Optional.none();\n };\n const moveVertically = (editor, direction, range, isBefore, isAfter, isElement) => {\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const caretClientRect = last$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 ? HDirection.Forwards : HDirection.Backwards;\n const fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n if (isNearMedia(fromPos)) {\n return deleteElement(editor, forward, fromPos.getNode(!forward));\n } else {\n return Optional.from(normalizePosition(forward, fromPos)).filter(pos => isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos)).bind(pos => deleteElement(editor, forward, pos.getNode(!forward)));\n }\n };\n const deleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : Optional.none();\n };\n const backspaceDelete$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 ? HDirection.Forwards : HDirection.Backwards;\n const range = editor.selection.getRng();\n return moveToCeFalseHorizontally(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const getVerticalRange = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveToCeFalseVertically(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const 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 ? HDirection.Forwards : HDirection.Backwards;\n const range = editor.selection.getRng();\n return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveV$1 = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveToLineEndPoint = (editor, forward) => {\n const isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n return moveToLineEndPoint$3(editor, forward, isNearMedia);\n };\n\n const adt = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n const none = current => adt.none(current);\n const CellLocation = {\n ...adt,\n none\n };\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$3(children$1(scope), x => {\n if (is$1(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup$1 = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$1(elm, 'table') || isRoot(elm);\n return ancestor$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 (ex) {\n items[contentType] = '';\n }\n }\n }\n return items;\n };\n const hasContentType = (clipboardContent, mimeType) => mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n const hasHtmlOrText = content => hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n const extractFilename = (editor, str) => {\n const m = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n return isNonNullable(m) ? editor.dom.encode(m[1]) : undefined;\n };\n const createBlobInfo = (editor, blobCache, file, base64) => {\n const id = uniqueId();\n const useFileName = shouldReuseFileName(editor) && isNonNullable(file.name);\n const name = useFileName ? extractFilename(editor, file.name) : id;\n const filename = useFileName ? file.name : undefined;\n const blobInfo = blobCache.create(id, file, base64, name, filename);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const pasteImage = (editor, imageItem) => {\n parseDataUri(imageItem.uri).each(({data, type, base64Encoded}) => {\n const base64 = base64Encoded ? data : btoa(data);\n const file = imageItem.file;\n const blobCache = editor.editorUpload.blobCache;\n const existingBlobInfo = blobCache.getByData(base64, type);\n const blobInfo = existingBlobInfo !== null && existingBlobInfo !== void 0 ? existingBlobInfo : createBlobInfo(editor, blobCache, file, base64);\n pasteHtml(editor, ``, 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 (e) {\n return false;\n }\n } else {\n return false;\n }\n };\n const setClipboardData = (evt, data, fallback, done) => {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n const fallback = editor => (html, done) => {\n const {dom, selection} = editor;\n const outer = dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n const inner = dom.create('div', { contenteditable: 'true' }, html);\n dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n dom.add(editor.getBody(), outer);\n const range = selection.getRng();\n inner.focus();\n const offscreenRange = dom.createRng();\n offscreenRange.selectNodeContents(inner);\n selection.setRng(offscreenRange);\n Delay.setEditorTimeout(editor, () => {\n selection.setRng(range);\n dom.remove(outer);\n done();\n }, 0);\n };\n const getData = editor => ({\n html: mark(editor.selection.getContent({ contextual: true })),\n text: editor.selection.getContent({ format: 'text' })\n });\n const isTableSelection = editor => !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n const hasSelectedContent = editor => !editor.selection.isCollapsed() || isTableSelection(editor);\n const cut = editor => evt => {\n if (!evt.isDefaultPrevented() && hasSelectedContent(editor) && 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 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 (ex) {\n }\n };\n const isDefaultPrevented = e => {\n return e.isDefaultPrevented();\n };\n const emptyEditorWhenDeleting = () => {\n const serializeRng = rng => {\n const body = dom.create('body');\n const contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n const allContentsSelected = rng => {\n const selection = serializeRng(rng);\n const allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n const allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', e => {\n const keyCode = e.keyCode;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE) && 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 (ex) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n let msg = editor.translate(`Your browser doesn't support direct access to the clipboard. ` + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n if (Env.os.isMacOS() || Env.os.isiOS()) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n }\n });\n };\n\n const trimOrPadLeftRight = (dom, rng, html, 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: '6.1',\n releaseDate: '2025-01-22',\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 (e) {\n localStorage = create();\n }\n var LocalStorage = localStorage;\n\n const publicApi = {\n geom: { Rect },\n util: {\n Delay,\n Tools,\n VK,\n URI,\n EventDispatcher,\n Observable,\n I18n,\n LocalStorage,\n ImageUploader\n },\n dom: {\n EventUtils,\n TreeWalker: DomTreeWalker,\n TextSeeker,\n DOMUtils,\n ScriptLoader,\n RangeUtils,\n Serializer: DomSerializer,\n StyleSheetLoader,\n ControlSelection,\n BookmarkManager,\n Selection: EditorSelection,\n Event: EventUtils.Event\n },\n html: {\n Styles,\n Entities,\n Node: AstNode,\n Schema,\n DomParser,\n Writer,\n Serializer: HtmlSerializer\n },\n Env,\n AddOnManager,\n Annotator,\n Formatter,\n UndoManager,\n EditorCommands,\n WindowManager,\n NotificationManager,\n EditorObservable,\n Shortcuts,\n Editor,\n FocusManager,\n EditorManager,\n DOM: DOMUtils.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager,\n ThemeManager,\n ModelManager,\n IconManager,\n Resource,\n FakeClipboard,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n walk: Tools.walk,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix\n };\n const tinymce$1 = Tools.extend(EditorManager, publicApi);\n\n const exportToModuleLoaders = tinymce => {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n const exportToWindowGlobal = tinymce => {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce$1);\n exportToModuleLoaders(tinymce$1);\n\n})();\n","/**\n * TinyMCE version 7.6.1 (2025-01-22)\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 (e) {\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.6.1 (2025-01-22)\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 (err) {\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 = descendants(component.element, tabbingConfig.selector);\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(300)),\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.1.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.7/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 arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\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 /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} 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 /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} 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 /**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} 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 /**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} 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 /**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} 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 /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} 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\n // SVG\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\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\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);\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 MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n\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 /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} 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\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 function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '3.1.7';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\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\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 = {};\n\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 /**\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\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\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\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\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\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\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\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\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\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\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\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\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\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\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\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\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\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\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\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\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\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\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\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} 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\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\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\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\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),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : 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 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\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\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\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\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\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\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\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\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\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 const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\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\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 /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} 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\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\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\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\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\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\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\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\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 /**\n * _forceRemove\n *\n * @param {Node} 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 /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} 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\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\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 /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} 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 /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\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\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\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\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\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\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\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\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\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} 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\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 /**\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 {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} 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 /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n const {\n attributes\n } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n\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\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 _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\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\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\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\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\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\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\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\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\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\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\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\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\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\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\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\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\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\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\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\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\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\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns 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\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\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.toArray(),\n detail.level.bind(level => Optional.from(notificationIconMap[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: detail.level.map(level => [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ level }`\n ]).getOr([\n 'tox-notification',\n 'tox-notification--in'\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 option$3('level'),\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$1 = (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 || spec.context.exists(context => providersBackstage.checkUiComponentContext(context).shouldDisable);\n const toggleOnReceive$1 = spec.context.map(context => toggleOnReceive(() => providersBackstage.checkUiComponentContext(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.toArray(),\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: translatedLabel }))\n ])\n });\n const formGroup = components => ({\n dom: {\n tag: 'div',\n classes: [spec.inDialog ? 'tox-form__group' : 'tox-context-form__group']\n },\n components\n });\n const getFieldPart = isField1 => FormField.parts.field({\n factory: Input,\n inputClasses: spec.inDialog ? ['tox-textfield'] : [\n 'tox-textfield',\n 'tox-toolbar-textfield',\n 'tox-textfield-size'\n ],\n data: isField1 ? spec.width : spec.height,\n inputBehaviours: derive$1([\n Disabling.config({ disabled }),\n ...toggleOnReceive$1.toArray(),\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 spec.name.each(name => emitWith(component, formChangeEvent, { name }));\n })\n ]),\n ...spec.onEnter.map(onEnter => Keying.config({\n mode: 'special',\n onEnter\n })).toArray()\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 const editorOffCell = Cell(noop);\n const controlLifecycleHandlers = lift2(spec.onSetup, spec.getApi, (onSetup, getApi) => [\n onControlAttached({\n onSetup,\n getApi\n }, editorOffCell),\n onControlDetached({ getApi }, editorOffCell)\n ]).getOr([]);\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: [spec.inDialog ? 'tox-form__group' : 'tox-context-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 onInput: current => emit(current, formInputEvent),\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-events', [\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, component => {\n spec.onInput.each(onInput => onInput(component));\n }),\n ...controlLifecycleHandlers\n ])\n ])\n });\n };\n\n const renderSizeInput = (spec, providersBackstage) => {\n return renderSizeInput$1({\n inDialog: true,\n label: spec.label,\n enabled: spec.enabled,\n context: Optional.some(spec.context),\n name: Optional.some(spec.name),\n width: '',\n height: '',\n onEnter: Optional.none(),\n onInput: Optional.none(),\n onSetup: Optional.none(),\n getApi: Optional.none()\n }, providersBackstage);\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: { 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-js:not([disabled]), ' + '.tox-number-input:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\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 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 => {\n const valueState = value$4();\n return {\n setInputEnabled: state => {\n if (!state) {\n focusParent(input);\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);\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 return renderSizeInput$1({\n inDialog: false,\n label: ctx.label,\n enabled: true,\n context: Optional.none(),\n name: Optional.none(),\n width,\n height,\n onEnter: Optional.some(onEnter),\n onInput: Optional.some(input => ctx.onInput(getFormApi(input))),\n onSetup: Optional.some(ctx.onSetup),\n getApi: Optional.some(getFormApi)\n }, providersBackstage);\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: ['tox-toolbar-slider__input'],\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-js'\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: 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 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.6.1 (2025-01-22)\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.6.1 (2025-01-22)\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","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","HDirection","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","textSeeker","textOffset","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","isSelfOrParentBookmark","expandRng","includeTrailingSpace","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","selectedElmX","selectedElmY","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","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","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","arrayPop","arrayPush","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","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","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","parentTagName","_forceRemove","_removeAttribute","_initDocument","dirty","leadingWhitespace","dirtyPayload","_createNodeIterator","_isClobbered","_isNode","_executeHook","entryPoint","_sanitizeElements","_isBasicCustomElement","childClone","expr","_isValidAttribute","lcTag","_sanitizeAttributes","hookEvent","namespaceURI","initValue","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","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","encoding","mkSanitizeNamespaceElement","namespaceType","getSanitizer","_mimeType","makeMap","extend$1","transferChildren","nativeParent","nsSanitizer","isSpecial","nativeChild","walkTree","preprocessors","postprocessors","traverseOrder","postprocess","whitespaceCleaner","blockElements","textRootBlockElements","allWhiteSpaceRegExp","startWhiteSpaceRegExp","endWhiteSpaceRegExp","hasWhitespaceParent","isTextRootBlockEmpty","isAtEdgeOfBlock","neighbour","isNodeEmpty","getRootBlockName","DomParser","nodeFilterRegistry","attributeFilterRegistry","defaultedSettings","sanitizer","parseAndSanitizeWithContext","rootName","isSpecialRoot","makeWrap","addNodeFilter","getNodeFilters","removeNodeFilter","addAttributeFilter","getAttributeFilters","removeAttributeFilter","findInvalidChildren","isWrappableNode","addRootBlocks","rootBlockName","rootBlockNode","rootBlock","exports","whitespacePre","whitespacePost","invalidFinder","matchFinder","topLevelChildren","otherChildren","serializeContent","withSerializedContent","fireEvent","parserSettings","serializedContent","eventArgs","makeParserSettings","preProcessGetContent","postProcessGetContent","preProcessSetContent","processedEventArgs","postProcessSetContent","tableModel","tableRow","cellPosition","getSpan","td","fillout","rowspan","colspan","y2","x2","cellExists","skipCellsX","getWidth","row","findElementPos","extractRows","sx","sy","ex","ey","newRows","slice","subTable","createDomTable","tableElement","tableBody","modelRowsToDomRows","fromDom","toDom","subsection","findParentListContainer","getFullySelectedListWrappers","_li","listCont","listElm","listStyles","_style","wrap","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","firstCell","lastCell","fullTableModel","sectionedTableModel","getSelectionFragment","read$3","isCollapsibleWhitespace","getInnerText","bin","getContextNodeName","parentBlockOpt","getTextContent","contextNodeName","rangeContentClone","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","extractSelectedContent","setupArgs$3","getSelectedContentInternal","defaultedArgs","updatedArgs","KEEP","INSERT","DELETE","diff","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","script","getMiddleSnake","j","i2","buildSnake","sum","getOuterHtml","insertAt","removeAt","applyDiff","read$2","trimZwsp","write","currentFragments","lazyTempDocument","hasIframes","createFragmentedLevel","createCompleteLevel","createFromEditor","applyToEditor","level","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$1","isUnlocked","locks","setTyping","undoManager","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange$1","beforeBookmark","addUndoLevel$1","currentLevel","newLevel","lastLevel","bm","customUndoRedoLevels","clear$1","extra$1","callback1","callback2","redo$1","undo$1","reset$1","hasUndo$1","hasRedo$1","transact$1","ignore$1","addVisualInternal","matchedElm","makePlainAdaptor","makeRtcAdaptor","rtcEditor","defaultVars","init","autocompleter","_undoManager","_locks","_index","_node","_similar","_rfl","_details","_format","makeNoopAdaptor","nul","isRtc","getRtcSetup","rtcPlugin","setup$t","editorCast","getRtcInstanceWithFallback","getRtcInstanceWithError","rtcInstance","beforeChange","addUndoLevel","undo","redo","clear","reset","hasUndo","hasRedo","transact","ignore","extra","matchFormat","matchAllFormats","matchNodeFormat","canApplyFormat","closestFormat","applyFormat","removeFormat","toggleFormat","formatChanged","getContent$2","setContent$2","insertContent$1","getSelectedContent","addVisual$1","bindEvents","getContent$1","removeEmpty","walkPastBookmark","merge$1","outer","inner","outerElm","oldLength","normalizeTextIfRequired","mergeAndNormalizeText","outerNode","rngSetContent","prevText","nextText","setupArgs$2","cleanContent","contextBlock","contextArgs","setContent$1","cleanedContent","deleteFromCallbackMap","SelectorChanged","selectorChangedData","currentSelectors","findMatchingNode","matchedSelectors","isAttachedToDom","isValidRange","EditorSelection","selectedRange","explicitRange","selectorChangedWithUnbind","setCursorLocation","setRng","getContent","setContent","getRng$1","getEnd$1","getBookmark","bookmarkManager","select$1","getSel","isEditable","fakeSelectedElements","tryCompareBoundaryPoints","how","sourceRange","destinationRange","setNode","getSelectedBlocks$1","isForward","anchorNode","focusNode","anchorRange","focusRange","scrollContainer","controlSelection","htmlParser","prevName","lastParent","register$3","trimTrailingBr","isBr","brNode1","brNode2","preProcess$1","oldDoc","clonedNode","impl","shouldFireEvent","process$1","addTempAttr","postProcess","getHtmlFromNode","parseHtml","serializeNode","toHtml","DomSerializerImpl","serialize","DomSerializer","domSerializer","defaultFormat$1","setupArgs$1","defaultFormat","setupArgs","removedOptions","deprecatedOptions","removedPlugins","deprecatedPlugins","getMatchingOptions","searchingFor","settingNames","setting","getRemovedOptions","getDeprecatedOptions","getMatchingPlugins","plugins","pluginNames","plugin","getRemovedPlugins","getDeprecatedPlugins","entry","logRemovedWarnings","rawOptions","normalizedOptions","hasRemovedPlugins","hasRemovedOptions","isLegacyMobileTheme","listJoiner","themesMessage","pluginsMessage","optionsMessage","getPluginDescription","logDeprecatedWarnings","hasDeprecatedPlugins","hasDeprecatedOptions","logWarnings","DOM$8","restoreOriginalStyles","safeDestroy","clearDomReferences","restoreForm","form","remove$1","_selectionOverrides","editorUpload","destroy","automatic","IconManager","iconPack","ModelManager","getProp","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect","isInsideElementContentArea","bodyElm","clientWidth","clientHeight","transpose","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","NotificationManagerImpl","unimplemented","NotificationManager","notifications","getImplementation","theme","getTopNotification","notification","addNotification","closeNotification","otherNotification","open","close","getNotifications","serviceMessage","isF12","notificationApi","PluginManager","ThemeManager","WindowManagerImpl","WindowManager","dialogs","funcBind","fireOpenEvent","dialog","fireCloseEvent","addDialog","closeDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","openDialog","params","openUrl","alert","windowManagerImpl","confirm","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","themeLoadError","modelLoadError","pluginInitError","initError","console","removeFakeSelection","setEditorCommandState","setCommonEditorCommands","restoreFakeSelection","disableEditor","enableEditor","isDisabled","internalContentEditableAttr","switchOffContentEditableTrue","switchOnContentEditableTrue","toggleDisabled","registerDisabledContentFilters","registerFilters","isClickEvent","allowedEvents","isAllowedEventInDisabledMode","getAnchorHrefOpt","processDisabledEvents","href","targetEl","registerDisabledModeEventHandlers","registerEventsAndFilters$1","isContentCssSkinName","toContentSkinResourceName","isBundledCssSkinName","getContentCssUrls","transformToUrls","getFontCssUrls","cssLinks","skinUrl","contentCssFile","appendContentCssFromSettings","getAllImages","ImageScanner","uploadStatus","cachedPromises","images","promises","imageInfo","newPromise","UploadStatus","blobUriStatuses","createStatus","resultUri","hasBlobUri","blobUri","seed","rnd","uuid","BlobCache","cache","mimeToExt","filename","toBlobInfo","findFirst","cachedBlobInfo","Uploader","pendingPromises","pathJoin","path1","path2","defaultHandler","progress","xhr","json","formData","uploadHandler","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","percent","isDefaultHandler","pendingUploadBlobInfo","uploadBlobs","blobInfos","createUploader","ImageUploader","uploader","showNotification","isEmptyForPadding","addPaddingToEmpty","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","replaceImageUriInView","image","uploadImages","scanForImages","imageInfos","imagesToRemove","shouldDispatchChange","filteredResult","uploadInfo","removed","sugarElement","parentOpt","uploadImagesAuto","isValidDataUriImage","imgElm","addFilter","resultItem","replaceBlobUris","get$1","strike","_fmt","_itemName","genericBase","cellBase","cellFormats","FormatRegistry","register","unregister","each$3","isPreviewItem","parsedSelectorToHtml","ancestry","createElement","sItem","getRequiredParent","elmRule","parentsRequired","wrapInHtml","ancestors","parentCandidate","ancestorName","parentRequired","siblingElm","parentSiblings","parseSelectorItem","$0","$3","$4","parseSelector","getCssText","previewCss","previewStyles","removeVars","getComputedStyle","preview","previewFrag","previewElm","rawParentFontSize","parentFontSize","setup$s","Formatter","formatChangeState","shouldIgnoreCommand","registerEvents","isFirstTypedCharacter","addNonTypingUndoLevel","isMeta","modKey","isInsertReplacementText","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","setup$r","placeholder","updatePlaceholder","showPlaceholder","blockPosition","blockBoundary","getBlockPosition","containerElm","isNotAncestorial","isDifferentBlocks","getClosestHost","hasSameHost","isEditable$1","hasValidBlocks","isValidBlock","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$1","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","newFromBlockDescendants","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$a","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$2","backspaceDelete$9","_forward","showCaret","scrollIntoView","getNodeRange","selectNode","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","trimEmptyTextNode","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","deleteBoundaryText","getNextPosFn","isBeforeFn","nextCaretPosition","normalizedNextCaretPosition","backspaceDelete$8","getEdgeCefPosition","atStart","isCefAtEdgeSelected","isCompoundElement","DeleteAction","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","read","deleteElement$1","moveToElement","moveToPosition","getAncestorCe","backspaceDeleteCaret","deleteOffscreenSelection","backspaceDeleteRange","paddEmptyElement","backspaceDelete$7","isTextEndpoint","endpoint","isElementEndpoint","createMarker","getEndpoint","resolveBookmark","backspaceDelete$6","startBlock","endBlock","deleteCaret$2","backspaceDelete$5","isText$2","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertBefore$1","insertAfter$1","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","getElement","readLocation","getName","outside","inside","isEq","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation$1","hasSelectionModifyApi","moveRel","moveByWord","BreakType","flip","positions","walk$1","getBreakType","currentPos","getPositionsUntil","breakType","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","newRect","lastDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","isAtFirstLine","isAtLastLine","getFirstLinePositions","getLastLinePositions","getClosestPositionAbove","getClosestPositionBelow","isContentEditableFalse$5","distanceToRectLeft$1","distanceToRectRight$1","isNodeClientRect","findClosestClientRect","oldClientRect","oldDistance","newDistance","getNodeClientRects","toArrayWithNode","VDirection","findUntil","walkUntil","isAboveFn","isBeflowFn","line","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","downUntil","getLastClientRect","positionsUntil","isBelowFn","isAboveLine","isLine","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","isElement","rangeIsInContainerBlock","moveVertically","caretClientRect","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","lineInfo","moveToLineEndPoint$3","isElementPosition","setCaretPosition","setSelected","renderCaretLocation","getPositionFromRange","findLocation","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","caretValue","renderInsideInlineCaret","inlines","_inline","move$3","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope","backspaceDeleteCollapsed","toPosition","backspaceDelete$4","hasMultipleChildren","getParentsUntil","hasOnlyOneChild","getParentInlinesUntilMultichildInline","getParentInlines","getFormatNodes","parentInlines","isFormatElement$1","getFormatNodesAtStart","deleteLastPosition","deleteCaret$1","isBrInEmptyElement","isEmptyCaret","createCaretFormatAtStart","updateCaretFormat","updateFormats","missingFormats","rangeStartsAtTextContainer","rangeStartsAtStartOfTextContainer","rangeStartParentIsFormatElement","startParent","rangeStartAndEndHaveSameParent","endParent","rangeEndsAtEndOfEndContainer","rangeEndsAtEndOfStartContainer","rangeEndsAfterEndOfStartContainer","rangeEndsAtOrAfterEndOfStartContainer","requiresDeleteRangeOverride","deleteRange$1","backspaceDelete$3","hasAncestorInlineCaret","hasAncestorInlineCaretAtStart","requiresRefreshCaretOverride","refreshCaret","deleteElement","deleteCaret","isNearMedia","backspaceDelete$2","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","unit","parsedValue","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentation","indentUnit","indentValue","outdent","backspaceDelete$1","findAction","deleteCommand","forwardDeleteCommand","setup$q","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","isFarEnough","distX","distY","setup$p","startData","longpressFired","debounceLongpress","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","createRootBlock","rootNodeName","insertEmptyLine","setup$o","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","convertRegExpsToNonEditable","nonEditableRegExps","isValidContent","re","setup$n","contentEditableAttrName","editClass","nonEditClass","hasEditClass","hasNonEditClass","findBlockCaretContainer","showBlockCaretContainer","blockCaretContainer","handleBlockContainer","setup$m","isContentEditableFalse$4","moveToCeFalseHorizontally","moveToCeFalseVertically","createTextBlock","textBlock","exitPreBlock","getVisualCaretPosition$1","newBlock","getHorizontalRange","getVerticalRange","down","flipDirection","moveH$2","moveV$4","moveToLineEndPoint$1","selectToEndPoint","curRng","isTarget","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","moveV$3","moveUp","summary","moveDown","move$2","moveV$2","baseKeyPattern","defaultPatterns","defaultDelayedPatterns","matchesEvent","match$1","matchDelayed","execute","executeWithDelayedAction","moveH$1","moveV$1","moveToLineEndPoint","CellLocation","firstLayer","filterFirstLayer","lookup$1","tags","isRootOrUpperTable","isEligible","newIndex","detect","isTextNodeWithCursorPosition","isContentEditableFalse$3","elementsWithCursorPosition","isCursorPosition","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","newDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","isAbove","isBelow","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","getClosestAbovePosition","getClosestBelowPosition","getTable","previous","renderBlock","insertFn","navigateVertically","move$1","mover","moveH","moveV","getCellFirstCursorPosition","tabGo","_current","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","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$1","converter","ratioEvent","toggleOnReceive$1","translatedLabel","pLock","formGroup","getFieldPart","isField1","onEnter","getLabel","widthField","heightField","controlLifecycleHandlers","_lock","optCurrent","optOther","value1","value2","onInput","renderSizeInput","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","valueState","runOnExecute","formApi","renderContextButton","renderContextToggleButton","generateOne","mementos","compInSystem","renderContextFormSizeInput","createContextFormFieldFromParts","renderContextFormSliderInput","renderContextFormTextInput","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]}